Index: src/ic.cc |
diff --git a/src/ic.cc b/src/ic.cc |
index d6e35a7c47ccd16f2a8027ee7e762103db6d8a00..6abd52f2a16446967a00a182990dadba0f5cb283 100644 |
--- a/src/ic.cc |
+++ b/src/ic.cc |
@@ -2653,11 +2653,10 @@ static BinaryOpIC::TypeInfo InputState(BinaryOpIC::TypeInfo old_type, |
#ifdef DEBUG |
static void TraceBinaryOp(BinaryOpIC::TypeInfo left, |
BinaryOpIC::TypeInfo right, |
- bool has_fixed_right_arg, |
- int32_t fixed_right_arg_value, |
+ Maybe<int32_t> fixed_right_arg, |
BinaryOpIC::TypeInfo result) { |
PrintF("%s*%s", BinaryOpIC::GetName(left), BinaryOpIC::GetName(right)); |
- if (has_fixed_right_arg) PrintF("{%d}", fixed_right_arg_value); |
+ if (fixed_right_arg.has_value) PrintF("{%d}", fixed_right_arg.value); |
PrintF("->%s", BinaryOpIC::GetName(result)); |
} |
#endif |
@@ -2689,10 +2688,8 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) { |
BinaryOpIC::TypeInfo new_overall = Max(new_left, new_right); |
BinaryOpIC::TypeInfo previous_overall = Max(previous_left, previous_right); |
- bool previous_has_fixed_right_arg = |
- BinaryOpStub::decode_has_fixed_right_arg_from_minor_key(key); |
- int previous_fixed_right_arg_value = |
- BinaryOpStub::decode_fixed_right_arg_value_from_minor_key(key); |
+ Maybe<int> previous_fixed_right_arg = |
+ BinaryOpStub::decode_fixed_right_arg_from_minor_key(key); |
int32_t value; |
bool new_has_fixed_right_arg = |
@@ -2700,11 +2697,12 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) { |
right->ToInt32(&value) && |
BinaryOpStub::can_encode_arg_value(value) && |
(previous_overall == BinaryOpIC::UNINITIALIZED || |
- (previous_has_fixed_right_arg && |
- previous_fixed_right_arg_value == value)); |
- int32_t new_fixed_right_arg_value = new_has_fixed_right_arg ? value : 1; |
+ (previous_fixed_right_arg.has_value && |
+ previous_fixed_right_arg.value == value)); |
+ Maybe<int32_t> new_fixed_right_arg( |
+ new_has_fixed_right_arg, new_has_fixed_right_arg ? value : 1); |
- if (previous_has_fixed_right_arg == new_has_fixed_right_arg) { |
+ if (previous_fixed_right_arg.has_value == new_fixed_right_arg.has_value) { |
if (new_overall == BinaryOpIC::SMI && previous_overall == BinaryOpIC::SMI) { |
if (op == Token::DIV || |
op == Token::MUL || |
@@ -2728,8 +2726,7 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) { |
} |
} |
- BinaryOpStub stub(key, new_left, new_right, result_type, |
- new_has_fixed_right_arg, new_fixed_right_arg_value); |
+ BinaryOpStub stub(key, new_left, new_right, result_type, new_fixed_right_arg); |
Handle<Code> code = stub.GetCode(isolate); |
if (!code.is_null()) { |
#ifdef DEBUG |
@@ -2737,11 +2734,10 @@ RUNTIME_FUNCTION(MaybeObject*, BinaryOp_Patch) { |
PrintF("[BinaryOpIC in "); |
JavaScriptFrame::PrintTop(isolate, stdout, false, true); |
PrintF(" "); |
- TraceBinaryOp(previous_left, previous_right, previous_has_fixed_right_arg, |
- previous_fixed_right_arg_value, previous_result); |
+ TraceBinaryOp(previous_left, previous_right, previous_fixed_right_arg, |
+ previous_result); |
PrintF(" => "); |
- TraceBinaryOp(new_left, new_right, new_has_fixed_right_arg, |
- new_fixed_right_arg_value, result_type); |
+ TraceBinaryOp(new_left, new_right, new_fixed_right_arg, result_type); |
PrintF(" #%s @ %p]\n", Token::Name(op), static_cast<void*>(*code)); |
} |
#endif |