summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/interpreter/mterp/out/mterp_x86.S90
-rw-r--r--runtime/interpreter/mterp/x86/footer.S6
-rw-r--r--runtime/interpreter/mterp/x86/invoke.S7
3 files changed, 88 insertions, 15 deletions
diff --git a/runtime/interpreter/mterp/out/mterp_x86.S b/runtime/interpreter/mterp/out/mterp_x86.S
index b05360b6ae..567550f41f 100644
--- a/runtime/interpreter/mterp/out/mterp_x86.S
+++ b/runtime/interpreter/mterp/out/mterp_x86.S
@@ -2989,8 +2989,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeVirtual)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/*
* Handle a virtual method call.
@@ -3022,8 +3027,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeSuper)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/*
* Handle a "super" method call.
@@ -3055,8 +3065,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeDirect)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/* ------------------------------ */
@@ -3081,8 +3096,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeStatic)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
@@ -3108,8 +3128,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeInterface)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/*
* Handle an interface method call.
@@ -3155,8 +3180,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeVirtualRange)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/* ------------------------------ */
@@ -3181,8 +3211,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeSuperRange)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/* ------------------------------ */
@@ -3207,8 +3242,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeDirectRange)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/* ------------------------------ */
@@ -3233,8 +3273,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeStaticRange)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/* ------------------------------ */
@@ -3259,8 +3304,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeInterfaceRange)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/* ------------------------------ */
@@ -6002,8 +6052,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeVirtualQuick)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/* ------------------------------ */
@@ -6028,8 +6083,13 @@ SYMBOL(artMterpAsmInstructionStart) = .L_op_nop
call SYMBOL(MterpInvokeVirtualQuickRange)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT
/* ------------------------------ */
@@ -12851,13 +12911,17 @@ MterpException:
call SYMBOL(MterpHandleException)
testb %al, %al
jz MterpExceptionReturn
- REFRESH_IBASE
movl OFF_FP_CODE_ITEM(rFP), %eax
movl OFF_FP_DEX_PC(rFP), %ecx
lea CODEITEM_INSNS_OFFSET(%eax), rPC
lea (rPC, %ecx, 2), rPC
movl rPC, OFF_FP_DEX_PC_PTR(rFP)
+ /* Do we need to switch interpreters? */
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
/* resume execution at catch block */
+ REFRESH_IBASE
FETCH_INST
GOTO_NEXT
/* NOTE: no fallthrough */
diff --git a/runtime/interpreter/mterp/x86/footer.S b/runtime/interpreter/mterp/x86/footer.S
index c67491e577..64d72d7709 100644
--- a/runtime/interpreter/mterp/x86/footer.S
+++ b/runtime/interpreter/mterp/x86/footer.S
@@ -115,13 +115,17 @@ MterpException:
call SYMBOL(MterpHandleException)
testb %al, %al
jz MterpExceptionReturn
- REFRESH_IBASE
movl OFF_FP_CODE_ITEM(rFP), %eax
movl OFF_FP_DEX_PC(rFP), %ecx
lea CODEITEM_INSNS_OFFSET(%eax), rPC
lea (rPC, %ecx, 2), rPC
movl rPC, OFF_FP_DEX_PC_PTR(rFP)
+ /* Do we need to switch interpreters? */
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
/* resume execution at catch block */
+ REFRESH_IBASE
FETCH_INST
GOTO_NEXT
/* NOTE: no fallthrough */
diff --git a/runtime/interpreter/mterp/x86/invoke.S b/runtime/interpreter/mterp/x86/invoke.S
index bbd88cf40b..c23053becb 100644
--- a/runtime/interpreter/mterp/x86/invoke.S
+++ b/runtime/interpreter/mterp/x86/invoke.S
@@ -16,5 +16,10 @@
call SYMBOL($helper)
testb %al, %al
jz MterpException
+ ADVANCE_PC 3
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
- ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
+ FETCH_INST
+ GOTO_NEXT