diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2015-06-03 11:23:52 +0100 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2015-06-03 11:23:52 +0100 |
commit | fd88f16100cceafbfde1b4f095f17e89444d6fa8 (patch) | |
tree | fdb6d0520ca419acef9e953e74dcbd7d908bc4dd /compiler/optimizing/code_generator_arm.cc | |
parent | 1aebdae18678403bdac078cbbe1f7dd4243c44f3 (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.cc | 17 |
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) { |