* 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; 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