diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index d40b53e553..c03017f94c 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -1234,6 +1234,20 @@ function returns in a register and the caller receives it in an other one} code, since temp. allocation might occur before - carl } + + { for the save all registers we can simply use a pusha,popa which + push edi,esi,ebp,esp(ignored),ebx,edx,ecx,eax } + if (po_saveregisters in aktprocdef.procoptions) then + cg.g_save_all_registers(list) + else + { should we save edi,esi,ebx like C ? } + if (po_savestdregs in aktprocdef.procoptions) then + cg.g_save_standard_registers(list,aktprocdef.usedregisters); + + { the actual profile code can clobber some registers, + therefore if the context must be saved, do it before + the actual call to the profile code + } if (cs_profile in aktmoduleswitches) and not(po_assembler in aktprocdef.procoptions) and not(inlined) then @@ -1247,14 +1261,6 @@ function returns in a register and the caller receives it in an other one} cg.g_profilecode(list); end; - { for the save all registers we can simply use a pusha,popa which - push edi,esi,ebp,esp(ignored),ebx,edx,ecx,eax } - if (po_saveregisters in aktprocdef.procoptions) then - cg.g_save_all_registers(list) - else - { should we save edi,esi,ebx like C ? } - if (po_savestdregs in aktprocdef.procoptions) then - cg.g_save_standard_registers(list,aktprocdef.usedregisters); { a constructor needs a help procedure } if (aktprocdef.proctypeoption=potype_constructor) then @@ -1896,7 +1902,10 @@ function returns in a register and the caller receives it in an other one} end. { $Log$ - Revision 1.68 2002-12-01 22:06:59 carl + Revision 1.69 2002-12-03 22:13:39 carl + * bugfix of problems with profile code which clobbers some registers + + Revision 1.68 2002/12/01 22:06:59 carl * warning of portabilitiy problems with parasize / localsize Revision 1.67 2002/11/30 18:44:57 carl