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