@@ -1687,30 +1687,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
1687
1687
else if (statement==patternt (" ?cmp?" ))
1688
1688
{
1689
1689
PRECONDITION (op.size () == 2 && results.size () == 1 );
1690
- const int nan_value (statement[4 ]==' l' ? -1 : 1 );
1691
- const typet result_type (java_int_type ());
1692
- const exprt nan_result (from_integer (nan_value, result_type));
1693
-
1694
- // (value1 == NaN || value2 == NaN) ?
1695
- // nan_value : value1 < value2 ? -1 : value2 < value1 1 ? 1 : 0;
1696
- // (value1 == NaN || value2 == NaN) ?
1697
- // nan_value : value1 == value2 ? 0 : value1 < value2 -1 ? 1 : 0;
1698
-
1699
- isnan_exprt nan_op0 (op[0 ]);
1700
- isnan_exprt nan_op1 (op[1 ]);
1701
- exprt one=from_integer (1 , result_type);
1702
- exprt minus_one=from_integer (-1 , result_type);
1703
- results[0 ]=
1704
- if_exprt (
1705
- or_exprt (nan_op0, nan_op1),
1706
- nan_result,
1707
- if_exprt (
1708
- ieee_float_equal_exprt (op[0 ], op[1 ]),
1709
- from_integer (0 , result_type),
1710
- if_exprt (
1711
- binary_relation_exprt (op[0 ], ID_lt, op[1 ]),
1712
- minus_one,
1713
- one)));
1690
+ results = convert_cmp2 (statement, op, results);
1714
1691
}
1715
1692
else if (statement==patternt (" ?cmpl" ))
1716
1693
{
@@ -2489,6 +2466,34 @@ codet java_bytecode_convert_methodt::convert_instructions(
2489
2466
return code;
2490
2467
}
2491
2468
2469
+ exprt::operandst &java_bytecode_convert_methodt::convert_cmp2 (
2470
+ const irep_idt &statement,
2471
+ const exprt::operandst &op,
2472
+ exprt::operandst &results) const
2473
+ {
2474
+ const int nan_value (statement[4 ] == ' l' ? -1 : 1 );
2475
+ const typet result_type (java_int_type ());
2476
+ const exprt nan_result (from_integer (nan_value, result_type));
2477
+
2478
+ // (value1 == NaN || value2 == NaN) ?
2479
+ // nan_value : value1 < value2 ? -1 : value2 < value1 1 ? 1 : 0;
2480
+ // (value1 == NaN || value2 == NaN) ?
2481
+ // nan_value : value1 == value2 ? 0 : value1 < value2 -1 ? 1 : 0;
2482
+
2483
+ isnan_exprt nan_op0 (op[0 ]);
2484
+ isnan_exprt nan_op1 (op[1 ]);
2485
+ exprt one = from_integer (1 , result_type);
2486
+ exprt minus_one = from_integer (-1 , result_type);
2487
+ results[0 ] = if_exprt (
2488
+ or_exprt (nan_op0, nan_op1),
2489
+ nan_result,
2490
+ if_exprt (
2491
+ ieee_float_equal_exprt (op[0 ], op[1 ]),
2492
+ from_integer (0 , result_type),
2493
+ if_exprt (binary_relation_exprt (op[0 ], ID_lt, op[1 ]), minus_one, one)));
2494
+ return results;
2495
+ }
2496
+
2492
2497
exprt::operandst &java_bytecode_convert_methodt::convert_cmp (
2493
2498
const exprt::operandst &op,
2494
2499
exprt::operandst &results) const
0 commit comments