/* { dg-do run } */ /* { dg-options "-O3 -mzarch -march=arch12 --save-temps" } */ /* { dg-require-effective-target s390_vxe } */ typedef unsigned int uv4si __attribute__((vector_size(16))); uv4si __attribute__((noinline)) not_xor (uv4si a, uv4si b) { return ~(a ^ b); } /* { dg-final { scan-assembler-times "vnx\t%v24,%v24,%v26" 1 } } */ uv4si __attribute__((noinline)) not_and (uv4si a, uv4si b) { return ~(a & b); } /* { dg-final { scan-assembler-times "vnn\t%v24,%v24,%v26" 1 } } */ uv4si __attribute__((noinline)) or_not (uv4si a, uv4si b) { return a | ~b; } /* { dg-final { scan-assembler-times "voc\t%v24,%v24,%v26" 1 } } */ int main () { uv4si a = (uv4si){ 42, 1, 0, 2 }; uv4si b = (uv4si){ 42, 2, 0, 2 }; uv4si c; c = not_xor (a, b); if (c[0] != ~0 || c[1] != ~3 || c[2] != ~0 || c[3] != ~0) __builtin_abort (); c = not_and (a, b); if (c[0] != ~42 || c[1] != ~0 || c[2] != ~0 || c[3] != ~2) __builtin_abort (); c = or_not (a, b); if (c[0] != ~0 || c[1] != ~2 || c[2] != ~0 || c[3] != ~0) __builtin_abort (); return 0; }