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; procedure tcgcallparanode.push_value_para;
{$ifdef i386} {$ifdef i386}
var var
cgsize : tcgsize;
href : treference; href : treference;
size : longint; size : longint;
{$endif i386} {$endif i386}
@ -961,7 +960,17 @@ implementation
case procdefinition.funcretloc[callerside].loc of case procdefinition.funcretloc[callerside].loc of
LOC_REGISTER, LOC_REGISTER,
LOC_CREGISTER: 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_FPUREGISTER,
LOC_CFPUREGISTER: LOC_CFPUREGISTER:
exclude(regs_to_save_fpu,getsupreg(procdefinition.funcretloc[callerside].register)); exclude(regs_to_save_fpu,getsupreg(procdefinition.funcretloc[callerside].register));
@ -1226,7 +1235,10 @@ begin
end. end.
{ {
$Log$ $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 * remove is_single_reference
* revert loading of ref-to-ref para valu * revert loading of ref-to-ref para valu