Просмотр исходного кода

* rg.[un]GetRegister* ==> [Un]Get[*]Register

mazen 22 лет назад
Родитель
Сommit
301f8978ae
1 измененных файлов с 46 добавлено и 87 удалено
  1. 46 87
      compiler/sparc/cgcpu.pas

+ 46 - 87
compiler/sparc/cgcpu.pas

@@ -30,11 +30,14 @@ interface
        cgbase,cgobj,cg64f32,
        aasmbase,aasmtai,aasmcpu,
        cpubase,cpuinfo,
-       node,symconst,SymType;
+       node,symconst,SymType,
+       RgCpu;
 
     type
       TCgSparc=class(tcg)
       protected
+        rgint,
+        rgfpu : trgcpu;
         function IsSimpleRef(const ref:treference):boolean;
      public
         procedure init_register_allocators;override;
@@ -48,8 +51,6 @@ interface
         procedure a_paramaddr_ref(list:TAasmOutput;const r:TReference;const LocPara:TParaLocation);override;
         procedure a_paramfpu_reg(list : taasmoutput;size : tcgsize;const r : tregister;const locpara : tparalocation);override;
         procedure a_paramfpu_ref(list : taasmoutput;size : tcgsize;const ref : treference;const locpara : tparalocation);override;
-        procedure a_load_param_ref(list : taasmoutput;const locpara : tparalocation;const ref:treference);override;
-        procedure a_load_param_reg(list : taasmoutput;const locpara : tparalocation;const reg:tregister);override;
         procedure a_call_name(list:TAasmOutput;const s:string);override;
         procedure a_call_reg(list:TAasmOutput;Reg:TRegister);override;
         { General purpose instructions }
@@ -79,10 +80,10 @@ interface
         procedure g_stackframe_entry(list:TAasmOutput;localsize:LongInt);override;
         procedure g_restore_all_registers(list:TAasmOutput;accused,acchiused:boolean);override;
         procedure g_restore_frame_pointer(list:TAasmOutput);override;
-        procedure g_restore_standard_registers(list:taasmoutput;usedinproc:Tsuperregisterset);override;
+        procedure g_restore_standard_registers(list:taasmoutput);override;
         procedure g_return_from_proc(list:TAasmOutput;parasize:aword);override;
         procedure g_save_all_registers(list : taasmoutput);override;
-        procedure g_save_standard_registers(list : taasmoutput; usedinproc : Tsuperregisterset);override;
+        procedure g_save_standard_registers(list : taasmoutput);override;
         procedure g_concatcopy(list:TAasmOutput;const source,dest:TReference;len:aword;delsource,loadref:boolean);override;
         class function reg_cgsize(const reg:tregister):tcgsize;override;
       end;
@@ -107,7 +108,7 @@ implementation
   uses
     globtype,globals,verbose,systems,cutils,
     symdef,symsym,defutil,paramgr,
