From f3fb659020df1d8e15f903e2940b1e333c2649b4 Mon Sep 17 00:00:00 2001 From: Chung-Lin Tang Date: Sun, 19 Dec 2010 09:04:41 +0000 Subject: [PATCH] arm.c (arm_legitimate_index_p): Add VFP load/store index range case. 2010-12-19 Chung-Lin Tang 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 --- gcc/ChangeLog | 6 ++++++ gcc/config/arm/arm.c | 8 ++++---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/arm/vfp-1.c | 12 ++++++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0450bfd37e6..f79db55574a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-12-19 Chung-Lin Tang + + * 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 PR tree-optimization/46969 diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 2bfdd9fec55..d7108a38ec0 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 6f30e61b174..d8c514654c5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-12-19 Chung-Lin Tang + + * gcc.target/arm/vfp-1.c (test_ldst): New test for VFP + load/store immediate indexes. + 2010-12-19 Nicola Pero * 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 bbf91409842..3a7090e4be3 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]; +}