Explorar o código

* save standard registers moved to tcgobj

peter %!s(int64=21) %!d(string=hai) anos
pai
achega
d19663f3a8

+ 58 - 4
compiler/cgobj.pas

@@ -409,14 +409,14 @@ unit cgobj;
 
 
              @param(usedinproc Registers which are used in the code of this routine)
              @param(usedinproc Registers which are used in the code of this routine)
           }
           }
-          procedure g_save_standard_registers(list:Taasmoutput);virtual;abstract;
+          procedure g_save_standard_registers(list:Taasmoutput);virtual;
           {# This routine is called when generating the code for the exit point
           {# This routine is called when generating the code for the exit point
              of a routine. It should restore all registers which were previously
              of a routine. It should restore all registers which were previously
              saved in @var(g_save_standard_registers).
              saved in @var(g_save_standard_registers).
 
 
              @param(usedinproc Registers which are used in the code of this routine)
              @param(usedinproc Registers which are used in the code of this routine)
           }
           }
-          procedure g_restore_standard_registers(list:Taasmoutput);virtual;abstract;
+          procedure g_restore_standard_registers(list:Taasmoutput);virtual;
        end;
        end;
 
 
 {$ifndef cpu64bit}
 {$ifndef cpu64bit}
@@ -500,7 +500,7 @@ implementation
     uses
     uses
        globals,options,systems,
        globals,options,systems,
        verbose,defutil,paramgr,
        verbose,defutil,paramgr,
-       tgobj,cutils,
+       tgobj,cutils,procinfo,
        cgutils;
        cgutils;
 
 
     const
     const
@@ -1916,6 +1916,57 @@ implementation
       end;
       end;
 
 
 
 
+    procedure tcg.g_save_standard_registers(list:Taasmoutput);
+      var
+        href : treference;
+        size : longint;
+        r : integer;
+      begin
+        { Get temp }
+        size:=0;
+        for r:=low(saved_standard_registers) to high(saved_standard_registers) do
+          if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then
+            inc(size,sizeof(aint));
+        if size>0 then
+          begin
+            tg.GetTemp(list,size,tt_noreuse,current_procinfo.save_regs_ref);
+            { Copy registers to temp }
+            href:=current_procinfo.save_regs_ref;
+
+            for r:=low(saved_standard_registers) to high(saved_standard_registers) do
+              begin
+                if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then
+                  begin
+                    a_load_reg_ref(list,OS_ADDR,OS_ADDR,newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE),href);
+                    inc(href.offset,sizeof(aint));
+                  end;
+                include(rg[R_INTREGISTER].preserved_by_proc,saved_standard_registers[r]);
+              end;
+          end;
+      end;
+
+
+    procedure tcg.g_restore_standard_registers(list:Taasmoutput);
+      var
+        href : treference;
+        r : integer;
+        hreg : tregister;
+      begin
+        { Copy registers from temp }
+        href:=current_procinfo.save_regs_ref;
+        for r:=low(saved_standard_registers) to high(saved_standard_registers) do
+          if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then
+            begin
+              hreg:=newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE);
+              { Allocate register so the optimizer does remove the load }
+              a_reg_alloc(list,hreg);
+              a_load_ref_reg(list,OS_ADDR,OS_ADDR,href,hreg);
+              inc(href.offset,sizeof(aint));
+            end;
+        tg.UnGetTemp(list,current_procinfo.save_regs_ref);
+      end;
+
+
     procedure tcg.g_profilecode(list : taasmoutput);
     procedure tcg.g_profilecode(list : taasmoutput);
       begin
       begin
       end;
       end;
@@ -2027,7 +2078,10 @@ finalization
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.181  2004-10-24 20:01:08  peter
+  Revision 1.182  2004-10-25 15:36:47  peter
+    * save standard registers moved to tcgobj
+
+  Revision 1.181  2004/10/24 20:01:08  peter
     * remove saveregister calling convention
     * remove saveregister calling convention
 
 
   Revision 1.180  2004/10/24 11:44:28  peter
   Revision 1.180  2004/10/24 11:44:28  peter

