The patch https://gcc.gnu.org/ml/gcc-patches/2014-09/msg02654.html
from last year changed the definition of LR in CALL_USED_REGISTERS,
but didn't update the comment above the #define to reflect the new usage.
This patch bring the comment inline with the implementation.
OK for trunk?
Thanks.
2015-10-16 Jiong. Wang <[email protected]>
gcc/
* config/aarch64/aarch64.h: Update the comments on usage of X30.
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 5a8db76..1eaaca0 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -210,14 +210,17 @@ extern unsigned aarch64_architecture_version;
significant bits. Unlike AArch32 S1 is not packed into D0,
etc. */
-/* Note that we don't mark X30 as a call-clobbered register. The idea is
- that it's really the call instructions themselves which clobber X30.
- We don't care what the called function does with it afterwards.
-
- This approach makes it easier to implement sibcalls. Unlike normal
- calls, sibcalls don't clobber X30, so the register reaches the
- called function intact. EPILOGUE_USES says that X30 is useful
- to the called function. */
+/* We don't mark X30 as a fixed register while we mark it as a caller-saved
+ register. The idea is we want X30 to be allocable as a caller-saved
+ register when possible.
+
+ NOTE: although X30 is marked as caller-saved, it's callee-saved at the same
+ time. The caller-saved attribute makes sure if X30 is allocated as free
+ register to hold any temporary value then the value is saved properly across
+ function call. While on AArch64, the call instruction writes the return
+ address to LR. If the called function is a non-leaf function, it is the
+ responsibility of the callee to save and restore LR appropriately in it's
+ prologue / epilogue. */
#define FIXED_REGISTERS \
{ \