[RS6000] Tests that use int128_t and -m32
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / copysign128-1.c
blob429dfc072e3b851e19086afd0cf5563c1ef24858
1 /* { dg-do run { target { powerpc64*-*-* && vsx_hw } } } */
2 /* { dg-options "-mfloat128 -mvsx" } */
4 void abort ();
6 typedef unsigned long long int uint64_t;
8 typedef union
10 __float128 value;
12 struct
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;
29 } ieee854_float128;
31 int
32 main (int argc, int *argv[])
34 ieee854_float128 x, y, z;
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;
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;
48 z.value = __builtin_copysignq (x.value, y.value);
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 ();
57 return 0;