Update ChangeLog and version files for release
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / vld1-vst1_1.c
blob290444e357f933ad2fe8160936c0d3aea3452fac
1 /* Test vld1 and vst1 maintain consistent indexing. */
2 /* { dg-do run } */
3 /* { dg-options "-O3" } */
4 #include <arm_neon.h>
6 extern void abort (void);
8 #define TESTMETH(TYPE, NUM, BASETYPE, SUFFIX) \
9 int __attribute__ ((noinline)) \
10 test_vld1_vst1##SUFFIX () \
11 { \
12 TYPE vec; \
13 int i = 0; \
14 BASETYPE src[NUM]; \
15 BASETYPE dest[NUM]; \
16 for (i = 0; i < NUM; i++) \
17 src[i] = 2*i + 1; \
18 asm volatile ("":::"memory"); \
19 vec = vld1 ## SUFFIX (src); \
20 asm volatile ("":::"memory"); \
21 vst1 ## SUFFIX (dest, vec); \
22 asm volatile ("":::"memory"); \
23 for (i = 0; i < NUM; i++) \
24 if (src[i] != dest[i]) \
25 return 1; \
26 return 0; \
29 #define VARIANTS(THING) \
30 THING (int8x8_t, 8, int8_t, _s8) \
31 THING (uint8x8_t, 8, uint8_t, _u8) \
32 THING (int16x4_t, 4, int16_t, _s16) \
33 THING (uint16x4_t, 4, uint16_t, _u16) \
34 THING (int32x2_t, 2, int32_t, _s32) \
35 THING (uint32x2_t, 2, uint32_t, _u32) \
36 THING (float32x2_t, 2, float32_t, _f32) \
37 THING (int8x16_t, 16, int8_t, q_s8) \
38 THING (uint8x16_t, 16, uint8_t, q_u8) \
39 THING (int16x8_t, 8, int16_t, q_s16) \
40 THING (uint16x8_t, 8, uint16_t, q_u16) \
41 THING (int32x4_t, 4, int32_t, q_s32) \
42 THING (uint32x4_t, 4, uint32_t, q_u32) \
43 THING (int64x2_t, 2, int64_t, q_s64) \
44 THING (uint64x2_t, 2, uint64_t, q_u64) \
45 THING (float64x2_t, 2, float64_t, q_f64)
47 VARIANTS (TESTMETH)
49 #define DOTEST(TYPE, NUM, BASETYPE, SUFFIX) \
50 if (test_vld1_vst1##SUFFIX ()) \
51 abort ();
53 int
54 main ()
56 VARIANTS (DOTEST);
57 return 0;