summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator_arm.cc
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2015-06-03 11:23:52 +0100
committerNicolas Geoffray <ngeoffray@google.com>2015-06-03 11:23:52 +0100
commitfd88f16100cceafbfde1b4f095f17e89444d6fa8 (patch)
treefdb6d0520ca419acef9e953e74dcbd7d908bc4dd /compiler/optimizing/code_generator_arm.cc
parent1aebdae18678403bdac078cbbe1f7dd4243c44f3 (diff)
Factorize code for common LocationSummary of HInvoke.
This is one step forward, we could factorize more, but I wanted to get this out of the way first. Change-Id: I6ae411a737eebaecb64974f47af507ce0cfbae85
Diffstat (limited to 'compiler/optimizing/code_generator_arm.cc')
-rw-r--r--compiler/optimizing/code_generator_arm.cc17
1 files changed, 6 insertions, 11 deletions
diff --git a/compiler/optimizing/code_generator_arm.cc b/compiler/optimizing/code_generator_arm.cc
index 987a6c4ff7..022948e0e7 100644
--- a/compiler/optimizing/code_generator_arm.cc
+++ b/compiler/optimizing/code_generator_arm.cc
@@ -681,7 +681,7 @@ Location InvokeDexCallingConventionVisitorARM::GetNextLocation(Primitive::Type t
return Location();
}
-Location InvokeDexCallingConventionVisitorARM::GetReturnLocation(Primitive::Type type) {
+Location InvokeDexCallingConventionVisitorARM::GetReturnLocation(Primitive::Type type) const {
switch (type) {
case Primitive::kPrimBoolean:
case Primitive::kPrimByte:
@@ -710,6 +710,10 @@ Location InvokeDexCallingConventionVisitorARM::GetReturnLocation(Primitive::Type
UNREACHABLE();
}
+Location InvokeDexCallingConventionVisitorARM::GetMethodLocation() const {
+ return Location::RegisterLocation(kMethodRegisterArgument);
+}
+
void CodeGeneratorARM::Move32(Location destination, Location source) {
if (source.Equals(destination)) {
return;
@@ -1285,17 +1289,8 @@ void InstructionCodeGeneratorARM::VisitInvokeStaticOrDirect(HInvokeStaticOrDirec
}
void LocationsBuilderARM::HandleInvoke(HInvoke* invoke) {
- LocationSummary* locations =
- new (GetGraph()->GetArena()) LocationSummary(invoke, LocationSummary::kCall);
- locations->AddTemp(Location::RegisterLocation(kMethodRegisterArgument));
-
InvokeDexCallingConventionVisitorARM calling_convention_visitor;
- for (size_t i = 0; i < invoke->GetNumberOfArguments(); i++) {
- HInstruction* input = invoke->InputAt(i);
- locations->SetInAt(i, calling_convention_visitor.GetNextLocation(input->GetType()));
- }
-
- locations->SetOut(calling_convention_visitor.GetReturnLocation(invoke->GetType()));
+ CodeGenerator::CreateCommonInvokeLocationSummary(invoke, &calling_convention_visitor);
}
void LocationsBuilderARM::VisitInvokeVirtual(HInvokeVirtual* invoke) {