| Index: runtime/vm/intermediate_language_ia32.cc
|
| ===================================================================
|
| --- runtime/vm/intermediate_language_ia32.cc (revision 24207)
|
| +++ runtime/vm/intermediate_language_ia32.cc (working copy)
|
| @@ -108,17 +108,6 @@
|
| }
|
|
|
|
|
| -LocationSummary* ClosureCallInstr::MakeLocationSummary() const {
|
| - const intptr_t kNumInputs = 0;
|
| - const intptr_t kNumTemps = 1;
|
| - LocationSummary* result =
|
| - new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kCall);
|
| - result->set_out(Location::RegisterLocation(EAX));
|
| - result->set_temp(0, Location::RegisterLocation(EDX)); // Arg. descriptor.
|
| - return result;
|
| -}
|
| -
|
| -
|
| LocationSummary* LoadLocalInstr::MakeLocationSummary() const {
|
| const intptr_t kNumInputs = 0;
|
| return LocationSummary::Make(kNumInputs,
|
| @@ -346,7 +335,7 @@
|
| token_pos);
|
| }
|
| const int kNumberOfArguments = 2;
|
| - const Array& kNoArgumentNames = Array::Handle();
|
| + const Array& kNoArgumentNames = Object::null_array();
|
| const int kNumArgumentsChecked = 2;
|
|
|
| const Immediate& raw_null =
|
| @@ -368,8 +357,12 @@
|
| equality_ic_data = original_ic_data.AsUnaryClassChecks();
|
| }
|
| } else {
|
| + const Array& arguments_descriptor =
|
| + Array::Handle(ArgumentsDescriptor::New(kNumberOfArguments,
|
| + kNoArgumentNames));
|
| equality_ic_data = ICData::New(compiler->parsed_function().function(),
|
| Symbols::EqualOperator(),
|
| + arguments_descriptor,
|
| deopt_id,
|
| kNumArgumentsChecked);
|
| }
|
| @@ -496,7 +489,7 @@
|
| }
|
| } else {
|
| const int kNumberOfArguments = 2;
|
| - const Array& kNoArgumentNames = Array::Handle();
|
| + const Array& kNoArgumentNames = Object::null_array();
|
| compiler->GenerateStaticCall(deopt_id,
|
| token_pos,
|
| target,
|
| @@ -985,7 +978,7 @@
|
| compiler->EmitTestAndCall(ICData::Handle(ic_data()->AsUnaryClassChecks()),
|
| EDI, // Class id register.
|
| kNumArguments,
|
| - Array::Handle(), // No named arguments.
|
| + Object::null_array(), // No named arguments.
|
| deopt, // Deoptimize target.
|
| deopt_id(),
|
| token_pos(),
|
| @@ -1012,15 +1005,19 @@
|
| relational_ic_data = ic_data()->AsUnaryClassChecks();
|
| }
|
| } else {
|
| + const Array& arguments_descriptor =
|
| + Array::Handle(ArgumentsDescriptor::New(kNumArguments,
|
| + Object::null_array()));
|
| relational_ic_data = ICData::New(compiler->parsed_function().function(),
|
| function_name,
|
| + arguments_descriptor,
|
| deopt_id(),
|
| kNumArgsChecked);
|
| }
|
| compiler->GenerateInstanceCall(deopt_id(),
|
| token_pos(),
|
| kNumArguments,
|
| - Array::ZoneHandle(), // No optional arguments.
|
| + Object::null_array(), // No optional args.
|
| locs(),
|
| relational_ic_data);
|
| }
|
| @@ -3731,7 +3728,7 @@
|
| instance_call()->token_pos(),
|
| target,
|
| kNumberOfArguments,
|
| - Array::Handle(), // No argument names.,
|
| + Object::null_array(), // No argument names.,
|
| locs());
|
| __ Bind(&done);
|
| }
|
| @@ -4651,6 +4648,17 @@
|
| }
|
|
|
|
|
| +LocationSummary* ClosureCallInstr::MakeLocationSummary() const {
|
| + const intptr_t kNumInputs = 0;
|
| + const intptr_t kNumTemps = 1;
|
| + LocationSummary* result =
|
| + new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kCall);
|
| + result->set_out(Location::RegisterLocation(EAX));
|
| + result->set_temp(0, Location::RegisterLocation(EDX)); // Arg. descriptor.
|
| + return result;
|
| +}
|
| +
|
| +
|
| void ClosureCallInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| // The arguments to the stub include the closure, as does the arguments
|
| // descriptor.
|
| @@ -4660,6 +4668,7 @@
|
| Array::ZoneHandle(ArgumentsDescriptor::New(argument_count,
|
| argument_names()));
|
| __ LoadObject(temp_reg, arguments_descriptor);
|
| + ASSERT(temp_reg == EDX);
|
| compiler->GenerateDartCall(deopt_id(),
|
| token_pos(),
|
| &StubCode::CallClosureFunctionLabel(),
|
|
|