From: Serguei Katkov Date: Wed, 17 Feb 2016 05:30:23 +0000 (+0600) Subject: x86 ART FI clean-up X-Git-Tag: android-x86-7.1-r1~340^2~4^2^2~7^2~2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=ff8579efb24457bb2f2b451a4e735b8bc4d0200c;p=android-x86%2Fart.git x86 ART FI clean-up The following is changed: - Treat C-bool as 1 byte value - Remove redundant spills in imul handlers - Separate REFRESH_IBASE and RESTORE_IBASE Change-Id: I84de2522cb3898300a5f43781b4f151be39875b8 Signed-off-by: Serguei Katkov --- diff --git a/runtime/interpreter/mterp/out/mterp_x86.S b/runtime/interpreter/mterp/out/mterp_x86.S index 96229ceba..d365a4f98 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 bb5b319c4..e87ba4554 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 385e78499..a1532fa71 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 0977b901e..3fbbbf955 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 054fbfdf6..bbd88cf40 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 cbfb50cb0..35ec05385 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 9cfc2213d..980b26a40 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 ae2ff9ea2..d090aa378 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 343e110f7..60be78921 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 bbac69ced..ff93b232d 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 4236807dd..e7f952a30 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 004aed987..585528490 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 a2bac29bc..35b2fe8df 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 99326105c..e3304ba6a 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 fe166948c..b1551a017 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 92126b447..a5d7e6937 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 fd5bf44c7..e6fe5b2ce 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 13cfe5ca6..c847e2dc8 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 f63075c50..e0136970b 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 d54b1b772..cb779295b 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 573e14d66..122eecf43 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 9e885bde9..b35c68488 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 090480056..2d17d5e7c 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 f92a28e46..da699ae19 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 31ab61380..056f491be 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 6637aa738..59b384426 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 24904774e..16226e989 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 712a5ebe9..f976accb1 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 ec964581a..0e9a3d82d 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 833f266dd..2b603034c 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 a19928108..0b5de0953 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 e3e57fc87..0db517723 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 7544838d5..19cff0db5 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