summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authoryufeng <yufeng@138bc75d-0d04-0410-961f-82ee72b054a4>2013-07-23 12:33:14 +0000
committeryufeng <yufeng@138bc75d-0d04-0410-961f-82ee72b054a4>2013-07-23 12:33:14 +0000
commitec8b87268ff5a4209bd4a7d37afbddbabb382e74 (patch)
tree064017f8dad846a7cd9b78b309f4e3a47ce22c3b /gcc
parentb54ba0cbc4849d8dd28ebb99616e327887182f3d (diff)
downloadgcc-ec8b87268ff5a4209bd4a7d37afbddbabb382e74.tar.gz
[AArch64, ILP32] 6/6 Add support for "wsp" register.
gcc/ * config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Also return true for SP_REGNUM if mode == ptr_mode. * config/aarch64/aarch64.h (ADDITIONAL_REGISTER_NAMES): Add "wsp" with value R0_REGNUM + 31. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@201170 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/aarch64/aarch64.c9
-rw-r--r--gcc/config/aarch64/aarch64.h2
3 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index df9bb9454dd..db2fb7cabea 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2013-07-23 Yufeng Zhang <yufeng.zhang@arm.com>
+ * config/aarch64/aarch64.c (aarch64_hard_regno_mode_ok): Also return
+ true for SP_REGNUM if mode == ptr_mode.
+ * config/aarch64/aarch64.h (ADDITIONAL_REGISTER_NAMES): Add "wsp"
+ with value R0_REGNUM + 31.
+
+2013-07-23 Yufeng Zhang <yufeng.zhang@arm.com>
+
* config/aarch64/aarch64.c (aarch64_pad_arg_upward): In big-endian,
pad pointer-typed argument downward.
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 73e8657b828..aed035a434e 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -382,8 +382,13 @@ aarch64_hard_regno_mode_ok (unsigned regno, enum machine_mode mode)
if (GET_MODE_CLASS (mode) == MODE_CC)
return regno == CC_REGNUM;
- if (regno == SP_REGNUM || regno == FRAME_POINTER_REGNUM
- || regno == ARG_POINTER_REGNUM)
+ if (regno == SP_REGNUM)
+ /* The purpose of comparing with ptr_mode is to support the
+ global register variable associated with the stack pointer
+ register via the syntax of asm ("wsp") in ILP32. */
+ return mode == Pmode || mode == ptr_mode;
+
+ if (regno == FRAME_POINTER_REGNUM || regno == ARG_POINTER_REGNUM)
return mode == Pmode;
if (GP_REGNUM_P (regno) && ! aarch64_vect_struct_mode_p (mode))
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index e1fa4134e3e..092426973c6 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -278,7 +278,7 @@ extern unsigned long aarch64_tune_flags;
R_ALIASES(16), R_ALIASES(17), R_ALIASES(18), R_ALIASES(19), \
R_ALIASES(20), R_ALIASES(21), R_ALIASES(22), R_ALIASES(23), \
R_ALIASES(24), R_ALIASES(25), R_ALIASES(26), R_ALIASES(27), \
- R_ALIASES(28), R_ALIASES(29), R_ALIASES(30), /* 31 omitted */ \
+ R_ALIASES(28), R_ALIASES(29), R_ALIASES(30), {"wsp", R0_REGNUM + 31}, \
V_ALIASES(0), V_ALIASES(1), V_ALIASES(2), V_ALIASES(3), \
V_ALIASES(4), V_ALIASES(5), V_ALIASES(6), V_ALIASES(7), \
V_ALIASES(8), V_ALIASES(9), V_ALIASES(10), V_ALIASES(11), \