2 /* { dg-require-effective-target dfp_hw } */
3 /* { dg-require-effective-target has_arch_pwr6 } */
4 /* { dg-options "-mhard-float -O2 -save-temps" } */
6 /* Test the decimal floating point quantize built-ins. */
23 _Decimal64 srcA_dfp64
, srcB_dfp64
;
24 _Decimal64 result_dfp64
;
25 _Decimal64 expected_result_dfp64
;
26 _Decimal128 srcA_dfp128
, srcB_dfp128
;
27 _Decimal128 result_dfp128
;
28 _Decimal128 expected_result_dfp128
;
30 /* Third argument of quantize built-ins is the rounding mode value (RMC).
33 00 Round to nearest, ties to even
35 10 Round to nearest, ties toward 0
36 11 Round according to DRN */
39 /* Tests for quantize with 64-bit DFP variable. */
41 srcB_dfp64
= 300.456789df
;
42 expected_result_dfp64
= 300.5df
;
44 result_dfp64
= __builtin_dfp_quantize (srcA_dfp64
, srcB_dfp64
, 0x0);
46 if (result_dfp64
!= expected_result_dfp64
)
48 printf("DFP 64-bit quantize of variable, RMC = 0 result does not match expected result\n");
53 srcA_dfp64
= 100.00df
;
54 srcB_dfp64
= 300.456789df
;
55 expected_result_dfp64
= 300.45df
;
57 result_dfp64
= __builtin_dfp_quantize (srcA_dfp64
, srcB_dfp64
, 0x1);
59 if (result_dfp64
!= expected_result_dfp64
)
61 printf("DFP 64-bit quantize of variable, RMC = 1 result does not match expected result\n");
66 srcA_dfp64
= 100.001df
;
67 srcB_dfp64
= 3001.456789df
;
68 expected_result_dfp64
= 3001.457df
;
70 result_dfp64
= __builtin_dfp_quantize (srcA_dfp64
, srcB_dfp64
, 0x2);
72 if (result_dfp64
!= expected_result_dfp64
)
74 printf("DFP 64-bit quantize of variable, RMC = 2 result does not match expected result\n");
79 /* Tests for 64-bit quantize with immediate value. */
81 srcB_dfp64
= 10.4567df
;
82 expected_result_dfp64
= 000.0df
;
84 result_dfp64
= __builtin_dfp_quantize (IMM2
, srcB_dfp64
, 0x0);
86 if (result_dfp64
!= expected_result_dfp64
)
88 printf("DFP 64-bit quantize immediate, RMC = 0 result does not match expected result\n");
93 srcB_dfp64
= 104567.891df
;
94 expected_result_dfp64
= 100000.0df
;
96 result_dfp64
= __builtin_dfp_quantize (IMM4
, srcB_dfp64
, 0x1);
98 if (result_dfp64
!= expected_result_dfp64
)
100 printf("DFP 64-bit quantize immediate, RMC = 1 result does not match expected result\n");
105 srcB_dfp64
= 109876.54321df
;
106 expected_result_dfp64
= 109900.0df
;
108 result_dfp64
= __builtin_dfp_quantize (IMM2
, srcB_dfp64
, 0x2);
110 if (result_dfp64
!= expected_result_dfp64
)
112 printf("DFP 64-bit quantize immediate, RMC = 2 result does not match expected result\n");
117 /* Tests for quantize 128-bit DFP variable. */
118 srcA_dfp128
= 0.018df
;
119 srcB_dfp128
= 50000.18345df
;
120 expected_result_dfp128
= 50000.180df
;
122 result_dfp128
= __builtin_dfp_quantize (srcA_dfp128
, srcB_dfp128
, 0x0);
124 if (result_dfp128
!= expected_result_dfp128
)
126 printf("DFP 128-bit quantize variable, RMC = 0 result does not match expected result\n");
131 srcA_dfp128
= 8.01df
;
132 srcB_dfp128
= 50000.18345df
;
133 expected_result_dfp128
= 50000.18df
;
135 result_dfp128
= __builtin_dfp_quantize (srcA_dfp128
, srcB_dfp128
, 0x1);
137 if (result_dfp128
!= expected_result_dfp128
)
139 printf("DFP 128-bit quantize variable, RMC = 1 result does not match expected result\n");
144 srcA_dfp128
= 0.1234df
;
145 srcB_dfp128
= 50000.18346789df
;
146 expected_result_dfp128
= 50000.1800df
;
148 result_dfp128
= __builtin_dfp_quantize (srcA_dfp128
, srcB_dfp128
, 0x2);
150 if (result_dfp128
!= expected_result_dfp128
)
152 printf("DFP 128-bit quantize variable, RMC = 2 result does not match expected result\n");
157 /* Tests for 128-bit quantize with immediate value. */
158 srcB_dfp128
= 1234.18345df
;
159 expected_result_dfp128
= 1200.0df
;
161 result_dfp128
= __builtin_dfp_quantize (IMM2
, srcB_dfp128
, 0x0);
163 if (result_dfp128
!= expected_result_dfp128
)
165 printf("DFP 128-bit quantize immediate, RMC = 0 result does not match expected result\n");
170 srcB_dfp128
= 123456.18345df
;
171 expected_result_dfp128
= 120000.0df
;
173 result_dfp128
= __builtin_dfp_quantize (IMM4
, srcB_dfp128
, 0x1);
175 if (result_dfp128
!= expected_result_dfp128
)
177 printf("DFP 128-bit quantize immediate, RMC = 1 result does not match expected result\n");
182 srcB_dfp128
= 12361834.5df
;
183 expected_result_dfp128
= 12362000.0df
;
185 result_dfp128
= __builtin_dfp_quantize (IMM3
, srcB_dfp128
, 0x2);
187 if (result_dfp128
!= expected_result_dfp128
)
189 printf("DFP 128-bit quantize immediate, RMC = 2 result does not match expected result\n");
197 /* { dg-final { scan-assembler-times {\mdqua\M} 3 } } */
198 /* { dg-final { scan-assembler-times {\mdquai\M} 3 } } */
199 /* { dg-final { scan-assembler-times {\mdquaq\M} 3 } } */
200 /* { dg-final { scan-assembler-times {\mdquaiq\M} 3 } } */