From 8cb32ff23b85651ff9363e06ba9c7171bc66216e Mon Sep 17 00:00:00 2001 From: Daniel Gutson Date: Wed, 14 Oct 2009 19:18:20 +0000 Subject: [PATCH] neon.md (neon_vshll_n): Checking Bounds fixed. 2009-10-14 Daniel Gutson gcc/ * config/arm/neon.md (neon_vshll_n): Checking Bounds fixed. gcc/testsuite/ * gcc.target/arm/neon/vfp-shift-a2t2.c: New test case. From-SVN: r152777 --- ChangeLog | 9 +++++++ gcc/config/arm/neon.md | 3 ++- .../gcc.target/arm/neon/vfp-shift-a2t2.c | 27 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c diff --git a/ChangeLog b/ChangeLog index 552f0457ae5..86a082dd8ce 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-10-14 Daniel Gutson + + gcc/ + * config/arm/neon.md (neon_vshll_n): Checking Bounds + fixed. + + gcc/testsuite/ + * gcc.target/arm/neon/vfp-shift-a2t2.c: New test case. + 2009-10-13 Ralf Wildenhues * configure.ac: Add 'lto' to enable_languages, not diff --git a/gcc/config/arm/neon.md b/gcc/config/arm/neon.md index 85bc3eed100..7d1ef111339 100644 --- a/gcc/config/arm/neon.md +++ b/gcc/config/arm/neon.md @@ -3655,7 +3655,8 @@ UNSPEC_VSHLL_N))] "TARGET_NEON" { - neon_const_bounds (operands[2], 0, neon_element_bits (mode)); + /* The boundaries are: 0 < imm <= size. */ + neon_const_bounds (operands[2], 0, neon_element_bits (mode) + 1); return "vshll.%T3%#\t%q0, %P1, %2"; } [(set_attr "neon_type" "neon_shift_1")] diff --git a/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c b/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c new file mode 100644 index 00000000000..2541df84169 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon/vfp-shift-a2t2.c @@ -0,0 +1,27 @@ +/* Check that NEON vector shifts support immediate values == size. /* + +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-save-temps -mfpu=neon -mfloat-abi=softfp" } */ + +#include + +uint16x8_t test_vshll_n_u8 (uint8x8_t a) +{ + return vshll_n_u8(a, 8); +} + +uint32x4_t test_vshll_n_u16 (uint16x4_t a) +{ + return vshll_n_u16(a, 16); +} + +uint64x2_t test_vshll_n_u32 (uint32x2_t a) +{ + return vshll_n_u32(a, 32); +} + +/* { dg-final { scan-assembler "vshll\.u16\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vshll\.u32\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { scan-assembler "vshll\.u8\[ \]+\[qQ\]\[0-9\]+, \[dD\]\[0-9\]+, #\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */ +/* { dg-final { cleanup-saved-temps } } */