* fixed register allocation for storefuncresult

This commit is contained in:
peter 1999-05-31 12:43:32 +00:00
parent cc536420eb
commit dd6ecd953b

View File

@ -78,11 +78,16 @@ implementation
hp : ptree;
hdef : porddef;
hreg : tregister;
hregister : tregister;
oldregisterdef : boolean;
begin
{ Get the accumulator first so it can't be used in the dest }
hregister:=getexplicitregister32(accumulator);
{ process dest }
SecondPass(dest);
if Codegenerror then
exit;
{ store the value }
Case dest^.resulttype^.deftype of
floatdef:
floatstore(PFloatDef(dest^.resulttype)^.typ,dest^.location.reference);
@ -95,9 +100,9 @@ implementation
else
begin
Case dest^.resulttype^.size of
1 : hreg:=regtoreg8(accumulator);
2 : hreg:=regtoreg16(accumulator);
4 : hreg:=accumulator;
1 : hreg:=regtoreg8(hregister);
2 : hreg:=regtoreg16(hregister);
4 : hreg:=hregister;
End;
emit_mov_reg_loc(hreg,dest^.location);
If (cs_check_range in aktlocalswitches) and
@ -117,12 +122,12 @@ implementation
u8bit,u16bit,u32bit:
begin
new(hdef,init(u32bit,0,$ffffffff));
hreg:=accumulator;
hreg:=hregister;
end;
s8bit,s16bit,s32bit:
begin
new(hdef,init(s32bit,$80000000,$7fffffff));
hreg:=accumulator;
hreg:=hregister;
end;
end;
{ create a fake node }
@ -146,6 +151,9 @@ implementation
else
internalerror(66766766);
end;
{ free used registers }
del_locref(dest^.location);
ungetregister(hregister);
end;
@ -1238,7 +1246,10 @@ implementation
end.
{
$Log$
Revision 1.55 1999-05-27 19:44:13 peter
Revision 1.56 1999-05-31 12:43:32 peter
* fixed register allocation for storefuncresult
Revision 1.55 1999/05/27 19:44:13 peter
* removed oldasm
* plabel -> pasmlabel
* -a switches to source writing automaticly