mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 06:28:55 +02:00
* fix return registers for hfa's containing singles
git-svn-id: trunk@42666 -
This commit is contained in:
parent
5a379cc256
commit
58bbbadc16
@ -711,7 +711,8 @@ unit cpupara;
|
||||
retcgsize : tcgsize;
|
||||
basedef: tdef;
|
||||
i: longint;
|
||||
mmreg: tregister;
|
||||
sparesinglereg: tregister;
|
||||
mmreg : TSuperRegister;
|
||||
begin
|
||||
if set_common_funcretloc_info(p,forcetempdef,retcgsize,result) then
|
||||
exit;
|
||||
@ -719,6 +720,7 @@ unit cpupara;
|
||||
paraloc:=result.add_location;
|
||||
{ Return in FPU register? }
|
||||
basedef:=nil;
|
||||
sparesinglereg:=NR_NO;
|
||||
if (result.def.typ=floatdef) or
|
||||
is_hfa(result.def,basedef) then
|
||||
begin
|
||||
@ -736,20 +738,43 @@ unit cpupara;
|
||||
OS_64,
|
||||
OS_F64:
|
||||
begin
|
||||
mmreg:=NR_MM_RESULT_REG
|
||||
mmreg:=RS_D0;
|
||||
end;
|
||||
OS_32,
|
||||
OS_F32:
|
||||
begin
|
||||
mmreg:=NR_S0;
|
||||
mmreg:=RS_S0;
|
||||
end;
|
||||
else
|
||||
internalerror(2012032501);
|
||||
end;
|
||||
repeat
|
||||
paraloc^.loc:=LOC_MMREGISTER;
|
||||
paraloc^.register:=mmreg;
|
||||
inc(mmreg);
|
||||
{ mm registers are strangly ordered in the arm compiler }
|
||||
case retcgsize of
|
||||
OS_32,OS_F32:
|
||||
begin
|
||||
if sparesinglereg=NR_NO then
|
||||
begin
|
||||
paraloc^.register:=newreg(R_MMREGISTER,mmreg,R_SUBFS);
|
||||
sparesinglereg:=newreg(R_MMREGISTER,mmreg-RS_S0+RS_S1,R_SUBFS);
|
||||
inc(mmreg);
|
||||
end
|
||||
else
|
||||
begin
|
||||
paraloc^.register:=sparesinglereg;
|
||||
sparesinglereg:=NR_NO;
|
||||
end;
|
||||
end;
|
||||
OS_64,OS_F64:
|
||||
begin
|
||||
paraloc^.register:=newreg(R_MMREGISTER,mmreg,R_SUBFD);
|
||||
inc(mmreg);
|
||||
end;
|
||||
else
|
||||
Internalerror(2019081201);
|
||||
end;
|
||||
|
||||
paraloc^.size:=retcgsize;
|
||||
paraloc^.def:=basedef;
|
||||
paraloc:=paraloc^.next;
|
||||
|
Loading…
Reference in New Issue
Block a user