diff options
author | Alan Lawrence <alan.lawrence@arm.com> | 2014-09-09 13:07:27 +0000 |
---|---|---|
committer | Alan Lawrence <alalaw01@gcc.gnu.org> | 2014-09-09 13:07:27 +0000 |
commit | 79d2a4839be9668412afd09d012e14431a8e7dd5 (patch) | |
tree | 46c4dfcdffb62baf134415ae1b152b985dca6bf6 /gcc | |
parent | bc23b1960de6693944ce78e4cb6e5aa8d4a9b3b9 (diff) | |
download | gcc-79d2a4839be9668412afd09d012e14431a8e7dd5.zip gcc-79d2a4839be9668412afd09d012e14431a8e7dd5.tar.gz gcc-79d2a4839be9668412afd09d012e14431a8e7dd5.tar.bz2 |
[AArch64 Testsuite] Add test of vld[234]q? intrinsic
* gcc.target/aarch64/vldN_1.c: New test.
From-SVN: r215072
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/vldN_1.c | 79 |
2 files changed, 83 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c4b4491..879d5b2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2014-09-09 Alan Lawrence <alan.lawrence@arm.com> + * gcc.target/aarch64/vldN_1.c: New test. + +2014-09-09 Alan Lawrence <alan.lawrence@arm.com> + * gcc.target/aarch64/simd/int_comparisons_1.c: Tighten regexp. 2014-09-09 Jiong Wang <jiong.wang@arm.com> diff --git a/gcc/testsuite/gcc.target/aarch64/vldN_1.c b/gcc/testsuite/gcc.target/aarch64/vldN_1.c new file mode 100644 index 0000000..b64de16 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/vldN_1.c @@ -0,0 +1,79 @@ +/* { dg-do run } */ +/* { dg-options "-O3" } */ + +#include <arm_neon.h> + +extern void abort (void); + +#define TESTMETH(BASE, ELTS, STRUCT, SUFFIX) \ +int __attribute__ ((noinline)) \ +test_vld##STRUCT##SUFFIX () \ +{ \ + BASE##_t data[ELTS * STRUCT]; \ + BASE##_t temp[ELTS]; \ + BASE##x##ELTS##x##STRUCT##_t vectors; \ + int i,j; \ + for (i = 0; i < STRUCT * ELTS; i++) \ + data [i] = (BASE##_t) 2*i + 1; \ + asm volatile ("" : : : "memory"); \ + vectors = vld##STRUCT##SUFFIX (data); \ + for (i = 0; i < STRUCT; i++) \ + { \ + vst1##SUFFIX (temp, vectors.val[i]); \ + asm volatile ("" : : : "memory"); \ + for (j = 0; j < ELTS; j++) \ + if (temp[j] != data[i + STRUCT*j]) \ + return 1; \ + } \ + return 0; \ +} + +#define VARIANTS(VARIANT, STRUCT) \ +VARIANT (uint8, 8, STRUCT, _u8) \ +VARIANT (uint16, 4, STRUCT, _u16) \ +VARIANT (uint32, 2, STRUCT, _u32) \ +VARIANT (uint64, 1, STRUCT, _u64) \ +VARIANT (int8, 8, STRUCT, _s8) \ +VARIANT (int16, 4, STRUCT, _s16) \ +VARIANT (int32, 2, STRUCT, _s32) \ +VARIANT (int64, 1, STRUCT, _s64) \ +VARIANT (poly8, 8, STRUCT, _p8) \ +VARIANT (poly16, 4, STRUCT, _p16) \ +VARIANT (float32, 2, STRUCT, _f32) \ +VARIANT (float64, 1, STRUCT, _f64) \ +VARIANT (uint8, 16, STRUCT, q_u8) \ +VARIANT (uint16, 8, STRUCT, q_u16) \ +VARIANT (uint32, 4, STRUCT, q_u32) \ +VARIANT (uint64, 2, STRUCT, q_u64) \ +VARIANT (int8, 16, STRUCT, q_s8) \ +VARIANT (int16, 8, STRUCT, q_s16) \ +VARIANT (int32, 4, STRUCT, q_s32) \ +VARIANT (int64, 2, STRUCT, q_s64) \ +VARIANT (poly8, 16, STRUCT, q_p8) \ +VARIANT (poly16, 8, STRUCT, q_p16) \ +VARIANT (float32, 4, STRUCT, q_f32) \ +VARIANT (float64, 2, STRUCT, q_f64) + +/* Tests of vld2 and vld2q. */ +VARIANTS (TESTMETH, 2) + +/* Tests of vld3 and vld3q. */ +VARIANTS (TESTMETH, 3) + +/* Tests of vld4 and vld4q. */ +VARIANTS (TESTMETH, 4) + +#define CHECK(BASE, ELTS, STRUCT, SUFFIX) \ + if (test_vld##STRUCT##SUFFIX () != 0) \ + abort (); + +int +main (int argc, char **argv) +{ + VARIANTS (CHECK, 2) + VARIANTS (CHECK, 3) + VARIANTS (CHECK, 4) + + return 0; +} + |