diff mbox

[AArch64,Testsuite] Extend test of vld1+vst1 intrinsics to cover more variants

Message ID 540D873D.7040500@arm.com
State New
Headers show

Commit Message

Alan Lawrence Sept. 8, 2014, 10:38 a.m. UTC
The existing vld1/vst1_1.c test in gcc.target/aarch64 covers only vld1_s8 and 
vld1q_s16. This extends it to cover all int/float variants via token-pasting.

Passing on aarch64-none-elf and aarch64_be-none-elf.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/vld1-vst1_1.c: Rewrite to test all variants.

Comments

Marcus Shawcroft Sept. 9, 2014, 10:20 a.m. UTC | #1
On 8 September 2014 11:38, Alan Lawrence <alan.lawrence@arm.com> wrote:
> The existing vld1/vst1_1.c test in gcc.target/aarch64 covers only vld1_s8
> and vld1q_s16. This extends it to cover all int/float variants via
> token-pasting.
>
> Passing on aarch64-none-elf and aarch64_be-none-elf.
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.target/aarch64/vld1-vst1_1.c: Rewrite to test all variants.

OK /Marcus
diff mbox

Patch

diff --git a/gcc/testsuite/gcc.target/aarch64/vld1-vst1_1.c b/gcc/testsuite/gcc.target/aarch64/vld1-vst1_1.c
index d1834a264708fe6ab901ac1a27544ca8ebb815cc..290444e357f933ad2fe8160936c0d3aea3452fac 100644
--- a/gcc/testsuite/gcc.target/aarch64/vld1-vst1_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/vld1-vst1_1.c
@@ -5,48 +5,54 @@ 
 
 extern void abort (void);
 
-int __attribute__ ((noinline))
-test_vld1_vst1 ()
-{
-  int8x8_t a;
-  int8x8_t b;
-  int i = 0;
-  int8_t c[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
-  int8_t d[8];
-  a = vld1_s8 (c);
-  asm volatile ("":::"memory");
-  vst1_s8 (d, a);
-  asm volatile ("":::"memory");
-  for (; i < 8; i++)
-    if (c[i] != d[i])
-      return 1;
-  return 0;
+#define TESTMETH(TYPE, NUM, BASETYPE, SUFFIX)	\
+int __attribute__ ((noinline))			\
+test_vld1_vst1##SUFFIX ()			\
+{						\
+  TYPE vec;					\
+  int i = 0;					\
+  BASETYPE src[NUM];				\
+  BASETYPE dest[NUM];				\
+  for (i = 0; i < NUM; i++)			\
+    src[i] = 2*i + 1;				\
+  asm volatile ("":::"memory");			\
+  vec = vld1 ## SUFFIX (src);			\
+  asm volatile ("":::"memory");			\
+  vst1 ## SUFFIX (dest, vec);			\
+  asm volatile ("":::"memory");			\
+  for (i = 0; i < NUM; i++)			\
+    if (src[i] != dest[i])			\
+      return 1;					\
+  return 0;					\
 }
 
-int __attribute__ ((noinline))
-test_vld1q_vst1q ()
-{
-  int16x8_t a;
-  int16x8_t b;
-  int i = 0;
-  int16_t c[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
-  int16_t d[8];
-  a = vld1q_s16 (c);
-  asm volatile ("":::"memory");
-  vst1q_s16 (d, a);
-  asm volatile ("":::"memory");
-  for (; i < 8; i++)
-    if (c[i] != d[i])
-      return 1;
-  return 0;
-}
+#define VARIANTS(THING)			\
+THING (int8x8_t, 8, int8_t, _s8)	\
+THING (uint8x8_t, 8, uint8_t, _u8)	\
+THING (int16x4_t, 4, int16_t, _s16)	\
+THING (uint16x4_t, 4, uint16_t, _u16)	\
+THING (int32x2_t, 2, int32_t, _s32)	\
+THING (uint32x2_t, 2, uint32_t, _u32)	\
+THING (float32x2_t, 2, float32_t, _f32) \
+THING (int8x16_t, 16, int8_t, q_s8)	\
+THING (uint8x16_t, 16, uint8_t, q_u8)	\
+THING (int16x8_t, 8, int16_t, q_s16)	\
+THING (uint16x8_t, 8, uint16_t, q_u16)	\
+THING (int32x4_t, 4, int32_t, q_s32)	\
+THING (uint32x4_t, 4, uint32_t, q_u32)	\
+THING (int64x2_t, 2, int64_t, q_s64)	\
+THING (uint64x2_t, 2, uint64_t, q_u64)	\
+THING (float64x2_t, 2, float64_t, q_f64)
+
+VARIANTS (TESTMETH)
+
+#define DOTEST(TYPE, NUM, BASETYPE, SUFFIX)	\
+  if (test_vld1_vst1##SUFFIX ())		\
+    abort ();
 
 int
 main ()
 {
-  if (test_vld1_vst1 ())
-    abort ();
-  if (test_vld1q_vst1q ())
-    abort ();
+  VARIANTS (DOTEST);
   return 0;
 }