I thought that 8-byte empty area looked odd in generated code but I think it's there to simplify stacking saved registers due to the lack of pre-decrement addressing modes (otherwise it doesn't make much sense - leaf function use wouldn't matter if it had such addressing modes).
It's in the gcc source.
/* EPIPHANY stack frames look like: Before call After call +-----------------------+ +-----------------------+ | | | | high | local variables, | | local variables, | mem | reg save area, etc. | | reg save area, etc. | | | | | +-----------------------+ +-----------------------+ | | | | | arguments on stack. | | arguments on stack. | | | | | SP+8->+-----------------------+FP+8m->+-----------------------+ | 2 word save area for | | reg parm save area, | | leaf funcs / flags | | only created for | SP+0->+-----------------------+ | variable argument | | functions | FP+8n->+-----------------------+ | | | register save area | | | +-----------------------+ | | | local variables | | | FP+0->+-----------------------+ | | | alloca allocations | | | +-----------------------+ | | | arguments on stack | | | SP+8->+-----------------------+ low | 2 word save area for | memory | leaf funcs / flags | SP+0->+-----------------------+
No comments:
Post a Comment