| /* { 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; |
| } |