summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/interpreter/mterp/out/mterp_x86.S226
-rw-r--r--runtime/interpreter/mterp/x86/bindiv.S4
-rw-r--r--runtime/interpreter/mterp/x86/footer.S2
-rw-r--r--runtime/interpreter/mterp/x86/header.S12
-rw-r--r--runtime/interpreter/mterp/x86/invoke.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_aget_object.S2
-rw-r--r--runtime/interpreter/mterp/x86/op_aput_object.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_check_cast.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_const_class.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_const_string.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_const_string_jumbo.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_fill_array_data.S2
-rw-r--r--runtime/interpreter/mterp/x86/op_filled_new_array.S2
-rw-r--r--runtime/interpreter/mterp/x86/op_iget.S2
-rw-r--r--runtime/interpreter/mterp/x86/op_iget_object_quick.S2
-rw-r--r--runtime/interpreter/mterp/x86/op_iget_wide.S2
-rw-r--r--runtime/interpreter/mterp/x86/op_instance_of.S2
-rw-r--r--runtime/interpreter/mterp/x86/op_iput.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_iput_object.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_iput_object_quick.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_iput_wide.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_monitor_enter.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_monitor_exit.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_mul_int_2addr.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_mul_int_lit16.S8
-rw-r--r--runtime/interpreter/mterp/x86/op_mul_int_lit8.S8
-rw-r--r--runtime/interpreter/mterp/x86/op_new_array.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_new_instance.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_sget.S2
-rw-r--r--runtime/interpreter/mterp/x86/op_sget_wide.S2
-rw-r--r--runtime/interpreter/mterp/x86/op_sput.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_sput_object.S4
-rw-r--r--runtime/interpreter/mterp/x86/op_sput_wide.S4
33 files changed, 183 insertions, 167 deletions
diff --git a/runtime/interpreter/mterp/out/mterp_x86.S b/runtime/interpreter/mterp/out/mterp_x86.S
index 96229ceba0..d365a4f986 100644
--- a/runtime/interpreter/mterp/out/mterp_x86.S
+++ b/runtime/interpreter/mterp/out/mterp_x86.S
@@ -189,13 +189,21 @@ unspecified registers or condition codes.
/*
* Refresh handler table.
+ */
+.macro REFRESH_IBASE
+ movl rSELF, rIBASE
+ movl THREAD_CURRENT_IBASE_OFFSET(rIBASE), rIBASE
+.endm
+
+/*
+ * Refresh handler table.
* IBase handles uses the caller save register so we must restore it after each call.
* Also it is used as a result of some 64-bit operations (like imul) and we should
* restore it in such cases also.
*
* TODO: Consider spilling the IBase instead of restoring it from Thread structure.
*/
-.macro REFRESH_IBASE
+.macro RESTORE_IBASE
movl rSELF, rIBASE
movl THREAD_CURRENT_IBASE_OFFSET(rIBASE), rIBASE
.endm
@@ -203,7 +211,7 @@ unspecified registers or condition codes.
/*
* If rSELF is already loaded then we can use it from known reg.
*/
-.macro REFRESH_IBASE_FROM_SELF _reg
+.macro RESTORE_IBASE_FROM_SELF _reg
movl THREAD_CURRENT_IBASE_OFFSET(\_reg), rIBASE
.endm
@@ -771,8 +779,8 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %eax
movl %eax, OUT_ARG3(%esp)
call SYMBOL(MterpConstString) # (index, tgt_reg, shadow_frame, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -790,8 +798,8 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %eax
movl %eax, OUT_ARG3(%esp)
call SYMBOL(MterpConstString) # (index, tgt_reg, shadow_frame, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -809,8 +817,8 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %eax
movl %eax, OUT_ARG3(%esp)
call SYMBOL(MterpConstClass) # (index, tgt_reg, shadow_frame, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -828,8 +836,8 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %eax
movl %eax, OUT_ARG1(%esp)
call SYMBOL(artLockObjectFromCode) # (object, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 1
@@ -851,8 +859,8 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %eax
movl %eax, OUT_ARG1(%esp)
call SYMBOL(artUnlockObjectFromCode) # (object, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 1
@@ -874,8 +882,8 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp)
call SYMBOL(MterpCheckCast) # (index, &obj, method, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -903,7 +911,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG3(%esp)
call SYMBOL(MterpInstanceOf) # (index, &obj, method, self)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
andb $0xf, rINSTbl # rINSTbl <- A
@@ -943,8 +951,8 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 34
movl rINST, OUT_ARG2(%esp)
call SYMBOL(MterpNewInstance)
- REFRESH_IBASE
- testl %eax, %eax # 0 means an exception is thrown
+ RESTORE_IBASE
+ testb %al, %al # 0 means an exception is thrown
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -969,8 +977,8 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp)
call SYMBOL(MterpNewArray)
- REFRESH_IBASE
- testl %eax, %eax # 0 means an exception is thrown
+ RESTORE_IBASE
+ testb %al, %al # 0 means an exception is thrown
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -994,7 +1002,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG2(%esp)
call SYMBOL(MterpFilledNewArray)
REFRESH_IBASE
- testl %eax, %eax # 0 means an exception is thrown
+ testb %al, %al # 0 means an exception is thrown
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -1019,7 +1027,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG2(%esp)
call SYMBOL(MterpFilledNewArrayRange)
REFRESH_IBASE
- testl %eax, %eax # 0 means an exception is thrown
+ testb %al, %al # 0 means an exception is thrown
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -1037,7 +1045,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG1(%esp)
call SYMBOL(MterpFillArrayData) # (obj, payload)
REFRESH_IBASE
- testl %eax, %eax # 0 means an exception is thrown
+ testb %al, %al # 0 means an exception is thrown
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -1923,7 +1931,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG1(%esp)
call SYMBOL(artAGetObjectFromMterp) # (array, index)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
SET_VREG_OBJECT %eax, rINST
@@ -2090,8 +2098,8 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 77
movl rINST, OUT_ARG2(%esp)
call SYMBOL(MterpAputObject) # (array, index)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -2221,7 +2229,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artGet32InstanceFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException # bail out
andb $0xf, rINSTbl # rINST <- A
@@ -2259,7 +2267,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
andb $0xf, rINSTbl # rINST <- A
SET_VREG %eax, rINST
SET_VREG_HIGH %edx, rINST
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
/* ------------------------------ */
@@ -2285,7 +2293,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artGetObjInstanceFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException # bail out
andb $0xf, rINSTbl # rINST <- A
@@ -2320,7 +2328,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artGetBooleanInstanceFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException # bail out
andb $0xf, rINSTbl # rINST <- A
@@ -2355,7 +2363,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artGetByteInstanceFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException # bail out
andb $0xf, rINSTbl # rINST <- A
@@ -2390,7 +2398,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artGetCharInstanceFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException # bail out
andb $0xf, rINSTbl # rINST <- A
@@ -2425,7 +2433,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artGetShortInstanceFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException # bail out
andb $0xf, rINSTbl # rINST <- A
@@ -2461,9 +2469,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl OFF_FP_METHOD(rFP), %eax
movl %eax, OUT_ARG3(%esp) # referrer
call SYMBOL(artSet32InstanceFromMterp)
- testl %eax, %eax
+ testb %al, %al
jnz MterpPossibleException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
/* ------------------------------ */
@@ -2485,9 +2493,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl OFF_FP_METHOD(rFP), %eax
movl %eax, OUT_ARG3(%esp) # referrer
call SYMBOL(artSet64InstanceFromMterp)
- testl %eax, %eax
+ testb %al, %al
jnz MterpPossibleException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
/* ------------------------------ */
@@ -2503,9 +2511,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %eax
movl %eax, OUT_ARG3(%esp)
call SYMBOL(MterpIputObject)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
/* ------------------------------ */
@@ -2533,9 +2541,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl OFF_FP_METHOD(rFP), %eax
movl %eax, OUT_ARG3(%esp) # referrer
call SYMBOL(artSet8InstanceFromMterp)
- testl %eax, %eax
+ testb %al, %al
jnz MterpPossibleException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -2564,9 +2572,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl OFF_FP_METHOD(rFP), %eax
movl %eax, OUT_ARG3(%esp) # referrer
call SYMBOL(artSet8InstanceFromMterp)
- testl %eax, %eax
+ testb %al, %al
jnz MterpPossibleException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -2595,9 +2603,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl OFF_FP_METHOD(rFP), %eax
movl %eax, OUT_ARG3(%esp) # referrer
call SYMBOL(artSet16InstanceFromMterp)
- testl %eax, %eax
+ testb %al, %al
jnz MterpPossibleException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -2626,9 +2634,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl OFF_FP_METHOD(rFP), %eax
movl %eax, OUT_ARG3(%esp) # referrer
call SYMBOL(artSet16InstanceFromMterp)
- testl %eax, %eax
+ testb %al, %al
jnz MterpPossibleException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -2652,7 +2660,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG2(%esp) # self
call SYMBOL(artGet32StaticFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
.if 0
@@ -2685,7 +2693,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
jnz MterpException
SET_VREG %eax, rINST # fp[A]<- low part
SET_VREG_HIGH %edx, rINST # fp[A+1]<- high part
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
/* ------------------------------ */
@@ -2709,7 +2717,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG2(%esp) # self
call SYMBOL(artGetObjStaticFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
.if 1
@@ -2741,7 +2749,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG2(%esp) # self
call SYMBOL(artGetBooleanStaticFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
.if 0
@@ -2773,7 +2781,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG2(%esp) # self
call SYMBOL(artGetByteStaticFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
.if 0
@@ -2805,7 +2813,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG2(%esp) # self
call SYMBOL(artGetCharStaticFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
.if 0
@@ -2837,7 +2845,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl %ecx, OUT_ARG2(%esp) # self
call SYMBOL(artGetShortStaticFromCode)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
.if 0
@@ -2869,9 +2877,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artSet32StaticFromCode)
- testl %eax, %eax
+ testb %al, %al
jnz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
/* ------------------------------ */
@@ -2894,9 +2902,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artSet64IndirectStaticFromMterp)
- testl %eax, %eax
+ testb %al, %al
jnz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
/* ------------------------------ */
@@ -2912,9 +2920,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp)
call SYMBOL(MterpSputObject)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
/* ------------------------------ */
@@ -2939,9 +2947,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artSet8StaticFromCode)
- testl %eax, %eax
+ testb %al, %al
jnz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -2967,9 +2975,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artSet8StaticFromCode)
- testl %eax, %eax
+ testb %al, %al
jnz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -2995,9 +3003,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artSet16StaticFromCode)
- testl %eax, %eax
+ testb %al, %al
jnz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -3023,9 +3031,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artSet16StaticFromCode)
- testl %eax, %eax
+ testb %al, %al
jnz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -3049,9 +3057,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 110
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeVirtual)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
/*
@@ -3082,9 +3090,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 111
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeSuper)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
/*
@@ -3115,9 +3123,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 112
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeDirect)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -3141,9 +3149,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 113
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeStatic)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -3168,9 +3176,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 114
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeInterface)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
/*
@@ -3215,9 +3223,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 116
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeVirtualRange)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -3241,9 +3249,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 117
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeSuperRange)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -3267,9 +3275,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 118
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeDirectRange)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -3293,9 +3301,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 119
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeStaticRange)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -3319,9 +3327,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 120
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeInterfaceRange)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -4047,10 +4055,10 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
je common_errDivideByZero
movl %eax, %edx
orl %ecx, %edx
- test $0xFFFFFF00, %edx # If both arguments are less
+ testl $0xFFFFFF00, %edx # If both arguments are less
# than 8-bit and +ve
jz .Lop_div_int_8 # Do 8-bit divide
- test $0xFFFF0000, %edx # If both arguments are less
+ testl $0xFFFF0000, %edx # If both arguments are less
# than 16-bit and +ve
jz .Lop_div_int_16 # Do 16-bit divide
cmpl $-1, %ecx
@@ -4101,10 +4109,10 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
je common_errDivideByZero
movl %eax, %edx
orl %ecx, %edx
- test $0xFFFFFF00, %edx # If both arguments are less
+ testl $0xFFFFFF00, %edx # If both arguments are less
# than 8-bit and +ve
jz .Lop_rem_int_8 # Do 8-bit divide
- test $0xFFFF0000, %edx # If both arguments are less
+ testl $0xFFFF0000, %edx # If both arguments are less
# than 16-bit and +ve
jz .Lop_rem_int_16 # Do 16-bit divide
cmpl $-1, %ecx
@@ -4785,9 +4793,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
sarl $4, rINST # rINST <- B
GET_VREG %eax, rINST # eax <- vB
andb $0xf, %cl # ecx <- A
- mov rIBASE, LOCAL0(%esp)
+ movl rIBASE, rINST
imull (rFP,%ecx,4), %eax # trashes rIBASE/edx
- mov LOCAL0(%esp), rIBASE
+ movl rINST, rIBASE
SET_VREG %eax, %ecx
ADVANCE_PC_FETCH_AND_GOTO_NEXT 1
@@ -5514,11 +5522,11 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
movzbl rINSTbl, %eax # eax <- 000000BA
sarl $4, %eax # eax <- B
GET_VREG %eax, %eax # eax <- vB
- movswl 2(rPC), %ecx # ecx <- ssssCCCC
+ movl rIBASE, %ecx
+ movswl 2(rPC), rIBASE # rIBASE <- ssssCCCC
andb $0xf, rINSTbl # rINST <- A
- mov rIBASE, LOCAL0(%esp)
- imull %ecx, %eax # trashes rIBASE/edx
- mov LOCAL0(%esp), rIBASE
+ imull rIBASE, %eax # trashes rIBASE/edx
+ movl %ecx, rIBASE
SET_VREG %eax, rINST
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -5721,11 +5729,11 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
/* File: x86/op_mul_int_lit8.S */
/* mul/lit8 vAA, vBB, #+CC */
movzbl 2(rPC), %eax # eax <- BB
- movsbl 3(rPC), %ecx # ecx <- ssssssCC
+ movl rIBASE, %ecx
GET_VREG %eax, %eax # eax <- rBB
- mov rIBASE, LOCAL0(%esp)
- imull %ecx, %eax # trashes rIBASE/edx
- mov LOCAL0(%esp), rIBASE
+ movsbl 3(rPC), rIBASE # rIBASE <- ssssssCC
+ imull rIBASE, %eax # trashes rIBASE/edx
+ movl %ecx, rIBASE
SET_VREG %eax, rINST
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
@@ -5985,7 +5993,7 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
EXPORT_PC
call SYMBOL(artIGetObjectFromMterp) # (obj, offset)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException # bail out
andb $0xf,rINSTbl # rINST <- A
@@ -6037,9 +6045,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 232
movl rINST, OUT_ARG2(%esp)
call SYMBOL(MterpIputObjectQuick)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
/* ------------------------------ */
@@ -6062,9 +6070,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 233
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeVirtualQuick)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -6088,9 +6096,9 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
REFRESH_INST 234
movl rINST, OUT_ARG3(%esp)
call SYMBOL(MterpInvokeVirtualQuickRange)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
@@ -12912,7 +12920,7 @@ MterpException:
lea OFF_FP_SHADOWFRAME(rFP), %ecx
movl %ecx, OUT_ARG1(%esp)
call SYMBOL(MterpHandleException)
- testl %eax, %eax
+ testb %al, %al
jz MterpExceptionReturn
REFRESH_IBASE
movl OFF_FP_CODE_ITEM(rFP), %eax
diff --git a/runtime/interpreter/mterp/x86/bindiv.S b/runtime/interpreter/mterp/x86/bindiv.S
index bb5b319c49..e87ba45546 100644
--- a/runtime/interpreter/mterp/x86/bindiv.S
+++ b/runtime/interpreter/mterp/x86/bindiv.S
@@ -13,10 +13,10 @@
je common_errDivideByZero
movl %eax, %edx
orl %ecx, %edx
- test $$0xFFFFFF00, %edx # If both arguments are less
+ testl $$0xFFFFFF00, %edx # If both arguments are less
# than 8-bit and +ve
jz .L${opcode}_8 # Do 8-bit divide
- test $$0xFFFF0000, %edx # If both arguments are less
+ testl $$0xFFFF0000, %edx # If both arguments are less
# than 16-bit and +ve
jz .L${opcode}_16 # Do 16-bit divide
cmpl $$-1, %ecx
diff --git a/runtime/interpreter/mterp/x86/footer.S b/runtime/interpreter/mterp/x86/footer.S
index 385e78499f..a1532fa710 100644
--- a/runtime/interpreter/mterp/x86/footer.S
+++ b/runtime/interpreter/mterp/x86/footer.S
@@ -114,7 +114,7 @@ MterpException:
lea OFF_FP_SHADOWFRAME(rFP), %ecx
movl %ecx, OUT_ARG1(%esp)
call SYMBOL(MterpHandleException)
- testl %eax, %eax
+ testb %al, %al
jz MterpExceptionReturn
REFRESH_IBASE
movl OFF_FP_CODE_ITEM(rFP), %eax
diff --git a/runtime/interpreter/mterp/x86/header.S b/runtime/interpreter/mterp/x86/header.S
index 0977b901e2..3fbbbf955e 100644
--- a/runtime/interpreter/mterp/x86/header.S
+++ b/runtime/interpreter/mterp/x86/header.S
@@ -182,13 +182,21 @@ unspecified registers or condition codes.
/*
* Refresh handler table.
+ */
+.macro REFRESH_IBASE
+ movl rSELF, rIBASE
+ movl THREAD_CURRENT_IBASE_OFFSET(rIBASE), rIBASE
+.endm
+
+/*
+ * Refresh handler table.
* IBase handles uses the caller save register so we must restore it after each call.
* Also it is used as a result of some 64-bit operations (like imul) and we should
* restore it in such cases also.
*
* TODO: Consider spilling the IBase instead of restoring it from Thread structure.
*/
-.macro REFRESH_IBASE
+.macro RESTORE_IBASE
movl rSELF, rIBASE
movl THREAD_CURRENT_IBASE_OFFSET(rIBASE), rIBASE
.endm
@@ -196,7 +204,7 @@ unspecified registers or condition codes.
/*
* If rSELF is already loaded then we can use it from known reg.
*/
-.macro REFRESH_IBASE_FROM_SELF _reg
+.macro RESTORE_IBASE_FROM_SELF _reg
movl THREAD_CURRENT_IBASE_OFFSET(\_reg), rIBASE
.endm
diff --git a/runtime/interpreter/mterp/x86/invoke.S b/runtime/interpreter/mterp/x86/invoke.S
index 054fbfdf69..bbd88cf40b 100644
--- a/runtime/interpreter/mterp/x86/invoke.S
+++ b/runtime/interpreter/mterp/x86/invoke.S
@@ -14,7 +14,7 @@
REFRESH_INST ${opnum}
movl rINST, OUT_ARG3(%esp)
call SYMBOL($helper)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
diff --git a/runtime/interpreter/mterp/x86/op_aget_object.S b/runtime/interpreter/mterp/x86/op_aget_object.S
index cbfb50cb09..35ec053854 100644
--- a/runtime/interpreter/mterp/x86/op_aget_object.S
+++ b/runtime/interpreter/mterp/x86/op_aget_object.S
@@ -13,7 +13,7 @@
movl %ecx, OUT_ARG1(%esp)
call SYMBOL(artAGetObjectFromMterp) # (array, index)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $$0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
SET_VREG_OBJECT %eax, rINST
diff --git a/runtime/interpreter/mterp/x86/op_aput_object.S b/runtime/interpreter/mterp/x86/op_aput_object.S
index 9cfc2213d2..980b26a401 100644
--- a/runtime/interpreter/mterp/x86/op_aput_object.S
+++ b/runtime/interpreter/mterp/x86/op_aput_object.S
@@ -9,7 +9,7 @@
REFRESH_INST ${opnum}
movl rINST, OUT_ARG2(%esp)
call SYMBOL(MterpAputObject) # (array, index)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_check_cast.S b/runtime/interpreter/mterp/x86/op_check_cast.S
index ae2ff9ea21..d090aa3785 100644
--- a/runtime/interpreter/mterp/x86/op_check_cast.S
+++ b/runtime/interpreter/mterp/x86/op_check_cast.S
@@ -12,7 +12,7 @@
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp)
call SYMBOL(MterpCheckCast) # (index, &obj, method, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_const_class.S b/runtime/interpreter/mterp/x86/op_const_class.S
index 343e110f71..60be789214 100644
--- a/runtime/interpreter/mterp/x86/op_const_class.S
+++ b/runtime/interpreter/mterp/x86/op_const_class.S
@@ -8,7 +8,7 @@
movl rSELF, %eax
movl %eax, OUT_ARG3(%esp)
call SYMBOL(MterpConstClass) # (index, tgt_reg, shadow_frame, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_const_string.S b/runtime/interpreter/mterp/x86/op_const_string.S
index bbac69ced4..ff93b232d6 100644
--- a/runtime/interpreter/mterp/x86/op_const_string.S
+++ b/runtime/interpreter/mterp/x86/op_const_string.S
@@ -8,7 +8,7 @@
movl rSELF, %eax
movl %eax, OUT_ARG3(%esp)
call SYMBOL(MterpConstString) # (index, tgt_reg, shadow_frame, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_const_string_jumbo.S b/runtime/interpreter/mterp/x86/op_const_string_jumbo.S
index 4236807dd3..e7f952a306 100644
--- a/runtime/interpreter/mterp/x86/op_const_string_jumbo.S
+++ b/runtime/interpreter/mterp/x86/op_const_string_jumbo.S
@@ -8,7 +8,7 @@
movl rSELF, %eax
movl %eax, OUT_ARG3(%esp)
call SYMBOL(MterpConstString) # (index, tgt_reg, shadow_frame, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
diff --git a/runtime/interpreter/mterp/x86/op_fill_array_data.S b/runtime/interpreter/mterp/x86/op_fill_array_data.S
index 004aed9872..5855284901 100644
--- a/runtime/interpreter/mterp/x86/op_fill_array_data.S
+++ b/runtime/interpreter/mterp/x86/op_fill_array_data.S
@@ -7,6 +7,6 @@
movl %ecx, OUT_ARG1(%esp)
call SYMBOL(MterpFillArrayData) # (obj, payload)
REFRESH_IBASE
- testl %eax, %eax # 0 means an exception is thrown
+ testb %al, %al # 0 means an exception is thrown
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
diff --git a/runtime/interpreter/mterp/x86/op_filled_new_array.S b/runtime/interpreter/mterp/x86/op_filled_new_array.S
index a2bac29bc1..35b2fe8dfc 100644
--- a/runtime/interpreter/mterp/x86/op_filled_new_array.S
+++ b/runtime/interpreter/mterp/x86/op_filled_new_array.S
@@ -15,6 +15,6 @@
movl %ecx, OUT_ARG2(%esp)
call SYMBOL($helper)
REFRESH_IBASE
- testl %eax, %eax # 0 means an exception is thrown
+ testb %al, %al # 0 means an exception is thrown
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
diff --git a/runtime/interpreter/mterp/x86/op_iget.S b/runtime/interpreter/mterp/x86/op_iget.S
index 99326105c0..e3304ba6a7 100644
--- a/runtime/interpreter/mterp/x86/op_iget.S
+++ b/runtime/interpreter/mterp/x86/op_iget.S
@@ -17,7 +17,7 @@
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL($helper)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $$0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException # bail out
andb $$0xf, rINSTbl # rINST <- A
diff --git a/runtime/interpreter/mterp/x86/op_iget_object_quick.S b/runtime/interpreter/mterp/x86/op_iget_object_quick.S
index fe166948c9..b1551a0179 100644
--- a/runtime/interpreter/mterp/x86/op_iget_object_quick.S
+++ b/runtime/interpreter/mterp/x86/op_iget_object_quick.S
@@ -9,7 +9,7 @@
EXPORT_PC
call SYMBOL(artIGetObjectFromMterp) # (obj, offset)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $$0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException # bail out
andb $$0xf,rINSTbl # rINST <- A
diff --git a/runtime/interpreter/mterp/x86/op_iget_wide.S b/runtime/interpreter/mterp/x86/op_iget_wide.S
index 92126b4473..a5d7e6937d 100644
--- a/runtime/interpreter/mterp/x86/op_iget_wide.S
+++ b/runtime/interpreter/mterp/x86/op_iget_wide.S
@@ -21,5 +21,5 @@
andb $$0xf, rINSTbl # rINST <- A
SET_VREG %eax, rINST
SET_VREG_HIGH %edx, rINST
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_instance_of.S b/runtime/interpreter/mterp/x86/op_instance_of.S
index fd5bf44c78..e6fe5b2cec 100644
--- a/runtime/interpreter/mterp/x86/op_instance_of.S
+++ b/runtime/interpreter/mterp/x86/op_instance_of.S
@@ -18,7 +18,7 @@
movl %ecx, OUT_ARG3(%esp)
call SYMBOL(MterpInstanceOf) # (index, &obj, method, self)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $$0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
andb $$0xf, rINSTbl # rINSTbl <- A
diff --git a/runtime/interpreter/mterp/x86/op_iput.S b/runtime/interpreter/mterp/x86/op_iput.S
index 13cfe5ca69..c847e2dc88 100644
--- a/runtime/interpreter/mterp/x86/op_iput.S
+++ b/runtime/interpreter/mterp/x86/op_iput.S
@@ -19,7 +19,7 @@
movl OFF_FP_METHOD(rFP), %eax
movl %eax, OUT_ARG3(%esp) # referrer
call SYMBOL($handler)
- testl %eax, %eax
+ testb %al, %al
jnz MterpPossibleException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_iput_object.S b/runtime/interpreter/mterp/x86/op_iput_object.S
index f63075c503..e0136970b0 100644
--- a/runtime/interpreter/mterp/x86/op_iput_object.S
+++ b/runtime/interpreter/mterp/x86/op_iput_object.S
@@ -7,7 +7,7 @@
movl rSELF, %eax
movl %eax, OUT_ARG3(%esp)
call SYMBOL(MterpIputObject)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_iput_object_quick.S b/runtime/interpreter/mterp/x86/op_iput_object_quick.S
index d54b1b772f..cb779295b7 100644
--- a/runtime/interpreter/mterp/x86/op_iput_object_quick.S
+++ b/runtime/interpreter/mterp/x86/op_iput_object_quick.S
@@ -5,7 +5,7 @@
REFRESH_INST ${opnum}
movl rINST, OUT_ARG2(%esp)
call SYMBOL(MterpIputObjectQuick)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_iput_wide.S b/runtime/interpreter/mterp/x86/op_iput_wide.S
index 573e14d663..122eecf43f 100644
--- a/runtime/interpreter/mterp/x86/op_iput_wide.S
+++ b/runtime/interpreter/mterp/x86/op_iput_wide.S
@@ -13,7 +13,7 @@
movl OFF_FP_METHOD(rFP), %eax
movl %eax, OUT_ARG3(%esp) # referrer
call SYMBOL(artSet64InstanceFromMterp)
- testl %eax, %eax
+ testb %al, %al
jnz MterpPossibleException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_monitor_enter.S b/runtime/interpreter/mterp/x86/op_monitor_enter.S
index 9e885bde93..b35c68488a 100644
--- a/runtime/interpreter/mterp/x86/op_monitor_enter.S
+++ b/runtime/interpreter/mterp/x86/op_monitor_enter.S
@@ -8,7 +8,7 @@
movl rSELF, %eax
movl %eax, OUT_ARG1(%esp)
call SYMBOL(artLockObjectFromCode) # (object, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 1
diff --git a/runtime/interpreter/mterp/x86/op_monitor_exit.S b/runtime/interpreter/mterp/x86/op_monitor_exit.S
index 090480056a..2d17d5e7c5 100644
--- a/runtime/interpreter/mterp/x86/op_monitor_exit.S
+++ b/runtime/interpreter/mterp/x86/op_monitor_exit.S
@@ -12,7 +12,7 @@
movl rSELF, %eax
movl %eax, OUT_ARG1(%esp)
call SYMBOL(artUnlockObjectFromCode) # (object, self)
- REFRESH_IBASE
- testl %eax, %eax
+ RESTORE_IBASE
+ testb %al, %al
jnz MterpException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 1
diff --git a/runtime/interpreter/mterp/x86/op_mul_int_2addr.S b/runtime/interpreter/mterp/x86/op_mul_int_2addr.S
index f92a28e46a..da699ae19b 100644
--- a/runtime/interpreter/mterp/x86/op_mul_int_2addr.S
+++ b/runtime/interpreter/mterp/x86/op_mul_int_2addr.S
@@ -3,8 +3,8 @@
sarl $$4, rINST # rINST <- B
GET_VREG %eax, rINST # eax <- vB
andb $$0xf, %cl # ecx <- A
- mov rIBASE, LOCAL0(%esp)
+ movl rIBASE, rINST
imull (rFP,%ecx,4), %eax # trashes rIBASE/edx
- mov LOCAL0(%esp), rIBASE
+ movl rINST, rIBASE
SET_VREG %eax, %ecx
ADVANCE_PC_FETCH_AND_GOTO_NEXT 1
diff --git a/runtime/interpreter/mterp/x86/op_mul_int_lit16.S b/runtime/interpreter/mterp/x86/op_mul_int_lit16.S
index 31ab613805..056f491bef 100644
--- a/runtime/interpreter/mterp/x86/op_mul_int_lit16.S
+++ b/runtime/interpreter/mterp/x86/op_mul_int_lit16.S
@@ -3,10 +3,10 @@
movzbl rINSTbl, %eax # eax <- 000000BA
sarl $$4, %eax # eax <- B
GET_VREG %eax, %eax # eax <- vB
- movswl 2(rPC), %ecx # ecx <- ssssCCCC
+ movl rIBASE, %ecx
+ movswl 2(rPC), rIBASE # rIBASE <- ssssCCCC
andb $$0xf, rINSTbl # rINST <- A
- mov rIBASE, LOCAL0(%esp)
- imull %ecx, %eax # trashes rIBASE/edx
- mov LOCAL0(%esp), rIBASE
+ imull rIBASE, %eax # trashes rIBASE/edx
+ movl %ecx, rIBASE
SET_VREG %eax, rINST
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_mul_int_lit8.S b/runtime/interpreter/mterp/x86/op_mul_int_lit8.S
index 6637aa7384..59b384426c 100644
--- a/runtime/interpreter/mterp/x86/op_mul_int_lit8.S
+++ b/runtime/interpreter/mterp/x86/op_mul_int_lit8.S
@@ -1,9 +1,9 @@
/* mul/lit8 vAA, vBB, #+CC */
movzbl 2(rPC), %eax # eax <- BB
- movsbl 3(rPC), %ecx # ecx <- ssssssCC
+ movl rIBASE, %ecx
GET_VREG %eax, %eax # eax <- rBB
- mov rIBASE, LOCAL0(%esp)
- imull %ecx, %eax # trashes rIBASE/edx
- mov LOCAL0(%esp), rIBASE
+ movsbl 3(rPC), rIBASE # rIBASE <- ssssssCC
+ imull rIBASE, %eax # trashes rIBASE/edx
+ movl %ecx, rIBASE
SET_VREG %eax, rINST
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_new_array.S b/runtime/interpreter/mterp/x86/op_new_array.S
index 24904774e1..16226e989c 100644
--- a/runtime/interpreter/mterp/x86/op_new_array.S
+++ b/runtime/interpreter/mterp/x86/op_new_array.S
@@ -15,7 +15,7 @@
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp)
call SYMBOL(MterpNewArray)
- REFRESH_IBASE
- testl %eax, %eax # 0 means an exception is thrown
+ RESTORE_IBASE
+ testb %al, %al # 0 means an exception is thrown
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_new_instance.S b/runtime/interpreter/mterp/x86/op_new_instance.S
index 712a5ebe96..f976accb1e 100644
--- a/runtime/interpreter/mterp/x86/op_new_instance.S
+++ b/runtime/interpreter/mterp/x86/op_new_instance.S
@@ -10,7 +10,7 @@
REFRESH_INST ${opnum}
movl rINST, OUT_ARG2(%esp)
call SYMBOL(MterpNewInstance)
- REFRESH_IBASE
- testl %eax, %eax # 0 means an exception is thrown
+ RESTORE_IBASE
+ testb %al, %al # 0 means an exception is thrown
jz MterpPossibleException
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_sget.S b/runtime/interpreter/mterp/x86/op_sget.S
index ec964581af..0e9a3d82da 100644
--- a/runtime/interpreter/mterp/x86/op_sget.S
+++ b/runtime/interpreter/mterp/x86/op_sget.S
@@ -15,7 +15,7 @@
movl %ecx, OUT_ARG2(%esp) # self
call SYMBOL($helper)
movl rSELF, %ecx
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
cmpl $$0, THREAD_EXCEPTION_OFFSET(%ecx)
jnz MterpException
.if $is_object
diff --git a/runtime/interpreter/mterp/x86/op_sget_wide.S b/runtime/interpreter/mterp/x86/op_sget_wide.S
index 833f266dd5..2b603034c6 100644
--- a/runtime/interpreter/mterp/x86/op_sget_wide.S
+++ b/runtime/interpreter/mterp/x86/op_sget_wide.S
@@ -17,5 +17,5 @@
jnz MterpException
SET_VREG %eax, rINST # fp[A]<- low part
SET_VREG_HIGH %edx, rINST # fp[A+1]<- high part
- REFRESH_IBASE_FROM_SELF %ecx
+ RESTORE_IBASE_FROM_SELF %ecx
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_sput.S b/runtime/interpreter/mterp/x86/op_sput.S
index a199281088..0b5de0953d 100644
--- a/runtime/interpreter/mterp/x86/op_sput.S
+++ b/runtime/interpreter/mterp/x86/op_sput.S
@@ -16,7 +16,7 @@
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL($helper)
- testl %eax, %eax
+ testb %al, %al
jnz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_sput_object.S b/runtime/interpreter/mterp/x86/op_sput_object.S
index e3e57fc87b..0db517723b 100644
--- a/runtime/interpreter/mterp/x86/op_sput_object.S
+++ b/runtime/interpreter/mterp/x86/op_sput_object.S
@@ -7,7 +7,7 @@
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp)
call SYMBOL(MterpSputObject)
- testl %eax, %eax
+ testb %al, %al
jz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
diff --git a/runtime/interpreter/mterp/x86/op_sput_wide.S b/runtime/interpreter/mterp/x86/op_sput_wide.S
index 7544838d52..19cff0db5a 100644
--- a/runtime/interpreter/mterp/x86/op_sput_wide.S
+++ b/runtime/interpreter/mterp/x86/op_sput_wide.S
@@ -14,7 +14,7 @@
movl rSELF, %ecx
movl %ecx, OUT_ARG3(%esp) # self
call SYMBOL(artSet64IndirectStaticFromMterp)
- testl %eax, %eax
+ testb %al, %al
jnz MterpException
- REFRESH_IBASE
+ RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 2