-    rgobj,tgobj,rgcpu,cpupi;
+    rgobj,tgobj,cpupi;
 
 
 {****************************************************************************
@@ -144,7 +145,7 @@ implementation
            (ref.offset<simm13lo) or
            (ref.offset>simm13hi) then
           begin
-            tmpreg:=rg.getregisterint(list,OS_INT);
+            tmpreg:=GetIntRegister(list,OS_INT);
             reference_reset(tmpref);
             tmpref.symbol:=ref.symbol;
             tmpref.offset:=ref.offset;
@@ -180,7 +181,7 @@ implementation
                ((ref.offset<>0) or assigned(ref.symbol)) then
               begin
                 if tmpreg=NR_NO then
-                  tmpreg:=rg.getregisterint(list,OS_INT);
+                  tmpreg:=GetIntRegister(list,OS_INT);
                 if (ref.index<>NR_NO) then
                   begin
                     list.concat(taicpu.op_reg_reg_reg(A_ADD,ref.base,ref.index,tmpreg));
@@ -193,7 +194,7 @@ implementation
         else
           list.concat(taicpu.op_ref_reg(op,ref,reg));
         if (tmpreg<>NR_NO) then
-          rg.ungetregisterint(list,tmpreg);
+          UnGetRegister(list,tmpreg);
       end;
 
 
@@ -204,11 +205,11 @@ implementation
         if (longint(a)<simm13lo) or
            (longint(a)>simm13hi) then
           begin
-            tmpreg:=rg.getregisterint(list,OS_INT);
+            tmpreg:=GetIntRegister(list,OS_INT);
             list.concat(taicpu.op_const_reg(A_SETHI,a shr 10,tmpreg));
             list.concat(taicpu.op_reg_const_reg(A_OR,tmpreg,a and aword($3ff),tmpreg));
             list.concat(taicpu.op_reg_reg_reg(op,src,tmpreg,dst));
-            rg.ungetregisterint(list,tmpreg);
+            UnGetRegister(list,tmpreg);
           end
         else
           list.concat(taicpu.op_reg_const_reg(op,src,a,dst));
@@ -221,16 +222,20 @@ implementation
 
     procedure Tcgsparc.init_register_allocators;
       begin
-        rg:=Trgcpu.create(15,chr(RS_O0)+chr(RS_O1)+chr(RS_O2)+chr(RS_O3)+
+        {rg:=Trgcpu.create(15,chr(RS_O0)+chr(RS_O1)+chr(RS_O2)+chr(RS_O3)+
                              chr(RS_O4)+chr(RS_O5)+chr(RS_O7)+
                              chr(RS_L0)+chr(RS_L1)+chr(RS_L2)+chr(RS_L3)+
-                             chr(RS_L4)+chr(RS_L5)+chr(RS_L6)+chr(RS_L7));
+                             chr(RS_L4)+chr(RS_L5)+chr(RS_L6)+chr(RS_L7));}
+        rgint:=TrgCpu.create(R_INTREGISTER,R_SUBWHOLE,[RS_O0,RS_O1,RS_O2,RS_O3,RS_O4,RS_O5,RS_O7,RS_L0,RS_L1,RS_L2,RS_L3,RS_L4,RS_L5,RS_L6,RS_L7],first_int_imreg,[]);
+        {$warning FIX ME}
+        rgfpu:=trgcpu.create(R_FPUREGISTER,R_SUBNONE,
+            [RS_F0,RS_F1,RS_F2,RS_F3,RS_F4,RS_F5,RS_F6,RS_F7,RS_F8,RS_F9,RS_F10,RS_F11,RS_F12,RS_F13,RS_F14,RS_F15,RS_F16,RS_F17,RS_F18,RS_F19,RS_F20,RS_F21,RS_F22,RS_F23,RS_F24,RS_F25,RS_F26,RS_F27,RS_F28,RS_F29,RS_F30,RS_F31],first_fpu_imreg,[]);
       end;
 
 
     procedure Tcgsparc.done_register_allocators;
       begin
-        rg.free;
+        rgint.free;
       end;
 
 
@@ -276,10 +281,10 @@ implementation
                 if locpara.reference.offset<92 then
                   InternalError(2002081104);
                 reference_reset_base(ref,locpara.reference.index,locpara.reference.offset);
-                tmpreg:=rg.getregisterint(list,OS_INT);
+                tmpreg:=GetIntRegister(list,OS_INT);
                 a_load_ref_reg(list,sz,sz,r,tmpreg);
                 a_load_reg_ref(list,sz,sz,tmpreg,ref);
-                rg.ungetregisterint(list,tmpreg);
+                UnGetRegister(list,tmpreg);
               end;
             else
               internalerror(2002081103);
@@ -300,10 +305,10 @@ implementation
               reference_reset(ref);
               ref.base := locpara.reference.index;
               ref.offset := locpara.reference.offset;
-              tmpreg:=rg.getaddressregister(list);
+              tmpreg:=GetAddressRegister(list);
               a_loadaddr_ref_reg(list,r,tmpreg);
               a_load_reg_ref(list,OS_ADDR,OS_ADDR,tmpreg,ref);
-              rg.ungetregisterint(list,tmpreg);
+              UnGetRegister(list,tmpreg);
             end;
           else
             internalerror(2002080701);
@@ -345,55 +350,6 @@ implementation
       end;
 
 
-    procedure tcgsparc.a_load_param_ref(list : taasmoutput;const locpara : tparalocation;const ref:treference);
-      var
-        href,
-        tempref : treference;
-        templocpara : tparalocation;
-      begin
-        { Load floats like ints }
-        templocpara:=locpara;
-        case locpara.size of
-          OS_F32 :
-            templocpara.size:=OS_32;
-          OS_F64 :
-            templocpara.size:=OS_64;
-        end;
-        { Word 0 is in register, word 1 is in reference }
-        if (templocpara.loc=LOC_REFERENCE) and (templocpara.low_in_reg) then
-          begin
-            tempref:=ref;
-            cg.a_load_reg_ref(list,OS_INT,OS_INT,templocpara.register,tempref);
-            inc(tempref.offset,4);
-            reference_reset_base(href,templocpara.reference.index,templocpara.reference.offset);
-            cg.a_load_ref_ref(list,OS_INT,OS_INT,href,tempref);
-          end
-        else
-          inherited a_load_param_ref(list,templocpara,ref);
-      end;
-
-
-    procedure tcgsparc.a_load_param_reg(list : taasmoutput;const locpara : tparalocation;const reg:tregister);
-      var
-        href : treference;
-      begin
-        { Word 0 is in register, word 1 is in reference, not
-          possible to load it in 1 register }
-        if (locpara.loc=LOC_REFERENCE) and (locpara.low_in_reg) then
-          internalerror(200307011);
-        { Float load use a temp reference }
-        if locpara.size in [OS_F32,OS_F64] then
-          begin
-            tg.GetTemp(list,TCGSize2Size[locpara.size],tt_normal,href);
-            a_load_param_ref(list,locpara,href);
-            a_loadfpu_ref_reg(list,locpara.size,href,reg);
-            tg.Ungettemp(list,href);
-          end
-        else
-          inherited a_load_param_reg(list,locpara,reg);
-      end;
-
-
     procedure TCgSparc.a_call_name(list:TAasmOutput;const s:string);
       begin
         list.concat(taicpu.op_sym(A_CALL,objectlibrary.newasmsymbol(s)));
@@ -527,7 +483,7 @@ implementation
             if (ref.base<>r) and (ref.index<>r) then
               hreg:=r
             else
-              hreg:=rg.getaddressregister(list);
+              hreg:=GetAddressRegister(list);
             reference_reset(tmpref);
             tmpref.symbol := ref.symbol;
             tmpref.offset := ref.offset;
@@ -552,7 +508,7 @@ implementation
                   list.Concat(taicpu.op_reg_reg(A_MOV,hreg,r));
               end;
             if hreg<>r then
-              rg.ungetaddressregister(list,hreg);
+              UnGetRegister(list,hreg);
           end
         else
         { At least small offset, maybe base and maybe index }
@@ -565,11 +521,11 @@ implementation
                       if (ref.base<>r) and (ref.index<>r) then
                         hreg:=r
                       else
-                        hreg:=rg.getaddressregister(list);
+                        hreg:=GetAddressRegister(list);
                       list.concat(taicpu.op_reg_const_reg(A_ADD,ref.base,aword(ref.offset),hreg));
                       list.concat(taicpu.op_reg_reg_reg(A_ADD,hreg,ref.index,r));
                       if hreg<>r then
-                        rg.ungetaddressregister(list,hreg);
+                        UnGetRegister(list,hreg);
                     end
                   else
                     list.concat(taicpu.op_reg_const_reg(A_ADD,ref.base,aword(ref.offset),r));
@@ -815,7 +771,7 @@ implementation
       end;
 
 
-    procedure TCgSparc.g_restore_standard_registers(list:taasmoutput;usedinproc:Tsuperregisterset);
+    procedure TCgSparc.g_restore_standard_registers(list:taasmoutput);
       begin
         { The sparc port uses the sparc standard calling convetions so this function has no used }
       end;
@@ -847,7 +803,7 @@ implementation
       end;
 
 
-    procedure TCgSparc.g_save_standard_registers(list : taasmoutput; usedinproc:Tsuperregisterset);
+    procedure TCgSparc.g_save_standard_registers(list : taasmoutput);
       begin
         { The sparc port uses the sparc standard calling convetions so this function has no used }
       end;
@@ -894,7 +850,7 @@ implementation
         { load the address of source into src.base }
         if loadref then
           begin
-            src.base:=rg.getaddressregister(list);
+            src.base:=GetAddressRegister(list);
             a_load_ref_reg(list,OS_32,OS_32,source,src.base);
             orgsrc := false;
           end
@@ -906,7 +862,7 @@ implementation
                ((source.offset+longint(len))<simm13lo))
             ) then
            begin
