Browse Source

* R_SUB_FS added to make a difference between double and single
floats, required for sparc only

peter 21 years ago
parent
commit
d68c75f65a
1 changed files with 24 additions and 21 deletions
  1. 24 21
      compiler/cgbase.pas

+ 24 - 21
compiler/cgbase.pas

@@ -123,7 +123,9 @@ interface
         R_SUBW,    { = 3; 16 bits, Like AX }
         R_SUBD,    { = 4; 32 bits, Like EAX }
         R_SUBQ,    { = 5; 64 bits, Like RAX }
-        R_SUBFD    { = 6; Float that allocates 2 FPU registers }
+        { For Sparc floats that use F0:F1 to store doubles }
+        R_SUBFS,   { = 6; Float that allocates 1 FPU register }
+        R_SUBFD    { = 7; Float that allocates 2 FPU registers }
       );
 
       TSuperRegister = type word;
@@ -463,47 +465,44 @@ implementation
 
     function generic_regname(r:tregister):string;
       var
-        t,sub : char;
-        nr    : string[12];
+        nr : string[12];
       begin
+        str(getsupreg(r),nr);
         case getregtype(r) of
           R_INTREGISTER:
-            t:='i';
+            result:='ireg'+nr;
           R_FPUREGISTER:
-            t:='f';
-          R_MMXREGISTER:
-            t:='x';
+            result:='freg'+nr;
           R_MMREGISTER:
-            t:='m';
+            result:='mreg'+nr;
+          R_MMXREGISTER:
+            result:='xreg'+nr;
           else
             begin
               result:='INVALID';
               exit;
             end;
         end;
-        str(getsupreg(r),nr);
         case getsubreg(r) of
           R_SUBNONE:
-            sub:=' ';
+            ;
           R_SUBL:
-            sub:='l';
+            result:=result+'l';
           R_SUBH:
-            sub:='h';
+            result:=result+'h';
           R_SUBW:
-            sub:='w';
+            result:=result+'w';
           R_SUBD:
-            sub:='d';
+            result:=result+'d';
           R_SUBQ:
-            sub:='q';
+            result:=result+'q';
+          R_SUBFS:
+            result:=result+'fs';
           R_SUBFD:
-            sub:='f';
+            result:=result+'fd';
           else
             internalerror(200308252);
         end;
-        if sub<>' ' then
-          result:=t+'reg'+nr+sub
-        else
-          result:=t+'reg'+nr;
       end;
 
 
@@ -584,7 +583,11 @@ finalization
 end.
 {
   $Log$
-  Revision 1.84  2004-01-09 22:02:29  daniel
+  Revision 1.85  2004-01-12 16:35:05  peter
+    * R_SUB_FS added to make a difference between double and single
+      floats, required for sparc only
+
+  Revision 1.84  2004/01/09 22:02:29  daniel
     * Degree=0 problem fixed
     * Degree to high problem fixed