| /* Test that we generate vpmsumd correctly without a swap error. */ |
| |
| /* { dg-do run { target { p8vector_hw } } } */ |
| /* { dg-options "-O2 -std=gnu11 -mdejagnu-cpu=power8" } */ |
| |
| #include <altivec.h> |
| |
| int main() { |
| |
| const unsigned long long r0l = 0x8e7dfceac070e3a0; |
| vector unsigned long long r0 = (vector unsigned long long) {r0l, 0}, v; |
| const vector unsigned long long pd |
| = (vector unsigned long long) {0xc2LLU << 56, 0}; |
| |
| v = __builtin_crypto_vpmsumd ((vector unsigned long long) {r0[0], 0}, pd); |
| |
| #if __LITTLE_ENDIAN__ |
| if (v[0] != 0x4000000000000000 || v[1] != 0x65bd7ab605a4a8ff) |
| __builtin_abort (); |
| #else |
| if (v[1] != 0x4000000000000000 || v[0] != 0x65bd7ab605a4a8ff) |
| __builtin_abort (); |
| #endif |
| |
| return 0; |
| } |