@@ -1687,30 +1687,7 @@ codet java_bytecode_convert_methodt::convert_instructions(
16871687 else if (statement==patternt (" ?cmp?" ))
16881688 {
16891689 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);
17141691 }
17151692 else if (statement==patternt (" ?cmpl" ))
17161693 {
@@ -2489,6 +2466,34 @@ codet java_bytecode_convert_methodt::convert_instructions(
24892466 return code;
24902467}
24912468
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+
24922497exprt::operandst &java_bytecode_convert_methodt::convert_cmp (
24932498 const exprt::operandst &op,
24942499 exprt::operandst &results) const
0 commit comments