+ 21 - 22
compiler/powerpc/cpubase.pas

@@ -309,23 +309,13 @@ uses
                 1 : (register,registerhigh : tregister);
                 1 : (register,registerhigh : tregister);
                 { overlay a registerlow }
                 { overlay a registerlow }
                 2 : (registerlow : tregister);
                 2 : (registerlow : tregister);
+{$ifndef cpu64bit}
                 { overlay a 64 Bit register type }
                 { overlay a 64 Bit register type }
-                3 : (reg64 : tregister64);
-                4 : (register64 : tregister64);
+                3 : (register64 : tregister64);
+{$endif cpu64bit}
             );
             );
       end;
       end;
 
 
-      treglocation = packed record
-        case longint of
-          1 : (register,registerhigh : tregister);
-          { overlay a registerlow }
-          2 : (registerlow : tregister);
-          { overlay a 64 Bit register type }
-          3 : (reg64 : tregister64);
-          4 : (register64 : tregister64);
-       end;
-
-
       tlocation = packed record
       tlocation = packed record
          size : TCGSize;
          size : TCGSize;
          loc : tcgloc;
          loc : tcgloc;
@@ -333,19 +323,21 @@ uses
             LOC_CREFERENCE,LOC_REFERENCE : (reference : treference);
             LOC_CREFERENCE,LOC_REFERENCE : (reference : treference);
             LOC_CONSTANT : (
             LOC_CONSTANT : (
               case longint of
               case longint of
-{$ifdef FPC_BIG_ENDIAN}
-                1 : (_valuedummy,value : AWord);
-{$else FPC_BIG_ENDIAN}
-                1 : (value : AWord);
-{$endif FPC_BIG_ENDIAN}
-                2 : (value64 : int64);
+                1 : (value : AInt);
+                { can't do this, this layout depends on the host cpu. Use }
+                { lo(valueqword)/hi(valueqword) instead (JM)              }
+                { overlay a complete 64 Bit value }
+                2 : (value64 : Int64);
               );
               );
             LOC_FPUREGISTER, LOC_CFPUREGISTER, LOC_MMREGISTER, LOC_CMMREGISTER,
             LOC_FPUREGISTER, LOC_CFPUREGISTER, LOC_MMREGISTER, LOC_CMMREGISTER,
               LOC_REGISTER,LOC_CREGISTER : (
               LOC_REGISTER,LOC_CREGISTER : (
                 case longint of
                 case longint of
                   1 : (registerlow,registerhigh : tregister);
                   1 : (registerlow,registerhigh : tregister);
                   2 : (register : tregister);
                   2 : (register : tregister);
-                  4 : (register64 : tregister64);
+{$ifndef cpu64bit}
+                  { overlay a 64 Bit register type }
+                  3 : (register64 : tregister64);
+{$endif cpu64bit}
                 );
                 );
             LOC_FLAGS : (resflags : tresflags);
             LOC_FLAGS : (resflags : tresflags);
       end;
       end;
@@ -444,7 +436,11 @@ uses
          This value can be deduced from CALLED_USED_REGISTERS array in the
          This value can be deduced from CALLED_USED_REGISTERS array in the
          GCC source.
          GCC source.
       }
       }
