| Index: runtime/vm/flow_graph_compiler_ia32.cc
|
| diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
|
| index c6094fe3d7294076be554901359e762e7f115d61..f560e6b0a1723d9a1123cac5248fa2b35f8bf764 100644
|
| --- a/runtime/vm/flow_graph_compiler_ia32.cc
|
| +++ b/runtime/vm/flow_graph_compiler_ia32.cc
|
| @@ -33,6 +33,18 @@ DECLARE_FLAG(bool, enable_simd_inline);
|
| DECLARE_FLAG(bool, use_megamorphic_stub);
|
|
|
|
|
| +void MegamorphicSlowPath::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| + Assembler* assembler = compiler->assembler();
|
| +#define __ assembler->
|
| + __ Bind(entry_label());
|
| + __ Comment("MegamorphicSlowPath");
|
| + compiler->EmitMegamorphicInstanceCall(ic_data_, argument_count_, deopt_id_,
|
| + token_pos_, locs_, try_index_);
|
| + __ jmp(exit_label());
|
| +#undef __
|
| +}
|
| +
|
| +
|
| FlowGraphCompiler::~FlowGraphCompiler() {
|
| // BlockInfos are zone-allocated, so their destructors are not called.
|
| // Verify the labels explicitly here.
|
| @@ -175,8 +187,8 @@ void CompilerDeoptInfoWithStub::GenerateCode(FlowGraphCompiler* compiler,
|
| intptr_t stub_ix) {
|
| // Calls do not need stubs, they share a deoptimization trampoline.
|
| ASSERT(reason() != ICData::kDeoptAtCall);
|
| - Assembler* assem = compiler->assembler();
|
| -#define __ assem->
|
| + Assembler* assembler = compiler->assembler();
|
| +#define __ assembler->
|
| __ Comment("%s", Name());
|
| __ Bind(entry_label());
|
| if (FLAG_trap_on_deoptimization) {
|
| @@ -186,7 +198,7 @@ void CompilerDeoptInfoWithStub::GenerateCode(FlowGraphCompiler* compiler,
|
| ASSERT(deopt_env() != NULL);
|
| __ pushl(CODE_REG);
|
| __ Call(*StubCode::Deoptimize_entry());
|
| - set_pc_offset(assem->CodeSize());
|
| + set_pc_offset(assembler->CodeSize());
|
| __ int3();
|
| #undef __
|
| }
|
| @@ -1278,7 +1290,8 @@ void FlowGraphCompiler::EmitMegamorphicInstanceCall(
|
| intptr_t argument_count,
|
| intptr_t deopt_id,
|
| intptr_t token_pos,
|
| - LocationSummary* locs) {
|
| + LocationSummary* locs,
|
| + intptr_t try_index) {
|
| const String& name = String::Handle(zone(), ic_data.target_name());
|
| const Array& arguments_descriptor =
|
| Array::ZoneHandle(zone(), ic_data.arguments_descriptor());
|
| @@ -1300,6 +1313,8 @@ void FlowGraphCompiler::EmitMegamorphicInstanceCall(
|
| Thread::kNoDeoptId, token_pos);
|
| RecordSafepoint(locs);
|
| const intptr_t deopt_id_after = Thread::ToDeoptAfter(deopt_id);
|
| + // Precompilation not implemented on ia32 platform.
|
| + ASSERT(!Compiler::always_optimize());
|
| if (is_optimizing()) {
|
| AddDeoptIndexAtCall(deopt_id_after, token_pos);
|
| } else {
|
|
|