summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2015-01-31 01:12:35 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-01-31 01:13:29 +0000
commite550d2309b90b0842b77cff1f764b756bc2679e3 (patch)
treeed6cb1b5f666e028459366c77b5b0468285651cc
parentbabecc483276b46d84cb83d4f01e577228827305 (diff)
parentcc7c39d747f5802282adcc51ffe44405f116f84b (diff)
downloadart-e550d2309b90b0842b77cff1f764b756bc2679e3.zip
art-e550d2309b90b0842b77cff1f764b756bc2679e3.tar.gz
art-e550d2309b90b0842b77cff1f764b756bc2679e3.tar.bz2
Merge "ART: Add Mips64 resolution trampoline assembly"
-rw-r--r--runtime/arch/mips64/quick_entrypoints_mips64.S19
1 files changed, 18 insertions, 1 deletions
diff --git a/runtime/arch/mips64/quick_entrypoints_mips64.S b/runtime/arch/mips64/quick_entrypoints_mips64.S
index 3430eb5..65bdda8 100644
--- a/runtime/arch/mips64/quick_entrypoints_mips64.S
+++ b/runtime/arch/mips64/quick_entrypoints_mips64.S
@@ -758,7 +758,24 @@ GENERATE_ALL_ALLOC_ENTRYPOINTS
UNIMPLEMENTED art_quick_test_suspend
UNIMPLEMENTED art_quick_proxy_invoke_handler
UNIMPLEMENTED art_quick_imt_conflict_trampoline
-UNIMPLEMENTED art_quick_resolution_trampoline
+
+ .extern artQuickResolutionTrampoline
+ENTRY art_quick_resolution_trampoline
+ SETUP_REFS_AND_ARGS_CALLEE_SAVE_FRAME
+ move $a2, rSELF # pass Thread::Current
+ jal artQuickResolutionTrampoline # (Method* called, receiver, Thread*, SP)
+ move $a3, $sp # pass $sp
+ beq $v0, $zero, 1f
+ lwu $a0, 0($sp) # load resolved method in $a0
+ # artQuickResolutionTrampoline puts resolved method in *SP
+ RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME
+ move $t9, $v0 # code pointer must be in $t9 to generate the global pointer
+ jalr $zero, $t9 # tail call to method
+ nop
+1:
+ RESTORE_REFS_AND_ARGS_CALLEE_SAVE_FRAME
+ DELIVER_PENDING_EXCEPTION
+END art_quick_resolution_trampoline
.extern artQuickGenericJniTrampoline
.extern artQuickGenericJniEndTrampoline