summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator.cc
diff options
context:
space:
mode:
authorOrion Hodson <oth@google.com>2018-06-06 09:04:17 +0100
committerOrion Hodson <oth@google.com>2018-06-08 14:56:10 +0100
commitcd260ebf53e0e05bd75c37c4139f32782eb4ad97 (patch)
treedab8e9054c59c16303ab9c8aeed01edeb0bb12da /compiler/optimizing/code_generator.cc
parent408bdc604e4fe230bf90ffa6816bfbbb3786806e (diff)
ART: Simplify invoke-polymorphic entrypoints
Moves to pattern used by the interpreter bridge and writes the result in both the regular return register and the floating point result register. Add return value tests to 956-method-handles. Test: art/test.py --host -r -t 956 Test: art/test.py --target --32 -r -t 956 Test: art/test.py --target --64 -r -t 956 Change-Id: I7389d04b70b88e149682f6d656ab185e48bcbf66
Diffstat (limited to 'compiler/optimizing/code_generator.cc')
-rw-r--r--compiler/optimizing/code_generator.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc
index 4791fa3fba..9f2346db3c 100644
--- a/compiler/optimizing/code_generator.cc
+++ b/compiler/optimizing/code_generator.cc
@@ -516,7 +516,7 @@ void CodeGenerator::CreateCommonInvokeLocationSummary(
locations->AddTemp(visitor->GetMethodLocation());
break;
}
- } else {
+ } else if (!invoke->IsInvokePolymorphic()) {
locations->AddTemp(visitor->GetMethodLocation());
}
}
@@ -579,7 +579,9 @@ void CodeGenerator::GenerateInvokeUnresolvedRuntimeCall(HInvokeUnresolved* invok
}
void CodeGenerator::GenerateInvokePolymorphicCall(HInvokePolymorphic* invoke) {
- MoveConstant(invoke->GetLocations()->GetTemp(0), static_cast<int32_t>(invoke->GetType()));
+ // invoke-polymorphic does not use a temporary to convey any additional information (e.g. a
+ // method index) since it requires multiple info from the instruction (registers A, B, H). Not
+ // using the reservation has no effect on the registers used in the runtime call.
QuickEntrypointEnum entrypoint = kQuickInvokePolymorphic;
InvokeRuntime(entrypoint, invoke, invoke->GetDexPc(), nullptr);
}