ソースを参照

* now uses standard routines in rgHelper unit to search registers by number and by name

mazen 22 年 前
コミット
75f88a5b90

+ 7 - 37
compiler/arm/cpubase.pas

@@ -487,7 +487,6 @@ unit cpubase;
     procedure inverse_flags(var f: TResFlags);
     function flags_to_cond(const f: TResFlags) : TAsmCond;
     function findreg_by_number(r:Tregister):tregisterindex;
-    function findreg_by_stdname(const s:string):byte;
     function std_regnum_search(const s:string):Tregister;
     function std_regname(r:Tregister):string;
 
@@ -497,7 +496,7 @@ unit cpubase;
   implementation
 
     uses
-      verbose;
+      rgHelper,verbose;
 
 
     const
@@ -550,47 +549,15 @@ unit cpubase;
       end;
 
 
-    function findreg_by_stdname(const s:string):byte;
-      var
-        i,p : tregisterindex;
-      begin
-        {Binary search.}
-        p:=0;
-        i:=regnumber_count_bsstart;
-        repeat
-          if (p+i<=high(tregisterindex)) and (std_regname_table[std_regname_index[p+i]]<=s) then
-            p:=p+i;
-          i:=i shr 1;
-        until i=0;
-        if std_regname_table[std_regname_index[p]]=s then
-          result:=std_regname_index[p]
-        else
-          result:=0;
-      end;
-
-
     function findreg_by_number(r:Tregister):tregisterindex;
-      var
-        i,p : tregisterindex;
       begin
-        {Binary search.}
-        p:=0;
-        i:=regnumber_count_bsstart;
-        repeat
-          if (p+i<=high(tregisterindex)) and (regnumber_table[regnumber_index[p+i]]<=r) then
-            p:=p+i;
-          i:=i shr 1;
-        until i=0;
-        if regnumber_table[regnumber_index[p]]=r then
-          result:=regnumber_index[p]
-        else
-          result:=0;
+        rgHelper.findreg_by_number(r,regnumber_index);
       end;
 
 
     function std_regnum_search(const s:string):Tregister;
       begin
-        result:=regnumber_table[findreg_by_stdname(s)];
+        result:=regnumber_table[findreg_by_name(s,std_regname_table,std_regname_index)];
       end;
 
 
