1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
/* { dg-do compile { target lp64 } } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-require-effective-target float128 } */
/* { dg-options "-mpower9-vector -O2 -ffast-math -std=gnu11" } */
/* Test to make sure the compiler handles the standard _Float128 functions that
have hardware support in ISA 3.0/power9. */
#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
#ifndef __FP_FAST_FMAF128
#error "__FP_FAST_FMAF128 should be defined."
#endif
extern _Float128 copysignf128 (_Float128, _Float128);
extern _Float128 sqrtf128 (_Float128);
extern _Float128 fmaf128 (_Float128, _Float128, _Float128);
extern _Float128 ceilf128 (_Float128);
extern _Float128 floorf128 (_Float128);
extern _Float128 truncf128 (_Float128);
extern _Float128 roundf128 (_Float128);
_Float128
do_copysign (_Float128 a, _Float128 b)
{
return copysignf128 (a, b);
}
_Float128
do_sqrt (_Float128 a)
{
return sqrtf128 (a);
}
_Float128
do_fma (_Float128 a, _Float128 b, _Float128 c)
{
return fmaf128 (a, b, c);
}
_Float128
do_fms (_Float128 a, _Float128 b, _Float128 c)
{
return fmaf128 (a, b, -c);
}
_Float128
do_nfma (_Float128 a, _Float128 b, _Float128 c)
{
return -fmaf128 (a, b, c);
}
_Float128
do_nfms (_Float128 a, _Float128 b, _Float128 c)
{
return -fmaf128 (a, b, -c);
}
_Float128
do_ceil (_Float128 a)
{
return ceilf128 (a);
}
_Float128
do_floor (_Float128 a)
{
return floorf128 (a);
}
_Float128
do_trunc (_Float128 a)
{
return truncf128 (a);
}
_Float128
do_round (_Float128 a)
{
return roundf128 (a);
}
/* { dg-final { scan-assembler {\mxscpsgnqp\M} } } */
/* { dg-final { scan-assembler {\mxssqrtqp\M} } } */
/* { dg-final { scan-assembler {\mxsmaddqp\M} } } */
/* { dg-final { scan-assembler {\mxsmsubqp\M} } } */
/* { dg-final { scan-assembler {\mxsnmaddqp\M} } } */
/* { dg-final { scan-assembler {\mxsnmsubqp\M} } } */
/* { dg-final { scan-assembler {\mxsrqpi\M} } } */
/* { dg-final { scan-assembler-not {\mbl\M} } } */
|