| /* { 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 |
| } |