| /* { dg-require-effective-target ppc_float128_hw } */ |
| /* { dg-require-effective-target power10_ok } */ |
| /* { dg-options "-mdejagnu-cpu=power10 -O2" } */ |
| |
| /* Test whether the LXVKQ instruction is generated to load special IEEE 128-bit |
| constants. */ |
| |
| _Float128 |
| return_0 (void) |
| { |
| return 0.0f128; /* XXSPLTIB 34,0. */ |
| } |
| |
| _Float128 |
| return_1 (void) |
| { |
| return 1.0f128; /* LXVKQ 34,1. */ |
| } |
| |
| _Float128 |
| return_2 (void) |
| { |
| return 2.0f128; /* LXVKQ 34,2. */ |
| } |
| |
| _Float128 |
| return_3 (void) |
| { |
| return 3.0f128; /* LXVKQ 34,3. */ |
| } |
| |
| _Float128 |
| return_4 (void) |
| { |
| return 4.0f128; /* LXVKQ 34,4. */ |
| } |
| |
| _Float128 |
| return_5 (void) |
| { |
| return 5.0f128; /* LXVKQ 34,5. */ |
| } |
| |
| _Float128 |
| return_6 (void) |
| { |
| return 6.0f128; /* LXVKQ 34,6. */ |
| } |
| |
| _Float128 |
| return_7 (void) |
| { |
| return 7.0f128; /* LXVKQ 34,7. */ |
| } |
| |
| _Float128 |
| return_m0 (void) |
| { |
| return -0.0f128; /* LXVKQ 34,16. */ |
| } |
| |
| _Float128 |
| return_m1 (void) |
| { |
| return -1.0f128; /* LXVKQ 34,17. */ |
| } |
| |
| _Float128 |
| return_m2 (void) |
| { |
| return -2.0f128; /* LXVKQ 34,18. */ |
| } |
| |
| _Float128 |
| return_m3 (void) |
| { |
| return -3.0f128; /* LXVKQ 34,19. */ |
| } |
| |
| _Float128 |
| return_m4 (void) |
| { |
| return -4.0f128; /* LXVKQ 34,20. */ |
| } |
| |
| _Float128 |
| return_m5 (void) |
| { |
| return -5.0f128; /* LXVKQ 34,21. */ |
| } |
| |
| _Float128 |
| return_m6 (void) |
| { |
| return -6.0f128; /* LXVKQ 34,22. */ |
| } |
| |
| _Float128 |
| return_m7 (void) |
| { |
| return -7.0f128; /* LXVKQ 34,23. */ |
| } |
| |
| _Float128 |
| return_inf (void) |
| { |
| return __builtin_inff128 (); /* LXVKQ 34,8. */ |
| } |
| |
| _Float128 |
| return_minf (void) |
| { |
| return - __builtin_inff128 (); /* LXVKQ 34,24. */ |
| } |
| |
| _Float128 |
| return_nan (void) |
| { |
| return __builtin_nanf128 (""); /* LXVKQ 34,9. */ |
| } |
| |
| /* Note, the following NaNs should not generate a LXVKQ instruction. */ |
| _Float128 |
| return_mnan (void) |
| { |
| return - __builtin_nanf128 (""); /* PLXV 34,... */ |
| } |
| |
| _Float128 |
| return_nan2 (void) |
| { |
| return __builtin_nanf128 ("1"); /* PLXV 34,... */ |
| } |
| |
| _Float128 |
| return_nans (void) |
| { |
| return __builtin_nansf128 (""); /* PLXV 34,... */ |
| } |
| |
| vector long long |
| return_longlong_neg_0 (void) |
| { |
| /* This vector is the same pattern as -0.0F128. */ |
| #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ |
| #define FIRST 0x8000000000000000 |
| #define SECOND 0x0000000000000000 |
| |
| #else |
| #define FIRST 0x0000000000000000 |
| #define SECOND 0x8000000000000000 |
| #endif |
| |
| return (vector long long) { FIRST, SECOND }; /* LXVKQ 34,16. */ |
| } |
| |
| /* { dg-final { scan-assembler-times {\mlxvkq\M} 19 } } */ |
| /* { dg-final { scan-assembler-times {\mplxv\M} 3 } } */ |
| /* { dg-final { scan-assembler-times {\mxxspltib\M} 1 } } */ |
| |