Add support for conditional reductions using SVE CLASTB
[official-gcc.git] / gcc / testsuite / gcc.target / aarch64 / sve / load_const_offset_1.c
blob501ef5d2c4c5716683ff4aeb724a233f44aca693
1 /* { dg-do assemble { target aarch64_asm_sve_ok } } */
2 /* { dg-options "-O -msve-vector-bits=256 --save-temps" } */
4 #include <stdint.h>
6 typedef int64_t vnx2di __attribute__ ((vector_size (32)));
7 typedef int32_t vnx4si __attribute__ ((vector_size (32)));
8 typedef int16_t vnx8hi __attribute__ ((vector_size (32)));
9 typedef int8_t vnx16qi __attribute__ ((vector_size (32)));
11 #define TEST_TYPE(TYPE) \
12 void sve_load_##TYPE##_neg9 (TYPE *a) \
13 { \
14 register TYPE x asm ("z0") = a[-9]; \
15 asm volatile ("" :: "w" (x)); \
16 } \
18 void sve_load_##TYPE##_neg8 (TYPE *a) \
19 { \
20 register TYPE x asm ("z0") = a[-8]; \
21 asm volatile ("" :: "w" (x)); \
22 } \
24 void sve_load_##TYPE##_0 (TYPE *a) \
25 { \
26 register TYPE x asm ("z0") = a[0]; \
27 asm volatile ("" :: "w" (x)); \
28 } \
30 void sve_load_##TYPE##_unaligned (TYPE *a) \
31 { \
32 register TYPE x asm ("z0") = *(TYPE *) ((char *) a + 16); \
33 asm volatile ("" :: "w" (x)); \
34 } \
36 void sve_load_##TYPE##_7 (TYPE *a) \
37 { \
38 register TYPE x asm ("z0") = a[7]; \
39 asm volatile ("" :: "w" (x)); \
40 } \
42 void sve_load_##TYPE##_8 (TYPE *a) \
43 { \
44 register TYPE x asm ("z0") = a[8]; \
45 asm volatile ("" :: "w" (x)); \
48 TEST_TYPE (vnx2di)
49 TEST_TYPE (vnx4si)
50 TEST_TYPE (vnx8hi)
51 TEST_TYPE (vnx16qi)
53 /* { dg-final { scan-assembler-times {\tsub\tx[0-9]+, x0, #288\n} 4 } } */
54 /* { dg-final { scan-assembler-times {\tadd\tx[0-9]+, x0, 16\n} 4 } } */
55 /* { dg-final { scan-assembler-times {\tadd\tx[0-9]+, x0, 256\n} 4 } } */
57 /* { dg-final { scan-assembler-not {\tld1d\tz0\.d, p[0-7]/z, \[x0, #-9, mul vl\]\n} } } */
58 /* { dg-final { scan-assembler-times {\tld1d\tz0\.d, p[0-7]/z, \[x0, #-8, mul vl\]\n} 1 } } */
59 /* { dg-final { scan-assembler-times {\tld1d\tz0\.d, p[0-7]/z, \[x0\]\n} 4 } } */
60 /* { dg-final { scan-assembler-times {\tld1d\tz0\.d, p[0-7]/z, \[x0, #7, mul vl\]\n} 1 } } */
61 /* { dg-final { scan-assembler-not {\tld1d\tz0\.d, p[0-7]/z, \[x0, #8, mul vl\]\n} } } */
63 /* { dg-final { scan-assembler-not {\tld1w\tz0\.s, p[0-7]/z, \[x0, #-9, mul vl\]\n} } } */
64 /* { dg-final { scan-assembler-times {\tld1w\tz0\.s, p[0-7]/z, \[x0, #-8, mul vl\]\n} 1 } } */
65 /* { dg-final { scan-assembler-times {\tld1w\tz0\.s, p[0-7]/z, \[x0\]\n} 4 } } */
66 /* { dg-final { scan-assembler-times {\tld1w\tz0\.s, p[0-7]/z, \[x0, #7, mul vl\]\n} 1 } } */
67 /* { dg-final { scan-assembler-not {\tld1w\tz0\.s, p[0-7]/z, \[x0, #8, mul vl\]\n} } } */
69 /* { dg-final { scan-assembler-not {\tld1h\tz0\.h, p[0-7]/z, \[x0, #-9, mul vl\]\n} } } */
70 /* { dg-final { scan-assembler-times {\tld1h\tz0\.h, p[0-7]/z, \[x0, #-8, mul vl\]\n} 1 } } */
71 /* { dg-final { scan-assembler-times {\tld1h\tz0\.h, p[0-7]/z, \[x0\]\n} 4 } } */
72 /* { dg-final { scan-assembler-times {\tld1h\tz0\.h, p[0-7]/z, \[x0, #7, mul vl\]\n} 1 } } */
73 /* { dg-final { scan-assembler-not {\tld1h\tz0\.h, p[0-7]/z, \[x0, #8, mul vl\]\n} } } */
75 /* { dg-final { scan-assembler-not {\tld1b\tz0\.b, p[0-7]/z, \[x0, #-9, mul vl\]\n} } } */
76 /* { dg-final { scan-assembler-times {\tld1b\tz0\.b, p[0-7]/z, \[x0, #-8, mul vl\]\n} 1 } } */
77 /* { dg-final { scan-assembler-times {\tld1b\tz0\.b, p[0-7]/z, \[x0\]\n} 4 } } */
78 /* { dg-final { scan-assembler-times {\tld1b\tz0\.b, p[0-7]/z, \[x0, #7, mul vl\]\n} 1 } } */
79 /* { dg-final { scan-assembler-not {\tld1b\tz0\.b, p[0-7]/z, \[x0, #8, mul vl\]\n} } } */