2
0
Эх сурвалжийг харах

+ added extra "orgsupreg" parameter to do_spill_read/do_spill_written/
do_spill_replace routines, will be necessary by llvm register
allocator to determine the tdef corresponding to that register
* replaced uses of taicpu with tai_cpu_abstract_sym in the register
allocator so that it can work both with taicpu and taillvm instructions

git-svn-id: branches/hlcgllvm@26043 -

Jonas Maebe 11 жил өмнө
parent
commit
5ef93e85b8

+ 12 - 12
compiler/arm/rgcpu.pas

@@ -41,8 +41,8 @@ unit rgcpu;
        private
        private
          procedure spilling_create_load_store(list: TAsmList; pos: tai; const spilltemp:treference;tempreg:tregister; is_store: boolean);
          procedure spilling_create_load_store(list: TAsmList; pos: tai; const spilltemp:treference;tempreg:tregister; is_store: boolean);
        public
        public
-         procedure do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
-         procedure do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
+         procedure do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
+         procedure do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
          procedure add_constraints(reg:tregister);override;
          procedure add_constraints(reg:tregister);override;
          function  get_spill_subreg(r:tregister) : tsubregister;override;
          function  get_spill_subreg(r:tregister) : tsubregister;override;
        end;
        end;
@@ -51,8 +51,8 @@ unit rgcpu;
        private
        private
          procedure SplitITBlock(list:TAsmList;pos:tai);
          procedure SplitITBlock(list:TAsmList;pos:tai);
        public
        public
-         procedure do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
-         procedure do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
+         procedure do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
+         procedure do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
        end;
        end;
 
 
        trgintcputhumb2 = class(trgcputhumb2)
        trgintcputhumb2 = class(trgcputhumb2)
@@ -247,7 +247,7 @@ unit rgcpu;
      end;
      end;
 
 
 
 
-    procedure trgcpu.do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       begin
       begin
         { don't load spilled register between
         { don't load spilled register between
           mov lr,pc
           mov lr,pc
@@ -266,16 +266,16 @@ unit rgcpu;
         if fix_spilling_offset(spilltemp.offset) then
         if fix_spilling_offset(spilltemp.offset) then
           spilling_create_load_store(list, pos, spilltemp, tempreg, false)
           spilling_create_load_store(list, pos, spilltemp, tempreg, false)
         else
         else
-          inherited do_spill_read(list,pos,spilltemp,tempreg);
+          inherited;
       end;
       end;
 
 
 
 
-    procedure trgcpu.do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       begin
       begin
         if fix_spilling_offset(spilltemp.offset) then
         if fix_spilling_offset(spilltemp.offset) then
           spilling_create_load_store(list, pos, spilltemp, tempreg, true)
           spilling_create_load_store(list, pos, spilltemp, tempreg, true)
         else
         else
-          inherited do_spill_written(list,pos,spilltemp,tempreg);
+          inherited;
       end;
       end;
 
 
 
 
@@ -368,7 +368,7 @@ unit rgcpu;
           list.InsertAfter(taicpu.op_cond(remOp,taicpu(hp).oper[0]^.cc), pos);
           list.InsertAfter(taicpu.op_cond(remOp,taicpu(hp).oper[0]^.cc), pos);
       end;
       end;
 
 
-    procedure trgcputhumb2.do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcputhumb2.do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister;orgsupreg:tsuperregister);
       var
       var
         tmpref : treference;
         tmpref : treference;
         helplist : TAsmList;
         helplist : TAsmList;
@@ -436,11 +436,11 @@ unit rgcpu;
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_read(list,pos,spilltemp,tempreg);
+          inherited;
       end;
       end;
 
 
 
 
-    procedure trgcputhumb2.do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcputhumb2.do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister;orgsupreg:tsuperregister);
       var
       var
         tmpref : treference;
         tmpref : treference;
         helplist : TAsmList;
         helplist : TAsmList;
@@ -494,7 +494,7 @@ unit rgcpu;
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_written(list,pos,spilltemp,tempreg);
+          inherited;
       end;
       end;
 
 
 
 

+ 6 - 6
compiler/avr/rgcpu.pas

