/* We do not have a direct conversion instruction from 128 bit DFP to 32 bit DFP so this needs to be done in two steps. The first needs to be done with the "prepare for shorter precision rounding mode" in order to produce a correct result. Otherwise the 8th digit of the number will change from 4 to 5 in the first rounding step which then will turn the last digit of the 32 bit DFP number (the 3) into a 4. Although with direct rounding it would stay a 3. */ /* { dg-do run } */ /* { dg-options "-O3 -march=z10 -mzarch" } */ _Decimal32 __attribute__((noinline)) foo (_Decimal128 a) { return (_Decimal32)a; } int main () { if (foo (1.23456349999999999DL) != 1.234563DF) __builtin_abort (); }