Index: runtime/vm/intermediate_language_ia32.cc |
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc |
index 3ccb078f787cb6b9f0abd67d2ebcabf6395e1c20..34555dc6410020d71ea407e3828af4c95d13ddbe 100644 |
--- a/runtime/vm/intermediate_language_ia32.cc |
+++ b/runtime/vm/intermediate_language_ia32.cc |
@@ -5847,7 +5847,8 @@ void CheckSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
Label* deopt = compiler->AddDeoptStub(deopt_id(), |
ICData::kDeoptCheckSmi, |
licm_hoisted_ ? ICData::kHoisted : 0); |
- __ BranchIfNotSmi(value, deopt); |
+ __ testl(value, Immediate(kSmiTagMask)); |
+ __ j(NOT_ZERO, deopt); |
} |
@@ -5870,20 +5871,6 @@ void CheckClassIdInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
} |
-LocationSummary* GenericCheckBoundInstr::MakeLocationSummary(Zone* zone, |
- bool opt) const { |
- // Only needed for AOT. |
- UNIMPLEMENTED(); |
- return NULL; |
-} |
- |
- |
-void GenericCheckBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
- // Only needed for AOT. |
- UNIMPLEMENTED(); |
-} |
- |
- |
// Length: register or constant. |
// Index: register, constant or stack slot. |
LocationSummary* CheckArrayBoundInstr::MakeLocationSummary(Zone* zone, |
@@ -5923,12 +5910,8 @@ void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
return; |
} |
- const intptr_t index_cid = index()->Type()->ToCid(); |
if (length_loc.IsConstant()) { |
Register index = index_loc.reg(); |
- if (index_cid != kSmiCid) { |
- __ BranchIfNotSmi(index, deopt); |
- } |
const Smi& length = Smi::Cast(length_loc.constant()); |
if (length.Value() == Smi::kMaxValue) { |
__ testl(index, index); |
@@ -5950,17 +5933,11 @@ void CheckArrayBoundInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
} else if (length_loc.IsStackSlot()) { |
Register index = index_loc.reg(); |
const Address& length = length_loc.ToStackSlotAddress(); |
- if (index_cid != kSmiCid) { |
- __ BranchIfNotSmi(index, deopt); |
- } |
__ cmpl(index, length); |
__ j(ABOVE_EQUAL, deopt); |
} else { |
Register index = index_loc.reg(); |
Register length = length_loc.reg(); |
- if (index_cid != kSmiCid) { |
- __ BranchIfNotSmi(index, deopt); |
- } |
__ cmpl(length, index); |
__ j(BELOW_EQUAL, deopt); |
} |