blob: c09c8342bbbd868a777fe1f64f8b51fed2d0913a [file] [log] [blame]
/* { dg-require-effective-target dfp } */
/* We need the long double type to be IBM 128-bit because the CONVERT_TO_PINF
tests will fail if we use IEEE 128-bit floating point. This is due to IEEE
128-bit having a larger exponent range than IBM 128-bit extended double. So
tests that would generate an infinity with IBM 128-bit will generate a
normal number with IEEE 128-bit. */
/* { dg-require-effective-target long_double_ibm128 } */
/* { dg-options "-O2" } */
/* { dg-add-options long_double_ibm128 } */
/* Test decimal float conversions to and from IBM 128-bit long double. */
#include "convert.h"
volatile _Decimal32 sd;
volatile _Decimal64 dd;
volatile _Decimal128 td;
volatile float sf;
volatile double df;
volatile long double tf;
/* A value slightly less than DEC32_MAX can be converted in both directions. */
CONVERT_VALID (101, sd, tf, 9.999998e96df, 9.999998e96L, 1.e+81L)
CONVERT_VALID (102, tf, sd, 9.999998e96L, 9.999998e96df, 0.df)
/* A value slightly less than DBL_MAX can be converted in both directions. */
CONVERT_VALID (201, tf, dd, 1.79768e+308l, 1.79768e+308dd, 0.dd)
CONVERT_VALID (202, dd, tf, 1.79768e+308dd, 1.79768e+308l, 2.e292l)
CONVERT_VALID (203, tf, td, 1.79768e+308l, 1.79768e+308dl, 1.e292dl)
CONVERT_VALID (204, td, tf, 1.79768e+308dl, 1.79768e+308l, 2.e292l)
/* Check values that are too large for the result type. */
CONVERT_TO_PINF (301, dd, tf, 1.8e+308dd, l)
CONVERT_TO_PINF (302, dd, tf, 9.9e+384dd, l)
CONVERT_TO_PINF (303, td, tf, 1.8e+308dl, l)
CONVERT_TO_PINF (304, td, tf, 9.9e+384dl, l)
CONVERT_TO_PINF (311, tf, sd, 1.0e+97L, d32)
CONVERT_TO_PINF (312, tf, sd, 1.6e+308L, d32)
int
main ()
{
convert_101 ();
convert_102 ();
convert_201 ();
convert_202 ();
convert_203 ();
convert_204 ();
convert_301 ();
convert_302 ();
convert_303 ();
convert_304 ();
convert_311 ();
convert_312 ();
FINISH
}