/* { dg-options "-O0" } */
|
/* { dg-options "-O0" } */
|
/* { dg-skip-if "test is for emulation" { hard_dfp } { "*" } { "" } } */
|
/* { dg-skip-if "test is for emulation" { hard_dfp } { "*" } { "" } } */
|
|
|
/* N1150 5.2: Conversions among decimal floating types and between
|
/* N1150 5.2: Conversions among decimal floating types and between
|
decimal floating types and generic floating types.
|
decimal floating types and generic floating types.
|
C99 6.3.1.5(3) New.
|
C99 6.3.1.5(3) New.
|
|
|
Perform conversions between DFP types in which the assigned value
|
Perform conversions between DFP types in which the assigned value
|
cannot be represented exactly in the result and must be rounded
|
cannot be represented exactly in the result and must be rounded
|
correctly according to the current rounding mode.
|
correctly according to the current rounding mode.
|
|
|
Normally this would not be part of compiler testing, but conversions
|
Normally this would not be part of compiler testing, but conversions
|
are currently handled in libgcc via decNumber. */
|
are currently handled in libgcc via decNumber. */
|
|
|
#include "dfp-dbg.h"
|
#include "dfp-dbg.h"
|
#include "dfp-round.h"
|
#include "dfp-round.h"
|
|
|
_Decimal32 d32;
|
_Decimal32 d32;
|
_Decimal64 d64;
|
_Decimal64 d64;
|
_Decimal128 d128;
|
_Decimal128 d128;
|
|
|
_Decimal32 d64_to_d32 (_Decimal64 d) { return d; }
|
_Decimal32 d64_to_d32 (_Decimal64 d) { return d; }
|
_Decimal64 d128_to_d64 (_Decimal128 d) { return d; }
|
_Decimal64 d128_to_d64 (_Decimal128 d) { return d; }
|
_Decimal32 d128_to_d32 (_Decimal128 d) { return d; }
|
_Decimal32 d128_to_d32 (_Decimal128 d) { return d; }
|
|
|
int
|
int
|
do_d64_to_d32 (_Decimal64 orig, _Decimal32 exp)
|
do_d64_to_d32 (_Decimal64 orig, _Decimal32 exp)
|
{
|
{
|
d64 = orig;
|
d64 = orig;
|
d32 = d64_to_d32 (d64);
|
d32 = d64_to_d32 (d64);
|
return (d32 == exp);
|
return (d32 == exp);
|
}
|
}
|
|
|
int
|
int
|
do_d128_to_d32 (_Decimal128 orig, _Decimal32 exp)
|
do_d128_to_d32 (_Decimal128 orig, _Decimal32 exp)
|
{
|
{
|
d128 = orig;
|
d128 = orig;
|
d32 = d128_to_d32 (d128);
|
d32 = d128_to_d32 (d128);
|
return (d32 == exp);
|
return (d32 == exp);
|
}
|
}
|
|
|
int
|
int
|
do_d128_to_d64 (_Decimal128 orig, _Decimal64 exp)
|
do_d128_to_d64 (_Decimal128 orig, _Decimal64 exp)
|
{
|
{
|
d128 = orig;
|
d128 = orig;
|
d64 = d128_to_d64 (d128);
|
d64 = d128_to_d64 (d128);
|
return (d64 == exp);
|
return (d64 == exp);
|
}
|
}
|
|
|
int
|
int
|
main ()
|
main ()
|
{
|
{
|
DFP_SETROUND (FE_DEC_DOWNWARD);
|
DFP_SETROUND (FE_DEC_DOWNWARD);
|
if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE
|
if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111113df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111113df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111113df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111113df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111113df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111113df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111113df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111113df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE
|
|
|
DFP_SETROUND (FE_DEC_TONEAREST);
|
DFP_SETROUND (FE_DEC_TONEAREST);
|
if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE
|
if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111112df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111112df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111112df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111112df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE
|
|
|
DFP_SETROUND (FE_DEC_TONEARESTFROMZERO);
|
DFP_SETROUND (FE_DEC_TONEARESTFROMZERO);
|
if (!do_d64_to_d32 (1.1111125dd, 1.111113df)) FAILURE
|
if (!do_d64_to_d32 (1.1111125dd, 1.111113df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111113df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111113df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111114df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111113df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111113df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111113df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111113df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111114df)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111114dd)) FAILURE
|
|
|
DFP_SETROUND (FE_DEC_TOWARDZERO);
|
DFP_SETROUND (FE_DEC_TOWARDZERO);
|
if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE
|
if (!do_d64_to_d32 (1.1111125dd, 1.111112df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111113df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111113df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111112df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111112df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111113df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111113df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111112df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111113df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111113df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111112df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111112df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111113df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111113df)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111113dd)) FAILURE
|
|
|
DFP_SETROUND (FE_DEC_UPWARD);
|
DFP_SETROUND (FE_DEC_UPWARD);
|
if (!do_d64_to_d32 (1.1111125dd, 1.111113df)) FAILURE
|
if (!do_d64_to_d32 (1.1111125dd, 1.111113df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE
|
if (!do_d64_to_d32 (1.1111135dd, 1.111114df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111112df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111125dd, -1.111112df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111113df)) FAILURE
|
if (!do_d64_to_d32 (-1.1111135dd, -1.111113df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111113df)) FAILURE
|
if (!do_d128_to_d32 (1.1111125dl, 1.111113df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE
|
if (!do_d128_to_d32 (1.1111135dl, 1.111114df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111112df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111125dl, -1.111112df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111113df)) FAILURE
|
if (!do_d128_to_d32 (-1.1111135dl, -1.111113df)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111125dl, 1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE
|
if (!do_d128_to_d64 (1.1111111111111135dl, 1.111111111111114dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111125dl, -1.111111111111112dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111113dd)) FAILURE
|
if (!do_d128_to_d64 (-1.1111111111111135dl, -1.111111111111113dd)) FAILURE
|
|
|
FINISH
|
FINISH
|
}
|
}
|
|
|