summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator.cc
diff options
context:
space:
mode:
author Calin Juravle <calin@google.com> 2015-09-17 12:29:02 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2015-09-17 12:29:02 +0000
commit9d567824e101428adfde58976a1307fbd6c0e247 (patch)
tree9ea1b98840ee6108408d6f11e0c670e39eb28136 /compiler/optimizing/code_generator.cc
parentb4b543d79b427fa96f0dd635014bd8754a798cc9 (diff)
parent175dc732c80e6f2afd83209348124df349290ba8 (diff)
Merge "Support unresolved methods in Optimizing"
Diffstat (limited to 'compiler/optimizing/code_generator.cc')
-rw-r--r--compiler/optimizing/code_generator.cc25
1 files changed, 25 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator.cc b/compiler/optimizing/code_generator.cc
index 50108a7275..3c6a41df34 100644
--- a/compiler/optimizing/code_generator.cc
+++ b/compiler/optimizing/code_generator.cc
@@ -388,6 +388,31 @@ void CodeGenerator::CreateCommonInvokeLocationSummary(
}
}
+void CodeGenerator::GenerateInvokeUnresolvedRuntimeCall(HInvokeUnresolved* invoke) {
+ MoveConstant(invoke->GetLocations()->GetTemp(0), invoke->GetDexMethodIndex());
+
+ // Initialize to anything to silent compiler warnings.
+ QuickEntrypointEnum entrypoint = kQuickInvokeStaticTrampolineWithAccessCheck;
+ switch (invoke->GetOriginalInvokeType()) {
+ case kStatic:
+ entrypoint = kQuickInvokeStaticTrampolineWithAccessCheck;
+ break;
+ case kDirect:
+ entrypoint = kQuickInvokeDirectTrampolineWithAccessCheck;
+ break;
+ case kVirtual:
+ entrypoint = kQuickInvokeVirtualTrampolineWithAccessCheck;
+ break;
+ case kSuper:
+ entrypoint = kQuickInvokeSuperTrampolineWithAccessCheck;
+ break;
+ case kInterface:
+ entrypoint = kQuickInvokeInterfaceTrampolineWithAccessCheck;
+ break;
+ }
+ InvokeRuntime(entrypoint, invoke, invoke->GetDexPc(), nullptr);
+}
+
void CodeGenerator::BlockIfInRegister(Location location, bool is_out) const {
// The DCHECKS below check that a register is not specified twice in
// the summary. The out location can overlap with an input, so we need