1 /* Test __float128 NaN generation. */
3 /* { dg-require-effective-target fenv_exceptions } */
4 /* { dg-require-effective-target __float128 } */
5 /* { dg-require-effective-target base_quadfloat_support } */
6 /* { dg-options "" } */
7 /* { dg-add-options __float128 } */
19 /* Make sure we are using gnu-style bitfield handling. */
20 __attribute__ ((gcc_struct
))
23 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
27 uint64_t mant_high
:47;
31 uint64_t mant_high
:47;
41 __attribute__((noinline
, noclone
))
42 check_nan (__float128 val
, bool quiet
)
45 volatile __float128 tmp
;
49 if (u
.nan
.exponent
!= 0x7fff
50 || (u
.nan
.quiet_nan
| u
.nan
.mant_high
| u
.nan
.mant_low
) == 0
51 || u
.nan
.quiet_nan
!= quiet
)
54 if (!__builtin_isnan (u
.value
))
57 feclearexcept (FE_INVALID
);
59 tmp
= u
.value
+ u
.value
;
61 if ((fetestexcept (FE_INVALID
) != 0) == quiet
)
72 nan
= __builtin_nanq ("");
74 if (!check_nan (nan
, true))
77 nan
= __builtin_nanq ("0x0");
79 if (!check_nan (nan
, true))
82 nan
= __builtin_nanq ("0x1");
84 if (!check_nan (nan
, true))
87 nan
= __builtin_nansq ("");
89 if (!check_nan (nan
, false))
92 nan
= __builtin_nansq ("0x0");
94 if (!check_nan (nan
, false))
97 nan
= __builtin_nansq ("0x1");
99 if (!check_nan (nan
, false))