Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(507)

Side by Side Diff: runtime/vm/intermediate_language_arm64.cc

Issue 322633002: Share ic data between unoptimized and optimized static calls. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/intermediate_language_arm.cc ('k') | runtime/vm/intermediate_language_ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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_ARM64. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM64.
6 #if defined(TARGET_ARCH_ARM64) 6 #if defined(TARGET_ARCH_ARM64)
7 7
8 #include "vm/intermediate_language.h" 8 #include "vm/intermediate_language.h"
9 9
10 #include "vm/dart_entry.h" 10 #include "vm/dart_entry.h"
(...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 void StringInterpolateInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 862 void StringInterpolateInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
863 const Register array = locs()->in(0).reg(); 863 const Register array = locs()->in(0).reg();
864 __ Push(array); 864 __ Push(array);
865 const int kNumberOfArguments = 1; 865 const int kNumberOfArguments = 1;
866 const Array& kNoArgumentNames = Object::null_array(); 866 const Array& kNoArgumentNames = Object::null_array();
867 compiler->GenerateStaticCall(deopt_id(), 867 compiler->GenerateStaticCall(deopt_id(),
868 token_pos(), 868 token_pos(),
869 CallFunction(), 869 CallFunction(),
870 kNumberOfArguments, 870 kNumberOfArguments,
871 kNoArgumentNames, 871 kNoArgumentNames,
872 locs()); 872 locs(),
873 ICData::Handle());
873 ASSERT(locs()->out(0).reg() == R0); 874 ASSERT(locs()->out(0).reg() == R0);
874 } 875 }
875 876
876 877
877 LocationSummary* LoadUntaggedInstr::MakeLocationSummary(Isolate* isolate, 878 LocationSummary* LoadUntaggedInstr::MakeLocationSummary(Isolate* isolate,
878 bool opt) const { 879 bool opt) const {
879 const intptr_t kNumInputs = 1; 880 const intptr_t kNumInputs = 1;
880 return LocationSummary::Make(isolate, 881 return LocationSummary::Make(isolate,
881 kNumInputs, 882 kNumInputs,
882 Location::RequiresRegister(), 883 Location::RequiresRegister(),
(...skipping 3610 matching lines...) Expand 10 before | Expand all | Expand 10 after
4493 const ICData& ic_data = *instance_call()->ic_data(); 4494 const ICData& ic_data = *instance_call()->ic_data();
4494 ASSERT((ic_data.NumberOfChecks() == 1)); 4495 ASSERT((ic_data.NumberOfChecks() == 1));
4495 const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0)); 4496 const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
4496 4497
4497 const intptr_t kNumberOfArguments = 1; 4498 const intptr_t kNumberOfArguments = 1;
4498 compiler->GenerateStaticCall(deopt_id(), 4499 compiler->GenerateStaticCall(deopt_id(),
4499 instance_call()->token_pos(), 4500 instance_call()->token_pos(),
4500 target, 4501 target,
4501 kNumberOfArguments, 4502 kNumberOfArguments,
4502 Object::null_array(), // No argument names., 4503 Object::null_array(), // No argument names.,
4503 locs()); 4504 locs(),
4505 ICData::Handle());
4504 __ Bind(&done); 4506 __ Bind(&done);
4505 } 4507 }
4506 4508
4507 4509
4508 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Isolate* isolate, 4510 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Isolate* isolate,
4509 bool opt) const { 4511 bool opt) const {
4510 const intptr_t kNumInputs = 1; 4512 const intptr_t kNumInputs = 1;
4511 const intptr_t kNumTemps = 0; 4513 const intptr_t kNumTemps = 0;
4512 LocationSummary* result = new(isolate) LocationSummary( 4514 LocationSummary* result = new(isolate) LocationSummary(
4513 isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall); 4515 isolate, kNumInputs, kNumTemps, LocationSummary::kNoCall);
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
4875 } 4877 }
4876 ASSERT(ic_data().NumArgsTested() == 1); 4878 ASSERT(ic_data().NumArgsTested() == 1);
4877 if (!with_checks()) { 4879 if (!with_checks()) {
4878 ASSERT(ic_data().HasOneTarget()); 4880 ASSERT(ic_data().HasOneTarget());
4879 const Function& target = Function::ZoneHandle(ic_data().GetTargetAt(0)); 4881 const Function& target = Function::ZoneHandle(ic_data().GetTargetAt(0));
4880 compiler->GenerateStaticCall(deopt_id(), 4882 compiler->GenerateStaticCall(deopt_id(),
4881 instance_call()->token_pos(), 4883 instance_call()->token_pos(),
4882 target, 4884 target,
4883 instance_call()->ArgumentCount(), 4885 instance_call()->ArgumentCount(),
4884 instance_call()->argument_names(), 4886 instance_call()->argument_names(),
4885 locs()); 4887 locs(),
4888 ICData::Handle());
4886 return; 4889 return;
4887 } 4890 }
4888 4891
4889 // Load receiver into R0. 4892 // Load receiver into R0.
4890 __ LoadFromOffset( 4893 __ LoadFromOffset(
4891 R0, SP, (instance_call()->ArgumentCount() - 1) * kWordSize, PP); 4894 R0, SP, (instance_call()->ArgumentCount() - 1) * kWordSize, PP);
4892 4895
4893 LoadValueCid(compiler, R2, R0, 4896 LoadValueCid(compiler, R2, R0,
4894 (ic_data().GetReceiverClassIdAt(0) == kSmiCid) ? NULL : deopt); 4897 (ic_data().GetReceiverClassIdAt(0) == kSmiCid) ? NULL : deopt);
4895 4898
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
5325 compiler->GenerateCall(token_pos(), 5328 compiler->GenerateCall(token_pos(),
5326 &label, 5329 &label,
5327 PcDescriptors::kOther, 5330 PcDescriptors::kOther,
5328 locs()); 5331 locs());
5329 __ Drop(ArgumentCount()); // Discard arguments. 5332 __ Drop(ArgumentCount()); // Discard arguments.
5330 } 5333 }
5331 5334
5332 } // namespace dart 5335 } // namespace dart
5333 5336
5334 #endif // defined TARGET_ARCH_ARM64 5337 #endif // defined TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_arm.cc ('k') | runtime/vm/intermediate_language_ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698