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
32 main (int argc, int *argv[])
33 {
34 ieee854_float128 x, z;
35
36 x.nan.negative = 1;
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 z.value = __builtin_fabsf128 (x.value);
43
44 if (z.nan.negative != 0
45 || z.nan.exponent != 0x22
46 || z.nan.quiet_nan != 0
47 || z.nan.mant_high != 0x1234
48 || z.nan.mant_low != 0xabcdef)
49 abort ();
50
51 z.value = __builtin_fabsf128 (z.value);
52
53 if (z.nan.negative != 0
54 || z.nan.exponent != 0x22
55 || z.nan.quiet_nan != 0
56 || z.nan.mant_high != 0x1234
57 || z.nan.mant_low != 0xabcdef)
58 abort ();
59
60 return 0;
61 }