浏览代码

* Converted some code in cgx86.pas to new register numbering

daniel 22 年之前
父节点
当前提交
7b2fd10fb4
共有 7 个文件被更改,包括 107 次插入97 次删除
  1. 15 2
      compiler/aasmtai.pas
  2. 4 35
      compiler/i386/aasmcpu.pas
  3. 7 1
      compiler/i386/cpubase.pas
  4. 4 4
      compiler/pass_2.pas
  5. 7 1
      compiler/psub.pas
  6. 5 1
      compiler/sparc/cpubase.pas
  7. 65 53
      compiler/x86/cgx86.pas

+ 15 - 2
compiler/aasmtai.pas

@@ -1715,6 +1715,7 @@ uses
     
     
     var p:Tai;
     var p:Tai;
         i:shortint;
         i:shortint;
+        r:Preference;
     
     
     begin
     begin
       p:=Tai(first);
       p:=Tai(first);
@@ -1727,7 +1728,16 @@ uses
               begin
               begin
                 for i:=0 to Taicpu_abstract(p).ops-1 do
                 for i:=0 to Taicpu_abstract(p).ops-1 do
                   if Taicpu_abstract(p).oper[i].typ=Top_reg then
                   if Taicpu_abstract(p).oper[i].typ=Top_reg then
-                    convert_register_to_enum(Taicpu_abstract(p).oper[i].reg);
+                    convert_register_to_enum(Taicpu_abstract(p).oper[i].reg)
+                  else if Taicpu_abstract(p).oper[i].typ=Top_ref then
+                    begin
+                      r:=Taicpu_abstract(p).oper[i].ref;
+                   {$ifdef i386}
+                      convert_register_to_enum(r^.segment);
+                   {$endif i386}
+                      convert_register_to_enum(r^.base);
+                      convert_register_to_enum(r^.index);
+                    end;
               {$ifdef i386}
               {$ifdef i386}
                 convert_register_to_enum(Taicpu_abstract(p).segprefix);
                 convert_register_to_enum(Taicpu_abstract(p).segprefix);
               {$endif}
               {$endif}
@@ -1740,7 +1750,10 @@ uses
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.17  2003-01-09 15:49:56  daniel
+  Revision 1.18  2003-01-09 20:40:59  daniel
+    * Converted some code in cgx86.pas to new register numbering
+
+  Revision 1.17  2003/01/09 15:49:56  daniel
     * Added register conversion
     * Added register conversion
 
 
   Revision 1.16  2003/01/08 18:43:56  daniel
   Revision 1.16  2003/01/08 18:43:56  daniel

+ 4 - 35
compiler/i386/aasmcpu.pas

@@ -395,8 +395,6 @@ implementation
          inherited create(op);
          inherited create(op);
          init(_size);
          init(_size);
          ops:=1;
          ops:=1;
-         if _op1.enum>lastreg then
-           internalerror(200301081);
          loadreg(0,_op1);
          loadreg(0,_op1);
       end;
       end;
 
 
@@ -424,10 +422,6 @@ implementation
          inherited create(op);
          inherited create(op);
          init(_size);
          init(_size);
          ops:=2;
          ops:=2;
-         if _op1.enum>lastreg then
-           internalerror(200301081);
-         if _op2.enum>lastreg then
-           internalerror(200301081);
          loadreg(0,_op1);
          loadreg(0,_op1);
          loadreg(1,_op2);
          loadreg(1,_op2);
       end;
       end;
@@ -438,8 +432,6 @@ implementation
          inherited create(op);
          inherited create(op);
          init(_size);
          init(_size);
          ops:=2;
          ops:=2;
-         if _op1.enum>lastreg then
-           internalerror(200301081);
          loadreg(0,_op1);
          loadreg(0,_op1);
          loadconst(1,_op2);
          loadconst(1,_op2);
       end;
       end;
@@ -450,8 +442,6 @@ implementation
          inherited create(op);
          inherited create(op);
          init(_size);
          init(_size);
          ops:=2;
          ops:=2;
