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

Unified Diff: runtime/vm/intermediate_language_arm.cc

Issue 2813903003: Process a pair of registers in one instruction where possible on arm in the VM. (Closed)
Patch Set: Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/flow_graph_compiler_arm.cc ('k') | runtime/vm/stub_code_arm.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/intermediate_language_arm.cc
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index cf4011797ad8ad19d324f3bda797505ba0b7732f..238cfc11bb46cc3c1dc9be5f8770b6886802cbf1 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -353,8 +353,8 @@ LocationSummary* AssertAssignableInstr::MakeLocationSummary(Zone* zone,
LocationSummary* summary = new (zone)
LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
summary->set_in(0, Location::RegisterLocation(R0)); // Value.
- summary->set_in(1, Location::RegisterLocation(R1)); // Instant. type args.
- summary->set_in(2, Location::RegisterLocation(R2)); // Function type args.
+ summary->set_in(1, Location::RegisterLocation(R2)); // Instant. type args.
+ summary->set_in(2, Location::RegisterLocation(R1)); // Function type args.
summary->set_out(0, Location::RegisterLocation(R0));
return summary;
}
@@ -2370,8 +2370,8 @@ LocationSummary* InstanceOfInstr::MakeLocationSummary(Zone* zone,
LocationSummary* summary = new (zone)
LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
summary->set_in(0, Location::RegisterLocation(R0)); // Instance.
- summary->set_in(1, Location::RegisterLocation(R1)); // Instant. type args.
- summary->set_in(2, Location::RegisterLocation(R2)); // Function type args.
+ summary->set_in(1, Location::RegisterLocation(R2)); // Instant. type args.
+ summary->set_in(2, Location::RegisterLocation(R1)); // Function type args.
summary->set_out(0, Location::RegisterLocation(R0));
return summary;
}
@@ -2379,8 +2379,8 @@ LocationSummary* InstanceOfInstr::MakeLocationSummary(Zone* zone,
void InstanceOfInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
ASSERT(locs()->in(0).reg() == R0); // Value.
- ASSERT(locs()->in(1).reg() == R1); // Instantiator type arguments.
- ASSERT(locs()->in(2).reg() == R2); // Function type arguments.
+ ASSERT(locs()->in(1).reg() == R2); // Instantiator type arguments.
+ ASSERT(locs()->in(2).reg() == R1); // Function type arguments.
compiler->GenerateInstanceOf(token_pos(), deopt_id(), type(), locs());
ASSERT(locs()->out(0).reg() == R0);
@@ -2629,8 +2629,8 @@ LocationSummary* InstantiateTypeInstr::MakeLocationSummary(Zone* zone,
const intptr_t kNumTemps = 0;
LocationSummary* locs = new (zone)
LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
- locs->set_in(0, Location::RegisterLocation(R0)); // Instant. type args.
- locs->set_in(1, Location::RegisterLocation(R1)); // Function type args.
+ locs->set_in(0, Location::RegisterLocation(R1)); // Instant. type args.
+ locs->set_in(1, Location::RegisterLocation(R0)); // Function type args.
locs->set_out(0, Location::RegisterLocation(R0));
return locs;
}
@@ -2646,14 +2646,12 @@ void InstantiateTypeInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
// A runtime call to instantiate the type is required.
__ PushObject(Object::null_object()); // Make room for the result.
__ PushObject(type());
- __ Push(instantiator_type_args_reg); // Push instantiator type arguments.
- __ Push(function_type_args_reg); // Push function type arguments.
- // TODO(regis): Renumber registers and use PushList.
+ __ PushList((1 << instantiator_type_args_reg) |
+ (1 << function_type_args_reg));
compiler->GenerateRuntimeCall(token_pos(), deopt_id(),
kInstantiateTypeRuntimeEntry, 3, locs());
__ Drop(3); // Drop 2 type argument vectors and uninstantiated type.
__ Pop(result_reg); // Pop instantiated type.
- ASSERT(instantiator_type_args_reg == result_reg);
}
@@ -2664,8 +2662,8 @@ LocationSummary* InstantiateTypeArgumentsInstr::MakeLocationSummary(
const intptr_t kNumTemps = 0;
LocationSummary* locs = new (zone)
LocationSummary(zone, kNumInputs, kNumTemps, LocationSummary::kCall);
- locs->set_in(0, Location::RegisterLocation(R0)); // Instant. type args.
- locs->set_in(1, Location::RegisterLocation(R1)); // Function type args.
+ locs->set_in(0, Location::RegisterLocation(R1)); // Instant. type args.
+ locs->set_in(1, Location::RegisterLocation(R0)); // Function type args.
locs->set_out(0, Location::RegisterLocation(R0));
return locs;
}
@@ -2676,9 +2674,8 @@ void InstantiateTypeArgumentsInstr::EmitNativeCode(
const Register instantiator_type_args_reg = locs()->in(0).reg();
const Register function_type_args_reg = locs()->in(1).reg();
const Register result_reg = locs()->out(0).reg();
- ASSERT(instantiator_type_args_reg == R0);
- ASSERT(function_type_args_reg == R1);
- ASSERT(instantiator_type_args_reg == result_reg);
+ ASSERT(instantiator_type_args_reg == R1);
+ ASSERT(function_type_args_reg == R0);
// 'instantiator_type_args_reg' is a TypeArguments object (or null).
// 'function_type_args_reg' is a TypeArguments object (or null).
@@ -2695,6 +2692,7 @@ void InstantiateTypeArgumentsInstr::EmitNativeCode(
__ cmp(instantiator_type_args_reg, Operand(IP));
__ cmp(function_type_args_reg, Operand(IP), EQ);
__ b(&type_arguments_instantiated, EQ);
+ ASSERT(function_type_args_reg == result_reg);
}
// Lookup cache before calling runtime.
@@ -2727,9 +2725,8 @@ void InstantiateTypeArgumentsInstr::EmitNativeCode(
// A runtime call to instantiate the type arguments is required.
__ PushObject(Object::null_object()); // Make room for the result.
__ PushObject(type_arguments());
- __ Push(instantiator_type_args_reg); // Push instantiator type arguments.
- __ Push(function_type_args_reg); // Push function type arguments.
- // TODO(regis): Renumber registers and use PushList.
+ __ PushList((1 << instantiator_type_args_reg) |
+ (1 << function_type_args_reg));
compiler->GenerateRuntimeCall(token_pos(), deopt_id(),
kInstantiateTypeArgumentsRuntimeEntry, 3,
locs());
« no previous file with comments | « runtime/vm/flow_graph_compiler_arm.cc ('k') | runtime/vm/stub_code_arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698