diff options
| author | peter <peter@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2006-03-29 11:34:42 +0000 |
|---|---|---|
| committer | peter <peter@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2006-03-29 11:34:42 +0000 |
| commit | c356ea00411850b58fe4ccbebc2d304053cd57bf (patch) | |
| tree | 165ceddf26da83f3fb961d8c94d5be41b508b98b | |
| parent | 6fea5c3aa3a04a6fdb5ef1ceb884da3d54205f3c (diff) | |
| download | fpc-c356ea00411850b58fe4ccbebc2d304053cd57bf.tar.gz | |
* 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
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/linker@3072 3ad0048d-3df7-0310-abae-a5850022a9f2
| -rw-r--r-- | compiler/aggas.pas | 4 | ||||
| -rw-r--r-- | compiler/psub.pas | 3 | ||||
| -rw-r--r-- | compiler/sparc/cpubase.pas | 28 |
3 files changed, 28 insertions, 7 deletions
diff --git a/compiler/aggas.pas b/compiler/aggas.pas index 9ef4dba729..2551449cc6 100644 --- a/compiler/aggas.pas +++ b/compiler/aggas.pas @@ -91,7 +91,7 @@ implementation uses cutils,systems, fmodule,finput,verbose, - itcpugas + itcpugas,cpubase ; const @@ -469,7 +469,7 @@ implementation 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 diff --git a/compiler/psub.pas b/compiler/psub.pas index 4dafe8d221..7cc69aaae8 100644 --- a/compiler/psub.pas +++ b/compiler/psub.pas @@ -613,7 +613,8 @@ implementation (tabstractnormalvarsym(p).localloc.loc in [LOC_REGISTER,LOC_CREGISTER,LOC_MMREGISTER, LOC_CMMREGISTER,LOC_FPUREGISTER,LOC_CFPUREGISTER]) then begin - cg.translate_register(tabstractnormalvarsym(p).localloc.register); + if not(cs_no_regalloc in aktglobalswitches) then + cg.translate_register(tabstractnormalvarsym(p).localloc.register); if cs_asm_source in aktglobalswitches then TAsmList(list).concat(Tai_comment.Create(strpnew('Var '+tabstractnormalvarsym(p).realname+' located in register '+ std_regname(tabstractnormalvarsym(p).localloc.register)))) diff --git a/compiler/sparc/cpubase.pas b/compiler/sparc/cpubase.pas index 48f44024f6..73e53a81cd 100644 --- a/compiler/sparc/cpubase.pas +++ b/compiler/sparc/cpubase.pas @@ -429,11 +429,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; |
