blob: a27cb5ef0c12cd0068ff1728e20cce7f68eddc2d [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O3" } */
#pragma GCC target "+nosve"
#define MAX(x, y) ((x) > (y) ? (x) : (y))
#define MIN(x, y) ((x) < (y) ? (x) : (y))
#define N 1024
#define FUNC(T) \
void \
sabd_##T (signed T * restrict a, signed T * restrict b, \
signed T * restrict out) \
{ \
for (int i = 0; i < N; i++) \
out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]); \
} \
\
void \
uabd_##T (unsigned T * restrict a, unsigned T * restrict b, \
unsigned T * restrict out) \
{ \
for (int i = 0; i < N; i++) \
out[i] = MAX (a[i], b[i]) - MIN (a[i], b[i]); \
}
FUNC(char)
FUNC(short)
FUNC(int)
/* { dg-final { scan-assembler-times "sabd\\tv\[0-9\]+\.16b, v\[0-9\]+\.16b, v\[0-9\]+\.16b" 1 } } */
/* { dg-final { scan-assembler-times "uabd\\tv\[0-9\]+\.16b, v\[0-9\]+\.16b, v\[0-9\]+\.16b" 1 } } */
/* { dg-final { scan-assembler-times "sabd\\tv\[0-9\]+\.8h, v\[0-9\]+\.8h, v\[0-9\]+\.8h" 1 } } */
/* { dg-final { scan-assembler-times "uabd\\tv\[0-9\]+\.8h, v\[0-9\]+\.8h, v\[0-9\]+\.8h" 1 } } */
/* { dg-final { scan-assembler-times "sabd\\tv\[0-9\]+\.4s, v\[0-9\]+\.4s, v\[0-9\]+\.4s" 1 } } */
/* { dg-final { scan-assembler-times "uabd\\tv\[0-9\]+\.4s, v\[0-9\]+\.4s, v\[0-9\]+\.4s" 1 } } */