@@ -36,8 +36,8 @@ unit rgcpu;
      type
      type
        trgcpu = class(trgobj)
        trgcpu = class(trgobj)
          procedure add_constraints(reg:tregister);override;
          procedure add_constraints(reg:tregister);override;
-         procedure do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
-         procedure do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
+         procedure do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
+         procedure do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
        end;
        end;
 
 
        trgintcpu = class(trgcpu)
        trgintcpu = class(trgcpu)
@@ -87,7 +87,7 @@ unit rgcpu;
       end;
       end;
 
 
 
 
-    procedure trgcpu.do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       var
       var
         helpins  : tai;
         helpins  : tai;
         tmpref   : treference;
         tmpref   : treference;
@@ -110,11 +110,11 @@ unit rgcpu;
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_read(list,pos,spilltemp,tempreg);
+          inherited;
       end;
       end;
 
 
 
 
-    procedure trgcpu.do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       var
       var
         tmpref   : treference;
         tmpref   : treference;
         helplist : TAsmList;
         helplist : TAsmList;
@@ -135,7 +135,7 @@ unit rgcpu;
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_written(list,pos,spilltemp,tempreg);
+          inherited;
     end;
     end;
 
 
 
 

+ 9 - 9
compiler/mips/rgcpu.pas

@@ -27,7 +27,7 @@ unit rgcpu;
   interface
   interface
 
 
     uses
     uses
-      aasmbase,aasmcpu,aasmtai,aasmdata,
+      aasmbase,aasmsym,aasmcpu,aasmtai,aasmdata,
       cgbase,cgutils,
       cgbase,cgutils,
       cpubase,
       cpubase,
       rgobj;
       rgobj;
@@ -36,9 +36,9 @@ unit rgcpu;
       trgcpu=class(trgobj)
       trgcpu=class(trgobj)
         procedure add_constraints(reg:tregister);override;
         procedure add_constraints(reg:tregister);override;
         function get_spill_subreg(r : tregister) : tsubregister;override;
         function get_spill_subreg(r : tregister) : tsubregister;override;
-        procedure do_spill_read(list:tasmlist;pos:tai;const spilltemp:treference;tempreg:tregister);override;
-        procedure do_spill_written(list:tasmlist;pos:tai;const spilltemp:treference;tempreg:tregister);override;
-        function do_spill_replace(list:TAsmList;instr:taicpu;orgreg:tsuperregister;const spilltemp:treference):boolean;override;
+        procedure do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
+        procedure do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
+        function do_spill_replace(list: TAsmList; instr: tai_cpu_abstract_sym; orgreg: tsuperregister; const spilltemp: treference): boolean; override;
       end;
       end;
 
 
       trgintcpu=class(trgcpu)
       trgintcpu=class(trgcpu)
@@ -92,7 +92,7 @@ implementation
       end;
       end;
 
 
 
 
