diff --git a/compiler/ncgcal.pas b/compiler/ncgcal.pas index 6fe67bd1c7..cb346e3cc6 100644 --- a/compiler/ncgcal.pas +++ b/compiler/ncgcal.pas @@ -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