mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 04:59:26 +02:00
* take care of the used fpu instruction set when saving/restoring function results on x86
git-svn-id: trunk@8617 -
This commit is contained in:
parent
86164b3a8d
commit
4cd15058df
@ -136,14 +136,26 @@ interface
|
||||
end;
|
||||
if pushedfpu then
|
||||
begin
|
||||
tmpreg := cg.getfpuregister(current_asmdata.CurrAsmList,left.location.size);
|
||||
cg.a_loadfpu_loc_reg(current_asmdata.CurrAsmList,left.location.size,left.location,tmpreg);
|
||||
location_reset(left.location,LOC_FPUREGISTER,left.location.size);
|
||||
left.location.register := tmpreg;
|
||||
{$ifdef x86}
|
||||
{ left operand is now on top of the stack, instead of the right one! }
|
||||
toggleflag(nf_swapped);
|
||||
if use_sse(left.resultdef) then
|
||||
begin
|
||||
tmpreg := cg.getmmregister(current_asmdata.CurrAsmList,left.location.size);
|
||||
cg.a_loadmm_loc_reg(current_asmdata.CurrAsmList,left.location.size,left.location,tmpreg,mms_movescalar);
|
||||
location_reset(left.location,LOC_MMREGISTER,left.location.size);
|
||||
left.location.register := tmpreg;
|
||||
end
|
||||
{$endif x86}
|
||||
else
|
||||
begin
|
||||
tmpreg := cg.getfpuregister(current_asmdata.CurrAsmList,left.location.size);
|
||||
cg.a_loadfpu_loc_reg(current_asmdata.CurrAsmList,left.location.size,left.location,tmpreg);
|
||||
location_reset(left.location,LOC_FPUREGISTER,left.location.size);
|
||||
left.location.register := tmpreg;
|
||||
{$ifdef x86}
|
||||
{ left operand is now on top of the stack, instead of the right one! }
|
||||
toggleflag(nf_swapped);
|
||||
{$endif x86}
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -248,7 +260,7 @@ interface
|
||||
tmpreg : tregister;
|
||||
mask,
|
||||
setbase : aint;
|
||||
|
||||
|
||||
cgop : TOpCg;
|
||||
opdone : boolean;
|
||||
begin
|
||||
|
Loading…
Reference in New Issue
Block a user