-         if _op1.enum>lastreg then
-           internalerror(200301081);
          loadreg(0,_op1);
          loadreg(0,_op1);
          loadref(1,_op2);
          loadref(1,_op2);
       end;
       end;
@@ -462,8 +452,6 @@ implementation
          inherited create(op);
          inherited create(op);
          init(_size);
          init(_size);
          ops:=2;
          ops:=2;
-         if _op2.enum>lastreg then
-           internalerror(200301081);
          loadconst(0,_op1);
          loadconst(0,_op1);
          loadreg(1,_op2);
          loadreg(1,_op2);
       end;
       end;
@@ -494,8 +482,6 @@ implementation
          inherited create(op);
          inherited create(op);
          init(_size);
          init(_size);
          ops:=2;
          ops:=2;
-         if _op2.enum>lastreg then
-           internalerror(200301081);
          loadref(0,_op1);
          loadref(0,_op1);
          loadreg(1,_op2);
          loadreg(1,_op2);
       end;
       end;
@@ -506,12 +492,6 @@ implementation
          inherited create(op);
          inherited create(op);
          init(_size);
          init(_size);
          ops:=3;
          ops:=3;
-         if _op1.enum>lastreg then
-           internalerror(200301081);
-         if _op2.enum>lastreg then
-           internalerror(200301081);
-         if _op3.enum>lastreg then
-           internalerror(200301081);
          loadreg(0,_op1);
          loadreg(0,_op1);
          loadreg(1,_op2);
          loadreg(1,_op2);
          loadreg(2,_op3);
          loadreg(2,_op3);
@@ -523,10 +503,6 @@ implementation
          inherited create(op);
          inherited create(op);
          init(_size);
          init(_size);
          ops:=3;
          ops:=3;
-         if _op2.enum>lastreg then
-           internalerror(200301081);
-         if _op3.enum>lastreg then
-           internalerror(200301081);
          loadconst(0,_op1);
          loadconst(0,_op1);
          loadreg(1,_op2);
          loadreg(1,_op2);
          loadreg(2,_op3);
          loadreg(2,_op3);
@@ -538,10 +514,6 @@ implementation
          inherited create(op);
          inherited create(op);
          init(_size);
          init(_size);
          ops:=3;
          ops:=3;
-         if _op1.enum>lastreg then
-           internalerror(200301081);
-         if _op2.enum>lastreg then
-           internalerror(200301081);
          loadreg(0,_op1);
          loadreg(0,_op1);
          loadreg(1,_op2);
          loadreg(1,_op2);
          loadref(2,_op3);
          loadref(2,_op3);
@@ -555,8 +527,6 @@ implementation
          ops:=3;
          ops:=3;
          loadconst(0,_op1);
          loadconst(0,_op1);
          loadref(1,_op2);
          loadref(1,_op2);
-         if _op3.enum>lastreg then
-           internalerror(200301081);
          loadreg(2,_op3);
          loadreg(2,_op3);
       end;
       end;
 
 
@@ -567,8 +537,6 @@ implementation
          init(_size);
          init(_size);
          ops:=3;
          ops:=3;
          loadconst(0,_op1);
          loadconst(0,_op1);
-         if _op2.enum>lastreg then
-           internalerror(200301081);
          loadreg(1,_op2);
          loadreg(1,_op2);
          loadref(2,_op3);
          loadref(2,_op3);
       end;
       end;
@@ -608,8 +576,6 @@ implementation
          init(_size);
          init(_size);
          ops:=2;
          ops:=2;
          loadsymbol(0,_op1,_op1ofs);
          loadsymbol(0,_op1,_op1ofs);
-         if _op2.enum>lastreg then
-           internalerror(200301081);
          loadreg(1,_op2);
          loadreg(1,_op2);
       end;
       end;
 
 
@@ -1930,7 +1896,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.10  2003-01-08 18:43:57  daniel
+  Revision 1.11  2003-01-09 20:40:59  daniel
+    * Converted some code in cgx86.pas to new register numbering
+
+  Revision 1.10  2003/01/08 18:43:57  daniel
    * Tregister changed into a record
    * Tregister changed into a record
 
 
   Revision 1.9  2003/01/05 13:36:53  florian
   Revision 1.9  2003/01/05 13:36:53  florian

