fix register deallocation for 64bit results

This commit is contained in:
peter 2005-02-27 16:40:13 +00:00
parent 2e196d55e4
commit 6e0cf1751a

View File

@ -126,7 +126,6 @@ implementation
procedure tcgcallparanode.push_value_para;
{$ifdef i386}
var
cgsize : tcgsize;
href : treference;
size : longint;
{$endif i386}
@ -961,7 +960,17 @@ implementation
case procdefinition.funcretloc[callerside].loc of
LOC_REGISTER,
LOC_CREGISTER:
exclude(regs_to_save_int,getsupreg(procdefinition.funcretloc[callerside].register));
begin
{$ifndef cpu64bit}
if procdefinition.funcretloc[callerside].size in [OS_64,OS_S64] then
begin
exclude(regs_to_save_int,getsupreg(procdefinition.funcretloc[callerside].register64.reghi));
exclude(regs_to_save_int,getsupreg(procdefinition.funcretloc[callerside].register64.reglo));
end
else
{$endif cpu64bit}
exclude(regs_to_save_int,getsupreg(procdefinition.funcretloc[callerside].register));
end;
LOC_FPUREGISTER,
LOC_CFPUREGISTER:
exclude(regs_to_save_fpu,getsupreg(procdefinition.funcretloc[callerside].register));
@ -1226,7 +1235,10 @@ begin
end.
{
$Log$
Revision 1.201 2005-02-15 21:39:48 peter
Revision 1.202 2005-02-27 16:40:13 peter
fix register deallocation for 64bit results
Revision 1.201 2005/02/15 21:39:48 peter
* remove is_single_reference
* revert loading of ref-to-ref para valu