Browse Source

* changed scratchregs from r28-r30 to r29-r31
* made sure the regvar registers don't overlap with the scratchregs
anymore

Jonas Maebe 22 years ago
parent
commit
d321606bc5
1 changed files with 16 additions and 7 deletions
  1. 16 7
      compiler/powerpc/cpubase.pas

+ 16 - 7
compiler/powerpc/cpubase.pas

@@ -536,10 +536,10 @@ uses
       firstsavemmreg  = R_NO;
       firstsavemmreg  = R_NO;
       lastsavemmreg   = R_NO;
       lastsavemmreg   = R_NO;
 
 
-      maxvarregs = 17;
+      maxvarregs = 15;
       varregs : Array [1..maxvarregs] of Tnewregister =
       varregs : Array [1..maxvarregs] of Tnewregister =
                 (RS_R14,RS_R15,RS_R16,RS_R17,RS_R18,RS_R19,RS_R20,RS_R21,
                 (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,RS_R30);
+                 RS_R22,RS_R23,RS_R24,RS_R25,RS_R26,RS_R27,RS_R28);
 
 
       maxfpuvarregs = 31-14+1;
       maxfpuvarregs = 31-14+1;
       fpuvarregs : Array [1..maxfpuvarregs] of Toldregister =
       fpuvarregs : Array [1..maxfpuvarregs] of Toldregister =
@@ -562,7 +562,7 @@ uses
          routine calls or in assembler blocks.
          routine calls or in assembler blocks.
       }
       }
       max_scratch_regs = 3;
       max_scratch_regs = 3;
-      scratch_regs: Array[1..max_scratch_regs] of Tsuperregister = (RS_R28,RS_R29,RS_R30);
+      scratch_regs: Array[1..max_scratch_regs] of Tsuperregister = (RS_R29,RS_R30,RS_R31);
 
 
 {*****************************************************************************
 {*****************************************************************************
                           Default generic sizes
                           Default generic sizes
@@ -807,7 +807,11 @@ implementation
 
 
     begin
     begin
       if r.enum = R_INTREGISTER then
       if r.enum = R_INTREGISTER then
-        case r.number of
+        if (r.number >= NR_NO) and
+           (r.number <= NR_R31) then
+          r.enum := toldregister(r.number shr 8)
+        else
+{        case r.number of
           NR_NO: r.enum:= R_NO;
           NR_NO: r.enum:= R_NO;
 
 
           NR_R0: r.enum:= R_0;
           NR_R0: r.enum:= R_0;
@@ -842,9 +846,9 @@ implementation
           NR_R29: r.enum:= R_29;
           NR_R29: r.enum:= R_29;
           NR_R30: r.enum:= R_30;
           NR_R30: r.enum:= R_30;
           NR_R31: r.enum:= R_31;
           NR_R31: r.enum:= R_31;
-        else
+        else}
           internalerror(200301082);
           internalerror(200301082);
-        end;
+{        end;}
     end;
     end;
 
 
     function cgsize2subreg(s:Tcgsize):Tsubregister;
     function cgsize2subreg(s:Tcgsize):Tsubregister;
@@ -856,7 +860,12 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.52  2003-05-24 16:02:01  jonas
+  Revision 1.53  2003-05-30 18:49:59  jonas
+    * changed scratchregs from r28-r30 to r29-r31
+    * made sure the regvar registers don't overlap with the scratchregs
+      anymore
+
+  Revision 1.52  2003/05/24 16:02:01  jonas
     * fixed endian problem with tlocation.value/valueqword fields
     * fixed endian problem with tlocation.value/valueqword fields
 
 
   Revision 1.51  2003/05/16 16:26:05  jonas
   Revision 1.51  2003/05/16 16:26:05  jonas