Browse Source

+ added new register constants
+ implemented register convertion proc

olle 22 years ago
parent
commit
6af7aba722
1 changed files with 69 additions and 4 deletions
  1. 69 4
      compiler/powerpc/cpubase.pas

+ 69 - 4
compiler/powerpc/cpubase.pas

@@ -110,7 +110,9 @@ uses
         R_M13,R_M14,R_M15,R_M16,R_M17,R_M18,R_M19,R_M20,R_M21,R_M22, R_M23,R_M24,
         R_M25,R_M26,R_M27,R_M28,R_M29,R_M30,R_M31,
         R_CR,R_CR0,R_CR1,R_CR2,R_CR3,R_CR4,R_CR5,R_CR6,R_CR7,
-        R_XER,R_LR,R_CTR,R_FPSCR
+        R_XER,R_LR,R_CTR,R_FPSCR,
+
+        R_INTREGISTER {Only for use by the register allocator.}
       );
 
       Tregister=record
@@ -190,6 +192,28 @@ uses
         'XER','LR','CTR','FPSCR'
       );
 
+    {New register coding:}
+
+    {Special registers:}
+    const
+      NR_NO = $0000;  {Invalid register}
+
+    {Normal registers:}
+
+    {General purpose registers:}
+      NR_R0 = $0100; NR_R1 = $0200; NR_R2 = $0300;
+      NR_R3 = $0400; NR_R4 = $0500; NR_R5 = $0600;
+      NR_R6 = $0700; NR_R7 = $0800; NR_R8 = $0900;
+      NR_R9 = $0A00; NR_R10 = $0B00; NR_R11 = $0C00;
+      NR_R12 = $0D00; NR_R13 = $0E00; NR_R14 = $0F00;
+      NR_R15 = $1000; NR_R16 = $1100; NR_R17 = $1200;
+      NR_R18 = $1300; NR_R19 = $1400; NR_R20 = $1500;
+      NR_R21 = $1600; NR_R22 = $1700; NR_R23 = $1800;
+      NR_R24 = $1900; NR_R25 = $1A00; NR_R26 = $1B00;
+      NR_R27 = $1C00; NR_R28 = $1D00; NR_R29 = $1E00;
+      NR_R30 = $1F00; NR_R31 = $2000;
+
+
 {*****************************************************************************
                                 Conditions
 *****************************************************************************}
@@ -753,14 +777,55 @@ implementation
     procedure convert_register_to_enum(var r:Tregister);
 
     begin
-      {$warning Convert_register_to_enum implementation is missing!}
-      internalerror(200301082);
+      if r.enum = R_INTREGISTER then
+        case r.number of
+          NR_NO: r.enum:= R_NO;
+
+          NR_R0: r.enum:= R_0;
+          NR_R1: r.enum:= R_1;
+          NR_R2: r.enum:= R_2;
+          NR_R3: r.enum:= R_3;
+          NR_R4: r.enum:= R_4;
+          NR_R5: r.enum:= R_5;
+          NR_R6: r.enum:= R_6;
+          NR_R7: r.enum:= R_7;
+          NR_R8: r.enum:= R_8;
+          NR_R9: r.enum:= R_9;
+          NR_R10: r.enum:= R_10;
+          NR_R11: r.enum:= R_11;
+          NR_R12: r.enum:= R_12;
+          NR_R13: r.enum:= R_13;
+          NR_R14: r.enum:= R_14;
+          NR_R15: r.enum:= R_15;
+          NR_R16: r.enum:= R_16;
+          NR_R17: r.enum:= R_17;
+          NR_R18: r.enum:= R_18;
+          NR_R19: r.enum:= R_19;
+          NR_R20: r.enum:= R_20;
+          NR_R21: r.enum:= R_21;
+          NR_R22: r.enum:= R_22;
+          NR_R23: r.enum:= R_23;
+          NR_R24: r.enum:= R_24;
+          NR_R25: r.enum:= R_25;
+          NR_R26: r.enum:= R_26;
+          NR_R27: r.enum:= R_27;
+          NR_R28: r.enum:= R_28;
+          NR_R29: r.enum:= R_29;
+          NR_R30: r.enum:= R_30;
+          NR_R31: r.enum:= R_31;
+        else
+          internalerror(200301082);
+        end;
     end;
 
 end.
 {
   $Log$
-  Revision 1.41  2003-01-13 17:17:50  olle
+  Revision 1.42  2003-01-16 11:31:28  olle
+    + added new register constants
+    + implemented register convertion proc
+
+  Revision 1.41  2003/01/13 17:17:50  olle
     * changed global var access, TOC now contain pointers to globals
     * fixed handling of function pointers