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[])32main (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