diff options
| -rw-r--r-- | runtime/interpreter/mterp/out/mterp_x86.S | 90 | ||||
| -rw-r--r-- | runtime/interpreter/mterp/x86/footer.S | 6 | ||||
| -rw-r--r-- | runtime/interpreter/mterp/x86/invoke.S | 7 |
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 |