88 lines
1.7 KiB
C
88 lines
1.7 KiB
C
|
/* { dg-do run { target { powerpc*-*-linux* } } } */
|
||
|
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
|
||
|
/* { dg-require-effective-target dfp_hw } */
|
||
|
/* { dg-options "-O2 -mhard-dfp" } */
|
||
|
|
||
|
#include <stddef.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <math.h>
|
||
|
|
||
|
#ifdef DEBUG
|
||
|
#include <stdio.h>
|
||
|
#endif
|
||
|
|
||
|
int
|
||
|
main (void)
|
||
|
{
|
||
|
_Decimal128 one = (_Decimal128)1.0;
|
||
|
_Decimal128 two = (_Decimal128)2.0;
|
||
|
_Decimal128 ten = (_Decimal128)10.0;
|
||
|
_Decimal128 a = one;
|
||
|
_Decimal128 b;
|
||
|
_Decimal128 c;
|
||
|
unsigned long long x0;
|
||
|
unsigned long long x1;
|
||
|
size_t i;
|
||
|
|
||
|
for (i = 0; i < 25; i++)
|
||
|
a *= ten;
|
||
|
|
||
|
a += two;
|
||
|
|
||
|
x0 = __builtin_unpack_dec128 (a, 0);
|
||
|
x1 = __builtin_unpack_dec128 (a, 1);
|
||
|
b = __builtin_pack_dec128 (x0, x1);
|
||
|
c = __builtin_dscliq (one, 25) + two;
|
||
|
|
||
|
#ifdef DEBUG
|
||
|
{
|
||
|
union {
|
||
|
_Decimal128 d;
|
||
|
unsigned long long ull;
|
||
|
unsigned char uc[sizeof (_Decimal128)];
|
||
|
} u;
|
||
|
|
||
|
printf ("a = 0x");
|
||
|
u.d = a;
|
||
|
for (i = 0; i < sizeof (_Decimal128); i++)
|
||
|
printf ("%.2x", u.uc[i]);
|
||
|
|
||
|
printf (", %Lg\n", (long double)a);
|
||
|
|
||
|
printf ("b = 0x");
|
||
|
u.d = b;
|
||
|
for (i = 0; i < sizeof (_Decimal128); i++)
|
||
|
printf ("%.2x", u.uc[i]);
|
||
|
|
||
|
printf (", %Lg\n", (long double)b);
|
||
|
|
||
|
printf ("c = 0x");
|
||
|
u.d = c;
|
||
|
for (i = 0; i < sizeof (_Decimal128); i++)
|
||
|
printf ("%.2x", u.uc[i]);
|
||
|
|
||
|
printf (", %Lg\n", (long double)c);
|
||
|
|
||
|
printf ("x0 = 0x");
|
||
|
u.ull = x0;
|
||
|
for (i = 0; i < sizeof (unsigned long long); i++)
|
||
|
printf ("%.2x", u.uc[i]);
|
||
|
|
||
|
printf ("\nx1 = 0x");
|
||
|
u.ull = x1;
|
||
|
for (i = 0; i < sizeof (unsigned long long); i++)
|
||
|
printf ("%.2x", u.uc[i]);
|
||
|
|
||
|
printf ("\n");
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
if (a != b)
|
||
|
abort ();
|
||
|
|
||
|
if (a != c)
|
||
|
abort ();
|
||
|
|
||
|
return 0;
|
||
|
}
|