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

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

Issue 2859673002: Pass type argument vector to generic functions (if --reify-generic-functions is (Closed)
Patch Set: Created 3 years, 7 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
OLDNEW
1 1
2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
3 // for details. All rights reserved. Use of this source code is governed by a 3 // for details. All rights reserved. Use of this source code is governed by a
4 // BSD-style license that can be found in the LICENSE file. 4 // BSD-style license that can be found in the LICENSE file.
5 5
6 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. 6 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM.
7 #if defined(TARGET_ARCH_ARM) 7 #if defined(TARGET_ARCH_ARM)
8 8
9 #include "vm/intermediate_language.h" 9 #include "vm/intermediate_language.h"
10 10
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 LocationSummary* summary = new (zone) 218 LocationSummary* summary = new (zone)
219 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall); 219 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
220 summary->set_in(0, Location::RegisterLocation(R0)); // Function. 220 summary->set_in(0, Location::RegisterLocation(R0)); // Function.
221 summary->set_out(0, Location::RegisterLocation(R0)); 221 summary->set_out(0, Location::RegisterLocation(R0));
222 return summary; 222 return summary;
223 } 223 }
224 224
225 225
226 void ClosureCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 226 void ClosureCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
227 // Load arguments descriptor in R4. 227 // Load arguments descriptor in R4.
228 int argument_count = ArgumentCount(); 228 const intptr_t ta_len = type_args_len();
229 const Array& arguments_descriptor = Array::ZoneHandle( 229 const intptr_t argument_count = ArgumentCount(); // Includes type args.
230 ArgumentsDescriptor::New(argument_count, argument_names())); 230 const Array& arguments_descriptor =
231 Array::ZoneHandle(ArgumentsDescriptor::New(
232 ta_len, argument_count - (ta_len > 0 ? 1 : 0), argument_names()));
231 __ LoadObject(R4, arguments_descriptor); 233 __ LoadObject(R4, arguments_descriptor);
232 234
233 // R4: Arguments descriptor. 235 // R4: Arguments descriptor.
234 // R0: Function. 236 // R0: Function.
235 ASSERT(locs()->in(0).reg() == R0); 237 ASSERT(locs()->in(0).reg() == R0);
236 __ ldr(CODE_REG, FieldAddress(R0, Function::code_offset())); 238 __ ldr(CODE_REG, FieldAddress(R0, Function::code_offset()));
237 __ ldr(R2, FieldAddress(R0, Function::entry_point_offset())); 239 __ ldr(R2, FieldAddress(R0, Function::entry_point_offset()));
238 240
239 // R2: instructions entry point. 241 // R2: instructions entry point.
240 // R9: Smi 0 (no IC data; the lazy-compile stub expects a GC-safe value). 242 // R9: Smi 0 (no IC data; the lazy-compile stub expects a GC-safe value).
(...skipping 819 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall); 1062 LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
1061 summary->set_in(0, Location::RegisterLocation(R0)); 1063 summary->set_in(0, Location::RegisterLocation(R0));
1062 summary->set_out(0, Location::RegisterLocation(R0)); 1064 summary->set_out(0, Location::RegisterLocation(R0));
1063 return summary; 1065 return summary;
1064 } 1066 }
1065 1067
1066 1068
1067 void StringInterpolateInstr::EmitNativeCode(FlowGraphCompiler* compiler) { 1069 void StringInterpolateInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
1068 const Register array = locs()->in(0).reg(); 1070 const Register array = locs()->in(0).reg();
1069 __ Push(array); 1071 __ Push(array);
1072 const int kTypeArgsLen = 0;
1070 const int kNumberOfArguments = 1; 1073 const int kNumberOfArguments = 1;
1071 const Array& kNoArgumentNames = Object::null_array(); 1074 const Array& kNoArgumentNames = Object::null_array();
1072 compiler->GenerateStaticCall(deopt_id(), token_pos(), CallFunction(), 1075 compiler->GenerateStaticCall(deopt_id(), token_pos(), CallFunction(),
1073 kNumberOfArguments, kNoArgumentNames, locs(), 1076 kTypeArgsLen, kNumberOfArguments,
1074 ICData::Handle()); 1077 kNoArgumentNames, locs(), ICData::Handle());
1075 ASSERT(locs()->out(0).reg() == R0); 1078 ASSERT(locs()->out(0).reg() == R0);
1076 } 1079 }
1077 1080
1078 1081
1079 LocationSummary* LoadUntaggedInstr::MakeLocationSummary(Zone* zone, 1082 LocationSummary* LoadUntaggedInstr::MakeLocationSummary(Zone* zone,
1080 bool opt) const { 1083 bool opt) const {
1081 const intptr_t kNumInputs = 1; 1084 const intptr_t kNumInputs = 1;
1082 return LocationSummary::Make(zone, kNumInputs, Location::RequiresRegister(), 1085 return LocationSummary::Make(zone, kNumInputs, Location::RequiresRegister(),
1083 LocationSummary::kNoCall); 1086 LocationSummary::kNoCall);
1084 } 1087 }
(...skipping 4775 matching lines...) Expand 10 before | Expand all | Expand 10 after
5860 __ SmiTag(result, PL); 5863 __ SmiTag(result, PL);
5861 __ b(&done, PL); 5864 __ b(&done, PL);
5862 5865
5863 __ Bind(&do_call); 5866 __ Bind(&do_call);
5864 __ Push(value_obj); 5867 __ Push(value_obj);
5865 ASSERT(instance_call()->HasICData()); 5868 ASSERT(instance_call()->HasICData());
5866 const ICData& ic_data = *instance_call()->ic_data(); 5869 const ICData& ic_data = *instance_call()->ic_data();
5867 ASSERT(ic_data.NumberOfChecksIs(1)); 5870 ASSERT(ic_data.NumberOfChecksIs(1));
5868 const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0)); 5871 const Function& target = Function::ZoneHandle(ic_data.GetTargetAt(0));
5869 5872
5873 const intptr_t kTypeArgsLen = 0;
5870 const intptr_t kNumberOfArguments = 1; 5874 const intptr_t kNumberOfArguments = 1;
5871 compiler->GenerateStaticCall(deopt_id(), instance_call()->token_pos(), target, 5875 compiler->GenerateStaticCall(deopt_id(), instance_call()->token_pos(), target,
5872 kNumberOfArguments, 5876 kTypeArgsLen, kNumberOfArguments,
5873 Object::null_array(), // No argument names., 5877 Object::null_array(), // No argument names.,
5874 locs(), ICData::Handle()); 5878 locs(), ICData::Handle());
5875 __ Bind(&done); 5879 __ Bind(&done);
5876 } 5880 }
5877 5881
5878 5882
5879 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone, 5883 LocationSummary* DoubleToSmiInstr::MakeLocationSummary(Zone* zone,
5880 bool opt) const { 5884 bool opt) const {
5881 const intptr_t kNumInputs = 1; 5885 const intptr_t kNumInputs = 1;
5882 const intptr_t kNumTemps = 0; 5886 const intptr_t kNumTemps = 0;
(...skipping 1406 matching lines...) Expand 10 before | Expand all | Expand 10 after
7289 compiler->GenerateRuntimeCall(TokenPosition::kNoSource, deopt_id(), 7293 compiler->GenerateRuntimeCall(TokenPosition::kNoSource, deopt_id(),
7290 kGrowRegExpStackRuntimeEntry, 1, locs()); 7294 kGrowRegExpStackRuntimeEntry, 1, locs());
7291 __ Drop(1); 7295 __ Drop(1);
7292 __ Pop(result); 7296 __ Pop(result);
7293 } 7297 }
7294 7298
7295 7299
7296 } // namespace dart 7300 } // namespace dart
7297 7301
7298 #endif // defined TARGET_ARCH_ARM 7302 #endif // defined TARGET_ARCH_ARM
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698