This is the mail archive of the
mailing list for the GCC project.
Questions about dynamic stack realignment
- From: "Steve Ellcey " <sellcey at imgtec dot com>
- To: <gcc at gcc dot gnu dot org>
- Date: Tue, 10 Mar 2015 15:13:40 -0700
- Subject: Questions about dynamic stack realignment
- Authentication-results: sourceware.org; auth=none
This email is a follow-up to some earlier email I sent about
alignment of spills and fills but did not get any replies to.
After looking into that I have decided to look more into dynamically
realigning the stack so that my spills and fills would be aligned and I have
done some experiments with stack realignment and I am trying to understand
what hooks already exist and how to use them.
Currently mips just has:
#define STACK_BOUNDARY (TARGET_NEWABI ? 128 : 64)
#define MAX_STACK_ALIGNMENT 128
#define PREFERRED_STACK_BOUNDARY (TARGET_MSA ? 128 : STACK_BOUNDARY)
#define INCOMING_STACK_BOUNDARY STACK_BOUNDARY
To try and get GCC to realign the stack to 128 bits if we are compiling
with the -mmsa option. After doing this I found I needed to create a
TARGET_GET_DRAP_RTX that would return a register rtx when a drap was
needed so I did that and I got things to compile but I don't see any
code that actually realigned the stack. It is not clear to me from the
documentation if there is shared code somewhere that should be trying to
realign the stack by changing the stack pointer given these definitions
or if I also need to add my own code to exand_prologue to do the stack
I am also not sure if I understand the drap (Dynamic Realign Argument Pointer)
register functionality correctly. My guess/understanding was that the drap
was used to access arguments in cases where the regular stack pointer may have
been changed in order to be aligned. Is that correct?
Any help/advice on how the hooks for dynamically realigned stack are supposed
to all work together would be appreciated.