2 /* { dg-require-effective-target float16_runtime } */
3 /* { dg-require-effective-target dfprt } */
4 /* { dg-options "-save-temps" } */
5 /* { dg-add-options float16 } */
7 /* Test conversions to/from DFP values. */
11 _Decimal32 var32
= 1.2df
;
13 int __attribute__ ((__noinline__
)) foo32 (_Decimal32 param32
, _Decimal64 param64
, _Decimal128 param128
, _Float16 param16
)
15 return (param32
== var32
)
18 /* Small enough relative difference? */
19 + ((((_Decimal32
)param16
- var32
) / var32
) < 0.002df
);
22 _Decimal64 var64
= 1.2dd
;
24 int __attribute__ ((__noinline__
)) foo64 (_Decimal32 param32
, _Decimal64 param64
, _Decimal128 param128
, _Float16 param16
)
26 return (param32
== var64
)
29 /* Small enough relative difference? */
30 + ((((_Decimal64
)param16
- var64
) / var64
) < 0.002dd
);
33 _Decimal128 var128
= 1.2dl
;
35 int __attribute__ ((__noinline__
)) foo128 (_Decimal32 param32
, _Decimal64 param64
, _Decimal128 param128
, _Float16 param16
)
37 return (param32
== var128
)
39 + (param128
== var128
)
40 /* Small enough relative difference? */
41 + ((((_Decimal128
)param16
- var128
) / var128
) < 0.002dl
);
46 if (foo32 (1.2df
, 1.2dd
, 1.2dl
, (_Float16
)1.2) != 4)
49 if (foo64 (1.2df
, 1.2dd
, 1.2dl
, (_Float16
)1.2) != 4)
52 if (foo128 (1.2df
, 1.2dd
, 1.2dl
, (_Float16
)1.2) != 4)
58 /* { dg-final { scan-assembler-times {\t__bid_extendsddd2} 3 { target { dfp_bid } } } } */
59 /* { dg-final { scan-assembler-times {\t__bid_extendsdtd2} 3 { target { dfp_bid } } } } */
60 /* { dg-final { scan-assembler-times {\t__bid_extendddtd2} 3 { target { dfp_bid } } } } */
61 /* { dg-final { scan-assembler-times {\t__bid_extendhfsd} 2 { target { dfp_bid } } } } */
62 /* { dg-final { scan-assembler-times {\t__bid_extendhfdd} 2 { target { dfp_bid } } } } */
63 /* { dg-final { scan-assembler-times {\t__bid_extendhftd} 2 { target { dfp_bid } } } } */