Index: src/x64/codegen-x64.cc |
=================================================================== |
--- src/x64/codegen-x64.cc (revision 5123) |
+++ src/x64/codegen-x64.cc (working copy) |
@@ -1201,40 +1201,44 @@ |
} |
-void CodeGenerator::JumpIfBothSmiUsingTypeInfo(Register left, |
- Register right, |
- TypeInfo left_info, |
- TypeInfo right_info, |
+void CodeGenerator::JumpIfBothSmiUsingTypeInfo(Result* left, |
+ Result* right, |
JumpTarget* both_smi) { |
+ TypeInfo left_info = left->type_info(); |
+ TypeInfo right_info = right->type_info(); |
if (left_info.IsDouble() || left_info.IsString() || |
right_info.IsDouble() || right_info.IsString()) { |
// We know that left and right are not both smi. Don't do any tests. |
return; |
} |
- if (left.is(right)) { |
+ if (left->reg().is(right->reg())) { |
if (!left_info.IsSmi()) { |
- Condition is_smi = masm()->CheckSmi(left); |
+ Condition is_smi = masm()->CheckSmi(left->reg()); |
both_smi->Branch(is_smi); |
} else { |
- if (FLAG_debug_code) __ AbortIfNotSmi(left); |
+ if (FLAG_debug_code) __ AbortIfNotSmi(left->reg()); |
+ left->Unuse(); |
+ right->Unuse(); |
both_smi->Jump(); |
} |
} else if (!left_info.IsSmi()) { |
if (!right_info.IsSmi()) { |
- Condition is_smi = masm()->CheckBothSmi(left, right); |
+ Condition is_smi = masm()->CheckBothSmi(left->reg(), right->reg()); |
both_smi->Branch(is_smi); |
} else { |
- Condition is_smi = masm()->CheckSmi(left); |
+ Condition is_smi = masm()->CheckSmi(left->reg()); |
both_smi->Branch(is_smi); |
} |
} else { |
- if (FLAG_debug_code) __ AbortIfNotSmi(left); |
+ if (FLAG_debug_code) __ AbortIfNotSmi(left->reg()); |
if (!right_info.IsSmi()) { |
- Condition is_smi = masm()->CheckSmi(right); |
+ Condition is_smi = masm()->CheckSmi(right->reg()); |
both_smi->Branch(is_smi); |
} else { |
- if (FLAG_debug_code) __ AbortIfNotSmi(right); |
+ if (FLAG_debug_code) __ AbortIfNotSmi(right->reg()); |
+ left->Unuse(); |
+ right->Unuse(); |
both_smi->Jump(); |
} |
} |
@@ -2283,9 +2287,7 @@ |
Register right_reg = right_side.reg(); |
// In-line check for comparing two smis. |
- JumpIfBothSmiUsingTypeInfo(left_side.reg(), right_side.reg(), |
- left_side.type_info(), right_side.type_info(), |
- &is_smi); |
+ JumpIfBothSmiUsingTypeInfo(&left_side, &right_side, &is_smi); |
if (has_valid_frame()) { |
// Inline the equality check if both operands can't be a NaN. If both |