Index: runtime/vm/flow_graph_compiler.cc |
=================================================================== |
--- runtime/vm/flow_graph_compiler.cc (revision 8921) |
+++ runtime/vm/flow_graph_compiler.cc (working copy) |
@@ -404,6 +404,37 @@ |
} |
+void FlowGraphCompiler::EmitTestAndCall(const ICData& ic_data, |
+ Register class_id_reg, |
+ intptr_t arg_count, |
+ const Array& arg_names, |
+ Label* deopt, |
+ Label* done, |
+ intptr_t cid, |
+ intptr_t token_index, |
+ intptr_t try_index) { |
+ // TODO(srdjan): better loop please! |
+ for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) { |
+ Label next_test; |
+ assembler()->cmpl(class_id_reg, Immediate(ic_data.GetReceiverClassIdAt(i))); |
+ assembler()->j(NOT_EQUAL, &next_test); |
+ const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(i)); |
+ GenerateStaticCall(cid, |
+ token_index, |
+ try_index, |
+ target, |
+ arg_count, |
+ arg_names); |
+ assembler()->jmp(done); |
+ assembler()->Bind(&next_test); |
+ } |
+ assembler()->jmp(deopt); |
+} |
+ |
+ |
+ |
+ |
+ |
Register FrameRegisterAllocator::AllocateFreeRegister(bool* blocked_registers) { |
for (intptr_t regno = 0; regno < kNumberOfCpuRegisters; regno++) { |
if (!blocked_registers[regno] && (registers_[regno] == NULL)) { |