| /* { dg-do compile { target { powerpc*-*-* } } } */ |
| /* { dg-skip-if "" { powerpc*-*-darwin* } } */ |
| /* { dg-require-effective-target powerpc_p8vector_ok } */ |
| /* { dg-options "-mdejagnu-cpu=power8 -O2 -ftree-vectorize -fvect-cost-model=dynamic -fno-unroll-loops -fno-unroll-all-loops" } */ |
| |
| #ifndef TYPE |
| #define TYPE long long |
| #endif |
| |
| #ifndef SIGN_TYPE |
| #define SIGN_TYPE signed TYPE |
| #endif |
| |
| #ifndef UNS_TYPE |
| #define UNS_TYPE unsigned TYPE |
| #endif |
| |
| typedef vector SIGN_TYPE v_sign; |
| typedef vector UNS_TYPE v_uns; |
| |
| v_sign sign_add (v_sign a, v_sign b) |
| { |
| return a + b; |
| } |
| |
| v_sign sign_sub (v_sign a, v_sign b) |
| { |
| return a - b; |
| } |
| |
| v_sign sign_shift_left (v_sign a, v_sign b) |
| { |
| return a << b; |
| } |
| |
| v_sign sign_shift_right (v_sign a, v_sign b) |
| { |
| return a >> b; |
| } |
| |
| v_uns uns_add (v_uns a, v_uns b) |
| { |
| return a + b; |
| } |
| |
| v_uns uns_sub (v_uns a, v_uns b) |
| { |
| return a - b; |
| } |
| |
| v_uns uns_shift_left (v_uns a, v_uns b) |
| { |
| return a << b; |
| } |
| |
| v_uns uns_shift_right (v_uns a, v_uns b) |
| { |
| return a >> b; |
| } |
| |
| /* { dg-final { scan-assembler-times "vaddudm" 2 } } */ |
| /* { dg-final { scan-assembler-times "vsubudm" 2 } } */ |
| /* { dg-final { scan-assembler-times "vsld" 2 } } */ |
| /* { dg-final { scan-assembler-times "vsrad" 1 } } */ |
| /* { dg-final { scan-assembler-times "vsrd" 1 } } */ |