-    procedure trgcpu.do_spill_read(list:tasmlist;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       var
       var
         helpins  : tai;
         helpins  : tai;
         tmpref   : treference;
         tmpref   : treference;
@@ -120,11 +120,11 @@ implementation
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_read(list,pos,spilltemp,tempreg);
+          inherited;
       end;
       end;
 
 
 
 
-    procedure trgcpu.do_spill_written(list:tasmlist;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       var
       var
         tmpref   : treference;
         tmpref   : treference;
         helplist : tasmlist;
         helplist : tasmlist;
@@ -153,11 +153,11 @@ implementation
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_written(list,pos,spilltemp,tempreg);
+          inherited;
     end;
     end;
 
 
 
 
-    function trgcpu.do_spill_replace(list:TAsmList;instr:taicpu;orgreg:tsuperregister;const spilltemp:treference):boolean;
+    function trgcpu.do_spill_replace(list: TAsmList; instr: tai_cpu_abstract_sym; orgreg: tsuperregister; const spilltemp: treference): boolean;
       begin
       begin
         result:=false;
         result:=false;
         { Replace 'move  orgreg,src' with 'sw  src,spilltemp'
         { Replace 'move  orgreg,src' with 'sw  src,spilltemp'

+ 6 - 6
compiler/ppcgen/rgcpu.pas

@@ -35,8 +35,8 @@ unit rgcpu;
 
 
      type
      type
        trgcpu = class(trgobj)
        trgcpu = class(trgobj)
-         procedure do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
-         procedure do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
+         procedure do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
+         procedure do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
        end;
        end;
 
 
        trgintcpu = class(trgcpu)
        trgintcpu = class(trgcpu)
@@ -53,7 +53,7 @@ unit rgcpu;
       procinfo;
       procinfo;
 
 
 
 
-    procedure trgcpu.do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       var
       var
         tmpref : treference;
         tmpref : treference;
         helplist : TAsmList;
         helplist : TAsmList;
@@ -100,11 +100,11 @@ unit rgcpu;
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_read(list,pos,spilltemp,tempreg);
+          inherited;
       end;
       end;
 
 
 
 
-    procedure trgcpu.do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       var
       var
         tmpref : treference;
         tmpref : treference;
         helplist : TAsmList;
         helplist : TAsmList;
@@ -147,7 +147,7 @@ unit rgcpu;
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_written(list,pos,spilltemp,tempreg);
+          inherited;
       end;
       end;
 
 
 {$ifdef user0}
 {$ifdef user0}

+ 18 - 16
compiler/rgobj.pas

@@ -31,7 +31,7 @@ unit rgobj;
 
 
     uses
     uses
       cutils, cpubase,
       cutils, cpubase,
-      aasmbase,aasmtai,aasmdata,aasmcpu,
+      aasmbase,aasmtai,aasmdata,aasmsym,aasmcpu,
       cclasses,globtype,cgbase,cgutils,
       cclasses,globtype,cgbase,cgutils,
       cpuinfo
       cpuinfo
       ;
       ;
@@ -177,12 +177,14 @@ unit rgobj;
         function  getregisterinline(list:TAsmList;const subregconstraints:Tsubregisterset):Tregister;
         function  getregisterinline(list:TAsmList;const subregconstraints:Tsubregisterset):Tregister;
         procedure ungetregisterinline(list:TAsmList;r:Tregister);
         procedure ungetregisterinline(list:TAsmList;r:Tregister);
         function  get_spill_subreg(r : tregister) : tsubregister;virtual;
         function  get_spill_subreg(r : tregister) : tsubregister;virtual;
-        function  do_spill_replace(list:TAsmList;instr:taicpu;orgreg:tsuperregister;const spilltemp:treference):boolean;virtual;
-        procedure do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);virtual;
-        procedure do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);virtual;
+        function  do_spill_replace(list:TAsmList;instr:tai_cpu_abstract_sym;orgreg:tsuperregister;const spilltemp:treference):boolean;virtual;
+        { the orgrsupeg parameter is only here for the llvm target, so it can
+          discover the def to use for the load }
+        procedure do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister;orgsupreg:tsuperregister);virtual;
+        procedure do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister;orgsupreg:tsuperregister);virtual;
 
 
         function instr_spill_register(list:TAsmList;
         function instr_spill_register(list:TAsmList;
-                                      instr:taicpu;
+                                      instr:tai_cpu_abstract_sym;
                                       const r:Tsuperregisterset;
                                       const r:Tsuperregisterset;
                                       const spilltemplist:Tspill_temp_list): boolean;virtual;
                                       const spilltemplist:Tspill_temp_list): boolean;virtual;
         procedure insert_regalloc_info_all(list:TAsmList);
         procedure insert_regalloc_info_all(list:TAsmList);
@@ -1974,11 +1976,11 @@ unit rgobj;
                       end;
                       end;
                   end;
                   end;
               ait_instruction:
               ait_instruction:
-                with Taicpu(p) do
+                with tai_cpu_abstract_sym(p) do
                   begin
                   begin
-//                    writeln(gas_op2str[taicpu(p).opcode]);
+//                    writeln(gas_op2str[tai_cpu_abstract_sym(p).opcode]);
                     current_filepos:=fileinfo;
                     current_filepos:=fileinfo;
-                    if instr_spill_register(list,taicpu(p),regs_to_spill_set,spill_temps^) then
+                    if instr_spill_register(list,tai_cpu_abstract_sym(p),regs_to_spill_set,spill_temps^) then
                       spill_registers:=true;
                       spill_registers:=true;
                   end;
                   end;
             end;
             end;
