1 /* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */
2 /* { dg-options "-mfloat128 -mvsx" } */
3 
4 void abort ();
5 
6 typedef unsigned long long int uint64_t;
7 
8 typedef union
9 {
10   __float128 value;
11 
12   struct
13   {
14 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
15     unsigned negative:1;
16     unsigned exponent:15;
17     unsigned quiet_nan:1;
18     uint64_t mant_high:47;
19     uint64_t mant_low:64;
20 #else
21     uint64_t mant_low:64;
22     uint64_t mant_high:47;
23     unsigned quiet_nan:1;
24     unsigned exponent:15;
25     unsigned negative:1;
26 #endif
27   } nan;
28 
29 } ieee854_float128;
30 
31 int
main(int argc,int * argv[])32 main (int argc, int *argv[])
33 {
34   ieee854_float128 x, y, z;
35 
36   x.nan.negative = 0;
37   x.nan.exponent = 0x22;
38   x.nan.quiet_nan = 0;
39   x.nan.mant_high = 0x1234;
40   x.nan.mant_low = 0xabcdef;
41 
42   y.nan.negative = 1;
43   y.nan.exponent = 0;
44   y.nan.quiet_nan = 0;
45   y.nan.mant_high = 0;
46   y.nan.mant_low = 0;
47 
48   z.value = __builtin_copysignq (x.value, y.value);
49 
50   if (z.nan.negative != 1
51       || z.nan.exponent != 0x22
52       || z.nan.quiet_nan != 0
53       || z.nan.mant_high != 0x1234
54       || z.nan.mant_low != 0xabcdef)
55     abort ();
56 
57   return 0;
58 }
59