libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / fp-int-convert-timode-4.c
blob15f478d15e24219b00d3615d2923c42a952933a4
1 /* Test for correct rounding of conversions from __int128 to
2 float. */
3 /* { dg-do run } */
4 /* { dg-require-effective-target int128 } */
5 /* { dg-require-effective-target fenv } */
6 /* { dg-require-effective-target hard_float } */
7 /* { dg-options "-frounding-math" } */
9 #include <fenv.h>
10 #include <stdlib.h>
12 int
13 main (void)
15 #ifdef FE_TOWARDZERO
16 volatile unsigned long long h = 0x8000000000000000LL;
17 volatile unsigned long long l = 0xdLL;
18 volatile unsigned __int128 u128 = (((unsigned __int128) h) << 64) | l;
19 volatile __int128 s128 = u128;
20 fesetround (FE_TOWARDZERO);
21 float fs = s128;
22 if (fs != -0x1.fffffep+126)
23 abort ();
24 double ds = s128;
25 if (ds != -0x1.fffffffffffffp+126)
26 abort ();
27 #endif
28 exit (0);