call SYMBOL(MterpInvokeVirtual)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeSuper)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeDirect)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeStatic)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeInterface)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeVirtualRange)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeSuperRange)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeDirectRange)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeStaticRange)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeInterfaceRange)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeVirtualQuick)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
call SYMBOL(MterpInvokeVirtualQuickRange)
testb %al, %al
jz MterpException
+ call SYMBOL(MterpShouldSwitchInterpreters)
+ testb %al, %al
+ jnz MterpFallback
RESTORE_IBASE
ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
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 */
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 */