aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChung-Lin Tang <cltang@codesourcery.com>2010-12-19 09:04:41 +0000
committerChung-Lin Tang <cltang@gcc.gnu.org>2010-12-19 09:04:41 +0000
commitf3fb659020df1d8e15f903e2940b1e333c2649b4 (patch)
tree9e56005936eabf5d930be187ec45e50370fe46b6
parent120d5f8ea40c87b7451278186dc60849e5455af9 (diff)
downloadgcc-f3fb659020df1d8e15f903e2940b1e333c2649b4.zip
gcc-f3fb659020df1d8e15f903e2940b1e333c2649b4.tar.gz
gcc-f3fb659020df1d8e15f903e2940b1e333c2649b4.tar.bz2
arm.c (arm_legitimate_index_p): Add VFP load/store index range case.
2010-12-19 Chung-Lin Tang <cltang@codesourcery.com> gcc/ * config/arm/arm.c (arm_legitimate_index_p): Add VFP load/store index range case. Change to SF/DFmode tests to avoid capturing HFmode. (thumb2_legitimate_index_p): Same. gcc/testsuite/ * gcc.target/arm/vfp-1.c (test_ldst): New test for VFP load/store immediate indexes. From-SVN: r168045
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/arm/arm.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/arm/vfp-1.c12
4 files changed, 27 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0450bfd..f79db55 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-19 Chung-Lin Tang <cltang@codesourcery.com>
+
+ * config/arm/arm.c (arm_legitimate_index_p): Add VFP load/store
+ index range case. Change to SF/DFmode tests to avoid capturing HFmode.
+ (thumb2_legitimate_index_p): Same.
+
2010-12-18 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/46969
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 2bfdd9f..d7108a3 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -5647,8 +5647,8 @@ arm_legitimate_index_p (enum machine_mode mode, rtx index, RTX_CODE outer,
/* Standard coprocessor addressing modes. */
if (TARGET_HARD_FLOAT
- && (TARGET_FPA || TARGET_MAVERICK)
- && (GET_MODE_CLASS (mode) == MODE_FLOAT
+ && (TARGET_VFP || TARGET_FPA || TARGET_MAVERICK)
+ && (mode == SFmode || mode == DFmode
|| (TARGET_MAVERICK && mode == DImode)))
return (code == CONST_INT && INTVAL (index) < 1024
&& INTVAL (index) > -1024
@@ -5768,8 +5768,8 @@ thumb2_legitimate_index_p (enum machine_mode mode, rtx index, int strict_p)
/* ??? Combine arm and thumb2 coprocessor addressing modes. */
/* Standard coprocessor addressing modes. */
if (TARGET_HARD_FLOAT
- && (TARGET_FPA || TARGET_MAVERICK)
- && (GET_MODE_CLASS (mode) == MODE_FLOAT
+ && (TARGET_VFP || TARGET_FPA || TARGET_MAVERICK)
+ && (mode == SFmode || mode == DFmode
|| (TARGET_MAVERICK && mode == DImode)))
return (code == CONST_INT && INTVAL (index) < 1024
&& INTVAL (index) > -1024
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6f30e61..d8c5146 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-12-19 Chung-Lin Tang <cltang@codesourcery.com>
+
+ * gcc.target/arm/vfp-1.c (test_ldst): New test for VFP
+ load/store immediate indexes.
+
2010-12-19 Nicola Pero <nicola.pero@meta-innovation.com>
* objc.dg/gnu-api-2-resolve-method.m: Include objc/message.h.
diff --git a/gcc/testsuite/gcc.target/arm/vfp-1.c b/gcc/testsuite/gcc.target/arm/vfp-1.c
index bbf9140..3a7090e 100644
--- a/gcc/testsuite/gcc.target/arm/vfp-1.c
+++ b/gcc/testsuite/gcc.target/arm/vfp-1.c
@@ -125,3 +125,15 @@ void test_convert () {
d1 = u1;
}
+void test_ldst (float f[], double d[]) {
+ /* { dg-final { scan-assembler "flds.+ \\\[r0, #1020\\\]" } } */
+ /* { dg-final { scan-assembler "flds.+ \\\[r0, #-1020\\\]" } } */
+ /* { dg-final { scan-assembler "add.+ r0, #1024" } } */
+ /* { dg-final { scan-assembler "fsts.+ \\\[r0, #0\\\]$" } } */
+ f[256] = f[255] + f[-255];
+
+ /* { dg-final { scan-assembler "fldd.+ \\\[r1, #1016\\\]" } } */
+ /* { dg-final { scan-assembler "fldd.+ \\\[r1, #-1016\\\]" } } */
+ /* { dg-final { scan-assembler "fstd.+ \\\[r1, #256\\\]" } } */
+ d[32] = d[127] + d[-127];
+}