/* { dg-do compile } */ /* { dg-require-effective-target arm_neon_ok } */ /* { dg-options "-O1 -ftree-vectorize -funsafe-math-optimizations" } */ /* { dg-add-options arm_neon } */ #define ordered(a, b) (!__builtin_isunordered (a, b)) #define unordered(a, b) (__builtin_isunordered (a, b)) int x[16]; float a[16]; float b[16]; #define COMPARE(NAME) \ void \ cmp_##NAME##_reg (void) \ { \ for (int i = 0; i < 16; ++i) \ x[i] = NAME (a[i], b[i]) ? 2 : 0; \ } \ \ void \ cmp_##NAME##_zero (void) \ { \ for (int i = 0; i < 16; ++i) \ x[i] = NAME (a[i], 0) ? 2 : 0; \ } typedef int int_vec __attribute__((vector_size(16))); typedef float vec __attribute__((vector_size(16))); COMPARE (ordered) COMPARE (unordered) /* { dg-final { scan-assembler-times {\tvcgt.f32\tq[0-9]+, q[0-9]+, q[0-9]+\n} 2 } } */ /* { dg-final { scan-assembler-times {\tvcgt.f32\tq[0-9]+, q[0-9]+, #0\n} 2 } } */ /* { dg-final { scan-assembler-times {\tvcge.f32\tq[0-9]+, q[0-9]+, q[0-9]+\n} 2 } } */ /* { dg-final { scan-assembler-times {\tvcle.f32\tq[0-9]+, q[0-9]+, #0\n} 2 } } */