瀏覽代碼

* Added register conversion

daniel 22 年之前
父節點
當前提交
6e507ba483
共有 7 個文件被更改,包括 96 次插入10 次删除
  1. 31 1
      compiler/aasmtai.pas
  2. 9 1
      compiler/i386/cpubase.pas
  3. 12 2
      compiler/m68k/cpubase.pas
  4. 7 1
      compiler/pass_2.pas
  5. 12 2
      compiler/powerpc/cpubase.pas
  6. 5 2
      compiler/psub.pas
  7. 20 1
      compiler/sparc/cpubase.pas

+ 31 - 1
compiler/aasmtai.pas

@@ -451,6 +451,7 @@ interface
 
        taasmoutput = class(tlinkedlist)
           function getlasttaifilepos : pfileposinfo;
+          procedure convert_registers;
        end;
 
 
@@ -1709,11 +1710,40 @@ uses
                end;
            end;
       end;
+      
+    procedure Taasmoutput.convert_registers;
+    
+    var p:Tai;
+        i:shortint;
+    
+    begin
+      p:=Tai(first);
+      while assigned(p) do
+        begin
+          case p.typ of
+            ait_regalloc:
+              convert_register_to_enum(Tai_regalloc(p).reg);
+            ait_instruction:
+              begin
+                for i:=0 to Taicpu_abstract(p).ops-1 do
+                  if Taicpu_abstract(p).oper[i].typ=Top_reg then
+                    convert_register_to_enum(Taicpu_abstract(p).oper[i].reg);
+              {$ifdef i386}
+                convert_register_to_enum(Taicpu_abstract(p).segprefix);
+              {$endif}
+              end;
+          end;
+          p:=Tai(p.next);
+        end;
+    end;
 
 end.
 {
   $Log$
-  Revision 1.16  2003-01-08 18:43:56  daniel
+  Revision 1.17  2003-01-09 15:49:56  daniel
+    * Added register conversion
+
+  Revision 1.16  2003/01/08 18:43:56  daniel
    * Tregister changed into a record
 
   Revision 1.15  2003/01/05 13:36:53  florian

+ 9 - 1
compiler/i386/cpubase.pas

@@ -635,6 +635,8 @@ uses
                                   Helpers
 *****************************************************************************}
 
+    procedure convert_register_to_enum(var r:Tregister);
+
     function is_calljmp(o:tasmop):boolean;
 
     function flags_to_cond(const f: TResFlags) : TAsmCond;
@@ -666,6 +668,9 @@ implementation
           NR_CL:  r.enum:=R_CL;         NR_DL:  r.enum:=R_DL;
           NR_AH:  r.enum:=R_AH;         NR_BH:  r.enum:=R_BH;
           NR_CH:  r.enum:=R_CH;         NR_DH:  r.enum:=R_DH;
+          NR_CS:  r.enum:=R_CS;         NR_DS:  r.enum:=R_DS;
+          NR_ES:  r.enum:=R_ES;         NR_FS:  r.enum:=R_FS;
+          NR_GS:  r.enum:=R_GS;         NR_SS:  r.enum:=R_SS;
         else
           internalerror(200301082);
         end;
@@ -703,7 +708,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.37  2003-01-08 22:32:36  daniel
+  Revision 1.38  2003-01-09 15:49:56  daniel
+    * Added register conversion
+
+  Revision 1.37  2003/01/08 22:32:36  daniel
     * Added register convesrion procedure
 
   Revision 1.36  2003/01/08 18:43:57  daniel

+ 12 - 2
compiler/m68k/cpubase.pas

@@ -546,7 +546,7 @@ uses
 
     procedure inverse_flags(var r : TResFlags);
     function  flags_to_cond(const f: TResFlags) : TAsmCond;
-
+    procedure convert_register_to_enum(var r:Tregister);
 
 implementation
 
@@ -597,10 +597,20 @@ implementation
         flags_to_cond := flags2cond[f];
       end;
 
