blob: e3286a786a52c08d8dcd7cb58d7b26ee6e0cec9a [file] [log] [blame]
/* { 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 } } */