Require target lra in gcc.dg/pr108095.c
[official-gcc.git] / gcc / testsuite / gcc.dg / torture / convert-dfp.c
blobec136896ca7bd689931bc76b14b060002ac46f5f
1 /* { dg-do run } */
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. */
9 extern void abort ();
11 _Decimal32 var32 = 1.2df;
13 int __attribute__ ((__noinline__)) foo32 (_Decimal32 param32, _Decimal64 param64, _Decimal128 param128, _Float16 param16)
15 return (param32 == var32)
16 + (param64 == var32)
17 + (param128 == 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)
27 + (param64 == var64)
28 + (param128 == 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)
38 + (param64 == var128)
39 + (param128 == var128)
40 /* Small enough relative difference? */
41 + ((((_Decimal128)param16 - var128) / var128) < 0.002dl);
44 int main()
46 if (foo32 (1.2df, 1.2dd, 1.2dl, (_Float16)1.2) != 4)
47 abort ();
49 if (foo64 (1.2df, 1.2dd, 1.2dl, (_Float16)1.2) != 4)
50 abort ();
52 if (foo128 (1.2df, 1.2dd, 1.2dl, (_Float16)1.2) != 4)
53 abort ();
55 return 0;
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 } } } } */