summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Man Cao <manc@google.com> 2015-07-23 11:18:49 -0700
committer Man Cao <manc@google.com> 2015-07-23 11:18:49 -0700
commit71cef231c39da9d911ad2a1976adcd7e664b5b17 (patch)
tree51d24ce7b9f20e0ed59d78bbc86df748a446b608
parentf7efc9ef90c38212f8c4fbece99080f784a53181 (diff)
Fix alignments in quick_entrypoints_x86_64.S
Places calling artIsAssignableFromCode() were not 16-byte aligned. Change-Id: I86ff4f73a942ede09c0206e76614eb826dd896c2
-rw-r--r--runtime/arch/x86_64/quick_entrypoints_x86_64.S22
1 files changed, 12 insertions, 10 deletions
diff --git a/runtime/arch/x86_64/quick_entrypoints_x86_64.S b/runtime/arch/x86_64/quick_entrypoints_x86_64.S
index 7e7d789c8d..0eeb03a526 100644
--- a/runtime/arch/x86_64/quick_entrypoints_x86_64.S
+++ b/runtime/arch/x86_64/quick_entrypoints_x86_64.S
@@ -1127,19 +1127,23 @@ END_FUNCTION art_quick_unlock_object
DEFINE_FUNCTION art_quick_check_cast
PUSH rdi // Save args for exc
PUSH rsi
+ subq LITERAL(8), %rsp // Alignment padding.
+ CFI_ADJUST_CFA_OFFSET(8)
SETUP_FP_CALLEE_SAVE_FRAME
call SYMBOL(artIsAssignableFromCode) // (Class* klass, Class* ref_klass)
testq %rax, %rax
jz 1f // jump forward if not assignable
RESTORE_FP_CALLEE_SAVE_FRAME
- addq LITERAL(16), %rsp // pop arguments
- CFI_ADJUST_CFA_OFFSET(-16)
+ addq LITERAL(24), %rsp // pop arguments
+ CFI_ADJUST_CFA_OFFSET(-24)
ret
- CFI_ADJUST_CFA_OFFSET(16 + 4 * 8) // Reset unwind info so following code unwinds.
+ CFI_ADJUST_CFA_OFFSET(24 + 4 * 8) // Reset unwind info so following code unwinds.
1:
RESTORE_FP_CALLEE_SAVE_FRAME
+ addq LITERAL(8), %rsp // pop padding
+ CFI_ADJUST_CFA_OFFSET(-8)
POP rsi // Pop arguments
POP rdi
SETUP_SAVE_ALL_CALLEE_SAVE_FRAME // save all registers as basis for long jump context
@@ -1226,8 +1230,6 @@ DEFINE_FUNCTION art_quick_aput_obj
PUSH rdi
PUSH rsi
PUSH rdx
- subq LITERAL(8), %rsp // Alignment padding.
- CFI_ADJUST_CFA_OFFSET(8)
SETUP_FP_CALLEE_SAVE_FRAME
// "Uncompress" = do nothing, as already zero-extended on load.
@@ -1243,8 +1245,6 @@ DEFINE_FUNCTION art_quick_aput_obj
RESTORE_FP_CALLEE_SAVE_FRAME
// Restore arguments.
- addq LITERAL(8), %rsp
- CFI_ADJUST_CFA_OFFSET(-8)
POP rdx
POP rsi
POP rdi
@@ -1258,12 +1258,10 @@ DEFINE_FUNCTION art_quick_aput_obj
movb %dl, (%rdx, %rdi) // Note: this assumes that top 32b of %rdi are zero
// movb %dl, (%rdx, %rdi)
ret
- CFI_ADJUST_CFA_OFFSET(32 + 4 * 8) // Reset unwind info so following code unwinds.
+ CFI_ADJUST_CFA_OFFSET(24 + 4 * 8) // Reset unwind info so following code unwinds.
.Lthrow_array_store_exception:
RESTORE_FP_CALLEE_SAVE_FRAME
// Restore arguments.
- addq LITERAL(8), %rsp
- CFI_ADJUST_CFA_OFFSET(-8)
POP rdx
POP rsi
POP rdi
@@ -1717,7 +1715,11 @@ UNIMPLEMENTED art_quick_memcmp16
DEFINE_FUNCTION art_quick_assignable_from_code
SETUP_FP_CALLEE_SAVE_FRAME
+ subq LITERAL(8), %rsp // Alignment padding.
+ CFI_ADJUST_CFA_OFFSET(8)
call SYMBOL(artIsAssignableFromCode) // (const mirror::Class*, const mirror::Class*)
+ addq LITERAL(8), %rsp
+ CFI_ADJUST_CFA_OFFSET(-8)
RESTORE_FP_CALLEE_SAVE_FRAME
ret
END_FUNCTION art_quick_assignable_from_code