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
main(int argc,int * argv[])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 }
78