mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 20:09:27 +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;
|
end;
|
||||||
if pushedfpu then
|
if pushedfpu then
|
||||||
begin
|
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}
|
{$ifdef x86}
|
||||||
{ left operand is now on top of the stack, instead of the right one! }
|
if use_sse(left.resultdef) then
|
||||||
toggleflag(nf_swapped);
|
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}
|
{$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;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -248,7 +260,7 @@ interface
|
|||||||
tmpreg : tregister;
|
tmpreg : tregister;
|
||||||
mask,
|
mask,
|
||||||
setbase : aint;
|
setbase : aint;
|
||||||
|
|
||||||
cgop : TOpCg;
|
cgop : TOpCg;
|
||||||
opdone : boolean;
|
opdone : boolean;
|
||||||
begin
|
begin
|
||||||
|
Loading…
Reference in New Issue
Block a user