-      std_saved_registers = [RS_R13..RS_R29];
+      saved_standard_registers : array[0..16] of tsuperregister = (
+        RS_R13,RS_R14,RS_R15,RS_R16,RS_R17,RS_R18,RS_R19,
+        RS_R20,RS_R21,RS_R22,RS_R23,RS_R24,RS_R25,RS_R26,RS_R27,RS_R28,RS_R29
+      );
+
       {# Required parameter alignment when calling a routine declared as
       {# Required parameter alignment when calling a routine declared as
          stdcall and cdecl. The alignment value should be the one defined
          stdcall and cdecl. The alignment value should be the one defined
          by GCC or the target ABI.
          by GCC or the target ABI.
@@ -641,7 +637,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.89  2004-06-20 08:55:32  florian
+  Revision 1.90  2004-10-25 15:36:47  peter
+    * save standard registers moved to tcgobj
+
+  Revision 1.89  2004/06/20 08:55:32  florian
     * logs truncated
     * logs truncated
 
 
   Revision 1.88  2004/06/17 16:55:46  peter
   Revision 1.88  2004/06/17 16:55:46  peter

+ 22 - 19
compiler/powerpc/nppcadd.pas

@@ -215,7 +215,7 @@ interface
                 useconst := false;
                 useconst := false;
                 tmpreg := cg.getintregister(exprasmlist,OS_INT);
                 tmpreg := cg.getintregister(exprasmlist,OS_INT);
                 cg.a_load_const_reg(exprasmlist,OS_INT,
                 cg.a_load_const_reg(exprasmlist,OS_INT,
-                  aword(right.location.value),tmpreg);
+                    right.location.value,tmpreg);
                end
                end
           end
           end
         else
         else
@@ -361,7 +361,7 @@ interface
                       location.register)
                       location.register)
                   else
                   else
                     cg.a_op_const_reg_reg(exprasmlist,cgop,OS_INT,
                     cg.a_op_const_reg_reg(exprasmlist,cgop,OS_INT,
-                      aword(right.location.value),left.location.register,
+                      right.location.value,left.location.register,
                       location.register);
                       location.register);
                 end;
                 end;
             end;
             end;
@@ -524,7 +524,7 @@ interface
                    internalerror(43244);
                    internalerror(43244);
                   if (right.location.loc = LOC_CONSTANT) then
                   if (right.location.loc = LOC_CONSTANT) then
                     cg.a_op_const_reg_reg(exprasmlist,OP_OR,OS_INT,
                     cg.a_op_const_reg_reg(exprasmlist,OP_OR,OS_INT,
-                      aword(1 shl aword(right.location.value)),
+                      1 shl right.location.value,
                       left.location.register,location.register)
                       left.location.register,location.register)
                   else
                   else
                     begin
                     begin
@@ -537,7 +537,7 @@ interface
                           left.location.register,location.register)
                           left.location.register,location.register)
                       else
                       else
                         cg.a_op_const_reg_reg(exprasmlist,OP_OR,OS_INT,
                         cg.a_op_const_reg_reg(exprasmlist,OP_OR,OS_INT,
-                          aword(left.location.value),tmpreg,location.register);
+                          left.location.value,tmpreg,location.register);
                     end;
                     end;
                   opdone := true;
                   opdone := true;
                 end
                 end
@@ -569,7 +569,7 @@ interface
                     begin
                     begin
                       tmpreg := cg.getintregister(exprasmlist,OS_INT);
                       tmpreg := cg.getintregister(exprasmlist,OS_INT);
                       cg.a_load_const_reg(exprasmlist,OS_INT,
                       cg.a_load_const_reg(exprasmlist,OS_INT,
-                        aword(left.location.value),tmpreg);
+                        left.location.value,tmpreg);
                       exprasmlist.concat(taicpu.op_reg_reg_reg(A_ANDC,
                       exprasmlist.concat(taicpu.op_reg_reg_reg(A_ANDC,
                         location.register,tmpreg,right.location.register));
                         location.register,tmpreg,right.location.register));
                     end
                     end
@@ -607,7 +607,7 @@ interface
                   if right.location.loc = LOC_CONSTANT then
                   if right.location.loc = LOC_CONSTANT then
                     begin
                     begin
                       cg.a_load_const_reg(exprasmlist,OS_INT,
                       cg.a_load_const_reg(exprasmlist,OS_INT,
-                        aword(right.location.value),tmpreg);
+                        right.location.value,tmpreg);
                       exprasmlist.concat(taicpu.op_reg_reg_reg(A_ANDC_,tmpreg,
                       exprasmlist.concat(taicpu.op_reg_reg_reg(A_ANDC_,tmpreg,
                         tmpreg,left.location.register));
                         tmpreg,left.location.register));
                     end
                     end