+    procedure convert_register_to_enum(var r:Tregister);
+
+    begin
+      {$warning Convert_register_to_enum implementation is missing!}
+      internalerror(200301082);
+    end;
+
 end.
 {
   $Log$
-  Revision 1.15  2003-01-08 18:43:57  daniel
+  Revision 1.16  2003-01-09 15:49:56  daniel
+    * Added register conversion
+
+  Revision 1.15  2003/01/08 18:43:57  daniel
    * Tregister changed into a record
 
   Revision 1.14  2002/11/30 23:33:03  carl

+ 7 - 1
compiler/pass_2.pas

@@ -326,13 +326,19 @@ implementation
                 procinfo.procdef.fpu_used:=p.registersfpu;
 
            end;
+      {$ifdef i386}
+         exprasmlist.convert_registers;
+      {$endif}
          procinfo.aktproccode.concatlist(exprasmlist);
       end;
 
 end.
 {
   $Log$
-  Revision 1.41  2002-12-22 14:35:39  peter
+  Revision 1.42  2003-01-09 15:49:56  daniel
+    * Added register conversion
+
+  Revision 1.41  2002/12/22 14:35:39  peter
     * removed Writeln
 
   Revision 1.40  2002/12/21 23:21:47  mazen

+ 12 - 2
compiler/powerpc/cpubase.pas

@@ -671,7 +671,7 @@ uses
     function  flags_to_cond(const f: TResFlags) : TAsmCond;
     procedure create_cond_imm(BO,BI:byte;var r : TAsmCond);
     procedure create_cond_norm(cond: TAsmCondFlag; cr: byte;var r : TasmCond);
-
+    procedure convert_register_to_enum(var r:Tregister);
 
 implementation
 
@@ -745,10 +745,20 @@ implementation
         end;
       end;
 
+    procedure convert_register_to_enum(var r:Tregister);
+
+    begin
+      {$warning Convert_register_to_enum implementation is missing!}
+      internalerror(200301082);
+    end;
+
 end.
 {
   $Log$
-  Revision 1.39  2003-01-08 18:43:58  daniel
+  Revision 1.40  2003-01-09 15:49:56  daniel
+    * Added register conversion
+
+  Revision 1.39  2003/01/08 18:43:58  daniel
    * Tregister changed into a record
 
   Revision 1.38  2002/11/25 17:43:27  peter

+ 5 - 2
compiler/psub.pas

@@ -365,7 +365,7 @@ implementation
                 if (cs_optimize in aktglobalswitches) and
                 { do not optimize pure assembler procedures }
                    ((procinfo.flags and pi_is_assembler)=0)  then
-                  Optimize(procinfo.aktproccode);
+                  optimize(procinfo.aktproccode);
 {$endif NoOpt}
                 { save local data (casetable) also in the same file }
                 if assigned(procinfo.aktlocaldata) and
@@ -844,7 +844,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.88  2003-01-08 18:43:56  daniel
+  Revision 1.89  2003-01-09 15:49:56  daniel
+    * Added register conversion
+
+  Revision 1.88  2003/01/08 18:43:56  daniel
    * Tregister changed into a record
 
   Revision 1.87  2003/01/03 20:35:08  peter

+ 20 - 1
compiler/sparc/cpubase.pas

@@ -510,7 +510,12 @@ const
 
 FUNCTION is_calljmp(o:tasmop):boolean;
 FUNCTION flags_to_cond(CONST f:TResFlags):TAsmCond;
+procedure convert_register_to_enum(var r:Tregister);
+
 IMPLEMENTATION
+
+uses  verbose;
+
 const
   CallJmpOp=[A_JMPL..A_CBccc];
 function is_calljmp(o:tasmop):boolean;
@@ -528,10 +533,24 @@ function flags_to_cond(const f:TResFlags):TAsmCond;
   BEGIN
     result:=flags_2_cond[f];
   END;
+
+procedure convert_register_to_enum(var r:Tregister);
+
+begin
+    {$warning Convert_register_to_enum implementation is missing!}
+    internalerror(200301082);
+end;
+
 END.
+
+
+
 {
   $Log$
-  Revision 1.18  2003-01-08 18:43:58  daniel
+  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