@@ -1993,15 +1995,15 @@ unit rgobj;
       end;
       end;
 
 
 
 
-    function trgobj.do_spill_replace(list:TAsmList;instr:taicpu;orgreg:tsuperregister;const spilltemp:treference):boolean;
+    function trgobj.do_spill_replace(list:TAsmList;instr:tai_cpu_abstract_sym;orgreg:tsuperregister;const spilltemp:treference):boolean;
       begin
       begin
         result:=false;
         result:=false;
       end;
       end;
 
 
 
 
-    procedure trgobj.do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgobj.do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister;orgsupreg:tsuperregister);
       var
       var
-        ins:Taicpu;
+        ins:tai_cpu_abstract_sym;
       begin
       begin
         ins:=spilling_create_load(spilltemp,tempreg);
         ins:=spilling_create_load(spilltemp,tempreg);
         add_cpu_interferences(ins);
         add_cpu_interferences(ins);
@@ -2012,9 +2014,9 @@ unit rgobj;
       end;
       end;
 
 
 
 
-    procedure Trgobj.do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure Trgobj.do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister;orgsupreg:tsuperregister);
       var
       var
-        ins:Taicpu;
+        ins:tai_cpu_abstract_sym;
       begin
       begin
         ins:=spilling_create_store(tempreg,spilltemp);
         ins:=spilling_create_store(tempreg,spilltemp);
         add_cpu_interferences(ins);
         add_cpu_interferences(ins);
@@ -2032,7 +2034,7 @@ unit rgobj;
 
 
 
 
     function trgobj.instr_spill_register(list:TAsmList;
     function trgobj.instr_spill_register(list:TAsmList;
-                                         instr:taicpu;
+                                         instr:tai_cpu_abstract_sym;
                                          const r:Tsuperregisterset;
                                          const r:Tsuperregisterset;
                                          const spilltemplist:Tspill_temp_list): boolean;
                                          const spilltemplist:Tspill_temp_list): boolean;
       var
       var
@@ -2233,7 +2235,7 @@ unit rgobj;
               if mustbespilled and regread then
               if mustbespilled and regread then
                 begin
                 begin
                   tempreg:=getregisterinline(list,regs[counter].spillregconstraints);
                   tempreg:=getregisterinline(list,regs[counter].spillregconstraints);
-                  do_spill_read(list,tai(loadpos.previous),spilltemplist[orgreg],tempreg);
+                  do_spill_read(list,tai(loadpos.previous),spilltemplist[orgreg],tempreg,orgreg);
                 end;
                 end;
             end;
             end;
 
 
@@ -2273,7 +2275,7 @@ unit rgobj;
             begin
             begin
               if mustbespilled and regwritten then
               if mustbespilled and regwritten then
                 begin
                 begin
-                  do_spill_written(list,tai(storepos.previous),spilltemplist[orgreg],tempreg);
+                  do_spill_written(list,tai(storepos.previous),spilltemplist[orgreg],tempreg,orgreg);
                   ungetregisterinline(list,tempreg);
                   ungetregisterinline(list,tempreg);
                 end;
                 end;
             end;
             end;

+ 6 - 6
compiler/sparc/rgcpu.pas

@@ -35,8 +35,8 @@ unit rgcpu;
       trgcpu=class(trgobj)
       trgcpu=class(trgobj)
         procedure add_constraints(reg:tregister);override;
         procedure add_constraints(reg:tregister);override;
         function get_spill_subreg(r : tregister) : tsubregister;override;
         function get_spill_subreg(r : tregister) : tsubregister;override;
-        procedure do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
-        procedure do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);override;
+        procedure do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
+        procedure do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister); override;
       end;
       end;
 
 
 
 
@@ -87,7 +87,7 @@ implementation
       end;
       end;
 
 
 
 