+ 7 - 1
compiler/i386/cpubase.pas

@@ -279,6 +279,9 @@ uses
         S_D,S_D,S_D,S_D,S_D,S_D,S_D,S_D,
         S_D,S_D,S_D,S_D,S_D,S_D,S_D,S_D,
         S_D,S_D,S_D,S_D,S_D,S_D,S_D,S_D
         S_D,S_D,S_D,S_D,S_D,S_D,S_D,S_D
       );
       );
+      
+      {Converts subregister number to opsize}
+      subreg2opsize:array[0..4] of Topsize = (S_B,S_B,S_W,S_L,S_D);
 
 
       {# Standard opcode string table (for each tasmop enumeration). The
       {# Standard opcode string table (for each tasmop enumeration). The
          opcode strings should conform to the names as defined by the
          opcode strings should conform to the names as defined by the
@@ -708,7 +711,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.38  2003-01-09 15:49:56  daniel
+  Revision 1.39  2003-01-09 20:41:00  daniel
+    * Converted some code in cgx86.pas to new register numbering
+
+  Revision 1.38  2003/01/09 15:49:56  daniel
     * Added register conversion
     * Added register conversion
 
 
   Revision 1.37  2003/01/08 22:32:36  daniel
   Revision 1.37  2003/01/08 22:32:36  daniel

+ 4 - 4
compiler/pass_2.pas

@@ -326,16 +326,16 @@ implementation
                 procinfo.procdef.fpu_used:=p.registersfpu;
                 procinfo.procdef.fpu_used:=p.registersfpu;
 
 
            end;
            end;
-      {$ifdef i386}
-         exprasmlist.convert_registers;
-      {$endif}
          procinfo.aktproccode.concatlist(exprasmlist);
          procinfo.aktproccode.concatlist(exprasmlist);
       end;
       end;
 
 
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.42  2003-01-09 15:49:56  daniel
+  Revision 1.43  2003-01-09 20:40:59  daniel
+    * Converted some code in cgx86.pas to new register numbering
+
+  Revision 1.42  2003/01/09 15:49:56  daniel
     * Added register conversion
     * Added register conversion
 
 
   Revision 1.41  2002/12/22 14:35:39  peter
   Revision 1.41  2002/12/22 14:35:39  peter

+ 7 - 1
compiler/psub.pas

@@ -361,6 +361,9 @@ implementation
                 aktprocdef.usedregisters:=rg.usedinproc;
                 aktprocdef.usedregisters:=rg.usedinproc;
                 procinfo.aktproccode.insertlist(procinfo.aktentrycode);
                 procinfo.aktproccode.insertlist(procinfo.aktentrycode);
                 procinfo.aktproccode.concatlist(procinfo.aktexitcode);
                 procinfo.aktproccode.concatlist(procinfo.aktexitcode);
+{$ifdef i386}
+                procinfo.aktproccode.convert_registers;
+{$endif}                
 {$ifndef NoOpt}
 {$ifndef NoOpt}
                 if (cs_optimize in aktglobalswitches) and
                 if (cs_optimize in aktglobalswitches) and
                 { do not optimize pure assembler procedures }
                 { do not optimize pure assembler procedures }
@@ -844,7 +847,10 @@ implementation
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.89  2003-01-09 15:49:56  daniel
+  Revision 1.90  2003-01-09 20:40:59  daniel
+    * Converted some code in cgx86.pas to new register numbering
+
+  Revision 1.89  2003/01/09 15:49:56  daniel
     * Added register conversion
     * Added register conversion
 
 
   Revision 1.88  2003/01/08 18:43:56  daniel
   Revision 1.88  2003/01/08 18:43:56  daniel

+ 5 - 1
compiler/sparc/cpubase.pas

@@ -238,6 +238,7 @@ TYPE
 
 
   { immediate/reference record }
   { immediate/reference record }
   poperreference = ^treference;
   poperreference = ^treference;
+  Preference=^Treference;
   treference = packed record
   treference = packed record
      segment,
      segment,
      base,
      base,
@@ -547,7 +548,10 @@ END.
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.19  2003-01-09 15:49:56  daniel
+  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
     * Added register conversion
 
 
   Revision 1.18  2003/01/08 18:43:58  daniel
   Revision 1.18  2003/01/08 18:43:58  daniel

+ 65 - 53
compiler/x86/cgx86.pas

@@ -301,7 +301,7 @@ unit cgx86;
         regsize_2_cgsize: array[S_B..S_L] of tcgsize = (OS_8,OS_16,OS_32);
         regsize_2_cgsize: array[S_B..S_L] of tcgsize = (OS_8,OS_16,OS_32);
       begin
       begin
         if reg.enum>lastreg then
         if reg.enum>lastreg then
-          internalerror(200201081);
+          internalerror(200301081);
         result := regsize_2_cgsize[reg2opsize[reg.enum]];
         result := regsize_2_cgsize[reg2opsize[reg.enum]];
       end;
       end;
 
 
@@ -388,9 +388,9 @@ unit cgx86;
         if r.segment.enum<>R_NO then
         if r.segment.enum<>R_NO then
           CGMessage(cg_e_cant_use_far_pointer_there);
           CGMessage(cg_e_cant_use_far_pointer_there);
         if r.base.enum>lastreg then
         if r.base.enum>lastreg then
-          internalerror(200201081);
+          internalerror(200301081);
         if r.index.enum>lastreg then
         if r.index.enum>lastreg then
-          internalerror(200201081);
+          internalerror(200301081);
         if (r.base.enum=R_NO) and (r.index.enum=R_NO) then
         if (r.base.enum=R_NO) and (r.index.enum=R_NO) then
           begin
           begin
             if assigned(r.symbol) then
             if assigned(r.symbol) then
@@ -463,12 +463,14 @@ unit cgx86;
 
 
       var
       var
         op: tasmop;
         op: tasmop;
-        s: topsize;
+        o,s: topsize;
 
 
       begin
       begin
-        if reg.enum>lastreg then
-          internalerror(200301081);
-        sizes2load(size,reg2opsize[reg.enum],op,s);
+        if reg.enum=R_INTREGISTER then
+          o:=subreg2opsize[reg.number and $ff]
+        else
+          o:=reg2opsize[reg.enum];
+        sizes2load(size,o,op,s);
         list.concat(taicpu.op_ref_reg(op,s,ref,reg));
         list.concat(taicpu.op_ref_reg(op,s,ref,reg));
       end;
       end;
 
 
@@ -480,10 +482,6 @@ unit cgx86;
         s: topsize;
         s: topsize;
 
 
       begin
       begin
-        if reg1.enum>lastreg then
-          internalerror(200301081);
-        if reg2.enum>lastreg then
-          internalerror(200301081);
         sizes2load(fromsize,reg2opsize[reg2.enum],op,s);
         sizes2load(fromsize,reg2opsize[reg2.enum],op,s);
         if (rg.makeregsize(reg1,OS_INT).enum = rg.makeregsize(reg2,OS_INT).enum) then
         if (rg.makeregsize(reg1,OS_INT).enum = rg.makeregsize(reg2,OS_INT).enum) then
          begin
          begin
@@ -529,10 +527,6 @@ unit cgx86;
     procedure tcgx86.a_loadfpu_reg_reg(list: taasmoutput; reg1, reg2: tregister);
     procedure tcgx86.a_loadfpu_reg_reg(list: taasmoutput; reg1, reg2: tregister);
 
 
        begin
        begin
-         if reg1.enum>lastreg then
-            internalerror(200301081);
-         if reg2.enum>lastreg then
-            internalerror(200301081);
          if (reg1.enum <> R_ST) then
          if (reg1.enum <> R_ST) then
            begin
            begin
              list.concat(taicpu.op_reg(A_FLD,S_NO,
              list.concat(taicpu.op_reg(A_FLD,S_NO,
@@ -1474,6 +1468,7 @@ unit cgx86;
     var r:Tregister;
     var r:Tregister;
 
 
     begin
     begin
+        r.enum:=R_INTREGISTER;
         r.enum:=R_GS;
         r.enum:=R_GS;
         { .... also the segment registers }
         { .... also the segment registers }
         list.concat(Taicpu.Op_reg(A_PUSH,S_W,r));
         list.concat(Taicpu.Op_reg(A_PUSH,S_W,r));
@@ -1504,50 +1499,51 @@ unit cgx86;
     var r:Tregister;
     var r:Tregister;
 
 
       begin
       begin
+        r.enum:=R_INTREGISTER;
         if accused then
         if accused then
           begin
           begin
-            r.enum:=R_ESP;
+            r.number:=NR_ESP;
             list.concat(Taicpu.Op_const_reg(A_ADD,S_L,4,r))
             list.concat(Taicpu.Op_const_reg(A_ADD,S_L,4,r))
           end
           end
         else
         else
          begin
          begin
-           r.enum:=R_EAX;
+           r.number:=NR_EAX;
            list.concat(Taicpu.Op_reg(A_POP,S_L,r));
            list.concat(Taicpu.Op_reg(A_POP,S_L,r));
          end;
          end;
-        r.enum:=R_EBX;
+        r.number:=NR_EBX;
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
-        r.enum:=R_ECX;
+        r.number:=NR_ECX;
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
         if acchiused then
         if acchiused then
           begin
           begin
-             r.enum:=R_ESP;
+             r.number:=NR_ESP;
              list.concat(Taicpu.Op_const_reg(A_ADD,S_L,4,r))
              list.concat(Taicpu.Op_const_reg(A_ADD,S_L,4,r))
           end
           end
         else
         else
           begin
           begin
-             r.enum:=R_EDX;
+             r.number:=NR_EDX;
              list.concat(Taicpu.Op_reg(A_POP,S_L,r));
              list.concat(Taicpu.Op_reg(A_POP,S_L,r));
           end;
           end;
         if selfused then
         if selfused then
           begin
           begin
-             r.enum:=R_ESP;
+             r.number:=NR_ESP;
              list.concat(Taicpu.Op_const_reg(A_ADD,S_L,4,r))
              list.concat(Taicpu.Op_const_reg(A_ADD,S_L,4,r))
           end
           end
         else
         else
           begin
           begin
-             r.enum:=R_ESI;
+             r.number:=NR_ESI;
              list.concat(Taicpu.Op_reg(A_POP,S_L,r));
              list.concat(Taicpu.Op_reg(A_POP,S_L,r));
           end;
           end;
-        r.enum:=R_EDI;
+        r.number:=NR_EDI;
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
         { .... also the segment registers }
         { .... also the segment registers }
-        r.enum:=R_DS;
+        r.number:=NR_DS;
         list.concat(Taicpu.Op_reg(A_POP,S_W,r));
         list.concat(Taicpu.Op_reg(A_POP,S_W,r));
-        r.enum:=R_ES;
+        r.number:=NR_ES;
         list.concat(Taicpu.Op_reg(A_POP,S_W,r));
         list.concat(Taicpu.Op_reg(A_POP,S_W,r));
-        r.enum:=R_FS;
+        r.number:=NR_FS;
         list.concat(Taicpu.Op_reg(A_POP,S_W,r));
         list.concat(Taicpu.Op_reg(A_POP,S_W,r));
-        r.enum:=R_GS;
+        r.number:=NR_GS;
         list.concat(Taicpu.Op_reg(A_POP,S_W,r));
         list.concat(Taicpu.Op_reg(A_POP,S_W,r));
         { this restores the flags }
         { this restores the flags }
         list.concat(Taicpu.Op_none(A_IRET,S_NO));
         list.concat(Taicpu.Op_none(A_IRET,S_NO));
@@ -1571,7 +1567,8 @@ unit cgx86;
                 list.concat(Tai_label.Create(pl));
                 list.concat(Tai_label.Create(pl));
                 list.concat(Tai_const.Create_32bit(0));
                 list.concat(Tai_const.Create_32bit(0));
                 list.concat(Tai_section.Create(sec_code));
                 list.concat(Tai_section.Create(sec_code));
-                r.enum:=R_EDX;
+                r.enum:=R_INTREGISTER;
+                r.number:=NR_EDX;
                 list.concat(Taicpu.Op_sym_ofs_reg(A_MOV,S_L,pl,0,r));
                 list.concat(Taicpu.Op_sym_ofs_reg(A_MOV,S_L,pl,0,r));
                 a_call_name(list,target_info.Cprefix+'mcount');
                 a_call_name(list,target_info.Cprefix+'mcount');
                 include(rg.usedinproc,R_EDX);
                 include(rg.usedinproc,R_EDX);
@@ -1592,7 +1589,9 @@ unit cgx86;
         again : tasmlabel;
         again : tasmlabel;
         r,rsp : Tregister;
         r,rsp : Tregister;
       begin
       begin
-        rsp.enum:=R_ESP;
+        r.enum:=R_INTREGISTER;
+        rsp.enum:=R_INTREGISTER;
+        rsp.number:=NR_ESP;
         if localsize>0 then
         if localsize>0 then
          begin
          begin
 {$ifndef NOTARGETWIN32}
 {$ifndef NOTARGETWIN32}
@@ -1609,20 +1608,20 @@ unit cgx86;
                          reference_reset_base(href,rsp,localsize-i*winstackpagesize);
                          reference_reset_base(href,rsp,localsize-i*winstackpagesize);
                          list.concat(Taicpu.op_const_ref(A_MOV,S_L,0,href));
                          list.concat(Taicpu.op_const_ref(A_MOV,S_L,0,href));
                       end;
                       end;
-                    r.enum:=R_EAX;
+                    r.number:=NR_EAX;
                     list.concat(Taicpu.op_reg(A_PUSH,S_L,r));
                     list.concat(Taicpu.op_reg(A_PUSH,S_L,r));
                  end
                  end
                else
                else
                  begin
                  begin
                     objectlibrary.getlabel(again);
                     objectlibrary.getlabel(again);
-                    r.enum:=R_EDI;
+                    r.number:=NR_EDI;
                     rg.getexplicitregisterint(list,R_EDI);
                     rg.getexplicitregisterint(list,R_EDI);
                     list.concat(Taicpu.op_const_reg(A_MOV,S_L,localsize div winstackpagesize,r));
                     list.concat(Taicpu.op_const_reg(A_MOV,S_L,localsize div winstackpagesize,r));
                     a_label(list,again);
                     a_label(list,again);
                     list.concat(Taicpu.op_const_reg(A_SUB,S_L,winstackpagesize-4,rsp));
                     list.concat(Taicpu.op_const_reg(A_SUB,S_L,winstackpagesize-4,rsp));
-                    r.enum:=R_EAX;
+                    r.number:=NR_EAX;
                     list.concat(Taicpu.op_reg(A_PUSH,S_L,r));
                     list.concat(Taicpu.op_reg(A_PUSH,S_L,r));
-                    r.enum:=R_EDI;
+                    r.number:=NR_EDI;
                     list.concat(Taicpu.op_reg(A_DEC,S_L,r));
                     list.concat(Taicpu.op_reg(A_DEC,S_L,r));
                     a_jmp_cond(list,OC_NE,again);
                     a_jmp_cond(list,OC_NE,again);
                     rg.ungetregisterint(list,r);
                     rg.ungetregisterint(list,r);
@@ -1641,8 +1640,10 @@ unit cgx86;
     var r,rsp:Tregister;
     var r,rsp:Tregister;
 
 
     begin
     begin
-        r.enum:=R_EBP;
-        rsp.enum:=R_ESP;
+        r.enum:=R_INTREGISTER;
+        r.number:=NR_EBP;
+        rsp.enum:=R_INTREGISTER;
+        rsp.number:=NR_ESP;
         list.concat(Taicpu.Op_reg(A_PUSH,S_L,r));
         list.concat(Taicpu.Op_reg(A_PUSH,S_L,r));
         list.concat(Taicpu.Op_reg_reg(A_MOV,S_L,rsp,r));
         list.concat(Taicpu.Op_reg_reg(A_MOV,S_L,rsp,r));
         if localsize>0 then
         if localsize>0 then
@@ -1712,6 +1713,7 @@ unit cgx86;
         r : Tregister;
         r : Tregister;
 
 
       begin
       begin
+        r.enum:=R_INTREGISTER;
         if is_class(procinfo._class) then
         if is_class(procinfo._class) then
          begin
          begin
            a_call_name(list,'FPC_DISPOSE_CLASS')
            a_call_name(list,'FPC_DISPOSE_CLASS')
@@ -1722,17 +1724,18 @@ unit cgx86;
            if procinfo._class.needs_inittable then
            if procinfo._class.needs_inittable then
             begin
             begin
               objectlibrary.getlabel(nofinal);
               objectlibrary.getlabel(nofinal);
-              r.enum:=R_EBP;
+              r.number:=NR_EBP;
               reference_reset_base(href,r,8);
               reference_reset_base(href,r,8);
               a_cmp_const_ref_label(list,OS_ADDR,OC_EQ,0,href,nofinal);
               a_cmp_const_ref_label(list,OS_ADDR,OC_EQ,0,href,nofinal);
-              r.enum:=R_ESI;
+              r.number:=NR_ESI;
               reference_reset_base(href,r,0);
               reference_reset_base(href,r,0);
               g_finalize(list,procinfo._class,href,false);
               g_finalize(list,procinfo._class,href,false);
               a_label(list,nofinal);
               a_label(list,nofinal);
             end;
             end;
            rg.getexplicitregisterint(list,R_EDI);
            rg.getexplicitregisterint(list,R_EDI);
-           r.enum:=R_EDI;
+           r.number:=NR_EDI;
            a_load_const_reg(list,OS_ADDR,procinfo._class.vmt_offset,r);
            a_load_const_reg(list,OS_ADDR,procinfo._class.vmt_offset,r);
+           r.enum:=R_EDI;
            rg.ungetregisterint(list,r);
            rg.ungetregisterint(list,r);
            a_call_name(list,'FPC_HELP_DESTRUCTOR')
            a_call_name(list,'FPC_HELP_DESTRUCTOR')
          end
          end
@@ -1745,22 +1748,24 @@ unit cgx86;
         href : treference;
         href : treference;
         r : Tregister;
         r : Tregister;
       begin
       begin
+        r.enum:=R_INTREGISTER;
         if is_class(procinfo._class) then
         if is_class(procinfo._class) then
           begin
           begin
             reference_reset_base(href,procinfo.framepointer,8);
             reference_reset_base(href,procinfo.framepointer,8);
-            r.enum:=R_ESI;
+            r.number:=NR_ESI;
             a_load_ref_reg(list,OS_ADDR,href,r);
             a_load_ref_reg(list,OS_ADDR,href,r);
             a_call_name(list,'FPC_HELP_FAIL_CLASS');
             a_call_name(list,'FPC_HELP_FAIL_CLASS');
           end
           end
         else if is_object(procinfo._class) then
         else if is_object(procinfo._class) then
           begin
           begin
             reference_reset_base(href,procinfo.framepointer,12);
             reference_reset_base(href,procinfo.framepointer,12);
-            r.enum:=R_ESI;
+            r.number:=NR_ESI;
             a_load_ref_reg(list,OS_ADDR,href,r);
             a_load_ref_reg(list,OS_ADDR,href,r);
             rg.getexplicitregisterint(list,R_EDI);
             rg.getexplicitregisterint(list,R_EDI);
-            r.enum:=R_EDI;
+            r.number:=NR_EDI;
             a_load_const_reg(list,OS_ADDR,procinfo._class.vmt_offset,r);
             a_load_const_reg(list,OS_ADDR,procinfo._class.vmt_offset,r);
             a_call_name(list,'FPC_HELP_FAIL');
             a_call_name(list,'FPC_HELP_FAIL');
+            r.enum:=R_EDI;
             rg.ungetregisterint(list,r);
             rg.ungetregisterint(list,r);
           end
           end
         else
         else
@@ -1774,12 +1779,13 @@ unit cgx86;
     var r:Tregister;
     var r:Tregister;
 
 
     begin
     begin
-        r.enum:=R_EBX;
+        r.enum:=R_INTREGISTER;
+        r.number:=NR_EBX;
         if (R_EBX in usedinproc) then
         if (R_EBX in usedinproc) then
           list.concat(Taicpu.Op_reg(A_PUSH,S_L,r));
           list.concat(Taicpu.Op_reg(A_PUSH,S_L,r));
-        r.enum:=R_ESI;
+        r.number:=NR_ESI;
         list.concat(Taicpu.Op_reg(A_PUSH,S_L,r));
         list.concat(Taicpu.Op_reg(A_PUSH,S_L,r));
-        r.enum:=R_EDI;
+        r.number:=NR_EDI;
         list.concat(Taicpu.Op_reg(A_PUSH,S_L,r));
         list.concat(Taicpu.Op_reg(A_PUSH,S_L,r));
     end;
     end;
 
 
@@ -1789,11 +1795,12 @@ unit cgx86;
     var r:Tregister;
     var r:Tregister;
 
 
     begin
     begin
-        r.enum:=R_EDI;
+        r.enum:=R_INTREGISTER;
+        r.number:=NR_EDI;
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
-        r.enum:=R_ESI;
+        r.number:=NR_ESI;
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
         list.concat(Taicpu.Op_reg(A_POP,S_L,r));
-        r.enum:=R_EBX;
+        r.number:=NR_EBX;
         if (R_EBX in usedinproc) then
         if (R_EBX in usedinproc) then
          list.concat(Taicpu.Op_reg(A_POP,S_L,r));
          list.concat(Taicpu.Op_reg(A_POP,S_L,r));
     end;
     end;
@@ -1810,23 +1817,25 @@ unit cgx86;
         href : treference;
         href : treference;
         r,rsp: Tregister;
         r,rsp: Tregister;
       begin
       begin
-        rsp.enum:=R_ESP;
+        rsp.enum:=R_INTREGISTER;
+        rsp.number:=NR_ESP;
+        r.enum:=R_INTREGISTER;
         if selfused then
         if selfused then
          begin
          begin
            reference_reset_base(href,rsp,4);
            reference_reset_base(href,rsp,4);
-           r.enum:=R_ESI;
+           r.number:=NR_ESI;
            list.concat(Taicpu.Op_reg_ref(A_MOV,S_L,r,href));
            list.concat(Taicpu.Op_reg_ref(A_MOV,S_L,r,href));
          end;
          end;
         if acchiused then
         if acchiused then
          begin
          begin
            reference_reset_base(href,rsp,20);
            reference_reset_base(href,rsp,20);
-           r.enum:=R_EDX;
+           r.number:=NR_EDX;
            list.concat(Taicpu.Op_reg_ref(A_MOV,S_L,r,href));
            list.concat(Taicpu.Op_reg_ref(A_MOV,S_L,r,href));
          end;
          end;
         if accused then
         if accused then
          begin
          begin
            reference_reset_base(href,rsp,28);
            reference_reset_base(href,rsp,28);
-           r.enum:=R_EAX;
+           r.number:=NR_EAX;
            list.concat(Taicpu.Op_reg_ref(A_MOV,S_L,r,href));
            list.concat(Taicpu.Op_reg_ref(A_MOV,S_L,r,href));
          end;
          end;
         list.concat(Taicpu.Op_none(A_POPA,S_L));
         list.concat(Taicpu.Op_none(A_POPA,S_L));
@@ -1865,7 +1874,10 @@ unit cgx86;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.27  2003-01-08 18:43:58  daniel
+  Revision 1.28  2003-01-09 20:41:00  daniel
+    * Converted some code in cgx86.pas to new register numbering
+
+  Revision 1.27  2003/01/08 18:43:58  daniel
    * Tregister changed into a record
    * Tregister changed into a record
 
 
   Revision 1.26  2003/01/05 13:36:53  florian
   Revision 1.26  2003/01/05 13:36:53  florian