Skip to content

Commit 6f0f3fb

Browse files
Extract convert_cmp2 function
1 parent 3049281 commit 6f0f3fb

File tree

2 files changed

+34
-24
lines changed

2 files changed

+34
-24
lines changed

jbmc/src/java_bytecode/java_bytecode_convert_method.cpp

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
24922497
exprt::operandst &java_bytecode_convert_methodt::convert_cmp(
24932498
const exprt::operandst &op,
24942499
exprt::operandst &results) const

jbmc/src/java_bytecode/java_bytecode_convert_method_class.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -375,5 +375,10 @@ class java_bytecode_convert_methodt:public messaget
375375

376376
exprt::operandst &
377377
convert_cmp(const exprt::operandst &op, exprt::operandst &results) const;
378+
379+
exprt::operandst &convert_cmp2(
380+
const irep_idt &statement,
381+
const exprt::operandst &op,
382+
exprt::operandst &results) const;
378383
};
379384
#endif

0 commit comments

Comments
 (0)