* MIPS: fixed cgsize2subreg to return correct result for float registers.

- TCGMIPS.getfpuregister override is no longer necessary with the above fix.

git-svn-id: trunk@24893 -
This commit is contained in:
sergei 2013-06-13 23:50:20 +00:00
parent b6bfa864d4
commit 7e0ae2e984
2 changed files with 10 additions and 13 deletions

View File

@ -39,7 +39,6 @@ type
procedure init_register_allocators; override;
procedure done_register_allocators; override;
function getfpuregister(list: tasmlist; size: Tcgsize): Tregister; override;
/// { needed by cg64 }
procedure make_simple_ref(list: tasmlist; var ref: treference);
procedure handle_reg_const_reg(list: tasmlist; op: Tasmop; src: tregister; a: tcgint; dst: tregister);
@ -445,15 +444,6 @@ begin
end;
function TCGMIPS.getfpuregister(list: tasmlist; size: Tcgsize): Tregister;
begin
if size = OS_F64 then
Result := rg[R_FPUREGISTER].getregister(list, R_SUBFD)
else
Result := rg[R_FPUREGISTER].getregister(list, R_SUBFS);
end;
procedure TCGMIPS.a_loadfpu_ref_cgpara(list: tasmlist; size: tcgsize; const ref: treference; const paraloc: TCGPara);
var
href, href2: treference;

View File

@ -296,10 +296,17 @@ unit cpubase;
function cgsize2subreg(regtype: tregistertype; s:tcgsize):tsubregister;
begin
if s in [OS_64,OS_S64] then
cgsize2subreg:=R_SUBQ
case regtype of
R_FPUREGISTER:
if s=OS_F32 then
result:=R_SUBFS
else if s=OS_F64 then
result:=R_SUBFD
else
internalerror(2013021301);
else
cgsize2subreg:=R_SUBWHOLE;
result:=R_SUBWHOLE;
end;
end;