@@ -630,7 +630,7 @@ interface
               swapleftright;
               swapleftright;
             if (right.location.loc = LOC_CONSTANT) then
             if (right.location.loc = LOC_CONSTANT) then
               cg.a_op_const_reg_reg(exprasmlist,cgop,OS_INT,
               cg.a_op_const_reg_reg(exprasmlist,cgop,OS_INT,
-                aword(right.location.value),left.location.register,
+                right.location.value,left.location.register,
                 location.register)
                 location.register)
             else
             else
               cg.a_op_reg_reg_reg(exprasmlist,cgop,OS_INT,
               cg.a_op_reg_reg_reg(exprasmlist,cgop,OS_INT,
@@ -839,7 +839,7 @@ interface
                         end
                         end
                       else
                       else
                         begin
                         begin
-                          if (aword(right.location.value64) <> 0) then
+                          if (aint(right.location.value64) <> 0) then
                             tempreg64.reglo := cg.getintregister(exprasmlist,OS_32)
                             tempreg64.reglo := cg.getintregister(exprasmlist,OS_32)
                           else
                           else
                             tempreg64.reglo := left.location.registerlow;
                             tempreg64.reglo := left.location.registerlow;
@@ -849,28 +849,28 @@ interface
                             tempreg64.reghi := left.location.registerhigh;
                             tempreg64.reghi := left.location.registerhigh;
                         end;
                         end;
 
 
-                      if (aword(right.location.value64) <> 0) then
+                      if (aint(right.location.value64) <> 0) then
                         { negative values can be handled using SUB, }
                         { negative values can be handled using SUB, }
                         { positive values < 65535 using XOR.        }
                         { positive values < 65535 using XOR.        }
                         if (longint(right.location.value64) >= -32767) and
                         if (longint(right.location.value64) >= -32767) and
                            (longint(right.location.value64) < 0) then
                            (longint(right.location.value64) < 0) then
                           cg.a_op_const_reg_reg(exprasmlist,OP_SUB,OS_INT,
                           cg.a_op_const_reg_reg(exprasmlist,OP_SUB,OS_INT,
-                            aword(right.location.value64),
+                            aint(right.location.value64),
                             left.location.registerlow,tempreg64.reglo)
                             left.location.registerlow,tempreg64.reglo)
                         else
                         else
                           cg.a_op_const_reg_reg(exprasmlist,OP_XOR,OS_INT,
                           cg.a_op_const_reg_reg(exprasmlist,OP_XOR,OS_INT,
-                            aword(right.location.value64),
+                            aint(right.location.value64),
                             left.location.registerlow,tempreg64.reglo);
                             left.location.registerlow,tempreg64.reglo);
 
 
                       if ((right.location.value64 shr 32) <> 0) then
                       if ((right.location.value64 shr 32) <> 0) then
                         if (longint(right.location.value64 shr 32) >= -32767) and
                         if (longint(right.location.value64 shr 32) >= -32767) and
                            (longint(right.location.value64 shr 32) < 0) then
                            (longint(right.location.value64 shr 32) < 0) then
                           cg.a_op_const_reg_reg(exprasmlist,OP_SUB,OS_INT,
                           cg.a_op_const_reg_reg(exprasmlist,OP_SUB,OS_INT,
-                            aword(right.location.value64 shr 32),
+                            aint(right.location.value64 shr 32),
                             left.location.registerhigh,tempreg64.reghi)
                             left.location.registerhigh,tempreg64.reghi)
                         else
                         else
                           cg.a_op_const_reg_reg(exprasmlist,OP_XOR,OS_INT,
                           cg.a_op_const_reg_reg(exprasmlist,OP_XOR,OS_INT,
-                            aword(right.location.value64 shr 32),
+                            aint(right.location.value64 shr 32),
                             left.location.registerhigh,tempreg64.reghi);
                             left.location.registerhigh,tempreg64.reghi);
                     end
                     end
                   else
                   else
@@ -943,7 +943,7 @@ interface
                           // consts16 - reg64
                           // consts16 - reg64
                           exprasmlist.concat(taicpu.op_reg_reg_const(A_SUBFIC,
                           exprasmlist.concat(taicpu.op_reg_reg_const(A_SUBFIC,
                             location.registerlow,right.location.registerlow,
                             location.registerlow,right.location.registerlow,
-                            aword(left.location.value)));
+                            left.location.value));
                         end
                         end
                       else
                       else
                         begin
                         begin
@@ -957,7 +957,7 @@ interface
                       exprasmlist.concat(taicpu.op_reg_reg(A_SUBFZE,
                       exprasmlist.concat(taicpu.op_reg_reg(A_SUBFZE,
                         location.registerhigh,right.location.registerhigh));
                         location.registerhigh,right.location.registerhigh));
                     end
                     end
-                  else if (aword(left.location.value64) = 0) then
+                  else if (aint(left.location.value64) = 0) then
                     begin
                     begin
                       // (const32 shl 32) - reg64
                       // (const32 shl 32) - reg64
                       if (location.registerlow = NR_NO) then
                       if (location.registerlow = NR_NO) then
@@ -1359,7 +1359,7 @@ interface
                        location.register)
                        location.register)
                    else
                    else
                      cg.a_op_const_reg_reg(exprasmlist,cgop,OS_INT,
                      cg.a_op_const_reg_reg(exprasmlist,cgop,OS_INT,
-                       aword(right.location.value),left.location.register,
+                       right.location.value,left.location.register,
                      location.register);
                      location.register);
                  end;
                  end;
                subn:
                subn:
@@ -1373,7 +1373,7 @@ interface
                          location.register)
                          location.register)
                      else
                      else
                        cg.a_op_const_reg_reg(exprasmlist,OP_SUB,OS_INT,
                        cg.a_op_const_reg_reg(exprasmlist,OP_SUB,OS_INT,
-                         aword(right.location.value),left.location.register,
+                         right.location.value,left.location.register,
                          location.register)
                          location.register)
                    else
                    else
                      if (longint(left.location.value) >= low(smallint)) and
                      if (longint(left.location.value) >= low(smallint)) and
@@ -1387,7 +1387,7 @@ interface
                        begin
                        begin
                          tmpreg := cg.getintregister(exprasmlist,OS_INT);
                          tmpreg := cg.getintregister(exprasmlist,OS_INT);
                          cg.a_load_const_reg(exprasmlist,OS_INT,
                          cg.a_load_const_reg(exprasmlist,OS_INT,
-                           aword(left.location.value),tmpreg);
+                           left.location.value,tmpreg);
                          cg.a_op_reg_reg_reg(exprasmlist,OP_SUB,OS_INT,
                          cg.a_op_reg_reg_reg(exprasmlist,OP_SUB,OS_INT,
                            right.location.register,tmpreg,location.register);
                            right.location.register,tmpreg,location.register);
                        end;
                        end;
@@ -1458,7 +1458,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.49  2004-09-25 14:23:54  peter
+  Revision 1.50  2004-10-25 15:36:47  peter
+    * save standard registers moved to tcgobj
+
+  Revision 1.49  2004/09/25 14:23:54  peter
     * ungetregister is now only used for cpuregisters, renamed to
     * ungetregister is now only used for cpuregisters, renamed to
       ungetcpuregister
       ungetcpuregister
     * renamed (get|unget)explicitregister(s) to ..cpuregister
     * renamed (get|unget)explicitregister(s) to ..cpuregister

+ 6 - 3
compiler/powerpc/nppcmat.pas

@@ -126,7 +126,7 @@ implementation
              { n = -13, (0xFFFF_FFF3), and k = 2, after executing the srawi  }
              { n = -13, (0xFFFF_FFF3), and k = 2, after executing the srawi  }
              { instruction, q = -4 (0xFFFF_FFFC) and CA = 1. After executing }
              { instruction, q = -4 (0xFFFF_FFFC) and CA = 1. After executing }
              { the addze instruction, q = -3, the correct quotient.          }
              { the addze instruction, q = -3, the correct quotient.          }
