Index: runtime/vm/intermediate_language_mips.cc |
=================================================================== |
--- runtime/vm/intermediate_language_mips.cc (revision 28079) |
+++ runtime/vm/intermediate_language_mips.cc (working copy) |
@@ -356,12 +356,6 @@ |
__ TraceSimMsg("EmitEqualityAsInstanceCall"); |
__ Comment("EmitEqualityAsInstanceCall"); |
- Label check_identity; |
- __ lw(A1, Address(SP, 1 * kWordSize)); |
- __ lw(A0, Address(SP, 0 * kWordSize)); |
- __ LoadImmediate(CMPRES1, reinterpret_cast<int32_t>(Object::null())); |
- __ beq(A1, CMPRES1, &check_identity); |
- __ beq(A0, CMPRES1, &check_identity); |
ICData& equality_ic_data = ICData::ZoneHandle(); |
if (compiler->is_optimizing() && FLAG_propagate_ic_data) { |
@@ -389,40 +383,6 @@ |
kNoArgumentNames, |
locs, |
equality_ic_data); |
- Label check_ne; |
- __ b(&check_ne); |
- |
- __ Bind(&check_identity); |
- Label equality_done; |
- if (compiler->is_optimizing()) { |
- // No need to update IC data. |
- Label is_true; |
- __ lw(A1, Address(SP, 1 * kWordSize)); |
- __ lw(A0, Address(SP, 0 * kWordSize)); |
- __ addiu(SP, SP, Immediate(2 * kWordSize)); |
- __ beq(A1, A0, &is_true); |
- __ LoadObject(V0, Bool::Get(kind != Token::kEQ)); |
- __ b(&equality_done); |
- __ Bind(&is_true); |
- __ LoadObject(V0, Bool::Get(kind == Token::kEQ)); |
- if (kind == Token::kNE) { |
- // Skip not-equal result conversion. |
- __ b(&equality_done); |
- } |
- } else { |
- // Call stub, load IC data in register. The stub will update ICData if |
- // necessary. |
- Register ic_data_reg = locs->temp(0).reg(); |
- ASSERT(ic_data_reg == T0); // Stub depends on it. |
- __ LoadObject(ic_data_reg, equality_ic_data); |
- // Pass left in A1 and right in A0. |
- compiler->GenerateCall(token_pos, |
- &StubCode::EqualityWithNullArgLabel(), |
- PcDescriptors::kRuntimeCall, |
- locs); |
- __ Drop(2); |
- } |
- __ Bind(&check_ne); |
if (kind == Token::kNE) { |
Label true_label, done; |
// Negate the condition: true label returns false and vice versa. |
@@ -433,7 +393,6 @@ |
__ LoadObject(V0, Bool::False()); |
__ Bind(&done); |
} |
- __ Bind(&equality_done); |
} |
@@ -649,31 +608,8 @@ |
ASSERT(!ic_data.IsNull() && (ic_data.NumberOfChecks() > 0)); |
Register left = locs->in(0).reg(); |
Register right = locs->in(1).reg(); |
- Label done, identity_compare, non_null_compare; |
__ TraceSimMsg("EmitGenericEqualityCompare"); |
__ Comment("EmitGenericEqualityCompare"); |
- __ LoadImmediate(CMPRES1, reinterpret_cast<int32_t>(Object::null())); |
- __ beq(right, CMPRES1, &identity_compare); |
- __ bne(left, CMPRES1, &non_null_compare); |
- |
- // Comparison with NULL is "===". |
- __ Bind(&identity_compare); |
- Condition cond = TokenKindToSmiCondition(kind); |
- __ slt(CMPRES1, left, right); |
- __ slt(CMPRES2, right, left); |
- if (branch != NULL) { |
- branch->EmitBranchOnCondition(compiler, cond); |
- } else { |
- Register result = locs->out().reg(); |
- Label load_true; |
- EmitBranchAfterCompare(compiler, cond, &load_true); |
- __ LoadObject(result, Bool::False()); |
- __ b(&done); |
- __ Bind(&load_true); |
- __ LoadObject(result, Bool::True()); |
- } |
- __ b(&done); |
- __ Bind(&non_null_compare); // Receiver is not null. |
ASSERT(left == A1); |
ASSERT(right == A0); |
__ addiu(SP, SP, Immediate(-2 * kWordSize)); |
@@ -681,7 +617,6 @@ |
__ sw(A0, Address(SP, 0 * kWordSize)); |
EmitEqualityAsPolymorphicCall(compiler, ic_data, locs, branch, kind, |
deopt_id, token_pos); |
- __ Bind(&done); |
} |