Pārlūkot izejas kodu

Merged revisions 3079 via svnmerge from
http://[email protected]/svn/fpc/trunk

................
r3079 | peter | 2006-03-30 08:36:42 +0200 (Thu, 30 Mar 2006) | 17 lines

Merged revisions 3072-3073 via svnmerge from
http://svn.freepascal.org/svn/fpc/branches/linker/compiler

........
r3072 | peter | 2006-03-29 13:34:42 +0200 (Wed, 29 Mar 2006) | 4 lines

* std_regname generate pair of registers for float doubles
* don't call translate_register for regvars if -sr is passed
* use std_regname in regalloc message

........
r3073 | peter | 2006-03-29 16:00:37 +0200 (Wed, 29 Mar 2006) | 2 lines

* CMP instructions only read operands

........

................

git-svn-id: branches/fixes_2_0@3080 -

peter 19 gadi atpakaļ
vecāks
revīzija
8fa114ce66
3 mainītis faili ar 36 papildinājumiem un 10 dzēšanām
  1. 2 2
      compiler/aggas.pas
  2. 10 4
      compiler/sparc/aasmcpu.pas
  3. 24 4
      compiler/sparc/cpubase.pas

+ 2 - 2
compiler/aggas.pas

@@ -72,7 +72,7 @@ implementation
     uses
       cutils,globtype,systems,
       fmodule,finput,verbose,
-      itcpugas
+      itcpugas,cpubase
 {$ifdef GDB}
 {$IFDEF USE_SYSUTILS}
 {$ELSE USE_SYSUTILS}
@@ -447,7 +447,7 @@ var
                  begin
                    AsmWrite(#9+target_asm.comment+'Register ');
                    repeat
-                     AsmWrite(gas_regname(Tai_regalloc(hp).reg));
+                     AsmWrite(std_regname(Tai_regalloc(hp).reg));
                      if (hp.next=nil) or
                         (tai(hp.next).typ<>ait_regalloc) or
                         (tai_regalloc(hp.next).ratype<>tai_regalloc(hp).ratype) then

+ 10 - 4
compiler/sparc/aasmcpu.pas

@@ -246,10 +246,16 @@ implementation
 
     function taicpu.spilling_get_operation_type(opnr: longint): topertype;
       begin
-        if opnr=ops-1 then
-          result := operand_write
-        else
-          result := operand_read;
+        result := operand_read;
+        case opcode of
+          A_FCMPs,A_FCMPd,A_FCMPq :
+            ;
+          else
+            begin
+              if opnr=ops-1 then
+                result := operand_write;
+            end;
+        end;
       end;
 
 

+ 24 - 4
compiler/sparc/cpubase.pas

@@ -428,11 +428,31 @@ implementation
       var
         p : tregisterindex;
       begin
-        p:=findreg_by_number(r);
-        if p<>0 then
-          result:=std_regname_table[p]
+        { For double floats show a pair like %f0:%f1 }
+        if (getsubreg(r)=R_SUBFD) and
+           (getsupreg(r)<first_fpu_imreg) then
+          begin
+            setsubreg(r,R_SUBFS);
+            p:=findreg_by_number(r);
+            if p<>0 then
+              result:=std_regname_table[p]
+            else
+              result:=generic_regname(r);
+            setsupreg(r,getsupreg(r)+1);
+            p:=findreg_by_number(r);
+            if p<>0 then
+              result:=result+':'+std_regname_table[p]
+            else
+              result:=result+':'+generic_regname(r);
+          end
         else
-          result:=generic_regname(r);
+          begin
+            p:=findreg_by_number(r);
+            if p<>0 then
+              result:=std_regname_table[p]
+            else
+              result:=generic_regname(r);
+          end;
       end;