[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / pack03.c
blob0295a974cfb00d03a66b75e7a2c964dc38d4aadb
1 /* { dg-do run { target { powerpc*-*-linux* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target dfp_hw } */
4 /* { dg-options "-O2 -mhard-dfp" } */
6 #include <stddef.h>
7 #include <stdlib.h>
8 #include <math.h>
10 #ifdef DEBUG
11 #include <stdio.h>
12 #endif
14 int
15 main (void)
17 _Decimal128 one = (_Decimal128)1.0;
18 _Decimal128 two = (_Decimal128)2.0;
19 _Decimal128 ten = (_Decimal128)10.0;
20 _Decimal128 a = one;
21 _Decimal128 b;
22 _Decimal128 c;
23 unsigned long long x0;
24 unsigned long long x1;
25 size_t i;
27 for (i = 0; i < 25; i++)
28 a *= ten;
30 a += two;
32 x0 = __builtin_unpack_dec128 (a, 0);
33 x1 = __builtin_unpack_dec128 (a, 1);
34 b = __builtin_pack_dec128 (x0, x1);
35 c = __builtin_dscliq (one, 25) + two;
37 #ifdef DEBUG
39 union {
40 _Decimal128 d;
41 unsigned long long ull;
42 unsigned char uc[sizeof (_Decimal128)];
43 } u;
45 printf ("a = 0x");
46 u.d = a;
47 for (i = 0; i < sizeof (_Decimal128); i++)
48 printf ("%.2x", u.uc[i]);
50 printf (", %Lg\n", (long double)a);
52 printf ("b = 0x");
53 u.d = b;
54 for (i = 0; i < sizeof (_Decimal128); i++)
55 printf ("%.2x", u.uc[i]);
57 printf (", %Lg\n", (long double)b);
59 printf ("c = 0x");
60 u.d = c;
61 for (i = 0; i < sizeof (_Decimal128); i++)
62 printf ("%.2x", u.uc[i]);
64 printf (", %Lg\n", (long double)c);
66 printf ("x0 = 0x");
67 u.ull = x0;
68 for (i = 0; i < sizeof (unsigned long long); i++)
69 printf ("%.2x", u.uc[i]);
71 printf ("\nx1 = 0x");
72 u.ull = x1;
73 for (i = 0; i < sizeof (unsigned long long); i++)
74 printf ("%.2x", u.uc[i]);
76 printf ("\n");
78 #endif
80 if (a != b)
81 abort ();
83 if (a != c)
84 abort ();
86 return 0;