-             src.base:=rg.getaddressregister(list);
+             src.base:=GetAddressRegister(list);
              a_loadaddr_ref_reg(list,source,src.base);
              orgsrc := false;
            end
@@ -925,7 +881,7 @@ implementation
              ((dest.offset + longint(len)) < simm13lo))
            ) then
           begin
-            dst.base:=rg.getaddressregister(list);
+            dst.base:=GetAddressRegister(list);
             a_loadaddr_ref_reg(list,dest,dst.base);
             orgdst := false;
           end
@@ -946,7 +902,7 @@ implementation
             inc(src.offset,8);
             list.concat(taicpu.op_reg_const_reg(A_SUB,src.base,8,src.base));
             list.concat(taicpu.op_reg_const_reg(A_SUB,dst.base,8,dst.base));
-            countreg:=rg.getregisterint(list,OS_INT);
+            countreg:=GetIntRegister(list,OS_INT);
             a_load_const_reg(list,OS_INT,count,countreg);
             { explicitely allocate R_O0 since it can be used safely here }
             { (for holding date that's being copied)                    }
@@ -957,7 +913,7 @@ implementation
             list.concat(taicpu.op_ref_reg(A_LDF,src,NR_F0));
             list.concat(taicpu.op_reg_ref(A_STD,NR_F0,dst));
             //a_jmp(list,A_BC,C_NE,0,lab);
-            rg.ungetregisterint(list,countreg);
+            UnGetRegister(list,countreg);
             a_reg_dealloc(list,NR_F0);
             len := len mod 8;
           end;
@@ -978,29 +934,29 @@ implementation
           end;
         if (len and 4) <> 0 then
           begin
-            hreg:=rg.getregisterint(list,OS_INT);
+            hreg:=GetIntRegister(list,OS_INT);
             a_load_ref_reg(list,OS_32,OS_32,src,hreg);
             a_load_reg_ref(list,OS_32,OS_32,hreg,dst);
             inc(src.offset,4);
             inc(dst.offset,4);
-            rg.ungetregisterint(list,hreg);
+            UnGetRegister(list,hreg);
           end;
         { copy the leftovers }
         if (len and 2) <> 0 then
           begin
-            hreg:=rg.getregisterint(list,OS_INT);
+            hreg:=GetIntRegister(list,OS_INT);
             a_load_ref_reg(list,OS_16,OS_16,src,hreg);
             a_load_reg_ref(list,OS_16,OS_16,hreg,dst);
             inc(src.offset,2);
             inc(dst.offset,2);
-            rg.ungetregisterint(list,hreg);
+            UnGetRegister(list,hreg);
           end;
         if (len and 1) <> 0 then
           begin
-            hreg:=rg.getregisterint(list,OS_INT);
+            hreg:=GetIntRegister(list,OS_INT);
             a_load_ref_reg(list,OS_8,OS_8,src,hreg);
             a_load_reg_ref(list,OS_8,OS_8,hreg,dst);
-            rg.ungetregisterint(list,hreg);
+            UnGetRegister(list,hreg);
           end;
         if orgsrc then
           begin
@@ -1008,9 +964,9 @@ implementation
               reference_release(list,source);
           end
         else
-          rg.ungetregisterint(list,src.base);
+          UnGetRegister(list,src.base);
         if not orgdst then
-          rg.ungetregisterint(list,dst.base);
+          UnGetRegister(list,dst.base);
       end;
 
 {****************************************************************************
@@ -1096,7 +1052,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.69  2003-10-01 20:34:49  peter
+  Revision 1.70  2003-10-24 11:14:46  mazen
+  * rg.[un]GetRegister* ==> [Un]Get[*]Register
+
+  Revision 1.69  2003/10/01 20:34:49  peter
     * procinfo unit contains tprocinfo
     * cginfo renamed to cgbase
     * moved cgmessage to verbose