* tcg386.g_proc_exit: instead of recalculating stack size, use current_procinfo.final_localsize which was calculated in g_proc_entry.

* tcgx86.g_proc_entry: don't over-allocate stack in SEH finalizer procedures.

git-svn-id: trunk@26251 -
This commit is contained in:
sergei 2013-12-19 10:32:32 +00:00
parent 258e8c58a4
commit f2096de53a
2 changed files with 3 additions and 13 deletions

View File

@ -303,8 +303,6 @@ unit cgcpu;
list.concat(Taicpu.op_ref_reg(A_LEA,TCGSize2OpSize[OS_ADDR],href,NR_STACK_POINTER_REG));
end;
var
stacksize : longint;
begin
{ MMX needs to call EMMS }
if assigned(rg[R_MMXREGISTER]) and
@ -317,16 +315,8 @@ unit cgcpu;
if (current_procinfo.framepointer=NR_STACK_POINTER_REG) or
(current_procinfo.procdef.proctypeoption=potype_exceptfilter) then
begin
stacksize:=current_procinfo.calc_stackframe_size;
if (target_info.stackalign>4) and
((stacksize <> 0) or
(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),target_info.stackalign) - sizeof(aint);
if stacksize<>0 then
increase_sp(stacksize);
if current_procinfo.final_localsize<>0 then
increase_sp(current_procinfo.final_localsize);
if (not paramanager.use_fixed_stack) then
internal_restore_regs(list,true);
if (current_procinfo.procdef.proctypeoption=potype_exceptfilter) then

View File

@ -2660,7 +2660,7 @@ unit cgx86;
Exception filters don't have own local vars, and temps are 'mapped'
to the parent procedure.
maxpushedparasize is already aligned at least on x86_64. }
//localsize:=current_procinfo.maxpushedparasize;
localsize:=current_procinfo.maxpushedparasize;
end;
current_asmdata.asmcfi.cfa_def_cfa_register(list,NR_FRAME_POINTER_REG);
end;