1 /* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */
2 /* { dg-options "-mfloat128 -mvsx" } */
3
4 #include <stdio.h>
5
6 void abort ();
7
8 typedef unsigned long long int uint64_t;
9
10 typedef union
11 {
12 __float128 value;
13
14 struct
15 {
16 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
17 unsigned negative:1;
18 unsigned exponent:15;
19 unsigned quiet_nan:1;
20 uint64_t mant_high:47;
21 uint64_t mant_low:64;
22 #else
23 uint64_t mant_low:64;
24 uint64_t mant_high:47;
25 unsigned quiet_nan:1;
26 unsigned exponent:15;
27 unsigned negative:1;
28 #endif
29 } nan;
30
31 } ieee854_float128;
32
33 int
34 main (int argc, int *argv[])
35 {
36 ieee854_float128 y;
37
38 y.value = __builtin_nanq ("1");
39
40 if (y.nan.negative != 0
41 || y.nan.exponent != 0x7fff
42 || y.nan.quiet_nan != 1
43 || y.nan.mant_high != 0
44 || y.nan.mant_low != 1)
45 abort ();
46
47 y.value = __builtin_nanq ("0x2ab3c");
48
49 if (y.nan.negative != 0
50 || y.nan.exponent != 0x7fff
51 || y.nan.quiet_nan != 1
52 || y.nan.mant_high != 0
53 || y.nan.mant_low != 0x2ab3c)
54 abort ();
55
56 y.value = __builtin_nansq ("1");
57
58 if (
59 y.nan.negative != 0
60 || y.nan.exponent != 0x7fff
61 || y.nan.quiet_nan != 0
62 || y.nan.mant_high != 0
63 || y.nan.mant_low != 1
64 )
65 abort ();
66
67 y.value = __builtin_nansq ("0x2ab3c");
68
69 if (y.nan.negative != 0
70 || y.nan.exponent != 0x7fff
71 || y.nan.quiet_nan != 0
72 || y.nan.mant_high != 0
73 || y.nan.mant_low != 0x2ab3c)
74 abort ();
75
76 return 0;
77 }