diff options
Diffstat (limited to 'runtime/arch')
-rw-r--r-- | runtime/arch/arm/entrypoints_init_arm.cc | 7 | ||||
-rw-r--r-- | runtime/arch/arm/portable_entrypoints_arm.S | 162 | ||||
-rw-r--r-- | runtime/arch/arm64/entrypoints_init_arm64.cc | 7 | ||||
-rw-r--r-- | runtime/arch/arm64/portable_entrypoints_arm64.S | 30 | ||||
-rw-r--r-- | runtime/arch/mips/entrypoints_init_mips.cc | 7 | ||||
-rw-r--r-- | runtime/arch/mips/portable_entrypoints_mips.S | 132 | ||||
-rw-r--r-- | runtime/arch/x86/entrypoints_init_x86.cc | 7 | ||||
-rw-r--r-- | runtime/arch/x86/portable_entrypoints_x86.S | 131 | ||||
-rw-r--r-- | runtime/arch/x86_64/entrypoints_init_x86_64.cc | 9 | ||||
-rw-r--r-- | runtime/arch/x86_64/portable_entrypoints_x86_64.S | 30 |
10 files changed, 6 insertions, 516 deletions
diff --git a/runtime/arch/arm/entrypoints_init_arm.cc b/runtime/arch/arm/entrypoints_init_arm.cc index 85a0dd2c6a..ce0e614854 100644 --- a/runtime/arch/arm/entrypoints_init_arm.cc +++ b/runtime/arch/arm/entrypoints_init_arm.cc @@ -16,7 +16,6 @@ #include "entrypoints/interpreter/interpreter_entrypoints.h" #include "entrypoints/jni/jni_entrypoints.h" -#include "entrypoints/portable/portable_entrypoints.h" #include "entrypoints/quick/quick_alloc_entrypoints.h" #include "entrypoints/quick/quick_default_externs.h" #include "entrypoints/quick/quick_entrypoints.h" @@ -49,7 +48,7 @@ extern "C" int __aeabi_idivmod(int32_t, int32_t); // [DIV|REM]_INT[_2ADDR|_LIT8 extern "C" int64_t __aeabi_ldivmod(int64_t, int64_t); void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, - PortableEntryPoints* ppoints, QuickEntryPoints* qpoints) { + QuickEntryPoints* qpoints) { // Interpreter ipoints->pInterpreterToInterpreterBridge = artInterpreterToInterpreterBridge; ipoints->pInterpreterToCompiledCodeBridge = artInterpreterToCompiledCodeBridge; @@ -57,10 +56,6 @@ void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, // JNI jpoints->pDlsymLookup = art_jni_dlsym_lookup_stub; - // Portable - ppoints->pPortableResolutionTrampoline = art_portable_resolution_trampoline; - ppoints->pPortableToInterpreterBridge = art_portable_to_interpreter_bridge; - // Alloc ResetQuickAllocEntryPoints(qpoints); diff --git a/runtime/arch/arm/portable_entrypoints_arm.S b/runtime/arch/arm/portable_entrypoints_arm.S deleted file mode 100644 index f59b514866..0000000000 --- a/runtime/arch/arm/portable_entrypoints_arm.S +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "asm_support_arm.S" - - /* - * Portable invocation stub. - * On entry: - * r0 = method pointer - * r1 = argument array or NULL for no argument methods - * r2 = size of argument array in bytes - * r3 = (managed) thread pointer - * [sp] = JValue* result - * [sp + 4] = result type char - */ -ENTRY art_portable_invoke_stub - push {r0, r4, r5, r9, r11, lr} @ spill regs - .cfi_adjust_cfa_offset 24 - .cfi_rel_offset r0, 0 - .cfi_rel_offset r4, 4 - .cfi_rel_offset r5, 8 - .cfi_rel_offset r9, 12 - .cfi_rel_offset r11, 16 - .cfi_rel_offset lr, 20 - mov r11, sp @ save the stack pointer - .cfi_def_cfa_register r11 - mov r9, r3 @ move managed thread pointer into r9 - mov r4, #SUSPEND_CHECK_INTERVAL @ reset r4 to suspend check interval - add r5, r2, #16 @ create space for method pointer in frame - and r5, #0xFFFFFFF0 @ align frame size to 16 bytes - sub sp, r5 @ reserve stack space for argument array - add r0, sp, #4 @ pass stack pointer + method ptr as dest for memcpy - bl memcpy @ memcpy (dest, src, bytes) - ldr r0, [r11] @ restore method* - ldr r1, [sp, #4] @ copy arg value for r1 - ldr r2, [sp, #8] @ copy arg value for r2 - ldr r3, [sp, #12] @ copy arg value for r3 - mov ip, #0 @ set ip to 0 - str ip, [sp] @ store NULL for method* at bottom of frame - add sp, #16 @ first 4 args are not passed on stack for portable - ldr ip, [r0, #MIRROR_ART_METHOD_PORTABLE_CODE_OFFSET_32] @ get pointer to the code - blx ip @ call the method - mov sp, r11 @ restore the stack pointer - .cfi_def_cfa_register sp - ldr ip, [sp, #24] @ load the result pointer - strd r0, [ip] @ store r0/r1 into result pointer - pop {r0, r4, r5, r9, r11, pc} @ restore spill regs -END art_portable_invoke_stub - - .extern artPortableProxyInvokeHandler -ENTRY art_portable_proxy_invoke_handler - @ Fake callee save ref and args frame set up, note portable doesn't use callee save frames. - @ TODO: just save the registers that are needed in artPortableProxyInvokeHandler. - push {r1-r3, r5-r8, r10-r11, lr} @ 10 words of callee saves - .cfi_adjust_cfa_offset 40 - .cfi_rel_offset r1, 0 - .cfi_rel_offset r2, 4 - .cfi_rel_offset r3, 8 - .cfi_rel_offset r5, 12 - .cfi_rel_offset r6, 16 - .cfi_rel_offset r7, 20 - .cfi_rel_offset r8, 24 - .cfi_rel_offset r10, 28 - .cfi_rel_offset r11, 32 - .cfi_rel_offset lr, 36 - sub sp, #8 @ 2 words of space, bottom word will hold Method* - .cfi_adjust_cfa_offset 8 - @ Begin argument set up. - str r0, [sp, #0] @ place proxy method at bottom of frame - mov r2, r9 @ pass Thread::Current - mov r3, sp @ pass SP - blx artPortableProxyInvokeHandler @ (Method* proxy method, receiver, Thread*, SP) - ldr r12, [r9, #THREAD_EXCEPTION_OFFSET] @ load Thread::Current()->exception_ - ldr lr, [sp, #44] @ restore lr - add sp, #48 @ pop frame - .cfi_adjust_cfa_offset -48 - bx lr @ return -END art_portable_proxy_invoke_handler - - .extern artPortableResolutionTrampoline -ENTRY art_portable_resolution_trampoline - @ Fake callee save ref and args frame set up, note portable doesn't use callee save frames. - @ TODO: just save the registers that are needed in artPortableResolutionTrampoline. - push {r1-r3, r5-r8, r10-r11, lr} @ 10 words of callee saves - .cfi_adjust_cfa_offset 40 - .cfi_rel_offset r1, 0 - .cfi_rel_offset r2, 4 - .cfi_rel_offset r3, 8 - .cfi_rel_offset r5, 12 - .cfi_rel_offset r6, 16 - .cfi_rel_offset r7, 20 - .cfi_rel_offset r8, 24 - .cfi_rel_offset r10, 28 - .cfi_rel_offset r11, 32 - .cfi_rel_offset lr, 36 - sub sp, #8 @ 2 words of space, bottom word will hold Method* - .cfi_adjust_cfa_offset 8 - mov r2, r9 @ pass Thread::Current - mov r3, sp @ pass SP - blx artPortableResolutionTrampoline @ (Method* called, receiver, Thread*, SP) - cmp r0, #0 @ is code pointer null? - beq 1f @ goto exception - mov r12, r0 - ldr r0, [sp, #0] @ load resolved method in r0 - ldr r1, [sp, #8] @ restore non-callee save r1 - ldrd r2, [sp, #12] @ restore non-callee saves r2-r3 - ldr lr, [sp, #44] @ restore lr - add sp, #48 @ rewind sp - .cfi_adjust_cfa_offset -48 - bx r12 @ tail-call into actual code - .cfi_adjust_cfa_offset 48 @ Reset unwind info so following code unwinds. - -1: - ldr r1, [sp, #8] @ restore non-callee save r1 - ldrd r2, [sp, #12] @ restore non-callee saves r2-r3 - ldr lr, [sp, #44] @ restore lr - add sp, #48 @ rewind sp - .cfi_adjust_cfa_offset -48 - bx lr -END art_portable_resolution_trampoline - - .extern artPortableToInterpreterBridge -ENTRY art_portable_to_interpreter_bridge - @ Fake callee save ref and args frame set up, note portable doesn't use callee save frames. - @ TODO: just save the registers that are needed in artPortableToInterpreterBridge. - push {r1-r3, r5-r8, r10-r11, lr} @ 10 words of callee saves - .cfi_adjust_cfa_offset 40 - .cfi_rel_offset r1, 0 - .cfi_rel_offset r2, 4 - .cfi_rel_offset r3, 8 - .cfi_rel_offset r5, 12 - .cfi_rel_offset r6, 16 - .cfi_rel_offset r7, 20 - .cfi_rel_offset r8, 24 - .cfi_rel_offset r10, 28 - .cfi_rel_offset r11, 32 - .cfi_rel_offset lr, 36 - sub sp, #8 @ 2 words of space, bottom word will hold Method* - .cfi_adjust_cfa_offset 8 - mov r1, r9 @ pass Thread::Current - mov r2, sp @ pass SP - blx artPortableToInterpreterBridge @ (Method* method, Thread*, SP) - ldr lr, [sp, #44] @ restore lr - add sp, #48 @ pop frame - .cfi_adjust_cfa_offset -48 - bx lr @ return -END art_portable_to_interpreter_bridge - -UNIMPLEMENTED art_portable_imt_conflict_trampoline diff --git a/runtime/arch/arm64/entrypoints_init_arm64.cc b/runtime/arch/arm64/entrypoints_init_arm64.cc index 2d26c033e1..e68d41df5a 100644 --- a/runtime/arch/arm64/entrypoints_init_arm64.cc +++ b/runtime/arch/arm64/entrypoints_init_arm64.cc @@ -16,7 +16,6 @@ #include "entrypoints/interpreter/interpreter_entrypoints.h" #include "entrypoints/jni/jni_entrypoints.h" -#include "entrypoints/portable/portable_entrypoints.h" #include "entrypoints/quick/quick_alloc_entrypoints.h" #include "entrypoints/quick/quick_default_externs.h" #include "entrypoints/quick/quick_entrypoints.h" @@ -39,7 +38,7 @@ extern "C" double art_quick_fmod(double a, double b); // REM_DOUBLE[_2ADD void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, - PortableEntryPoints* ppoints, QuickEntryPoints* qpoints) { + QuickEntryPoints* qpoints) { // Interpreter ipoints->pInterpreterToInterpreterBridge = artInterpreterToInterpreterBridge; ipoints->pInterpreterToCompiledCodeBridge = artInterpreterToCompiledCodeBridge; @@ -47,10 +46,6 @@ void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, // JNI jpoints->pDlsymLookup = art_jni_dlsym_lookup_stub; - // Portable - ppoints->pPortableResolutionTrampoline = art_portable_resolution_trampoline; - ppoints->pPortableToInterpreterBridge = art_portable_to_interpreter_bridge; - // Alloc ResetQuickAllocEntryPoints(qpoints); diff --git a/runtime/arch/arm64/portable_entrypoints_arm64.S b/runtime/arch/arm64/portable_entrypoints_arm64.S deleted file mode 100644 index 9e2c030d71..0000000000 --- a/runtime/arch/arm64/portable_entrypoints_arm64.S +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "asm_support_arm64.S" - - /* - * Portable invocation stub. - */ -UNIMPLEMENTED art_portable_invoke_stub - -UNIMPLEMENTED art_portable_proxy_invoke_handler - -UNIMPLEMENTED art_portable_resolution_trampoline - -UNIMPLEMENTED art_portable_to_interpreter_bridge - -UNIMPLEMENTED art_portable_imt_conflict_trampoline diff --git a/runtime/arch/mips/entrypoints_init_mips.cc b/runtime/arch/mips/entrypoints_init_mips.cc index e86aa1c16d..1a661c479f 100644 --- a/runtime/arch/mips/entrypoints_init_mips.cc +++ b/runtime/arch/mips/entrypoints_init_mips.cc @@ -17,7 +17,6 @@ #include "atomic.h" #include "entrypoints/interpreter/interpreter_entrypoints.h" #include "entrypoints/jni/jni_entrypoints.h" -#include "entrypoints/portable/portable_entrypoints.h" #include "entrypoints/quick/quick_alloc_entrypoints.h" #include "entrypoints/quick/quick_default_externs.h" #include "entrypoints/quick/quick_entrypoints.h" @@ -60,7 +59,7 @@ extern "C" int64_t __divdi3(int64_t, int64_t); extern "C" int64_t __moddi3(int64_t, int64_t); void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, - PortableEntryPoints* ppoints, QuickEntryPoints* qpoints) { + QuickEntryPoints* qpoints) { // Interpreter ipoints->pInterpreterToInterpreterBridge = artInterpreterToInterpreterBridge; ipoints->pInterpreterToCompiledCodeBridge = artInterpreterToCompiledCodeBridge; @@ -68,10 +67,6 @@ void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, // JNI jpoints->pDlsymLookup = art_jni_dlsym_lookup_stub; - // Portable - ppoints->pPortableResolutionTrampoline = art_portable_resolution_trampoline; - ppoints->pPortableToInterpreterBridge = art_portable_to_interpreter_bridge; - // Alloc ResetQuickAllocEntryPoints(qpoints); diff --git a/runtime/arch/mips/portable_entrypoints_mips.S b/runtime/arch/mips/portable_entrypoints_mips.S deleted file mode 100644 index 8d418e8dd1..0000000000 --- a/runtime/arch/mips/portable_entrypoints_mips.S +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "asm_support_mips.S" - - .set noreorder - .balign 4 - - .extern artPortableProxyInvokeHandler -ENTRY art_portable_proxy_invoke_handler - # Fake callee save ref and args frame set up, note portable doesn't use callee save frames. - # TODO: just save the registers that are needed in artPortableProxyInvokeHandler. - addiu $sp, $sp, -64 - .cfi_adjust_cfa_offset 64 - sw $ra, 60($sp) - .cfi_rel_offset 31, 60 - sw $s8, 56($sp) - .cfi_rel_offset 30, 56 - sw $gp, 52($sp) - .cfi_rel_offset 28, 52 - sw $s7, 48($sp) - .cfi_rel_offset 23, 48 - sw $s6, 44($sp) - .cfi_rel_offset 22, 44 - sw $s5, 40($sp) - .cfi_rel_offset 21, 40 - sw $s4, 36($sp) - .cfi_rel_offset 20, 36 - sw $s3, 32($sp) - .cfi_rel_offset 19, 32 - sw $s2, 28($sp) - .cfi_rel_offset 18, 28 - sw $a3, 12($sp) - .cfi_rel_offset 7, 12 - sw $a2, 8($sp) - .cfi_rel_offset 6, 8 - sw $a1, 4($sp) - .cfi_rel_offset 5, 4 - # Begin argument set up. - sw $a0, 0($sp) # place proxy method at bottom of frame - move $a2, rSELF # pass Thread::Current - jal artPortableProxyInvokeHandler # (Method* proxy method, receiver, Thread*, SP) - move $a3, $sp # pass $sp - lw $ra, 60($sp) # restore $ra - jr $ra - addiu $sp, $sp, 64 # pop frame - .cfi_adjust_cfa_offset -64 -END art_portable_proxy_invoke_handler - - /* - * Invocation stub for portable code. - * On entry: - * a0 = method pointer - * a1 = argument array or NULL for no argument methods - * a2 = size of argument array in bytes - * a3 = (managed) thread pointer - * [sp + 16] = JValue* result - * [sp + 20] = result type char - */ -ENTRY art_portable_invoke_stub - sw $a0, 0($sp) # save out a0 - addiu $sp, $sp, -16 # spill s0, s1, fp, ra - .cfi_adjust_cfa_offset 16 - sw $ra, 12($sp) - .cfi_rel_offset 31, 12 - sw $fp, 8($sp) - .cfi_rel_offset 30, 8 - sw $s1, 4($sp) - .cfi_rel_offset 17, 4 - sw $s0, 0($sp) - .cfi_rel_offset 16, 0 - move $fp, $sp # save sp in fp - .cfi_def_cfa_register 30 - move $s1, $a3 # move managed thread pointer into s1 - addiu $s0, $zero, SUSPEND_CHECK_INTERVAL # reset s0 to suspend check interval. TODO: unused? - addiu $t0, $a2, 16 # create space for method pointer in frame - srl $t0, $t0, 3 # shift the frame size right 3 - sll $t0, $t0, 3 # shift the frame size left 3 to align to 16 bytes - subu $sp, $sp, $t0 # reserve stack space for argument array - addiu $a0, $sp, 4 # pass stack pointer + method ptr as dest for memcpy - jal memcpy # (dest, src, bytes) - addiu $sp, $sp, -16 # make space for argument slots for memcpy - addiu $sp, $sp, 16 # restore stack after memcpy - lw $a0, 16($fp) # restore method* - lw $a1, 4($sp) # copy arg value for a1 - lw $a2, 8($sp) # copy arg value for a2 - lw $a3, 12($sp) # copy arg value for a3 - lw $t9, MIRROR_ART_METHOD_PORTABLE_CODE_OFFSET_32($a0) # get pointer to the code - jalr $t9 # call the method - sw $zero, 0($sp) # store NULL for method* at bottom of frame - move $sp, $fp # restore the stack - lw $s0, 0($sp) - .cfi_restore 16 - lw $s1, 4($sp) - .cfi_restore 17 - lw $fp, 8($sp) - .cfi_restore 30 - lw $ra, 12($sp) - .cfi_restore 31 - addiu $sp, $sp, 16 - .cfi_adjust_cfa_offset -16 - lw $t0, 16($sp) # get result pointer - lw $t1, 20($sp) # get result type char - li $t2, 68 # put char 'D' into t2 - beq $t1, $t2, 1f # branch if result type char == 'D' - li $t3, 70 # put char 'F' into t3 - beq $t1, $t3, 1f # branch if result type char == 'F' - sw $v0, 0($t0) # store the result - jr $ra - sw $v1, 4($t0) # store the other half of the result -1: - s.s $f0, 0($t0) # store floating point result - jr $ra - s.s $f1, 4($t0) # store other half of floating point result -END art_portable_invoke_stub - -UNIMPLEMENTED art_portable_resolution_trampoline -UNIMPLEMENTED art_portable_to_interpreter_bridge -UNIMPLEMENTED art_portable_imt_conflict_trampoline diff --git a/runtime/arch/x86/entrypoints_init_x86.cc b/runtime/arch/x86/entrypoints_init_x86.cc index a1215420a4..2ac5279a52 100644 --- a/runtime/arch/x86/entrypoints_init_x86.cc +++ b/runtime/arch/x86/entrypoints_init_x86.cc @@ -16,7 +16,6 @@ #include "entrypoints/interpreter/interpreter_entrypoints.h" #include "entrypoints/jni/jni_entrypoints.h" -#include "entrypoints/portable/portable_entrypoints.h" #include "entrypoints/quick/quick_alloc_entrypoints.h" #include "entrypoints/quick/quick_default_externs.h" #include "entrypoints/quick/quick_entrypoints.h" @@ -34,7 +33,7 @@ extern "C" double art_quick_fmod(double, double); extern "C" float art_quick_fmodf(float, float); void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, - PortableEntryPoints* ppoints, QuickEntryPoints* qpoints) { + QuickEntryPoints* qpoints) { // Interpreter ipoints->pInterpreterToInterpreterBridge = artInterpreterToInterpreterBridge; ipoints->pInterpreterToCompiledCodeBridge = artInterpreterToCompiledCodeBridge; @@ -42,10 +41,6 @@ void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, // JNI jpoints->pDlsymLookup = art_jni_dlsym_lookup_stub; - // Portable - ppoints->pPortableResolutionTrampoline = art_portable_resolution_trampoline; - ppoints->pPortableToInterpreterBridge = art_portable_to_interpreter_bridge; - // Alloc ResetQuickAllocEntryPoints(qpoints); diff --git a/runtime/arch/x86/portable_entrypoints_x86.S b/runtime/arch/x86/portable_entrypoints_x86.S deleted file mode 100644 index 1f0900e86d..0000000000 --- a/runtime/arch/x86/portable_entrypoints_x86.S +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "asm_support_x86.S" - - /* - * Portable invocation stub. - * On entry: - * [sp] = return address - * [sp + 4] = method pointer - * [sp + 8] = argument array or NULL for no argument methods - * [sp + 12] = size of argument array in bytes - * [sp + 16] = (managed) thread pointer - * [sp + 20] = JValue* result - * [sp + 24] = result type char - */ -DEFINE_FUNCTION art_portable_invoke_stub - PUSH ebp // save ebp - PUSH ebx // save ebx - mov %esp, %ebp // copy value of stack pointer into base pointer - CFI_DEF_CFA_REGISTER(ebp) - mov 20(%ebp), %ebx // get arg array size - addl LITERAL(28), %ebx // reserve space for return addr, method*, ebx, and ebp in frame - andl LITERAL(0xFFFFFFF0), %ebx // align frame size to 16 bytes - subl LITERAL(12), %ebx // remove space for return address, ebx, and ebp - subl %ebx, %esp // reserve stack space for argument array - SETUP_GOT_NOSAVE ebx // reset ebx to GOT table - lea 4(%esp), %eax // use stack pointer + method ptr as dest for memcpy - pushl 20(%ebp) // push size of region to memcpy - pushl 16(%ebp) // push arg array as source of memcpy - pushl %eax // push stack pointer as destination of memcpy - call PLT_SYMBOL(memcpy) // (void*, const void*, size_t) - addl LITERAL(12), %esp // pop arguments to memcpy - mov 12(%ebp), %eax // move method pointer into eax - mov %eax, (%esp) // push method pointer onto stack - call *MIRROR_ART_METHOD_PORTABLE_CODE_OFFSET_32(%eax) // call the method - mov %ebp, %esp // restore stack pointer - POP ebx // pop ebx - POP ebp // pop ebp - mov 20(%esp), %ecx // get result pointer - cmpl LITERAL(68), 24(%esp) // test if result type char == 'D' - je .Lreturn_double_portable - cmpl LITERAL(70), 24(%esp) // test if result type char == 'F' - je .Lreturn_float_portable - mov %eax, (%ecx) // store the result - mov %edx, 4(%ecx) // store the other half of the result - ret -.Lreturn_double_portable: - fstpl (%ecx) // store the floating point result as double - ret -.Lreturn_float_portable: - fstps (%ecx) // store the floating point result as float - ret -END_FUNCTION art_portable_invoke_stub - -DEFINE_FUNCTION art_portable_proxy_invoke_handler - PUSH ebp // Set up frame. - movl %esp, %ebp - CFI_DEF_CFA_REGISTER(%ebp) - subl LITERAL(8), %esp // Align stack - leal 8(%ebp), %edx // %edx = ArtMethod** called_addr - movl 12(%ebp), %ecx // %ecx = receiver - movl 0(%edx), %eax // %eax = ArtMethod* called - pushl %edx // Pass called_addr. - pushl %fs:THREAD_SELF_OFFSET // Pass thread. - pushl %ecx // Pass receiver. - pushl %eax // Pass called. - call SYMBOL(artPortableProxyInvokeHandler) // (called, receiver, Thread*, &called) - leave - CFI_RESTORE(%ebp) - CFI_DEF_CFA(%esp, 4) - movd %eax, %xmm0 // Place return value also into floating point return value. - movd %edx, %xmm1 - punpckldq %xmm1, %xmm0 - ret -END_FUNCTION art_portable_proxy_invoke_handler - -DEFINE_FUNCTION art_portable_resolution_trampoline - PUSH ebp // Set up frame. - movl %esp, %ebp - CFI_DEF_CFA_REGISTER(%ebp) - subl LITERAL(8), %esp // Align stack - leal 8(%ebp), %edx // %edx = ArtMethod** called_addr - movl 12(%ebp), %ecx // %ecx = receiver - movl 0(%edx), %eax // %eax = ArtMethod* called - pushl %edx // Pass called_addr. - pushl %fs:THREAD_SELF_OFFSET // Pass thread. - pushl %ecx // Pass receiver. - pushl %eax // Pass called. - call SYMBOL(artPortableResolutionTrampoline) // (called, receiver, Thread*, &called) - leave - CFI_RESTORE(%ebp) - CFI_DEF_CFA(%esp, 4) - testl %eax, %eax - jz .Lresolve_fail - jmp * %eax -.Lresolve_fail: // Resolution failed, return with exception pending. - ret -END_FUNCTION art_portable_resolution_trampoline - -DEFINE_FUNCTION art_portable_to_interpreter_bridge - PUSH ebp // Set up frame. - movl %esp, %ebp - CFI_DEF_CFA_REGISTER(%ebp) - subl LITERAL(12), %esp // Align stack - leal 8(%ebp), %edx // %edx = ArtMethod** called_addr - movl 0(%edx), %eax // %eax = ArtMethod* called - pushl %edx // Pass called_addr. - pushl %fs:THREAD_SELF_OFFSET // Pass thread. - pushl %eax // Pass called. - call SYMBOL(artPortableToInterpreterBridge) // (called, Thread*, &called) - leave - CFI_RESTORE(%ebp) - CFI_DEF_CFA(%esp, 4) - ret -END_FUNCTION art_portable_to_interpreter_bridge - -UNIMPLEMENTED art_portable_imt_conflict_trampoline diff --git a/runtime/arch/x86_64/entrypoints_init_x86_64.cc b/runtime/arch/x86_64/entrypoints_init_x86_64.cc index 2cfcfed209..3f1e4b5948 100644 --- a/runtime/arch/x86_64/entrypoints_init_x86_64.cc +++ b/runtime/arch/x86_64/entrypoints_init_x86_64.cc @@ -16,7 +16,6 @@ #include "entrypoints/interpreter/interpreter_entrypoints.h" #include "entrypoints/jni/jni_entrypoints.h" -#include "entrypoints/portable/portable_entrypoints.h" #include "entrypoints/quick/quick_alloc_entrypoints.h" #include "entrypoints/quick/quick_default_externs.h" #include "entrypoints/quick/quick_entrypoints.h" @@ -31,9 +30,9 @@ extern "C" uint32_t art_quick_assignable_from_code(const mirror::Class* klass, const mirror::Class* ref_class); void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, - PortableEntryPoints* ppoints, QuickEntryPoints* qpoints) { + QuickEntryPoints* qpoints) { #if defined(__APPLE__) - UNUSED(ipoints, jpoints, ppoints, qpoints); + UNUSED(ipoints, jpoints, qpoints); UNIMPLEMENTED(FATAL); #else // Interpreter @@ -43,10 +42,6 @@ void InitEntryPoints(InterpreterEntryPoints* ipoints, JniEntryPoints* jpoints, // JNI jpoints->pDlsymLookup = art_jni_dlsym_lookup_stub; - // Portable - ppoints->pPortableResolutionTrampoline = art_portable_resolution_trampoline; - ppoints->pPortableToInterpreterBridge = art_portable_to_interpreter_bridge; - // Alloc ResetQuickAllocEntryPoints(qpoints); diff --git a/runtime/arch/x86_64/portable_entrypoints_x86_64.S b/runtime/arch/x86_64/portable_entrypoints_x86_64.S deleted file mode 100644 index 3a54005aee..0000000000 --- a/runtime/arch/x86_64/portable_entrypoints_x86_64.S +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "asm_support_x86_64.S" - - /* - * Portable invocation stub. - */ -UNIMPLEMENTED art_portable_invoke_stub - -UNIMPLEMENTED art_portable_proxy_invoke_handler - -UNIMPLEMENTED art_portable_resolution_trampoline - -UNIMPLEMENTED art_portable_to_interpreter_bridge - -UNIMPLEMENTED art_portable_imt_conflict_trampoline |