https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110188
Kito Cheng <kito at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |kito at gcc dot gnu.org
--- Comment #5 from Kito Cheng <kito at gcc dot gnu.org> ---
Each stack area will align to 16 byte, that could be optimized in theory, but
will complicate the frame layout implementation.
----sp - 0
a9 / outgoing stack arguments area
----sp - 4
<unused> / outgoing stack arguments area
----sp - 8
<unused> / outgoing stack arguments area
----sp - 12
<unused> / outgoing stack arguments area
----sp - 16
<unused> / GPR save area
----sp - 20
<unused> / GPR save area
----sp - 24
<unused> / GPR save area
----sp - 28
ra / GPR save area
----sp - 32
Complete layout has document in riscv.cc:
+-------------------------------+
| |
| incoming stack arguments |
| |
+-------------------------------+ <-- incoming stack pointer
| |
| callee-allocated save area |
| for arguments that are |
| split between registers and |
| the stack |
| |
+-------------------------------+ <-- arg_pointer_rtx
| |
| callee-allocated save area |
| for register varargs |
| |
+-------------------------------+ <-- hard_frame_pointer_rtx;
| | stack_pointer_rtx + gp_sp_offset
| GPR save area | + UNITS_PER_WORD
| |
+-------------------------------+ <-- stack_pointer_rtx + fp_sp_offset
| | + UNITS_PER_HWVALUE
| FPR save area |
| |
+-------------------------------+ <-- frame_pointer_rtx (virtual)
| |
| local variables |
| |
P +-------------------------------+
| |
| outgoing stack arguments |
| |
+-------------------------------+ <-- stack_pointer_rtx