blob: dc78cf2f61650c206322828dc81113bcefb262cc [file] [log] [blame]
/* { dg-do run { target lp64 } } */
/* { dg-require-effective-target p9vector_hw } */
/* { dg-require-effective-target float128 } */
/* { dg-options "-mpower9-vector -O2" } */
#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
#include <math.h>
#include <stdlib.h>
#include <stddef.h>
extern _Float128 roundf128 (_Float128);
extern _Float128 floorf128 (_Float128);
extern _Float128 ceilf128 (_Float128);
extern _Float128 truncf128 (_Float128);
static const struct {
_Float128 value;
_Float128 exp_round;
_Float128 exp_floor;
_Float128 exp_ceil;
_Float128 exp_trunc;
} a[] = {
{ -2.0Q, -2.0Q, -2.0Q, -2.0Q, -2.0Q },
{ -1.7Q, -2.0Q, -2.0Q, -1.0Q, -1.0Q },
{ -1.5Q, -2.0Q, -2.0Q, -1.0Q, -1.0Q },
{ -1.3Q, -1.0Q, -2.0Q, -1.0Q, -1.0Q },
{ +0.0Q, +0.0Q, +0.0Q, +0.0Q, +0.0Q },
{ +1.3Q, +1.0Q, +1.0Q, +2.0Q, +1.0Q },
{ +1.5Q, +2.0Q, +1.0Q, +2.0Q, +1.0Q },
{ +1.7Q, +2.0Q, +1.0Q, +2.0Q, +1.0Q },
{ +2.0Q, +2.0Q, +2.0Q, +2.0Q, +2.0Q }
};
int
main (void)
{
size_t i;
_Float128 v;
for (i = 0; i < sizeof (a) / sizeof (a[0]); i++)
{
v = a[i].value;
if (roundf128 (v) != a[i].exp_round)
abort ();
if (floorf128 (v) != a[i].exp_floor)
abort ();
if (ceilf128 (v) != a[i].exp_ceil)
abort ();
if (truncf128 (v) != a[i].exp_trunc)
abort ();
}
return 0;
}