* also align esp for all procedures/functions declared "assembler",

since they may do a call. If you don't want that to happen, use
    the nostackframe directive (i386-darwin only)

git-svn-id: trunk@2896 -
This commit is contained in:
Jonas Maebe 2006-03-12 21:20:29 +00:00
parent 435aee2398
commit 9125d0c189
2 changed files with 6 additions and 2 deletions

View File

@ -262,7 +262,10 @@ unit cgcpu;
stacksize:=current_procinfo.calc_stackframe_size;
if (target_info.system = system_i386_darwin) and
((stacksize <> 0) or
(pi_do_call in current_procinfo.flags)) then
(pi_do_call in current_procinfo.flags) or
{ can't detect if a call in this case -> use nostackframe }
{ if you (think you) know what you are doing }
(po_assembler in current_procinfo.procdef.procoptions)) then
stacksize := align(stacksize+sizeof(aint),16) - sizeof(aint);
if (stacksize<>0) then
cg.a_op_const_reg(list,OP_ADD,OS_ADDR,stacksize,current_procinfo.framepointer);

View File

@ -1911,7 +1911,8 @@ unit cgx86;
if (localsize<>0) or
((target_info.system = system_i386_darwin) and
(stackmisalignment <> 0) and
(pi_do_call in current_procinfo.flags)) then
((pi_do_call in current_procinfo.flags) or
(po_assembler in current_procinfo.procdef.procoptions))) then
begin
if (target_info.system = system_i386_darwin) then
localsize := align(localsize+stackmisalignment,16)-stackmisalignment;