OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_X64. |
6 #if defined(TARGET_ARCH_X64) | 6 #if defined(TARGET_ARCH_X64) |
7 | 7 |
8 #include "vm/intermediate_language.h" | 8 #include "vm/intermediate_language.h" |
9 | 9 |
10 #include "lib/error.h" | 10 #include "lib/error.h" |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 } | 327 } |
328 | 328 |
329 | 329 |
330 static void EmitEqualityAsInstanceCall(FlowGraphCompiler* compiler, | 330 static void EmitEqualityAsInstanceCall(FlowGraphCompiler* compiler, |
331 intptr_t deopt_id, | 331 intptr_t deopt_id, |
332 intptr_t token_pos, | 332 intptr_t token_pos, |
333 Token::Kind kind, | 333 Token::Kind kind, |
334 LocationSummary* locs, | 334 LocationSummary* locs, |
335 const ICData& original_ic_data) { | 335 const ICData& original_ic_data) { |
336 if (!compiler->is_optimizing()) { | 336 if (!compiler->is_optimizing()) { |
337 compiler->AddCurrentDescriptor(PcDescriptors::kDeoptBefore, | 337 compiler->AddCurrentDescriptor(PcDescriptors::kDeopt, |
338 deopt_id, | 338 deopt_id, |
339 token_pos); | 339 token_pos); |
340 } | 340 } |
341 const int kNumberOfArguments = 2; | 341 const int kNumberOfArguments = 2; |
342 const Array& kNoArgumentNames = Array::Handle(); | 342 const Array& kNoArgumentNames = Array::Handle(); |
343 const int kNumArgumentsChecked = 2; | 343 const int kNumArgumentsChecked = 2; |
344 | 344 |
345 const Immediate& raw_null = | 345 const Immediate& raw_null = |
346 Immediate(reinterpret_cast<intptr_t>(Object::null())); | 346 Immediate(reinterpret_cast<intptr_t>(Object::null())); |
347 Label check_identity; | 347 Label check_identity; |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 Array::Handle(), // No named arguments. | 836 Array::Handle(), // No named arguments. |
837 deopt, // Deoptimize target. | 837 deopt, // Deoptimize target. |
838 deopt_id(), | 838 deopt_id(), |
839 token_pos(), | 839 token_pos(), |
840 locs()); | 840 locs()); |
841 return; | 841 return; |
842 } | 842 } |
843 const String& function_name = | 843 const String& function_name = |
844 String::ZoneHandle(Symbols::New(Token::Str(kind()))); | 844 String::ZoneHandle(Symbols::New(Token::Str(kind()))); |
845 if (!compiler->is_optimizing()) { | 845 if (!compiler->is_optimizing()) { |
846 compiler->AddCurrentDescriptor(PcDescriptors::kDeoptBefore, | 846 compiler->AddCurrentDescriptor(PcDescriptors::kDeopt, |
847 deopt_id(), | 847 deopt_id(), |
848 token_pos()); | 848 token_pos()); |
849 } | 849 } |
850 const intptr_t kNumArguments = 2; | 850 const intptr_t kNumArguments = 2; |
851 const intptr_t kNumArgsChecked = 2; // Type-feedback. | 851 const intptr_t kNumArgsChecked = 2; // Type-feedback. |
852 ICData& relational_ic_data = ICData::ZoneHandle(ic_data()->raw()); | 852 ICData& relational_ic_data = ICData::ZoneHandle(ic_data()->raw()); |
853 if (compiler->is_optimizing() && FLAG_propagate_ic_data) { | 853 if (compiler->is_optimizing() && FLAG_propagate_ic_data) { |
854 ASSERT(!ic_data()->IsNull()); | 854 ASSERT(!ic_data()->IsNull()); |
855 if (ic_data()->NumberOfChecks() == 0) { | 855 if (ic_data()->NumberOfChecks() == 0) { |
856 // IC call for reoptimization populates original ICData. | 856 // IC call for reoptimization populates original ICData. |
(...skipping 2216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3073 | 3073 |
3074 LocationSummary* GotoInstr::MakeLocationSummary() const { | 3074 LocationSummary* GotoInstr::MakeLocationSummary() const { |
3075 return new LocationSummary(0, 0, LocationSummary::kNoCall); | 3075 return new LocationSummary(0, 0, LocationSummary::kNoCall); |
3076 } | 3076 } |
3077 | 3077 |
3078 | 3078 |
3079 void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3079 void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
3080 // Add deoptimization descriptor for deoptimizing instructions | 3080 // Add deoptimization descriptor for deoptimizing instructions |
3081 // that may be inserted before this instruction. | 3081 // that may be inserted before this instruction. |
3082 if (!compiler->is_optimizing()) { | 3082 if (!compiler->is_optimizing()) { |
3083 compiler->AddCurrentDescriptor(PcDescriptors::kDeoptBefore, | 3083 compiler->AddCurrentDescriptor(PcDescriptors::kDeopt, |
3084 GetDeoptId(), | 3084 GetDeoptId(), |
3085 0); // No token position. | 3085 0); // No token position. |
3086 } | 3086 } |
3087 | 3087 |
3088 if (HasParallelMove()) { | 3088 if (HasParallelMove()) { |
3089 compiler->parallel_move_resolver()->EmitNativeCode(parallel_move()); | 3089 compiler->parallel_move_resolver()->EmitNativeCode(parallel_move()); |
3090 } | 3090 } |
3091 | 3091 |
3092 // We can fall through if the successor is the next block in the list. | 3092 // We can fall through if the successor is the next block in the list. |
3093 // Otherwise, we need a jump. | 3093 // Otherwise, we need a jump. |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3357 PcDescriptors::kOther, | 3357 PcDescriptors::kOther, |
3358 locs()); | 3358 locs()); |
3359 __ Drop(2); // Discard type arguments and receiver. | 3359 __ Drop(2); // Discard type arguments and receiver. |
3360 } | 3360 } |
3361 | 3361 |
3362 } // namespace dart | 3362 } // namespace dart |
3363 | 3363 |
3364 #undef __ | 3364 #undef __ |
3365 | 3365 |
3366 #endif // defined TARGET_ARCH_X64 | 3366 #endif // defined TARGET_ARCH_X64 |
OLD | NEW |