1 /* { dg-do compile } */
2 /* { dg-options "-O3 -fno-tree-reassoc" } */
3
4 #pragma GCC target "+nosve"
5
6 #define MIN(a, b) ((a) < (b) ? (a) : (b))
7 #define MAX(a, b) ((a) > (b) ? (a) : (b))
8
9 #define FUNC(T, N, S) \
10 void saba_##S (T * __restrict__ a, T * __restrict__ b, T * __restrict__ c) \
11 { \
12 int i; \
13 for (i = 0; i < N; i++) \
14 c[i] += (MAX (a[i], b[i]) - MIN (a[i], b[i])); \
15 }
16
17 FUNC (signed char, 16, qi)
18 /* { dg-final { scan-assembler-times {saba\tv[0-9]+\.16b, v[0-9]+\.16b, v[0-9]+\.16b} 1 } } */
19 FUNC (short, 8, hi)
20 /* { dg-final { scan-assembler-times {saba\tv[0-9]+\.8h, v[0-9]+\.8h, v[0-9]+\.8h} 1 } } */
21 FUNC (int, 4, si)
22 /* { dg-final { scan-assembler-times {saba\tv[0-9]+\.4s, v[0-9]+\.4s, v[0-9]+\.4s} 1 } } */
23 FUNC (unsigned char, 16, uqi)
24 /* { dg-final { scan-assembler-times {uaba\tv[0-9]+\.16b, v[0-9]+\.16b, v[0-9]+.16b} 1 } } */
25 FUNC (unsigned short, 8, uhi)
26 /* { dg-final { scan-assembler-times {uaba\tv[0-9]+\.8h, v[0-9]+\.8h, v[0-9]+\.8h} 1 } } */
27 FUNC (unsigned int, 4, usi)
28 /* { dg-final { scan-assembler-times {uaba\tv[0-9]+\.4s, v[0-9]+\.4s, v[0-9]+\.4s} 1 } } */
29