Index: runtime/vm/flow_graph_compiler_arm.cc |
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc |
index 8d8626c7699cbec248d17e08365c6582c55ad904..09be30f26db553f1da4cdff365050d88f40ea908 100644 |
--- a/runtime/vm/flow_graph_compiler_arm.cc |
+++ b/runtime/vm/flow_graph_compiler_arm.cc |
@@ -1332,9 +1332,8 @@ void FlowGraphCompiler::EmitMegamorphicInstanceCall( |
__ Comment("Slow case: megamorphic call"); |
} |
__ LoadObject(R9, cache); |
- __ ldr(LR, Address(THR, Thread::megamorphic_lookup_entry_point_offset())); |
+ __ ldr(LR, Address(THR, Thread::megamorphic_lookup_checked_entry_offset())); |
__ blx(LR); |
- __ blx(R1); |
__ Bind(&done); |
RecordSafepoint(locs, slow_path_argument_count); |
@@ -1372,12 +1371,17 @@ void FlowGraphCompiler::EmitSwitchableInstanceCall( |
intptr_t deopt_id, |
TokenPosition token_pos, |
LocationSummary* locs) { |
+ ASSERT(ic_data.NumArgsTested() == 1); |
+ const Code& initial_stub = Code::ZoneHandle( |
+ StubCode::ICLookupThroughFunction_entry()->code()); |
+ |
__ Comment("SwitchableCall"); |
+ |
__ LoadFromOffset(kWord, R0, SP, (argument_count - 1) * kWordSize); |
- ASSERT(ic_data.NumArgsTested() == 1); |
__ LoadUniqueObject(R9, ic_data); |
- __ BranchLinkPatchable(*StubCode::ICLookupThroughFunction_entry()); |
- __ blx(R1); |
+ __ LoadUniqueObject(CODE_REG, initial_stub); |
+ __ ldr(LR, FieldAddress(CODE_REG, Code::checked_entry_point_offset())); |
+ __ blx(LR); |
AddCurrentDescriptor(RawPcDescriptors::kOther, Thread::kNoDeoptId, token_pos); |
RecordSafepoint(locs); |