@@ -620,7 +587,10 @@ unit cpubase;
 end.
 {
   $Log$
-  Revision 1.14  2003-09-05 23:57:01  florian
+  Revision 1.15  2003-10-30 15:02:04  mazen
+  * now uses standard routines in rgHelper unit to search registers by number and by name
+
+  Revision 1.14  2003/09/05 23:57:01  florian
     * arm is working again as before the new register naming scheme was implemented
 
   Revision 1.13  2003/09/04 21:07:03  florian

+ 7 - 36
compiler/powerpc/cpubase.pas

@@ -551,7 +551,7 @@ uses
 implementation
 
     uses
-      verbose;
+      rgHelper,verbose;
 
     const
       std_regname_table : array[tregisterindex] of string[7] = (
@@ -644,47 +644,15 @@ implementation
       end;
 
 
-    function findreg_by_stdname(const s:string):byte;
-      var
-        i,p : tregisterindex;
-      begin
-        {Binary search.}
-        p:=0;
-        i:=regnumber_count_bsstart;
-        repeat
-          if (p+i<=high(tregisterindex)) and (std_regname_table[std_regname_index[p+i]]<=s) then
-            p:=p+i;
-          i:=i shr 1;
-        until i=0;
-        if std_regname_table[std_regname_index[p]]=s then
-          result:=std_regname_index[p]
-        else
-          result:=0;
-      end;
-
-
     function findreg_by_number(r:Tregister):tregisterindex;
-      var
-        i,p : tregisterindex;
       begin
-        {Binary search.}
-        p:=0;
-        i:=regnumber_count_bsstart;
-        repeat
-          if (p+i<=high(tregisterindex)) and (regnumber_table[regnumber_index[p+i]]<=r) then
-            p:=p+i;
-          i:=i shr 1;
-        until i=0;
-        if regnumber_table[regnumber_index[p]]=r then
-          result:=regnumber_index[p]
-        else
-          result:=0;
+        rgHelper.findreg_by_number(r,regnumber_index);
       end;
 
 
     function std_regnum_search(const s:string):Tregister;
       begin
-        result:=regnumber_table[findreg_by_stdname(s)];
+        result:=regnumber_table[findreg_by_name(s,std_regname_table,std_regname_index)];
       end;
 
 
@@ -714,7 +682,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.73  2003-10-19 01:34:31  florian
+  Revision 1.74  2003-10-30 15:03:18  mazen
+  * now uses standard routines in rgHelper unit to search registers by number and by name
+
+  Revision 1.73  2003/10/19 01:34:31  florian
     * some ppc stuff fixed
     * memory leak fixed
 

+ 42 - 1
compiler/sparc/aasmcpu.pas

@@ -261,6 +261,44 @@ implementation
                counterpart := A_STD;
                wasload := false;
              end;
+           A_STB:
+             begin
+               counterpart := A_LDUB;
+             end;
+           A_STH:
+             begin
+               counterpart := A_LDUH;
+             end;
+           A_ST :
+             begin
+               counterpart := A_LD;
+               wasload := false;
+             end;
+           A_STD:
+             begin
+               counterpart := A_LDD;
+               wasload := false;
+             end;
+           A_LDF:
+             begin
+               counterpart := A_STF;
+               wasload := false;
+             end;
+           A_LDDF:
+             begin
+               counterpart := A_STDF;
+               wasload := false;
+             end;
+           A_STF:
+             begin
+               counterpart := A_LDF;
+               wasload := false;
+             end;
+           A_STDF:
+             begin
+               counterpart := A_LDDF;
+               wasload := false;
+             end;
            else
              result := false;
          end;
@@ -297,7 +335,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.35  2003-10-24 07:00:17  mazen
+  Revision 1.36  2003-10-30 15:03:18  mazen
+  * now uses standard routines in rgHelper unit to search registers by number and by name
+
+  Revision 1.35  2003/10/24 07:00:17  mazen
   * fixed compil problem when using ObjFpc mode (^ required).
 
   Revision 1.34  2003/10/01 20:34:49  peter

+ 21 - 50
compiler/sparc/cpubase.pas

@@ -469,27 +469,27 @@ type
     procedure inverse_flags(var f: TResFlags);
     function  flags_to_cond(const f: TResFlags) : TAsmCond;
     function cgsize2subreg(s:Tcgsize):Tsubregister;
-    function findreg_by_number(r:Tregister):tregisterindex;
-    function std_regnum_search(const s:string):Tregister;
     function std_regname(r:Tregister):string;
     function gas_regname(r:Tregister):string;
+    function std_regnum_search(const s:string):Tregister;
+    function findreg_by_number(r:Tregister):tregisterindex;
 
 
 implementation
 
     uses
-      verbose;
-
+      rgHelper,verbose;
+    
     const
-      std_regname_table : array[tregisterindex] of string[7] = (
+      std_regname_table : TRegNameTAble = (
         {$i rspstd.inc}
       );
 
-      regnumber_index : array[tregisterindex] of tregisterindex = (
+      regnumber_index : TRegisterIndexTable = (
         {$i rsprni.inc}
       );
 
-      std_regname_index : array[tregisterindex] of tregisterindex = (
+      std_regname_index : TRegisterIndexTable = (
         {$i rspsri.inc}
       );
 
@@ -530,59 +530,27 @@ implementation
       end;
 
 
-    function findreg_by_stdname(const s:string):byte;
-      var
-        i,p : tregisterindex;
-      begin
-        {Binary search.}
-        p:=0;
-        i:=regnumber_count_bsstart;
-        repeat
-          if (p+i<=high(tregisterindex)) and (std_regname_table[std_regname_index[p+i]]<=s) then
-            p:=p+i;
-          i:=i shr 1;
-        until i=0;
-        if std_regname_table[std_regname_index[p]]=s then
-          result:=std_regname_index[p]
-        else
-          result:=0;
-      end;
-
-
-    function findreg_by_number(r:Tregister):tregisterindex;
+    function std_regname(r:Tregister):string;
       var
-        i,p : tregisterindex;
+        p : tregisterindex;
       begin
-        {Binary search.}
-        p:=0;
-        i:=regnumber_count_bsstart;
-        repeat
-          if (p+i<=high(tregisterindex)) and (regnumber_table[regnumber_index[p+i]]<=r) then
-            p:=p+i;
-          i:=i shr 1;
-        until i=0;
-        if regnumber_table[regnumber_index[p]]=r then
-          result:=regnumber_index[p]
+        p:=rgHelper.findreg_by_number(r,regnumber_index);
+        if p<>0 then
+          result:=std_regname_table[p]
         else
-          result:=0;
+          result:=generic_regname(r);
       end;
 
 
     function std_regnum_search(const s:string):Tregister;
       begin
-        result:=regnumber_table[findreg_by_stdname(s)];
+        result:=regnumber_table[findreg_by_name(s,std_regname_table,std_regname_index)];
       end;
 
 
-    function std_regname(r:Tregister):string;
-      var
-        p : tregisterindex;
+    function findreg_by_number(r:Tregister):tregisterindex;
       begin
-        p:=findreg_by_number(r);
-        if p<>0 then
-          result:=std_regname_table[p]
-        else
-          result:=generic_regname(r);
+        rgHelper.findreg_by_number(r,regnumber_index);
       end;
 
 
@@ -590,7 +558,7 @@ implementation
       var
         p : tregisterindex;
       begin
-        p:=findreg_by_number(r);
+        p:=rgHelper.findreg_by_number(r,regnumber_index);
         if p<>0 then
           result:=std_regname_table[p]
         else
@@ -600,7 +568,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.53  2003-10-08 14:11:36  mazen
+  Revision 1.54  2003-10-30 15:03:18  mazen
+  * now uses standard routines in rgHelper unit to search registers by number and by name
+
+  Revision 1.53  2003/10/08 14:11:36  mazen
   + Alignement field added to TParaLocation (=4 as 32 bits archs)
 
   Revision 1.52  2003/10/01 20:34:50  peter

+ 7 - 36
compiler/x86/cpubase.pas

@@ -371,7 +371,7 @@ uses
 implementation
 
     uses
-      verbose;
+      rgHelper,verbose;
 
     const
     {$ifdef x86_64}
@@ -500,47 +500,15 @@ implementation
       end;
 
 
-    function findreg_by_stdname(const s:string):byte;
-      var
-        i,p : tregisterindex;
-      begin
-        {Binary search.}
-        p:=0;
-        i:=regnumber_count_bsstart;
-        repeat
-          if (p+i<=high(tregisterindex)) and (std_regname_table[std_regname_index[p+i]]<=s) then
-            p:=p+i;
-          i:=i shr 1;
-        until i=0;
-        if std_regname_table[std_regname_index[p]]=s then
-          result:=std_regname_index[p]
-        else
-          result:=0;
-      end;
-
-
     function findreg_by_number(r:Tregister):tregisterindex;
-      var
-        i,p : tregisterindex;
       begin
-        {Binary search.}
-        p:=0;
-        i:=regnumber_count_bsstart;
-        repeat
-          if (p+i<=high(tregisterindex)) and (regnumber_table[regnumber_index[p+i]]<=r) then
-            p:=p+i;
-          i:=i shr 1;
-        until i=0;
-        if regnumber_table[regnumber_index[p]]=r then
-          result:=regnumber_index[p]
-        else
-          result:=0;
+        rgHelper.findreg_by_number(r,regnumber_index);
       end;
 
 
     function std_regnum_search(const s:string):Tregister;
       begin
-        result:=regnumber_table[findreg_by_stdname(s)];
+        result:=regnumber_table[findreg_by_name(s,std_regname_table,std_regname_index)];
       end;
 
 
@@ -558,7 +526,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.27  2003-10-17 15:08:34  peter
+  Revision 1.28  2003-10-30 15:03:18  mazen
+  * now uses standard routines in rgHelper unit to search registers by number and by name
+
+  Revision 1.27  2003/10/17 15:08:34  peter
     * commented out more obsolete constants
 
   Revision 1.26  2003/10/17 14:38:32  peter