-    procedure trgcpu.do_spill_read(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_read(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       var
       var
         helpins  : tai;
         helpins  : tai;
         tmpref   : treference;
         tmpref   : treference;
@@ -120,11 +120,11 @@ implementation
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_read(list,pos,spilltemp,tempreg);
+          inherited;
       end;
       end;
 
 
 
 
-    procedure trgcpu.do_spill_written(list:TAsmList;pos:tai;const spilltemp:treference;tempreg:tregister);
+    procedure trgcpu.do_spill_written(list: TAsmList; pos: tai; const spilltemp: treference; tempreg: tregister; orgsupreg: tsuperregister);
       var
       var
         tmpref   : treference;
         tmpref   : treference;
         helplist : TAsmList;
         helplist : TAsmList;
@@ -158,7 +158,7 @@ implementation
             helplist.free;
             helplist.free;
           end
           end
         else
         else
-          inherited do_spill_written(list,pos,spilltemp,tempreg);
+          inherited;
     end;
     end;
 
 
 end.
 end.

+ 7 - 7
compiler/x86/rgx86.pas

@@ -30,13 +30,13 @@ unit rgx86;
     uses
     uses
       cclasses,globtype,
       cclasses,globtype,
       cpubase,cpuinfo,cgbase,cgutils,
       cpubase,cpuinfo,cgbase,cgutils,
-      aasmbase,aasmtai,aasmdata,aasmcpu,
+      aasmbase,aasmtai,aasmdata,aasmsym,aasmcpu,
       rgobj;
       rgobj;
 
 
     type
     type
        trgx86 = class(trgobj)
        trgx86 = class(trgobj)
          function  get_spill_subreg(r : tregister) : tsubregister;override;
          function  get_spill_subreg(r : tregister) : tsubregister;override;
-         function  do_spill_replace(list:TAsmList;instr:taicpu;orgreg:tsuperregister;const spilltemp:treference):boolean;override;
+         function  do_spill_replace(list:TAsmList;instr:tai_cpu_abstract_sym;orgreg:tsuperregister;const spilltemp:treference):boolean;override;
        end;
        end;
 
 
        tpushedsavedloc = record
        tpushedsavedloc = record
@@ -107,7 +107,7 @@ implementation
       end;
       end;
 
 
 
 
-    function trgx86.do_spill_replace(list:TAsmList;instr:taicpu;orgreg:tsuperregister;const spilltemp:treference):boolean;
+    function trgx86.do_spill_replace(list:TAsmList;instr:tai_cpu_abstract_sym;orgreg:tsuperregister;const spilltemp:treference):boolean;
 
 
     {Decide wether a "replace" spill is possible, i.e. wether we can replace a register
     {Decide wether a "replace" spill is possible, i.e. wether we can replace a register
      in an instruction by a memory reference. For example, in "mov ireg26d,0", the imaginary
      in an instruction by a memory reference. For example, in "mov ireg26d,0", the imaginary
@@ -118,7 +118,7 @@ implementation
         is_subh: Boolean;
         is_subh: Boolean;
       begin
       begin
         result:=false;
         result:=false;
-        with instr do
+        with taicpu(instr) do
           begin
           begin
             replaceoper:=-1;
             replaceoper:=-1;
             case ops of
             case ops of
@@ -216,7 +216,7 @@ implementation
                           begin
                           begin
                             { Some instructions don't allow memory references
                             { Some instructions don't allow memory references
                               for source }
                               for source }
-                            case instr.opcode of
+                            case opcode of
                               A_BT,
                               A_BT,
                               A_BTS,
                               A_BTS,
                               A_BTC,
                               A_BTC,
@@ -233,7 +233,7 @@ implementation
                           begin
                           begin
                             { Some instructions don't allow memory references
                             { Some instructions don't allow memory references
                               for destination }
                               for destination }
-                            case instr.opcode of
+                            case opcode of
                               A_CMOVcc,
                               A_CMOVcc,
                               A_MOVZX,
                               A_MOVZX,
                               A_MOVSX,
                               A_MOVSX,
@@ -306,7 +306,7 @@ implementation
               zeroing the upper 32 bits of the register. This does not happen
               zeroing the upper 32 bits of the register. This does not happen
               with memory operations, so we have to perform these calculations
               with memory operations, so we have to perform these calculations
               in registers.  }
               in registers.  }
-            if (instr.opsize=S_L) then
+            if (opsize=S_L) then
               replaceoper:=-1;
               replaceoper:=-1;
 {$endif x86_64}
 {$endif x86_64}