-             cg.a_op_const_reg_reg(exprasmlist,OP_SAR,OS_32,aword(power),
+             cg.a_op_const_reg_reg(exprasmlist,OP_SAR,OS_32,power,
                numerator,resultreg);
                numerator,resultreg);
              exprasmlist.concat(taicpu.op_reg_reg(A_ADDZE,resultreg,resultreg));
              exprasmlist.concat(taicpu.op_reg_reg(A_ADDZE,resultreg,resultreg));
            end
            end
@@ -187,7 +187,7 @@ implementation
          hregisterhigh,hregisterlow : tregister;
          hregisterhigh,hregisterlow : tregister;
          op : topcg;
          op : topcg;
          asmop1, asmop2: tasmop;
          asmop1, asmop2: tasmop;
-         shiftval: aword;
+         shiftval: aint;
          r : Tregister;
          r : Tregister;
 
 
       begin
       begin
@@ -521,7 +521,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.40  2004-09-25 14:23:55  peter
+  Revision 1.41  2004-10-25 15:36:47  peter
+    * save standard registers moved to tcgobj
+
+  Revision 1.40  2004/09/25 14:23:55  peter
     * ungetregister is now only used for cpuregisters, renamed to
     * ungetregister is now only used for cpuregisters, renamed to
       ungetcpuregister
       ungetcpuregister
     * renamed (get|unget)explicitregister(s) to ..cpuregister
     * renamed (get|unget)explicitregister(s) to ..cpuregister

+ 5 - 2
compiler/powerpc/nppcset.pas

@@ -78,7 +78,7 @@ implementation
             else
             else
               begin
               begin
                 tmpreg := cg.getintregister(exprasmlist,OS_INT);
                 tmpreg := cg.getintregister(exprasmlist,OS_INT);
-                 cg.a_load_const_reg(exprasmlist,OS_INT,aword(value),tmpreg);
+                 cg.a_load_const_reg(exprasmlist,OS_INT,value,tmpreg);
                 exprasmlist.concat(taicpu.op_reg_reg_reg(A_ADD_,hregister,
                 exprasmlist.concat(taicpu.op_reg_reg_reg(A_ADD_,hregister,
                   hregister,tmpreg));
                   hregister,tmpreg));
               end;
               end;
@@ -156,7 +156,10 @@ begin
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.15  2004-09-25 14:23:55  peter
+  Revision 1.16  2004-10-25 15:36:47  peter
+    * save standard registers moved to tcgobj
+
+  Revision 1.15  2004/09/25 14:23:55  peter
     * ungetregister is now only used for cpuregisters, renamed to
     * ungetregister is now only used for cpuregisters, renamed to
       ungetcpuregister
       ungetcpuregister
     * renamed (get|unget)explicitregister(s) to ..cpuregister
     * renamed (get|unget)explicitregister(s) to ..cpuregister

+ 4 - 54
compiler/x86/cgx86.pas

@@ -109,8 +109,6 @@ unit cgx86;
         procedure g_profilecode(list : taasmoutput);override;
         procedure g_profilecode(list : taasmoutput);override;
         procedure g_stackpointer_alloc(list : taasmoutput;localsize : longint);override;
         procedure g_stackpointer_alloc(list : taasmoutput;localsize : longint);override;
         procedure g_proc_entry(list : taasmoutput;localsize : longint;nostackframe:boolean);override;
         procedure g_proc_entry(list : taasmoutput;localsize : longint;nostackframe:boolean);override;
-        procedure g_save_standard_registers(list:Taasmoutput);override;
-        procedure g_restore_standard_registers(list:Taasmoutput);override;
 
 
         procedure g_overflowcheck(list: taasmoutput; const l:tlocation;def:tdef);override;
         procedure g_overflowcheck(list: taasmoutput; const l:tlocation;def:tdef);override;
 
 
