Procházet zdrojové kódy

* TOldRegister isnow just an alias for TCpuRegister
* TCpuRegister is used to define cpu register set physically available
+ CpuRegs array to easially create correspondence between TCpuRegister and TRegister

mazen před 22 roky
rodič
revize
ace3595b4f
1 změnil soubory, kde provedl 126 přidání a 77 odebrání
  1. 126 77
      compiler/sparc/cpubase.pas

+ 126 - 77
compiler/sparc/cpubase.pas

@@ -190,12 +190,13 @@ CONST
 TYPE
   { enumeration for registers, don't change the order }
   { it's used by the register size conversions        }
-  ToldRegister=({$INCLUDE registers.inc});
+  TCpuRegister=({$INCLUDE cpuregs.inc});
+  TOldRegister=TCpuRegister;
   Tnewregister=word;
   Tsuperregister=byte;
   Tsubregister=byte;
   Tregister=record
-    enum:Toldregister;
+    enum:TCpuRegister;
     number:Tnewregister;
   end;
   TRegister64=PACKED RECORD
@@ -203,17 +204,17 @@ TYPE
      RegLo,RegHi:TRegister;
   END;
   treg64=tregister64;{alias for compact code}
-  TRegisterSet=SET OF ToldRegister;
+  TRegisterSet=SET OF TCpuRegister;
   Tsupregset=set of Tsuperregister;
-CONST
+const
   R_NO=R_NONE;
   firstreg = Succ(R_NONE);
   lastreg  = Pred(R_INTREGISTER);
-
 {General registers.}
 
 const
-  NR_NO=$0000;
+  NR_NONE=$0000;
+  NR_NO=NR_NONE;
   NR_G0=$0001;
   NR_G1=$0002;
   NR_G2=$0003;
@@ -246,6 +247,114 @@ const
   NR_I5=$1600;
   NR_I6=$1700;
   NR_I7=$1800;
+{Floating point}
+  NR_F0=$2000;
+  NR_F1=$2000;
+  NR_F2=$2000;
+  NR_F3=$2000;
+  NR_F4=$2000;
+  NR_F5=$2000;
+  NR_F6=$2000;
+  NR_F7=$2000;
+  NR_F8=$2000;
+  NR_F9=$2000;
+  NR_F10=$2000;
+  NR_F11=$2000;
+  NR_F12=$2000;
+  NR_F13=$2000;
+  NR_F14=$2000;
+  NR_F15=$2000;
+  NR_F16=$2000;
+  NR_F17=$2000;
+  NR_F18=$2000;
+  NR_F19=$2000;
+  NR_F20=$2000;
+  NR_F21=$2000;
+  NR_F22=$2000;
+  NR_F23=$2000;
+  NR_F24=$2000;
+  NR_F25=$2000;
+  NR_F26=$2000;
+  NR_F27=$2000;
+  NR_F28=$2000;
+  NR_F29=$2000;
+  NR_F30=$2000;
+  NR_F31=$2000;
+{Coprocessor point}
+  NR_C0=$3000;
+  NR_C1=$3000;
+  NR_C2=$3000;
+  NR_C3=$3000;
+  NR_C4=$3000;
+  NR_C5=$3000;
+  NR_C6=$3000;
+  NR_C7=$3000;
+  NR_C8=$3000;
+  NR_C9=$3000;
+  NR_C10=$3000;
+  NR_C11=$3000;
+  NR_C12=$3000;
+  NR_C13=$3000;
+  NR_C14=$3000;
+  NR_C15=$3000;
+  NR_C16=$3000;
+  NR_C17=$3000;
+  NR_C18=$3000;
+  NR_C19=$3000;
+  NR_C20=$3000;
+  NR_C21=$3000;
+  NR_C22=$3000;
+  NR_C23=$3000;
+  NR_C24=$3000;
+  NR_C25=$3000;
+  NR_C26=$3000;
+  NR_C27=$3000;
+  NR_C28=$3000;
+  NR_C29=$3000;
+  NR_C30=$3000;
+  NR_C31=$3000;
+{ASR}
+  NR_ASR0=$4000;
+  NR_ASR1=$4000;
+  NR_ASR2=$4000;
+  NR_ASR3=$4000;
+  NR_ASR4=$4000;
+  NR_ASR5=$4000;
+  NR_ASR6=$4000;
+  NR_ASR7=$4000;
+  NR_ASR8=$4000;
+  NR_ASR9=$4000;
+  NR_ASR10=$4000;
+  NR_ASR11=$4000;
+  NR_ASR12=$4000;
+  NR_ASR13=$4000;
+  NR_ASR14=$4000;
+  NR_ASR15=$4000;
+  NR_ASR16=$4000;
+  NR_ASR17=$4000;
+  NR_ASR18=$4000;
+  NR_ASR19=$4000;
+  NR_ASR20=$4000;
+  NR_ASR21=$4000;
+  NR_ASR22=$4000;
+  NR_ASR23=$4000;
+  NR_ASR24=$4000;
+  NR_ASR25=$4000;
+  NR_ASR26=$4000;
+  NR_ASR27=$4000;
+  NR_ASR28=$4000;
+  NR_ASR29=$4000;
+  NR_ASR30=$4000;
+  NR_ASR31=$4000;
+{Floating point status/"front of queue" registers}
+  NR_FSR=$5000;
+  NR_FQ=$50001;
+  NR_CSR=$5000;
+  NR_CQ=$5000;
+  NR_PSR=$5000;
+  NR_TBR=$5000;
+  NR_WIM=$5000;
+  NR_Y=$5000;
 
 {Superregisters.}
 
@@ -286,10 +395,11 @@ const
   R_SUBL=$00;
 
 type
-  reg2strtable=ARRAY[TOldRegister] OF STRING[7];
-
+  reg2strtable=ARRAY[TCpuRegister] OF STRING[7];
+  TCpuReg=array[TCpuRegister]of TRegister;
 const
   std_reg2str:reg2strtable=({$INCLUDE strregs.inc});
+  CpuReg:TCpuReg=({$INCLUDE registers.inc});
 {*****************************************************************************
                                    Flags
 *****************************************************************************}
@@ -469,7 +579,7 @@ const
   {# Register indexes for stabs information, when some parameters or variables
   are stored in registers.
   Taken from rs6000.h (DBX_REGISTER_NUMBER) from GCC 3.x source code.}
-  stab_regindex:ARRAY[TOldRegister]OF ShortInt=({$INCLUDE stabregi.inc});
+  stab_regindex:ARRAY[TCpuRegister]OF ShortInt=({$INCLUDE stabregi.inc});
 {*************************** generic register names **************************}
   stack_pointer_reg   = R_O6;
   NR_STACK_POINTER_REG = NR_O6;
@@ -568,7 +678,7 @@ VAR
 *****************************************************************************}
 const
   maxvarregs=30;
-  VarRegs:ARRAY[1..maxvarregs]OF ToldRegister=(
+  VarRegs:ARRAY[1..maxvarregs]OF TCpuRegister=(
              R_G0,R_G1,R_G2,R_G3,R_G4,R_G5,R_G6,R_G7,
              R_O0,R_O1,R_O2,R_O3,R_O4,R_O5,{R_R14=R_SP}R_O7,
              R_L0,R_L1,R_L2,R_L3,R_L4,R_L5,R_L6,R_L7,
@@ -663,7 +773,12 @@ END.
 
 {
   $Log$
-  Revision 1.28  2003-04-28 09:46:30  mazen
+  Revision 1.29  2003-04-29 12:03:52  mazen
+  * TOldRegister isnow just an alias for TCpuRegister
+  * TCpuRegister is used to define cpu register set physically available
+  + CpuRegs array to easially create correspondence between TCpuRegister and TRegister
+
+  Revision 1.28  2003/04/28 09:46:30  mazen
   + max_scratch_regs variable added because requested by common compiler code
 
   Revision 1.27  2003/04/23 13:35:39  peter
@@ -673,70 +788,4 @@ END.
     * fixed several issues with powerpc
     + applied a patch from Jonas for nested function calls (PowerPC only)
     * ...
-
-  Revision 1.25  2003/03/10 21:59:54  mazen
-  * fixing index overflow in handling new registers arrays.
-
-  Revision 1.24  2003/02/26 22:06:27  mazen
-  * FirstReg <-- R_G0 instead of Low(TOldRegister)=R_NONE
-  * LastReg <-- R_L7 instead of High(R_ASR31)=High(TOldRegister)
-  * FirstReg..LastReg rplaced by TOldRegister in several arrays declarions
-
-  Revision 1.23  2003/02/19 22:00:17  daniel
-    * Code generator converted to new register notation
-    - Horribily outdated todo.txt removed
-
-  Revision 1.22  2003/02/02 19:25:54  carl
-    * Several bugfixes for m68k target (register alloc., opcode emission)
-    + VIS target
-    + Generic add more complete (still not verified)
-
-  Revision 1.21  2003/01/20 22:21:36  mazen
-  * many stuff related to RTL fixed
-
-  Revision 1.20  2003/01/09 20:41:00  daniel
-    * Converted some code in cgx86.pas to new register numbering
-
-  Revision 1.19  2003/01/09 15:49:56  daniel
-    * Added register conversion
-
-  Revision 1.18  2003/01/08 18:43:58  daniel
-   * Tregister changed into a record
-
-  Revision 1.17  2003/01/05 20:39:53  mazen
-  * warnings about FreeTemp already free fixed with appropriate registers handling
-
-  Revision 1.16  2002/10/28 20:59:17  mazen
-  * TOpSize values changed S_L --> S_SW
-
-  Revision 1.15  2002/10/28 20:37:44  mazen
-  * TOpSize values changed S_L --> S_SW
-
-  Revision 1.14  2002/10/20 19:01:38  mazen
-  + op_raddr_reg and op_caddr_reg added to fix functions prologue
-
-  Revision 1.13  2002/10/19 20:35:07  mazen
-  * carl's patch applied
-
-  Revision 1.12  2002/10/11 13:35:14  mazen
-  *** empty log message ***
-
-  Revision 1.11  2002/10/10 19:57:51  mazen
-  * Just to update repsitory
-
-  Revision 1.10  2002/10/02 22:20:28  mazen
-  + out registers allocator for the first 6 scalar parameters which must be passed into %o0..%o5
-
-  Revision 1.9  2002/10/01 21:06:29  mazen
-  attinst.inc --> strinst.inc
-
-  Revision 1.8  2002/09/30 19:12:14  mazen
-  * function prologue fixed
-
-  Revision 1.7  2002/09/27 04:30:53  mazen
-  * cleanup made
-
-  Revision 1.6  2002/09/24 03:57:53  mazen
-  * some cleanup  was made
-
 }