aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChung-Lin Tang <cltang@codesourcery.com>2011-04-20 16:48:28 +0000
committerChung-Lin Tang <cltang@gcc.gnu.org>2011-04-20 16:48:28 +0000
commit01475747254ace9b52d6c62779639bffbf5b6c45 (patch)
treefa53038f0e332d99cc09ab25f7c6d4bad81c6241
parentcfc99488e79bb04cc76d8742f22e36404ecdd8b5 (diff)
downloadgcc-01475747254ace9b52d6c62779639bffbf5b6c45.zip
gcc-01475747254ace9b52d6c62779639bffbf5b6c45.tar.gz
gcc-01475747254ace9b52d6c62779639bffbf5b6c45.tar.bz2
arm.c (arm_legitimize_reload_address): For NEON quad-word modes, reduce to 9-bit index range when above 1016 limit.
2011-04-20 Chung-Lin Tang <cltang@codesourcery.com> * config/arm/arm.c (arm_legitimize_reload_address): For NEON quad-word modes, reduce to 9-bit index range when above 1016 limit. From-SVN: r172779
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/arm/arm.c10
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 455bfeb..c70cdb6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-04-20 Chung-Lin Tang <cltang@codesourcery.com>
+
+ * config/arm/arm.c (arm_legitimize_reload_address): For NEON
+ quad-word modes, reduce to 9-bit index range when above 1016
+ limit.
+
2011-04-20 Andrew Stubbs <ams@codesourcery.com>
* config/arm/arm.c (arm_gen_constant): Move movw support ....
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 38aa390..46255cb 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -6330,7 +6330,15 @@ arm_legitimize_reload_address (rtx *p,
: 0)
if (coproc_p)
- low = SIGN_MAG_LOW_ADDR_BITS (val, 10);
+ {
+ low = SIGN_MAG_LOW_ADDR_BITS (val, 10);
+
+ /* NEON quad-word load/stores are made of two double-word accesses,
+ so the valid index range is reduced by 8. Treat as 9-bit range if
+ we go over it. */
+ if (TARGET_NEON && VALID_NEON_QREG_MODE (mode) && low >= 1016)
+ low = SIGN_MAG_LOW_ADDR_BITS (val, 9);
+ }
else if (GET_MODE_SIZE (mode) == 8)
{
if (TARGET_LDRD)