@@ -1599,57 +1597,6 @@ unit cgx86;
       end;
       end;
 
 
 
 
-    procedure tcgx86.g_save_standard_registers(list:Taasmoutput);
-      var
-        href : treference;
-        size : longint;
-        r : integer;
-      begin
-        { Get temp }
-        size:=0;
-        for r:=low(saved_standard_registers) to high(saved_standard_registers) do
-          if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then
-            inc(size,sizeof(aint));
-        if size>0 then
-          begin
-            tg.GetTemp(list,size,tt_noreuse,current_procinfo.save_regs_ref);
-            { Copy registers to temp }
-            href:=current_procinfo.save_regs_ref;
-
-            for r:=low(saved_standard_registers) to high(saved_standard_registers) do
-              begin
-                if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then
-                  begin
-                    a_load_reg_ref(list,OS_ADDR,OS_ADDR,newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE),href);
-                    inc(href.offset,sizeof(aint));
-                  end;
-                include(rg[R_INTREGISTER].preserved_by_proc,saved_standard_registers[r]);
-              end;
-          end;
-      end;
-
-
-    procedure tcgx86.g_restore_standard_registers(list:Taasmoutput);
-      var
-        href : treference;
-        r : integer;
-        hreg : tregister;
-      begin
-        { Copy registers from temp }
-        href:=current_procinfo.save_regs_ref;
-        for r:=low(saved_standard_registers) to high(saved_standard_registers) do
-          if saved_standard_registers[r] in rg[R_INTREGISTER].used_in_proc then
-            begin
-              hreg:=newreg(R_INTREGISTER,saved_standard_registers[r],R_SUBWHOLE);
-              { Allocate register so the optimizer does remove the load }
-              a_reg_alloc(list,hreg);
-              a_load_ref_reg(list,OS_ADDR,OS_ADDR,href,hreg);
-              inc(href.offset,sizeof(aint));
-            end;
-        tg.UnGetTemp(list,current_procinfo.save_regs_ref);
-      end;
-
-
     { produces if necessary overflowcode }
     { produces if necessary overflowcode }
     procedure tcgx86.g_overflowcheck(list: taasmoutput; const l:tlocation;def:tdef);
     procedure tcgx86.g_overflowcheck(list: taasmoutput; const l:tlocation;def:tdef);
       var
       var
@@ -1680,7 +1627,10 @@ unit cgx86;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.131  2004-10-24 20:10:08  peter
+  Revision 1.132  2004-10-25 15:36:47  peter
+    * save standard registers moved to tcgobj
+
+  Revision 1.131  2004/10/24 20:10:08  peter
     * -Or fixes
     * -Or fixes
 
 
   Revision 1.130  2004/10/24 11:44:28  peter
   Revision 1.130  2004/10/24 11:44:28  peter

+ 5 - 3
compiler/x86/cpubase.pas

@@ -310,8 +310,7 @@ uses
                 { overlay a registerlow }
                 { overlay a registerlow }
                 2 : (registerlow : tregister);
                 2 : (registerlow : tregister);
                 { overlay a 64 Bit register type }
                 { overlay a 64 Bit register type }
-                3 : (reg64 : tregister64);
-                4 : (register64 : tregister64);
+                3 : (register64 : tregister64);
               );
               );
             { it's only for better handling }
             { it's only for better handling }
             LOC_MMXREGISTER,LOC_CMMXREGISTER : (mmxreg : tregister);
             LOC_MMXREGISTER,LOC_CMMXREGISTER : (mmxreg : tregister);
@@ -540,7 +539,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.47  2004-10-15 09:22:23  mazen
+  Revision 1.48  2004-10-25 15:36:47  peter
+    * save standard registers moved to tcgobj
+
+  Revision 1.47  2004/10/15 09:22:23  mazen
   - remove $IFDEF DELPHI and related code
   - remove $IFDEF DELPHI and related code
   - remove $IFDEF FPCPROCVAR and related code
   - remove $IFDEF FPCPROCVAR and related code