* 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:
florian 2007-09-23 14:23:31 +00:00
parent 86164b3a8d
commit 4cd15058df

View File

@ -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