From 1d9fec7937f45dde5e04cac966a2d9a12f2fc15a Mon Sep 17 00:00:00 2001 From: Yiran Wang Date: Tue, 23 Jun 2015 15:33:17 -0700 Subject: Synchronize with google/gcc-4_9 to r224707 (from r214835) Change-Id: I3d6f06fc613c8f8b6a82143dc44b7338483aac5d --- .../gcc.target/aarch64/madd_after_asm_1.c | 14 + gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62040.c | 21 ++ gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62262.c | 20 ++ gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr63424.c | 39 +++ .../gcc.target/aarch64/scalar_intrinsics.c | 366 ++++++++++----------- .../testsuite/gcc.target/aarch64/sisd-shft-neg_1.c | 38 +++ .../gcc.target/aarch64/vqdmlalh_lane_s16.c | 4 +- .../gcc.target/aarch64/vqdmlals_lane_s32.c | 2 +- .../gcc.target/aarch64/vqdmlslh_lane_s16.c | 4 +- .../gcc.target/aarch64/vqdmlsls_lane_s32.c | 2 +- .../gcc.target/aarch64/vqdmullh_lane_s16.c | 4 +- .../gcc.target/aarch64/vqdmulls_lane_s32.c | 2 +- 12 files changed, 324 insertions(+), 192 deletions(-) create mode 100644 gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr63424.c create mode 100644 gcc-4.9/gcc/testsuite/gcc.target/aarch64/sisd-shft-neg_1.c (limited to 'gcc-4.9/gcc/testsuite/gcc.target/aarch64') diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c index 523941d47..321d8f002 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/madd_after_asm_1.c @@ -12,3 +12,17 @@ test (int a, double b, int c, int d, int e) ); return c * d + e; } +/* { dg-do assemble } */ +/* { dg-options "-O2 -mfix-cortex-a53-835769" } */ + +int +test (int a, double b, int c, int d, int e) +{ + double result; + __asm__ __volatile ("// %0, %1" + : "=w" (result) + : "0" (b) + : /* No clobbers */ + ); + return c * d + e; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62040.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62040.c index cfb4979f8..c6cae4d5b 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62040.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62040.c @@ -19,3 +19,24 @@ foo () int32x4_t out = vtrn1q_s32 (xxx, xxx); bar (out); } +/* { dg-do compile } */ +/* { dg-options "-g -Os" } */ + +#include "arm_neon.h" + +extern void bar (int32x4_t); + +void +foo () +{ + int32x4x4_t rows; + uint64x2x2_t row01; + + row01.val[0] = vreinterpretq_u64_s32 (rows.val[0]); + row01.val[1] = vreinterpretq_u64_s32 (rows.val[1]); + uint64x1_t row3l = vget_low_u64 (row01.val[0]); + row01.val[0] = vcombine_u64 (vget_low_u64 (row01.val[1]), row3l); + int32x4_t xxx = vreinterpretq_s32_u64 (row01.val[0]); + int32x4_t out = vtrn1q_s32 (xxx, xxx); + bar (out); +} diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62262.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62262.c index 5bf90bf7f..20763b499 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62262.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr62262.c @@ -18,3 +18,23 @@ int foo(int value) int packed = (unsigned)(value << 9) >> 9; return packed; } +/* { dg-do compile } */ +/* { dg-options "-O2 -fprofile-use" } */ + +static inline int CLZ(int mask) { + return mask ? __builtin_clz(mask) : 32; +} + +int foo(int value) +{ + if (value == 0) + return 0; + + int bias = CLZ(value); + value >>= bias; + int zeros = CLZ(value << 1); + value <<= zeros; + + int packed = (unsigned)(value << 9) >> 9; + return packed; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr63424.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr63424.c new file mode 100644 index 000000000..c6bd7626f --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/pr63424.c @@ -0,0 +1,39 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +#include + +uint32_t +truncate_int (const unsigned long long value) +{ + if ( value < 0 ) + { + return 0; + } + else if ( value > UINT32_MAX ) + { + return UINT32_MAX; + } + else + return (uint32_t)value; +} + +uint32_t +mul (const unsigned long long x, const unsigned long long y) +{ + uint32_t value = truncate_int (x * y); + return value; +} + +uint32_t * +test(unsigned size, uint32_t *a, uint32_t s) +{ + unsigned i; + + for (i = 0; i < size; i++) + { + a[i] = mul (a[i], s); + } + + return a; +} diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c index 782f6d194..d1980bc19 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c @@ -195,20 +195,20 @@ test_vcltzd_s64 (int64x1_t a) /* { dg-final { scan-assembler-times "aarch64_get_lanev16qi" 2 } } */ -int8x1_t +int8_t test_vdupb_lane_s8 (int8x16_t a) { - int8x1_t res; + int8_t res; force_simd (a); res = vdupb_laneq_s8 (a, 2); force_simd (res); return res; } -uint8x1_t +uint8_t test_vdupb_lane_u8 (uint8x16_t a) { - uint8x1_t res; + uint8_t res; force_simd (a); res = vdupb_laneq_u8 (a, 2); force_simd (res); @@ -217,20 +217,20 @@ test_vdupb_lane_u8 (uint8x16_t a) /* { dg-final { scan-assembler-times "aarch64_get_lanev8hi" 2 } } */ -int16x1_t +int16_t test_vduph_lane_s16 (int16x8_t a) { - int16x1_t res; + int16_t res; force_simd (a); res = vduph_laneq_s16 (a, 2); force_simd (res); return res; } -uint16x1_t +uint16_t test_vduph_lane_u16 (uint16x8_t a) { - uint16x1_t res; + uint16_t res; force_simd (a); res = vduph_laneq_u16 (a, 2); force_simd (res); @@ -239,20 +239,20 @@ test_vduph_lane_u16 (uint16x8_t a) /* { dg-final { scan-assembler-times "aarch64_get_lanev4si" 2 } } */ -int32x1_t +int32_t test_vdups_lane_s32 (int32x4_t a) { - int32x1_t res; + int32_t res; force_simd (a); res = vdups_laneq_s32 (a, 2); force_simd (res); return res; } -uint32x1_t +uint32_t test_vdups_lane_u32 (uint32x4_t a) { - uint32x1_t res; + uint32_t res; force_simd (a); res = vdups_laneq_u32 (a, 2); force_simd (res); @@ -322,24 +322,24 @@ test_vqaddd_u64 (uint64x1_t a, uint64x1_t b) /* { dg-final { scan-assembler-times "\\tuqadd\\ts\[0-9\]+" 1 } } */ -uint32x1_t -test_vqadds_u32 (uint32x1_t a, uint32x1_t b) +uint32_t +test_vqadds_u32 (uint32_t a, uint32_t b) { return vqadds_u32 (a, b); } /* { dg-final { scan-assembler-times "\\tuqadd\\th\[0-9\]+" 1 } } */ -uint16x1_t -test_vqaddh_u16 (uint16x1_t a, uint16x1_t b) +uint16_t +test_vqaddh_u16 (uint16_t a, uint16_t b) { return vqaddh_u16 (a, b); } /* { dg-final { scan-assembler-times "\\tuqadd\\tb\[0-9\]+" 1 } } */ -uint8x1_t -test_vqaddb_u8 (uint8x1_t a, uint8x1_t b) +uint8_t +test_vqaddb_u8 (uint8_t a, uint8_t b) { return vqaddb_u8 (a, b); } @@ -354,40 +354,40 @@ test_vqaddd_s64 (int64x1_t a, int64x1_t b) /* { dg-final { scan-assembler-times "\\tsqadd\\ts\[0-9\]+, s\[0-9\]+" 1 } } */ -int32x1_t -test_vqadds_s32 (int32x1_t a, int32x1_t b) +int32_t +test_vqadds_s32 (int32_t a, int32_t b) { return vqadds_s32 (a, b); } /* { dg-final { scan-assembler-times "\\tsqadd\\th\[0-9\]+, h\[0-9\]+" 1 } } */ -int16x1_t -test_vqaddh_s16 (int16x1_t a, int16x1_t b) +int16_t +test_vqaddh_s16 (int16_t a, int16_t b) { return vqaddh_s16 (a, b); } /* { dg-final { scan-assembler-times "\\tsqadd\\tb\[0-9\]+, b\[0-9\]+" 1 } } */ -int8x1_t -test_vqaddb_s8 (int8x1_t a, int8x1_t b) +int8_t +test_vqaddb_s8 (int8_t a, int8_t b) { return vqaddb_s8 (a, b); } /* { dg-final { scan-assembler-times "\\tsqdmlal\\ts\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */ -int32x1_t -test_vqdmlalh_s16 (int32x1_t a, int16x1_t b, int16x1_t c) +int32_t +test_vqdmlalh_s16 (int32_t a, int16_t b, int16_t c) { return vqdmlalh_s16 (a, b, c); } /* { dg-final { scan-assembler-times "\\tsqdmlal\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */ -int32x1_t -test_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c) +int32_t +test_vqdmlalh_lane_s16 (int32_t a, int16_t b, int16x4_t c) { return vqdmlalh_lane_s16 (a, b, c, 3); } @@ -395,7 +395,7 @@ test_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c) /* { dg-final { scan-assembler-times "\\tsqdmlal\\td\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */ int64x1_t -test_vqdmlals_s32 (int64x1_t a, int32x1_t b, int32x1_t c) +test_vqdmlals_s32 (int64x1_t a, int32_t b, int32_t c) { return vqdmlals_s32 (a, b, c); } @@ -403,23 +403,23 @@ test_vqdmlals_s32 (int64x1_t a, int32x1_t b, int32x1_t c) /* { dg-final { scan-assembler-times "\\tsqdmlal\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */ int64x1_t -test_vqdmlals_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c) +test_vqdmlals_lane_s32 (int64x1_t a, int32_t b, int32x2_t c) { return vqdmlals_lane_s32 (a, b, c, 1); } /* { dg-final { scan-assembler-times "\\tsqdmlsl\\ts\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */ -int32x1_t -test_vqdmlslh_s16 (int32x1_t a, int16x1_t b, int16x1_t c) +int32_t +test_vqdmlslh_s16 (int32_t a, int16_t b, int16_t c) { return vqdmlslh_s16 (a, b, c); } /* { dg-final { scan-assembler-times "\\tsqdmlsl\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */ -int32x1_t -test_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c) +int32_t +test_vqdmlslh_lane_s16 (int32_t a, int16_t b, int16x4_t c) { return vqdmlslh_lane_s16 (a, b, c, 3); } @@ -427,7 +427,7 @@ test_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c) /* { dg-final { scan-assembler-times "\\tsqdmlsl\\td\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */ int64x1_t -test_vqdmlsls_s32 (int64x1_t a, int32x1_t b, int32x1_t c) +test_vqdmlsls_s32 (int64x1_t a, int32_t b, int32_t c) { return vqdmlsls_s32 (a, b, c); } @@ -435,55 +435,55 @@ test_vqdmlsls_s32 (int64x1_t a, int32x1_t b, int32x1_t c) /* { dg-final { scan-assembler-times "\\tsqdmlsl\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */ int64x1_t -test_vqdmlsls_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c) +test_vqdmlsls_lane_s32 (int64x1_t a, int32_t b, int32x2_t c) { return vqdmlsls_lane_s32 (a, b, c, 1); } /* { dg-final { scan-assembler-times "\\tsqdmulh\\th\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */ -int16x1_t -test_vqdmulhh_s16 (int16x1_t a, int16x1_t b) +int16_t +test_vqdmulhh_s16 (int16_t a, int16_t b) { return vqdmulhh_s16 (a, b); } /* { dg-final { scan-assembler-times "\\tsqdmulh\\th\[0-9\]+, h\[0-9\]+, v" 1 } } */ -int16x1_t -test_vqdmulhh_lane_s16 (int16x1_t a, int16x4_t b) +int16_t +test_vqdmulhh_lane_s16 (int16_t a, int16x4_t b) { return vqdmulhh_lane_s16 (a, b, 3); } /* { dg-final { scan-assembler-times "\\tsqdmulh\\ts\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */ -int32x1_t -test_vqdmulhs_s32 (int32x1_t a, int32x1_t b) +int32_t +test_vqdmulhs_s32 (int32_t a, int32_t b) { return vqdmulhs_s32 (a, b); } /* { dg-final { scan-assembler-times "\\tsqdmulh\\ts\[0-9\]+, s\[0-9\]+, v" 1 } } */ -int32x1_t -test_vqdmulhs_lane_s32 (int32x1_t a, int32x2_t b) +int32_t +test_vqdmulhs_lane_s32 (int32_t a, int32x2_t b) { return vqdmulhs_lane_s32 (a, b, 1); } /* { dg-final { scan-assembler-times "\\tsqdmull\\ts\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */ -int32x1_t -test_vqdmullh_s16 (int16x1_t a, int16x1_t b) +int32_t +test_vqdmullh_s16 (int16_t a, int16_t b) { return vqdmullh_s16 (a, b); } /* { dg-final { scan-assembler-times "\\tsqdmull\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */ -int32x1_t -test_vqdmullh_lane_s16 (int16x1_t a, int16x4_t b) +int32_t +test_vqdmullh_lane_s16 (int16_t a, int16x4_t b) { return vqdmullh_lane_s16 (a, b, 3); } @@ -491,7 +491,7 @@ test_vqdmullh_lane_s16 (int16x1_t a, int16x4_t b) /* { dg-final { scan-assembler-times "\\tsqdmull\\td\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */ int64x1_t -test_vqdmulls_s32 (int32x1_t a, int32x1_t b) +test_vqdmulls_s32 (int32_t a, int32_t b) { return vqdmulls_s32 (a, b); } @@ -499,63 +499,63 @@ test_vqdmulls_s32 (int32x1_t a, int32x1_t b) /* { dg-final { scan-assembler-times "\\tsqdmull\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */ int64x1_t -test_vqdmulls_lane_s32 (int32x1_t a, int32x2_t b) +test_vqdmulls_lane_s32 (int32_t a, int32x2_t b) { return vqdmulls_lane_s32 (a, b, 1); } /* { dg-final { scan-assembler-times "\\tsqrdmulh\\th\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */ -int16x1_t -test_vqrdmulhh_s16 (int16x1_t a, int16x1_t b) +int16_t +test_vqrdmulhh_s16 (int16_t a, int16_t b) { return vqrdmulhh_s16 (a, b); } /* { dg-final { scan-assembler-times "\\tsqrdmulh\\th\[0-9\]+, h\[0-9\]+, v" 1 } } */ -int16x1_t -test_vqrdmulhh_lane_s16 (int16x1_t a, int16x4_t b) +int16_t +test_vqrdmulhh_lane_s16 (int16_t a, int16x4_t b) { return vqrdmulhh_lane_s16 (a, b, 3); } /* { dg-final { scan-assembler-times "\\tsqrdmulh\\ts\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */ -int32x1_t -test_vqrdmulhs_s32 (int32x1_t a, int32x1_t b) +int32_t +test_vqrdmulhs_s32 (int32_t a, int32_t b) { return vqrdmulhs_s32 (a, b); } /* { dg-final { scan-assembler-times "\\tsqrdmulh\\ts\[0-9\]+, s\[0-9\]+, v" 1 } } */ -int32x1_t -test_vqrdmulhs_lane_s32 (int32x1_t a, int32x2_t b) +int32_t +test_vqrdmulhs_lane_s32 (int32_t a, int32x2_t b) { return vqrdmulhs_lane_s32 (a, b, 1); } /* { dg-final { scan-assembler-times "\\tsuqadd\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vuqaddb_s8 (int8x1_t a, int8x1_t b) +int8_t +test_vuqaddb_s8 (int8_t a, int8_t b) { return vuqaddb_s8 (a, b); } /* { dg-final { scan-assembler-times "\\tsuqadd\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vuqaddh_s16 (int16x1_t a, int8x1_t b) +int16_t +test_vuqaddh_s16 (int16_t a, int8_t b) { return vuqaddh_s16 (a, b); } /* { dg-final { scan-assembler-times "\\tsuqadd\\ts\[0-9\]+" 1 } } */ -int32x1_t -test_vuqadds_s32 (int32x1_t a, int8x1_t b) +int32_t +test_vuqadds_s32 (int32_t a, int8_t b) { return vuqadds_s32 (a, b); } @@ -563,31 +563,31 @@ test_vuqadds_s32 (int32x1_t a, int8x1_t b) /* { dg-final { scan-assembler-times "\\tsuqadd\\td\[0-9\]+" 1 } } */ int64x1_t -test_vuqaddd_s64 (int64x1_t a, int8x1_t b) +test_vuqaddd_s64 (int64x1_t a, int8_t b) { return vuqaddd_s64 (a, b); } /* { dg-final { scan-assembler-times "\\tusqadd\\tb\[0-9\]+" 1 } } */ -uint8x1_t -test_vsqaddb_u8 (uint8x1_t a, int8x1_t b) +uint8_t +test_vsqaddb_u8 (uint8_t a, int8_t b) { return vsqaddb_u8 (a, b); } /* { dg-final { scan-assembler-times "\\tusqadd\\th\[0-9\]+" 1 } } */ -uint16x1_t -test_vsqaddh_u16 (uint16x1_t a, int8x1_t b) +uint16_t +test_vsqaddh_u16 (uint16_t a, int8_t b) { return vsqaddh_u16 (a, b); } /* { dg-final { scan-assembler-times "\\tusqadd\\ts\[0-9\]+" 1 } } */ -uint32x1_t -test_vsqadds_u32 (uint32x1_t a, int8x1_t b) +uint32_t +test_vsqadds_u32 (uint32_t a, int8_t b) { return vsqadds_u32 (a, b); } @@ -595,78 +595,78 @@ test_vsqadds_u32 (uint32x1_t a, int8x1_t b) /* { dg-final { scan-assembler-times "\\tusqadd\\td\[0-9\]+" 1 } } */ uint64x1_t -test_vsqaddd_u64 (uint64x1_t a, int8x1_t b) +test_vsqaddd_u64 (uint64x1_t a, int8_t b) { return vsqaddd_u64 (a, b); } /* { dg-final { scan-assembler-times "\\tsqabs\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqabsb_s8 (int8x1_t a) +int8_t +test_vqabsb_s8 (int8_t a) { return vqabsb_s8 (a); } /* { dg-final { scan-assembler-times "\\tsqabs\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqabsh_s16 (int16x1_t a) +int16_t +test_vqabsh_s16 (int16_t a) { return vqabsh_s16 (a); } /* { dg-final { scan-assembler-times "\\tsqabs\\ts\[0-9\]+" 1 } } */ -int32x1_t -test_vqabss_s32 (int32x1_t a) +int32_t +test_vqabss_s32 (int32_t a) { return vqabss_s32 (a); } /* { dg-final { scan-assembler-times "\\tsqneg\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqnegb_s8 (int8x1_t a) +int8_t +test_vqnegb_s8 (int8_t a) { return vqnegb_s8 (a); } /* { dg-final { scan-assembler-times "\\tsqneg\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqnegh_s16 (int16x1_t a) +int16_t +test_vqnegh_s16 (int16_t a) { return vqnegh_s16 (a); } /* { dg-final { scan-assembler-times "\\tsqneg\\ts\[0-9\]+" 1 } } */ -int32x1_t -test_vqnegs_s32 (int32x1_t a) +int32_t +test_vqnegs_s32 (int32_t a) { return vqnegs_s32 (a); } /* { dg-final { scan-assembler-times "\\tsqxtun\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqmovunh_s16 (int16x1_t a) +int8_t +test_vqmovunh_s16 (int16_t a) { return vqmovunh_s16 (a); } /* { dg-final { scan-assembler-times "\\tsqxtun\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqmovuns_s32 (int32x1_t a) +int16_t +test_vqmovuns_s32 (int32_t a) { return vqmovuns_s32 (a); } /* { dg-final { scan-assembler-times "\\tsqxtun\\ts\[0-9\]+" 1 } } */ -int32x1_t +int32_t test_vqmovund_s64 (int64x1_t a) { return vqmovund_s64 (a); @@ -674,23 +674,23 @@ test_vqmovund_s64 (int64x1_t a) /* { dg-final { scan-assembler-times "\\tsqxtn\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqmovnh_s16 (int16x1_t a) +int8_t +test_vqmovnh_s16 (int16_t a) { return vqmovnh_s16 (a); } /* { dg-final { scan-assembler-times "\\tsqxtn\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqmovns_s32 (int32x1_t a) +int16_t +test_vqmovns_s32 (int32_t a) { return vqmovns_s32 (a); } /* { dg-final { scan-assembler-times "\\tsqxtn\\ts\[0-9\]+" 1 } } */ -int32x1_t +int32_t test_vqmovnd_s64 (int64x1_t a) { return vqmovnd_s64 (a); @@ -698,23 +698,23 @@ test_vqmovnd_s64 (int64x1_t a) /* { dg-final { scan-assembler-times "\\tuqxtn\\tb\[0-9\]+" 1 } } */ -uint8x1_t -test_vqmovnh_u16 (uint16x1_t a) +uint8_t +test_vqmovnh_u16 (uint16_t a) { return vqmovnh_u16 (a); } /* { dg-final { scan-assembler-times "\\tuqxtn\\th\[0-9\]+" 1 } } */ -uint16x1_t -test_vqmovns_u32 (uint32x1_t a) +uint16_t +test_vqmovns_u32 (uint32_t a) { return vqmovns_u32 (a); } /* { dg-final { scan-assembler-times "\\tuqxtn\\ts\[0-9\]+" 1 } } */ -uint32x1_t +uint32_t test_vqmovnd_u64 (uint64x1_t a) { return vqmovnd_u64 (a); @@ -753,24 +753,24 @@ test_vqsubd_u64 (uint64x1_t a, uint64x1_t b) /* { dg-final { scan-assembler-times "\\tuqsub\\ts\[0-9\]+" 1 } } */ -uint32x1_t -test_vqsubs_u32 (uint32x1_t a, uint32x1_t b) +uint32_t +test_vqsubs_u32 (uint32_t a, uint32_t b) { return vqsubs_u32 (a, b); } /* { dg-final { scan-assembler-times "\\tuqsub\\th\[0-9\]+" 1 } } */ -uint16x1_t -test_vqsubh_u16 (uint16x1_t a, uint16x1_t b) +uint16_t +test_vqsubh_u16 (uint16_t a, uint16_t b) { return vqsubh_u16 (a, b); } /* { dg-final { scan-assembler-times "\\tuqsub\\tb\[0-9\]+" 1 } } */ -uint8x1_t -test_vqsubb_u8 (uint8x1_t a, uint8x1_t b) +uint8_t +test_vqsubb_u8 (uint8_t a, uint8_t b) { return vqsubb_u8 (a, b); } @@ -785,24 +785,24 @@ test_vqsubd_s64 (int64x1_t a, int64x1_t b) /* { dg-final { scan-assembler-times "\\tsqsub\\ts\[0-9\]+" 1 } } */ -int32x1_t -test_vqsubs_s32 (int32x1_t a, int32x1_t b) +int32_t +test_vqsubs_s32 (int32_t a, int32_t b) { return vqsubs_s32 (a, b); } /* { dg-final { scan-assembler-times "\\tsqsub\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqsubh_s16 (int16x1_t a, int16x1_t b) +int16_t +test_vqsubh_s16 (int16_t a, int16_t b) { return vqsubh_s16 (a, b); } /* { dg-final { scan-assembler-times "\\tsqsub\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqsubb_s8 (int8x1_t a, int8x1_t b) +int8_t +test_vqsubb_s8 (int8_t a, int8_t b) { return vqsubb_s8 (a, b); } @@ -908,24 +908,24 @@ test_vrsrad_n_u64 (uint64x1_t a, uint64x1_t b) /* { dg-final { scan-assembler-times "\\tsqrshl\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqrshlb_s8 (int8x1_t a, int8x1_t b) +int8_t +test_vqrshlb_s8 (int8_t a, int8_t b) { return vqrshlb_s8 (a, b); } /* { dg-final { scan-assembler-times "\\tsqrshl\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqrshlh_s16 (int16x1_t a, int16x1_t b) +int16_t +test_vqrshlh_s16 (int16_t a, int16_t b) { return vqrshlh_s16 (a, b); } /* { dg-final { scan-assembler-times "\\tsqrshl\\ts\[0-9\]+" 1 } } */ -int32x1_t -test_vqrshls_s32 (int32x1_t a, int32x1_t b) +int32_t +test_vqrshls_s32 (int32_t a, int32_t b) { return vqrshls_s32 (a, b); } @@ -940,24 +940,24 @@ test_vqrshld_s64 (int64x1_t a, int64x1_t b) /* { dg-final { scan-assembler-times "\\tuqrshl\\tb\[0-9\]+" 1 } } */ -uint8x1_t -test_vqrshlb_u8 (uint8x1_t a, uint8x1_t b) +uint8_t +test_vqrshlb_u8 (uint8_t a, uint8_t b) { return vqrshlb_u8 (a, b); } /* { dg-final { scan-assembler-times "\\tuqrshl\\th\[0-9\]+" 1 } } */ -uint16x1_t -test_vqrshlh_u16 (uint16x1_t a, uint16x1_t b) +uint16_t +test_vqrshlh_u16 (uint16_t a, uint16_t b) { return vqrshlh_u16 (a, b); } /* { dg-final { scan-assembler-times "\\tuqrshl\\ts\[0-9\]+" 1 } } */ -uint32x1_t -test_vqrshls_u32 (uint32x1_t a, uint32x1_t b) +uint32_t +test_vqrshls_u32 (uint32_t a, uint32_t b) { return vqrshls_u32 (a, b); } @@ -972,24 +972,24 @@ test_vqrshld_u64 (uint64x1_t a, uint64x1_t b) /* { dg-final { scan-assembler-times "\\tsqshlu\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqshlub_n_s8 (int8x1_t a) +int8_t +test_vqshlub_n_s8 (int8_t a) { return vqshlub_n_s8 (a, 3); } /* { dg-final { scan-assembler-times "\\tsqshlu\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqshluh_n_s16 (int16x1_t a) +int16_t +test_vqshluh_n_s16 (int16_t a) { return vqshluh_n_s16 (a, 4); } /* { dg-final { scan-assembler-times "\\tsqshlu\\ts\[0-9\]+" 1 } } */ -int32x1_t -test_vqshlus_n_s32 (int32x1_t a) +int32_t +test_vqshlus_n_s32 (int32_t a) { return vqshlus_n_s32 (a, 5); } @@ -1004,42 +1004,42 @@ test_vqshlud_n_s64 (int64x1_t a) /* { dg-final { scan-assembler-times "\\tsqshl\\tb\[0-9\]+" 2 } } */ -int8x1_t -test_vqshlb_s8 (int8x1_t a, int8x1_t b) +int8_t +test_vqshlb_s8 (int8_t a, int8_t b) { return vqshlb_s8 (a, b); } -int8x1_t -test_vqshlb_n_s8 (int8x1_t a) +int8_t +test_vqshlb_n_s8 (int8_t a) { return vqshlb_n_s8 (a, 2); } /* { dg-final { scan-assembler-times "\\tsqshl\\th\[0-9\]+" 2 } } */ -int16x1_t -test_vqshlh_s16 (int16x1_t a, int16x1_t b) +int16_t +test_vqshlh_s16 (int16_t a, int16_t b) { return vqshlh_s16 (a, b); } -int16x1_t -test_vqshlh_n_s16 (int16x1_t a) +int16_t +test_vqshlh_n_s16 (int16_t a) { return vqshlh_n_s16 (a, 3); } /* { dg-final { scan-assembler-times "\\tsqshl\\ts\[0-9\]+" 2 } } */ -int32x1_t -test_vqshls_s32 (int32x1_t a, int32x1_t b) +int32_t +test_vqshls_s32 (int32_t a, int32_t b) { return vqshls_s32 (a, b); } -int32x1_t -test_vqshls_n_s32 (int32x1_t a) +int32_t +test_vqshls_n_s32 (int32_t a) { return vqshls_n_s32 (a, 4); } @@ -1060,42 +1060,42 @@ test_vqshld_n_s64 (int64x1_t a) /* { dg-final { scan-assembler-times "\\tuqshl\\tb\[0-9\]+" 2 } } */ -uint8x1_t -test_vqshlb_u8 (uint8x1_t a, uint8x1_t b) +uint8_t +test_vqshlb_u8 (uint8_t a, uint8_t b) { return vqshlb_u8 (a, b); } -uint8x1_t -test_vqshlb_n_u8 (uint8x1_t a) +uint8_t +test_vqshlb_n_u8 (uint8_t a) { return vqshlb_n_u8 (a, 2); } /* { dg-final { scan-assembler-times "\\tuqshl\\th\[0-9\]+" 2 } } */ -uint16x1_t -test_vqshlh_u16 (uint16x1_t a, uint16x1_t b) +uint16_t +test_vqshlh_u16 (uint16_t a, uint16_t b) { return vqshlh_u16 (a, b); } -uint16x1_t -test_vqshlh_n_u16 (uint16x1_t a) +uint16_t +test_vqshlh_n_u16 (uint16_t a) { return vqshlh_n_u16 (a, 3); } /* { dg-final { scan-assembler-times "\\tuqshl\\ts\[0-9\]+" 2 } } */ -uint32x1_t -test_vqshls_u32 (uint32x1_t a, uint32x1_t b) +uint32_t +test_vqshls_u32 (uint32_t a, uint32_t b) { return vqshls_u32 (a, b); } -uint32x1_t -test_vqshls_n_u32 (uint32x1_t a) +uint32_t +test_vqshls_n_u32 (uint32_t a) { return vqshls_n_u32 (a, 4); } @@ -1116,23 +1116,23 @@ test_vqshld_n_u64 (uint64x1_t a) /* { dg-final { scan-assembler-times "\\tsqshrun\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqshrunh_n_s16 (int16x1_t a) +int8_t +test_vqshrunh_n_s16 (int16_t a) { return vqshrunh_n_s16 (a, 2); } /* { dg-final { scan-assembler-times "\\tsqshrun\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqshruns_n_s32 (int32x1_t a) +int16_t +test_vqshruns_n_s32 (int32_t a) { return vqshruns_n_s32 (a, 3); } /* { dg-final { scan-assembler-times "\\tsqshrun\\ts\[0-9\]+" 1 } } */ -int32x1_t +int32_t test_vqshrund_n_s64 (int64x1_t a) { return vqshrund_n_s64 (a, 4); @@ -1140,23 +1140,23 @@ test_vqshrund_n_s64 (int64x1_t a) /* { dg-final { scan-assembler-times "\\tsqrshrun\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqrshrunh_n_s16 (int16x1_t a) +int8_t +test_vqrshrunh_n_s16 (int16_t a) { return vqrshrunh_n_s16 (a, 2); } /* { dg-final { scan-assembler-times "\\tsqrshrun\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqrshruns_n_s32 (int32x1_t a) +int16_t +test_vqrshruns_n_s32 (int32_t a) { return vqrshruns_n_s32 (a, 3); } /* { dg-final { scan-assembler-times "\\tsqrshrun\\ts\[0-9\]+" 1 } } */ -int32x1_t +int32_t test_vqrshrund_n_s64 (int64x1_t a) { return vqrshrund_n_s64 (a, 4); @@ -1164,23 +1164,23 @@ test_vqrshrund_n_s64 (int64x1_t a) /* { dg-final { scan-assembler-times "\\tsqshrn\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqshrnh_n_s16 (int16x1_t a) +int8_t +test_vqshrnh_n_s16 (int16_t a) { return vqshrnh_n_s16 (a, 2); } /* { dg-final { scan-assembler-times "\\tsqshrn\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqshrns_n_s32 (int32x1_t a) +int16_t +test_vqshrns_n_s32 (int32_t a) { return vqshrns_n_s32 (a, 3); } /* { dg-final { scan-assembler-times "\\tsqshrn\\ts\[0-9\]+" 1 } } */ -int32x1_t +int32_t test_vqshrnd_n_s64 (int64x1_t a) { return vqshrnd_n_s64 (a, 4); @@ -1188,23 +1188,23 @@ test_vqshrnd_n_s64 (int64x1_t a) /* { dg-final { scan-assembler-times "\\tuqshrn\\tb\[0-9\]+" 1 } } */ -uint8x1_t -test_vqshrnh_n_u16 (uint16x1_t a) +uint8_t +test_vqshrnh_n_u16 (uint16_t a) { return vqshrnh_n_u16 (a, 2); } /* { dg-final { scan-assembler-times "\\tuqshrn\\th\[0-9\]+" 1 } } */ -uint16x1_t -test_vqshrns_n_u32 (uint32x1_t a) +uint16_t +test_vqshrns_n_u32 (uint32_t a) { return vqshrns_n_u32 (a, 3); } /* { dg-final { scan-assembler-times "\\tuqshrn\\ts\[0-9\]+" 1 } } */ -uint32x1_t +uint32_t test_vqshrnd_n_u64 (uint64x1_t a) { return vqshrnd_n_u64 (a, 4); @@ -1212,23 +1212,23 @@ test_vqshrnd_n_u64 (uint64x1_t a) /* { dg-final { scan-assembler-times "\\tsqrshrn\\tb\[0-9\]+" 1 } } */ -int8x1_t -test_vqrshrnh_n_s16 (int16x1_t a) +int8_t +test_vqrshrnh_n_s16 (int16_t a) { return vqrshrnh_n_s16 (a, 2); } /* { dg-final { scan-assembler-times "\\tsqrshrn\\th\[0-9\]+" 1 } } */ -int16x1_t -test_vqrshrns_n_s32 (int32x1_t a) +int16_t +test_vqrshrns_n_s32 (int32_t a) { return vqrshrns_n_s32 (a, 3); } /* { dg-final { scan-assembler-times "\\tsqrshrn\\ts\[0-9\]+" 1 } } */ -int32x1_t +int32_t test_vqrshrnd_n_s64 (int64x1_t a) { return vqrshrnd_n_s64 (a, 4); @@ -1236,23 +1236,23 @@ test_vqrshrnd_n_s64 (int64x1_t a) /* { dg-final { scan-assembler-times "\\tuqrshrn\\tb\[0-9\]+" 1 } } */ -uint8x1_t -test_vqrshrnh_n_u16 (uint16x1_t a) +uint8_t +test_vqrshrnh_n_u16 (uint16_t a) { return vqrshrnh_n_u16 (a, 2); } /* { dg-final { scan-assembler-times "\\tuqrshrn\\th\[0-9\]+" 1 } } */ -uint16x1_t -test_vqrshrns_n_u32 (uint32x1_t a) +uint16_t +test_vqrshrns_n_u32 (uint32_t a) { return vqrshrns_n_u32 (a, 3); } /* { dg-final { scan-assembler-times "\\tuqrshrn\\ts\[0-9\]+" 1 } } */ -uint32x1_t +uint32_t test_vqrshrnd_n_u64 (uint64x1_t a) { return vqrshrnd_n_u64 (a, 4); diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/sisd-shft-neg_1.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/sisd-shft-neg_1.c new file mode 100644 index 000000000..c091657cb --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/sisd-shft-neg_1.c @@ -0,0 +1,38 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-inline" } */ + +extern void abort (void); + +#define force_simd_si(v) asm volatile ("mov %s0, %1.s[0]" :"=w" (v) :"w" (v) :) + +unsigned int +shft_add (unsigned int a, unsigned int b) +{ + unsigned int c; + + force_simd_si (a); + force_simd_si (b); + c = a >> b; + force_simd_si (c); + + return c + b; +} + +int +main (void) +{ + unsigned int i = 0; + unsigned int a = 0xdeadbeef; + + for (i = 0; i < 32; i++) + { + unsigned int exp = (a / (1 << i) + i); + unsigned int got = shft_add (a, i); + + if (exp != got) + abort (); + } + + return 0; +} + diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c index 83f5af596..9ca041cb8 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c @@ -5,8 +5,8 @@ #include "arm_neon.h" -int32x1_t -t_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c) +int32_t +t_vqdmlalh_lane_s16 (int32_t a, int16_t b, int16x4_t c) { return vqdmlalh_lane_s16 (a, b, c, 0); } diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c index ef94e95d9..40e4c9ff4 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c @@ -6,7 +6,7 @@ #include "arm_neon.h" int64x1_t -t_vqdmlals_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c) +t_vqdmlals_lane_s32 (int64x1_t a, int32_t b, int32x2_t c) { return vqdmlals_lane_s32 (a, b, c, 0); } diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c index 056dfbb11..b3bbc951c 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c @@ -5,8 +5,8 @@ #include "arm_neon.h" -int32x1_t -t_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c) +int32_t +t_vqdmlslh_lane_s16 (int32_t a, int16_t b, int16x4_t c) { return vqdmlslh_lane_s16 (a, b, c, 0); } diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c index 9e351bc36..5bd643a24 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c @@ -6,7 +6,7 @@ #include "arm_neon.h" int64x1_t -t_vqdmlsls_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c) +t_vqdmlsls_lane_s32 (int64x1_t a, int32_t b, int32x2_t c) { return vqdmlsls_lane_s32 (a, b, c, 0); } diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c index fd271e0b3..c3761dfd0 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c @@ -5,8 +5,8 @@ #include "arm_neon.h" -int32x1_t -t_vqdmullh_lane_s16 (int16x1_t a, int16x4_t b) +int32_t +t_vqdmullh_lane_s16 (int16_t a, int16x4_t b) { return vqdmullh_lane_s16 (a, b, 0); } diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c index 110333375..6ed8e3a0b 100644 --- a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c @@ -6,7 +6,7 @@ #include "arm_neon.h" int64x1_t -t_vqdmulls_lane_s32 (int32x1_t a, int32x2_t b) +t_vqdmulls_lane_s32 (int32_t a, int32x2_t b) { return vqdmulls_lane_s32 (a, b, 0); } -- cgit v1.2.3