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 <jiong.w...@arm.com> 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 \ { \