From 95717f0010e7a9445450f4d39babfaf3a83e29b5 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Fri, 5 Feb 2016 09:24:02 +0000 Subject: [PATCH] Revert "ART: Enable Jit Profiling in Mterp for arm/arm64" Not super happy to revert this, but unfortunately, too many problems when testing: arm: tests timeout when running run-tests with the interpreter. arm64 failures: test-art-target-run-test-ndebug-prebuild-jit-relocate-ntrace-cms-checkjni-image-npictest-ndebuggable-003-omnibus-opcodes64 test-art-target-run-test-ndebug-prebuild-jit-relocate-ntrace-cms-checkjni-image-npictest-ndebuggable-005-annotations64 test-art-target-run-test-ndebug-prebuild-jit-relocate-ntrace-cms-checkjni-image-npictest-ndebuggable-064-field-access64 test-art-target-run-test-ndebug-prebuild-jit-relocate-ntrace-cms-checkjni-image-npictest-ndebuggable-406-fields64 org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testBreakpoint_BeforeException org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testFieldAccess org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testFieldModification org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testMethodExit org.apache.harmony.jpda.tests.jdwp.Events.EventWithExceptionTest#testMethodExitWithReturnValue org.apache.harmony.jpda.tests.jdwp.Events.FieldAccessTest#testFieldAccessEvent org.apache.harmony.jpda.tests.jdwp.Events.FieldModification002Test#testFieldModifyEvent org.apache.harmony.jpda.tests.jdwp.Events.FieldModificationTest#testFieldModifyEvent org.apache.harmony.jpda.tests.jdwp.Events.MethodExitWithReturnValueTest#testMethodExitWithReturnValueException This reverts commit a0a16105423459287497a98129dcba2828ccd7f0. Change-Id: I8ff0512265ed0a422be67e7410998ad02639509c --- runtime/instrumentation.h | 8 - runtime/interpreter/interpreter.cc | 10 +- runtime/interpreter/mterp/arm/bincmp.S | 14 +- runtime/interpreter/mterp/arm/footer.S | 12 - runtime/interpreter/mterp/arm/header.S | 2 - runtime/interpreter/mterp/arm/op_goto.S | 14 +- runtime/interpreter/mterp/arm/op_goto_16.S | 12 +- runtime/interpreter/mterp/arm/op_goto_32.S | 12 +- runtime/interpreter/mterp/arm/op_packed_switch.S | 11 +- runtime/interpreter/mterp/arm/zcmp.S | 14 +- runtime/interpreter/mterp/arm64/bincmp.S | 13 +- runtime/interpreter/mterp/arm64/footer.S | 13 -- runtime/interpreter/mterp/arm64/header.S | 2 - runtime/interpreter/mterp/arm64/op_goto.S | 13 +- runtime/interpreter/mterp/arm64/op_goto_16.S | 11 +- runtime/interpreter/mterp/arm64/op_goto_32.S | 11 +- runtime/interpreter/mterp/arm64/op_packed_switch.S | 10 +- runtime/interpreter/mterp/arm64/zcmp.S | 13 +- runtime/interpreter/mterp/mterp.cc | 17 -- runtime/interpreter/mterp/out/mterp_arm.S | 242 ++++----------------- runtime/interpreter/mterp/out/mterp_arm64.S | 226 ++++--------------- 21 files changed, 120 insertions(+), 560 deletions(-) diff --git a/runtime/instrumentation.h b/runtime/instrumentation.h index e3cbf5387..56aeefc2f 100644 --- a/runtime/instrumentation.h +++ b/runtime/instrumentation.h @@ -290,14 +290,6 @@ class Instrumentation { bool IsActive() const SHARED_REQUIRES(Locks::mutator_lock_) { return have_dex_pc_listeners_ || have_method_entry_listeners_ || have_method_exit_listeners_ || have_field_read_listeners_ || have_field_write_listeners_ || - have_exception_caught_listeners_ || have_method_unwind_listeners_ || - have_branch_listeners_ || have_invoke_virtual_or_interface_listeners_; - } - - // Any instrumentation *other* than what is needed for Jit profiling active? - bool NonJitProfilingActive() const SHARED_REQUIRES(Locks::mutator_lock_) { - return have_dex_pc_listeners_ || have_method_exit_listeners_ || - have_field_read_listeners_ || have_field_write_listeners_ || have_exception_caught_listeners_ || have_method_unwind_listeners_; } diff --git a/runtime/interpreter/interpreter.cc b/runtime/interpreter/interpreter.cc index 903c20036..3eff7fc69 100644 --- a/runtime/interpreter/interpreter.cc +++ b/runtime/interpreter/interpreter.cc @@ -322,14 +322,8 @@ static inline JValue Execute(Thread* self, const DexFile::CodeItem* code_item, const instrumentation::Instrumentation* const instrumentation = Runtime::Current()->GetInstrumentation(); while (true) { - // Mterp does not support all instrumentation. - bool unhandled_instrumentation; - if ((kRuntimeISA == kArm64) || (kRuntimeISA == kArm)) { - unhandled_instrumentation = instrumentation->NonJitProfilingActive(); - } else { - unhandled_instrumentation = instrumentation->IsActive(); - } - if (unhandled_instrumentation || !Runtime::Current()->IsStarted()) { + if (instrumentation->IsActive() || !Runtime::Current()->IsStarted()) { + // TODO: allow JIT profiling instrumentation. Now, just punt on all instrumentation. #if !defined(__clang__) return ExecuteGotoImpl(self, code_item, shadow_frame, result_register); #else diff --git a/runtime/interpreter/mterp/arm/bincmp.S b/runtime/interpreter/mterp/arm/bincmp.S index dae3b57a8..474bc3c27 100644 --- a/runtime/interpreter/mterp/arm/bincmp.S +++ b/runtime/interpreter/mterp/arm/bincmp.S @@ -25,18 +25,10 @@ GET_VREG r3, r1 @ r3<- vB GET_VREG r2, r0 @ r2<- vA ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units cmp r2, r3 @ compare (vA, vB) - mov${revcmp} rINST, #2 @ rINST<- BYTE branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r2, rINST, rINST @ convert to bytes, check sign + mov${revcmp} r1, #2 @ r1<- BYTE branch dist for not-taken + adds r2, r1, r1 @ convert to bytes, check sign FETCH_ADVANCE_INST_RB r2 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST diff --git a/runtime/interpreter/mterp/arm/footer.S b/runtime/interpreter/mterp/arm/footer.S index a44484322..1dba856ec 100644 --- a/runtime/interpreter/mterp/arm/footer.S +++ b/runtime/interpreter/mterp/arm/footer.S @@ -124,18 +124,6 @@ MterpCheckSuspendAndContinue: GOTO_OPCODE ip @ jump to next instruction /* - * On-stack replacement pending. - * Branch offset in rINST on entry. - */ -MterpOnStackReplacement: -#if MTERP_LOGGING - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpLogOSR -#endif - b MterpFallback @ Let the reference interpreter deal with it. -/* * Bail out to reference interpreter. */ MterpFallback: diff --git a/runtime/interpreter/mterp/arm/header.S b/runtime/interpreter/mterp/arm/header.S index b67bd221f..14319d953 100644 --- a/runtime/interpreter/mterp/arm/header.S +++ b/runtime/interpreter/mterp/arm/header.S @@ -85,8 +85,6 @@ unspecified registers or condition codes. */ #include "asm_support.h" -#define MTERP_PROFILE_BRANCHES 1 - /* During bringup, we'll use the shadow frame model instead of rFP */ /* single-purpose registers, given names for clarity */ #define rPC r4 diff --git a/runtime/interpreter/mterp/arm/op_goto.S b/runtime/interpreter/mterp/arm/op_goto.S index 0f0243825..9b3632aba 100644 --- a/runtime/interpreter/mterp/arm/op_goto.S +++ b/runtime/interpreter/mterp/arm/op_goto.S @@ -16,18 +16,10 @@ GET_INST_OPCODE ip @ extract opcode from rINST GOTO_OPCODE ip @ jump to next instruction #else - mov r0, rINST, lsl #16 @ r0<- AAxx0000 - movs rINST, r0, asr #24 @ rINST<- ssssssAA (sign-extended) -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - add r2, rINST, rINST @ r2<- byte offset, set flags + mov r0, rINST, lsl #16 @ r0<- AAxx0000 + movs r1, r0, asr #24 @ r1<- ssssssAA (sign-extended) + add r2, r1, r1 @ r2<- byte offset, set flags FETCH_ADVANCE_INST_RB r2 @ update rPC, load rINST @ If backwards branch refresh rIBASE bmi MterpCheckSuspendAndContinue diff --git a/runtime/interpreter/mterp/arm/op_goto_16.S b/runtime/interpreter/mterp/arm/op_goto_16.S index 8a9acf017..2231acdb9 100644 --- a/runtime/interpreter/mterp/arm/op_goto_16.S +++ b/runtime/interpreter/mterp/arm/op_goto_16.S @@ -13,17 +13,9 @@ GET_INST_OPCODE ip @ extract opcode from rINST GOTO_OPCODE ip @ jump to next instruction #else - FETCH_S rINST, 1 @ rINST<- ssssAAAA (sign-extended) -#if MTERP_PROFILE_BRANCHES - mov r0, rINST - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpOnStackReplacement @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif + FETCH_S r0, 1 @ r0<- ssssAAAA (sign-extended) ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - adds r1, rINST, rINST @ r1<- byte offset, flags set + adds r1, r0, r0 @ r1<- byte offset, flags set FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST diff --git a/runtime/interpreter/mterp/arm/op_goto_32.S b/runtime/interpreter/mterp/arm/op_goto_32.S index 51a6f0632..6b72ff5ce 100644 --- a/runtime/interpreter/mterp/arm/op_goto_32.S +++ b/runtime/interpreter/mterp/arm/op_goto_32.S @@ -22,17 +22,9 @@ #else FETCH r0, 1 @ r0<- aaaa (lo) FETCH r1, 2 @ r1<- AAAA (hi) - orr rINST, r0, r1, lsl #16 @ rINST<- AAAAaaaa -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpOnStackReplacement @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - adds r1, rINST, rINST @ r1<- byte offset + orr r0, r0, r1, lsl #16 @ r0<- AAAAaaaa + adds r1, r0, r0 @ r1<- byte offset FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST ble MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST diff --git a/runtime/interpreter/mterp/arm/op_packed_switch.S b/runtime/interpreter/mterp/arm/op_packed_switch.S index 109b245cb..1e3370ea6 100644 --- a/runtime/interpreter/mterp/arm/op_packed_switch.S +++ b/runtime/interpreter/mterp/arm/op_packed_switch.S @@ -30,17 +30,8 @@ GET_VREG r1, r3 @ r1<- vAA add r0, rPC, r0, lsl #1 @ r0<- PC + BBBBbbbb*2 bl $func @ r0<- code-unit branch offset - mov rINST, r0 -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - adds r1, rINST, rINST @ r1<- byte offset; clear V + adds r1, r0, r0 @ r1<- byte offset; clear V FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST ble MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST diff --git a/runtime/interpreter/mterp/arm/zcmp.S b/runtime/interpreter/mterp/arm/zcmp.S index b2cc18ba2..6e9ef5510 100644 --- a/runtime/interpreter/mterp/arm/zcmp.S +++ b/runtime/interpreter/mterp/arm/zcmp.S @@ -20,19 +20,11 @@ #else mov r0, rINST, lsr #8 @ r0<- AA GET_VREG r2, r0 @ r2<- vAA - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] cmp r2, #0 @ compare (vA, 0) - mov${revcmp} rINST, #2 @ rINST<- inst branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r1, rINST, rINST @ convert to bytes & set flags + mov${revcmp} r1, #2 @ r1<- inst branch dist for not-taken + adds r1, r1, r1 @ convert to bytes & set flags FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST diff --git a/runtime/interpreter/mterp/arm64/bincmp.S b/runtime/interpreter/mterp/arm64/bincmp.S index 53d4dfaf9..ecab2ceba 100644 --- a/runtime/interpreter/mterp/arm64/bincmp.S +++ b/runtime/interpreter/mterp/arm64/bincmp.S @@ -25,18 +25,11 @@ GET_VREG w3, w1 // w3<- vB GET_VREG w2, w0 // w2<- vA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Offset if branch not taken cmp w2, w3 // compare (vA, vB) - csel wINST, w1, w0, ${condition} // Branch if true, stashing result in callee save reg. -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 // Sign extend branch offset - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes, check sign + csel w1, w1, w0, ${condition} // Branch if true + adds w2, w1, w1 // convert to bytes, check sign FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST diff --git a/runtime/interpreter/mterp/arm64/footer.S b/runtime/interpreter/mterp/arm64/footer.S index d237c5104..b360539a8 100644 --- a/runtime/interpreter/mterp/arm64/footer.S +++ b/runtime/interpreter/mterp/arm64/footer.S @@ -124,19 +124,6 @@ check1: GOTO_OPCODE ip // jump to next instruction /* - * On-stack replacement pending. - * Branch offset in wINST on entry. - */ -MterpOnStackReplacement: -#if MTERP_LOGGING - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpLogOSR -#endif - b MterpFallback // Let the reference interpreter deal with it. - -/* * Bail out to reference interpreter. */ MterpFallback: diff --git a/runtime/interpreter/mterp/arm64/header.S b/runtime/interpreter/mterp/arm64/header.S index 622abc83e..351a6075c 100644 --- a/runtime/interpreter/mterp/arm64/header.S +++ b/runtime/interpreter/mterp/arm64/header.S @@ -87,8 +87,6 @@ codes. */ #include "asm_support.h" -#define MTERP_PROFILE_BRANCHES 1 - /* During bringup, we'll use the shadow frame model instead of xFP */ /* single-purpose registers, given names for clarity */ #define xPC x20 diff --git a/runtime/interpreter/mterp/arm64/op_goto.S b/runtime/interpreter/mterp/arm64/op_goto.S index 803bade97..db98a45fa 100644 --- a/runtime/interpreter/mterp/arm64/op_goto.S +++ b/runtime/interpreter/mterp/arm64/op_goto.S @@ -16,17 +16,10 @@ GET_INST_OPCODE ip // extract opcode from wINST GOTO_OPCODE ip // jump to next instruction #else - lsl w0, wINST, #16 // w0<- AAxx0000 - asr wINST, w0, #24 // wINST<- ssssssAA (sign-extended) -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in wINST -#endif ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] // Preload flags for MterpCheckSuspendAndContinue - adds w1, wINST, wINST // Convert dalvik offset to byte offset, setting flags + lsl w0, wINST, #16 // w0<- AAxx0000 + asr w0, w0, #24 // w0<- ssssssAA (sign-extended) + adds w1, w0, w0 // Convert dalvik offset to byte offset, setting flags FETCH_ADVANCE_INST_RB w1 // load wINST and advance xPC // If backwards branch refresh rIBASE b.mi MterpCheckSuspendAndContinue diff --git a/runtime/interpreter/mterp/arm64/op_goto_16.S b/runtime/interpreter/mterp/arm64/op_goto_16.S index ad26b366c..ff66a23c4 100644 --- a/runtime/interpreter/mterp/arm64/op_goto_16.S +++ b/runtime/interpreter/mterp/arm64/op_goto_16.S @@ -13,16 +13,9 @@ GET_INST_OPCODE ip // extract opcode from rINST GOTO_OPCODE ip // jump to next instruction #else - FETCH_S wINST, 1 // wINST<- ssssAAAA (sign-extended) -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif + FETCH_S w0, 1 // w0<- ssssAAAA (sign-extended) ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w1, wINST, wINST // w1<- byte offset, flags set + adds w1, w0, w0 // w1<- byte offset, flags set FETCH_ADVANCE_INST_RB w1 // update rPC, load rINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from rINST diff --git a/runtime/interpreter/mterp/arm64/op_goto_32.S b/runtime/interpreter/mterp/arm64/op_goto_32.S index 3f040e66f..8a6980ece 100644 --- a/runtime/interpreter/mterp/arm64/op_goto_32.S +++ b/runtime/interpreter/mterp/arm64/op_goto_32.S @@ -22,16 +22,9 @@ #else FETCH w0, 1 // w0<- aaaa (lo) FETCH w1, 2 // w1<- AAAA (hi) - orr wINST, w0, w1, lsl #16 // wINST<- AAAAaaaa -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w1, wINST, wINST // w1<- byte offset + orr w0, w0, w1, lsl #16 // w0<- AAAAaaaa + adds w1, w0, w0 // w1<- byte offset FETCH_ADVANCE_INST_RB w1 // update rPC, load xINST b.le MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from xINST diff --git a/runtime/interpreter/mterp/arm64/op_packed_switch.S b/runtime/interpreter/mterp/arm64/op_packed_switch.S index 39ab8bf6d..f087d23c0 100644 --- a/runtime/interpreter/mterp/arm64/op_packed_switch.S +++ b/runtime/interpreter/mterp/arm64/op_packed_switch.S @@ -30,16 +30,8 @@ GET_VREG w1, w3 // w1<- vAA add x0, xPC, w0, lsl #1 // w0<- PC + BBBBbbbb*2 bl $func // w0<- code-unit branch offset - sbfm xINST, x0, 0, 31 -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - mov x2, xINST - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement -#endif ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w1, wINST, wINST // w1<- byte offset; clear V + adds w1, w0, w0 // w1<- byte offset; clear V FETCH_ADVANCE_INST_RB w1 // update rPC, load wINST b.le MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST diff --git a/runtime/interpreter/mterp/arm64/zcmp.S b/runtime/interpreter/mterp/arm64/zcmp.S index e28668b57..d4856d266 100644 --- a/runtime/interpreter/mterp/arm64/zcmp.S +++ b/runtime/interpreter/mterp/arm64/zcmp.S @@ -21,18 +21,11 @@ lsr w0, wINST, #8 // w0<- AA GET_VREG w2, w0 // w2<- vAA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Branch offset if not taken cmp w2, #0 // compare (vA, 0) - csel wINST, w1, w0, ${condition} // Branch if true, stashing result in callee save reg -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in wINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes & set flags + csel w1, w1, w0, ${condition} // Branch if true + adds w2, w1, w1 // convert to bytes & set flags FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST diff --git a/runtime/interpreter/mterp/mterp.cc b/runtime/interpreter/mterp/mterp.cc index 3e2a2220a..0afd2765d 100644 --- a/runtime/interpreter/mterp/mterp.cc +++ b/runtime/interpreter/mterp/mterp.cc @@ -488,14 +488,6 @@ extern "C" void MterpLogFallback(Thread* self, ShadowFrame* shadow_frame) << self->IsExceptionPending(); } -extern "C" void MterpLogOSR(Thread* self, ShadowFrame* shadow_frame, int32_t offset) - SHARED_REQUIRES(Locks::mutator_lock_) { - UNUSED(self); - const Instruction* inst = Instruction::At(shadow_frame->GetDexPCPtr()); - uint16_t inst_data = inst->Fetch16(0); - LOG(INFO) << "OSR: " << inst->Opcode(inst_data) << ", offset = " << offset; -} - extern "C" void MterpLogSuspendFallback(Thread* self, ShadowFrame* shadow_frame, uint32_t flags) SHARED_REQUIRES(Locks::mutator_lock_) { UNUSED(self); @@ -626,14 +618,5 @@ extern "C" mirror::Object* artIGetObjectFromMterp(mirror::Object* obj, uint32_t return obj->GetFieldObject(MemberOffset(field_offset)); } -extern "C" bool MterpProfileBranch(Thread* self, ShadowFrame* shadow_frame, int32_t offset) - SHARED_REQUIRES(Locks::mutator_lock_) { - if (offset <= 0) { - const auto* const instrumentation = Runtime::Current()->GetInstrumentation(); - instrumentation->Branch(self, shadow_frame->GetMethod(), shadow_frame->GetDexPC(), offset); - } - return false; // TDB - return true if need to trigger on-stack replacement. -} - } // namespace interpreter } // namespace art diff --git a/runtime/interpreter/mterp/out/mterp_arm.S b/runtime/interpreter/mterp/out/mterp_arm.S index 9091b6f5b..78c784b77 100644 --- a/runtime/interpreter/mterp/out/mterp_arm.S +++ b/runtime/interpreter/mterp/out/mterp_arm.S @@ -92,8 +92,6 @@ unspecified registers or condition codes. */ #include "asm_support.h" -#define MTERP_PROFILE_BRANCHES 1 - /* During bringup, we'll use the shadow frame model instead of rFP */ /* single-purpose registers, given names for clarity */ #define rPC r4 @@ -1102,18 +1100,10 @@ artMterpAsmInstructionStart = .L_op_nop GET_INST_OPCODE ip @ extract opcode from rINST GOTO_OPCODE ip @ jump to next instruction #else - mov r0, rINST, lsl #16 @ r0<- AAxx0000 - movs rINST, r0, asr #24 @ rINST<- ssssssAA (sign-extended) -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - add r2, rINST, rINST @ r2<- byte offset, set flags + mov r0, rINST, lsl #16 @ r0<- AAxx0000 + movs r1, r0, asr #24 @ r1<- ssssssAA (sign-extended) + add r2, r1, r1 @ r2<- byte offset, set flags FETCH_ADVANCE_INST_RB r2 @ update rPC, load rINST @ If backwards branch refresh rIBASE bmi MterpCheckSuspendAndContinue @@ -1140,17 +1130,9 @@ artMterpAsmInstructionStart = .L_op_nop GET_INST_OPCODE ip @ extract opcode from rINST GOTO_OPCODE ip @ jump to next instruction #else - FETCH_S rINST, 1 @ rINST<- ssssAAAA (sign-extended) -#if MTERP_PROFILE_BRANCHES - mov r0, rINST - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpOnStackReplacement @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif + FETCH_S r0, 1 @ r0<- ssssAAAA (sign-extended) ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - adds r1, rINST, rINST @ r1<- byte offset, flags set + adds r1, r0, r0 @ r1<- byte offset, flags set FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1185,17 +1167,9 @@ artMterpAsmInstructionStart = .L_op_nop #else FETCH r0, 1 @ r0<- aaaa (lo) FETCH r1, 2 @ r1<- AAAA (hi) - orr rINST, r0, r1, lsl #16 @ rINST<- AAAAaaaa -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpOnStackReplacement @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - adds r1, rINST, rINST @ r1<- byte offset + orr r0, r0, r1, lsl #16 @ r0<- AAAAaaaa + adds r1, r0, r0 @ r1<- byte offset FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST ble MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1237,17 +1211,8 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG r1, r3 @ r1<- vAA add r0, rPC, r0, lsl #1 @ r0<- PC + BBBBbbbb*2 bl MterpDoPackedSwitch @ r0<- code-unit branch offset - mov rINST, r0 -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - adds r1, rINST, rINST @ r1<- byte offset; clear V + adds r1, r0, r0 @ r1<- byte offset; clear V FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST ble MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1290,17 +1255,8 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG r1, r3 @ r1<- vAA add r0, rPC, r0, lsl #1 @ r0<- PC + BBBBbbbb*2 bl MterpDoSparseSwitch @ r0<- code-unit branch offset - mov rINST, r0 -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - adds r1, rINST, rINST @ r1<- byte offset; clear V + adds r1, r0, r0 @ r1<- byte offset; clear V FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST ble MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1537,18 +1493,10 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG r3, r1 @ r3<- vB GET_VREG r2, r0 @ r2<- vA ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units cmp r2, r3 @ compare (vA, vB) - movne rINST, #2 @ rINST<- BYTE branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r2, rINST, rINST @ convert to bytes, check sign + movne r1, #2 @ r1<- BYTE branch dist for not-taken + adds r2, r1, r1 @ convert to bytes, check sign FETCH_ADVANCE_INST_RB r2 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1588,18 +1536,10 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG r3, r1 @ r3<- vB GET_VREG r2, r0 @ r2<- vA ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units cmp r2, r3 @ compare (vA, vB) - moveq rINST, #2 @ rINST<- BYTE branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r2, rINST, rINST @ convert to bytes, check sign + moveq r1, #2 @ r1<- BYTE branch dist for not-taken + adds r2, r1, r1 @ convert to bytes, check sign FETCH_ADVANCE_INST_RB r2 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1639,18 +1579,10 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG r3, r1 @ r3<- vB GET_VREG r2, r0 @ r2<- vA ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units cmp r2, r3 @ compare (vA, vB) - movge rINST, #2 @ rINST<- BYTE branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r2, rINST, rINST @ convert to bytes, check sign + movge r1, #2 @ r1<- BYTE branch dist for not-taken + adds r2, r1, r1 @ convert to bytes, check sign FETCH_ADVANCE_INST_RB r2 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1690,18 +1622,10 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG r3, r1 @ r3<- vB GET_VREG r2, r0 @ r2<- vA ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units cmp r2, r3 @ compare (vA, vB) - movlt rINST, #2 @ rINST<- BYTE branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r2, rINST, rINST @ convert to bytes, check sign + movlt r1, #2 @ r1<- BYTE branch dist for not-taken + adds r2, r1, r1 @ convert to bytes, check sign FETCH_ADVANCE_INST_RB r2 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1741,18 +1665,10 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG r3, r1 @ r3<- vB GET_VREG r2, r0 @ r2<- vA ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units cmp r2, r3 @ compare (vA, vB) - movle rINST, #2 @ rINST<- BYTE branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r2, rINST, rINST @ convert to bytes, check sign + movle r1, #2 @ r1<- BYTE branch dist for not-taken + adds r2, r1, r1 @ convert to bytes, check sign FETCH_ADVANCE_INST_RB r2 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1792,18 +1708,10 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG r3, r1 @ r3<- vB GET_VREG r2, r0 @ r2<- vA ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units cmp r2, r3 @ compare (vA, vB) - movgt rINST, #2 @ rINST<- BYTE branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r2, rINST, rINST @ convert to bytes, check sign + movgt r1, #2 @ r1<- BYTE branch dist for not-taken + adds r2, r1, r1 @ convert to bytes, check sign FETCH_ADVANCE_INST_RB r2 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1838,19 +1746,11 @@ artMterpAsmInstructionStart = .L_op_nop #else mov r0, rINST, lsr #8 @ r0<- AA GET_VREG r2, r0 @ r2<- vAA - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] cmp r2, #0 @ compare (vA, 0) - movne rINST, #2 @ rINST<- inst branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r1, rINST, rINST @ convert to bytes & set flags + movne r1, #2 @ r1<- inst branch dist for not-taken + adds r1, r1, r1 @ convert to bytes & set flags FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1885,19 +1785,11 @@ artMterpAsmInstructionStart = .L_op_nop #else mov r0, rINST, lsr #8 @ r0<- AA GET_VREG r2, r0 @ r2<- vAA - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] cmp r2, #0 @ compare (vA, 0) - moveq rINST, #2 @ rINST<- inst branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r1, rINST, rINST @ convert to bytes & set flags + moveq r1, #2 @ r1<- inst branch dist for not-taken + adds r1, r1, r1 @ convert to bytes & set flags FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1932,19 +1824,11 @@ artMterpAsmInstructionStart = .L_op_nop #else mov r0, rINST, lsr #8 @ r0<- AA GET_VREG r2, r0 @ r2<- vAA - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] cmp r2, #0 @ compare (vA, 0) - movge rINST, #2 @ rINST<- inst branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r1, rINST, rINST @ convert to bytes & set flags + movge r1, #2 @ r1<- inst branch dist for not-taken + adds r1, r1, r1 @ convert to bytes & set flags FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -1979,19 +1863,11 @@ artMterpAsmInstructionStart = .L_op_nop #else mov r0, rINST, lsr #8 @ r0<- AA GET_VREG r2, r0 @ r2<- vAA - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] cmp r2, #0 @ compare (vA, 0) - movlt rINST, #2 @ rINST<- inst branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r1, rINST, rINST @ convert to bytes & set flags + movlt r1, #2 @ r1<- inst branch dist for not-taken + adds r1, r1, r1 @ convert to bytes & set flags FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -2026,19 +1902,11 @@ artMterpAsmInstructionStart = .L_op_nop #else mov r0, rINST, lsr #8 @ r0<- AA GET_VREG r2, r0 @ r2<- vAA - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] cmp r2, #0 @ compare (vA, 0) - movle rINST, #2 @ rINST<- inst branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r1, rINST, rINST @ convert to bytes & set flags + movle r1, #2 @ r1<- inst branch dist for not-taken + adds r1, r1, r1 @ convert to bytes & set flags FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -2073,19 +1941,11 @@ artMterpAsmInstructionStart = .L_op_nop #else mov r0, rINST, lsr #8 @ r0<- AA GET_VREG r2, r0 @ r2<- vAA - FETCH_S rINST, 1 @ rINST<- branch offset, in code units + FETCH_S r1, 1 @ r1<- branch offset, in code units ldr lr, [rSELF, #THREAD_FLAGS_OFFSET] cmp r2, #0 @ compare (vA, 0) - movgt rINST, #2 @ rINST<- inst branch dist for not-taken -#if MTERP_PROFILE_BRANCHES - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpProfileBranch @ (self, shadow_frame, offset) - cmp r0, #0 - bne MterpOnStackReplacement @ Note: offset must be in rINST -#endif - adds r1, rINST, rINST @ convert to bytes & set flags + movgt r1, #2 @ r1<- inst branch dist for not-taken + adds r1, r1, r1 @ convert to bytes & set flags FETCH_ADVANCE_INST_RB r1 @ update rPC, load rINST bmi MterpCheckSuspendAndContinue GET_INST_OPCODE ip @ extract opcode from rINST @@ -12317,18 +12177,6 @@ MterpCheckSuspendAndContinue: GOTO_OPCODE ip @ jump to next instruction /* - * On-stack replacement pending. - * Branch offset in rINST on entry. - */ -MterpOnStackReplacement: -#if MTERP_LOGGING - mov r0, rSELF - add r1, rFP, #OFF_FP_SHADOWFRAME - mov r2, rINST - bl MterpLogOSR -#endif - b MterpFallback @ Let the reference interpreter deal with it. -/* * Bail out to reference interpreter. */ MterpFallback: diff --git a/runtime/interpreter/mterp/out/mterp_arm64.S b/runtime/interpreter/mterp/out/mterp_arm64.S index 220041f4a..e9d28abf8 100644 --- a/runtime/interpreter/mterp/out/mterp_arm64.S +++ b/runtime/interpreter/mterp/out/mterp_arm64.S @@ -94,8 +94,6 @@ codes. */ #include "asm_support.h" -#define MTERP_PROFILE_BRANCHES 1 - /* During bringup, we'll use the shadow frame model instead of xFP */ /* single-purpose registers, given names for clarity */ #define xPC x20 @@ -1099,17 +1097,10 @@ artMterpAsmInstructionStart = .L_op_nop GET_INST_OPCODE ip // extract opcode from wINST GOTO_OPCODE ip // jump to next instruction #else - lsl w0, wINST, #16 // w0<- AAxx0000 - asr wINST, w0, #24 // wINST<- ssssssAA (sign-extended) -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in wINST -#endif ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] // Preload flags for MterpCheckSuspendAndContinue - adds w1, wINST, wINST // Convert dalvik offset to byte offset, setting flags + lsl w0, wINST, #16 // w0<- AAxx0000 + asr w0, w0, #24 // w0<- ssssssAA (sign-extended) + adds w1, w0, w0 // Convert dalvik offset to byte offset, setting flags FETCH_ADVANCE_INST_RB w1 // load wINST and advance xPC // If backwards branch refresh rIBASE b.mi MterpCheckSuspendAndContinue @@ -1136,16 +1127,9 @@ artMterpAsmInstructionStart = .L_op_nop GET_INST_OPCODE ip // extract opcode from rINST GOTO_OPCODE ip // jump to next instruction #else - FETCH_S wINST, 1 // wINST<- ssssAAAA (sign-extended) -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif + FETCH_S w0, 1 // w0<- ssssAAAA (sign-extended) ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w1, wINST, wINST // w1<- byte offset, flags set + adds w1, w0, w0 // w1<- byte offset, flags set FETCH_ADVANCE_INST_RB w1 // update rPC, load rINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from rINST @@ -1180,16 +1164,9 @@ artMterpAsmInstructionStart = .L_op_nop #else FETCH w0, 1 // w0<- aaaa (lo) FETCH w1, 2 // w1<- AAAA (hi) - orr wINST, w0, w1, lsl #16 // wINST<- AAAAaaaa -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w1, wINST, wINST // w1<- byte offset + orr w0, w0, w1, lsl #16 // w0<- AAAAaaaa + adds w1, w0, w0 // w1<- byte offset FETCH_ADVANCE_INST_RB w1 // update rPC, load xINST b.le MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from xINST @@ -1231,16 +1208,8 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG w1, w3 // w1<- vAA add x0, xPC, w0, lsl #1 // w0<- PC + BBBBbbbb*2 bl MterpDoPackedSwitch // w0<- code-unit branch offset - sbfm xINST, x0, 0, 31 -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - mov x2, xINST - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement -#endif ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w1, wINST, wINST // w1<- byte offset; clear V + adds w1, w0, w0 // w1<- byte offset; clear V FETCH_ADVANCE_INST_RB w1 // update rPC, load wINST b.le MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1283,16 +1252,8 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG w1, w3 // w1<- vAA add x0, xPC, w0, lsl #1 // w0<- PC + BBBBbbbb*2 bl MterpDoSparseSwitch // w0<- code-unit branch offset - sbfm xINST, x0, 0, 31 -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - mov x2, xINST - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement -#endif ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w1, wINST, wINST // w1<- byte offset; clear V + adds w1, w0, w0 // w1<- byte offset; clear V FETCH_ADVANCE_INST_RB w1 // update rPC, load wINST b.le MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1454,18 +1415,11 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG w3, w1 // w3<- vB GET_VREG w2, w0 // w2<- vA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Offset if branch not taken cmp w2, w3 // compare (vA, vB) - csel wINST, w1, w0, eq // Branch if true, stashing result in callee save reg. -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 // Sign extend branch offset - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes, check sign + csel w1, w1, w0, eq // Branch if true + adds w2, w1, w1 // convert to bytes, check sign FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1505,18 +1459,11 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG w3, w1 // w3<- vB GET_VREG w2, w0 // w2<- vA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Offset if branch not taken cmp w2, w3 // compare (vA, vB) - csel wINST, w1, w0, ne // Branch if true, stashing result in callee save reg. -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 // Sign extend branch offset - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes, check sign + csel w1, w1, w0, ne // Branch if true + adds w2, w1, w1 // convert to bytes, check sign FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1556,18 +1503,11 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG w3, w1 // w3<- vB GET_VREG w2, w0 // w2<- vA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Offset if branch not taken cmp w2, w3 // compare (vA, vB) - csel wINST, w1, w0, lt // Branch if true, stashing result in callee save reg. -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 // Sign extend branch offset - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes, check sign + csel w1, w1, w0, lt // Branch if true + adds w2, w1, w1 // convert to bytes, check sign FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1607,18 +1547,11 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG w3, w1 // w3<- vB GET_VREG w2, w0 // w2<- vA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Offset if branch not taken cmp w2, w3 // compare (vA, vB) - csel wINST, w1, w0, ge // Branch if true, stashing result in callee save reg. -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 // Sign extend branch offset - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes, check sign + csel w1, w1, w0, ge // Branch if true + adds w2, w1, w1 // convert to bytes, check sign FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1658,18 +1591,11 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG w3, w1 // w3<- vB GET_VREG w2, w0 // w2<- vA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Offset if branch not taken cmp w2, w3 // compare (vA, vB) - csel wINST, w1, w0, gt // Branch if true, stashing result in callee save reg. -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 // Sign extend branch offset - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes, check sign + csel w1, w1, w0, gt // Branch if true + adds w2, w1, w1 // convert to bytes, check sign FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1709,18 +1635,11 @@ artMterpAsmInstructionStart = .L_op_nop GET_VREG w3, w1 // w3<- vB GET_VREG w2, w0 // w2<- vA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Offset if branch not taken cmp w2, w3 // compare (vA, vB) - csel wINST, w1, w0, le // Branch if true, stashing result in callee save reg. -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 // Sign extend branch offset - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in xINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes, check sign + csel w1, w1, w0, le // Branch if true + adds w2, w1, w1 // convert to bytes, check sign FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1756,18 +1675,11 @@ artMterpAsmInstructionStart = .L_op_nop lsr w0, wINST, #8 // w0<- AA GET_VREG w2, w0 // w2<- vAA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Branch offset if not taken cmp w2, #0 // compare (vA, 0) - csel wINST, w1, w0, eq // Branch if true, stashing result in callee save reg -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in wINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes & set flags + csel w1, w1, w0, eq // Branch if true + adds w2, w1, w1 // convert to bytes & set flags FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1803,18 +1715,11 @@ artMterpAsmInstructionStart = .L_op_nop lsr w0, wINST, #8 // w0<- AA GET_VREG w2, w0 // w2<- vAA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Branch offset if not taken cmp w2, #0 // compare (vA, 0) - csel wINST, w1, w0, ne // Branch if true, stashing result in callee save reg -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in wINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes & set flags + csel w1, w1, w0, ne // Branch if true + adds w2, w1, w1 // convert to bytes & set flags FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1850,18 +1755,11 @@ artMterpAsmInstructionStart = .L_op_nop lsr w0, wINST, #8 // w0<- AA GET_VREG w2, w0 // w2<- vAA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Branch offset if not taken cmp w2, #0 // compare (vA, 0) - csel wINST, w1, w0, lt // Branch if true, stashing result in callee save reg -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in wINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes & set flags + csel w1, w1, w0, lt // Branch if true + adds w2, w1, w1 // convert to bytes & set flags FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1897,18 +1795,11 @@ artMterpAsmInstructionStart = .L_op_nop lsr w0, wINST, #8 // w0<- AA GET_VREG w2, w0 // w2<- vAA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Branch offset if not taken cmp w2, #0 // compare (vA, 0) - csel wINST, w1, w0, ge // Branch if true, stashing result in callee save reg -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in wINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes & set flags + csel w1, w1, w0, ge // Branch if true + adds w2, w1, w1 // convert to bytes & set flags FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1944,18 +1835,11 @@ artMterpAsmInstructionStart = .L_op_nop lsr w0, wINST, #8 // w0<- AA GET_VREG w2, w0 // w2<- vAA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Branch offset if not taken cmp w2, #0 // compare (vA, 0) - csel wINST, w1, w0, gt // Branch if true, stashing result in callee save reg -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in wINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes & set flags + csel w1, w1, w0, gt // Branch if true + adds w2, w1, w1 // convert to bytes & set flags FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -1991,18 +1875,11 @@ artMterpAsmInstructionStart = .L_op_nop lsr w0, wINST, #8 // w0<- AA GET_VREG w2, w0 // w2<- vAA FETCH_S w1, 1 // w1<- branch offset, in code units + ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] mov w0, #2 // Branch offset if not taken cmp w2, #0 // compare (vA, 0) - csel wINST, w1, w0, le // Branch if true, stashing result in callee save reg -#if MTERP_PROFILE_BRANCHES - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpProfileBranch // (self, shadow_frame, offset) - cbnz w0, MterpOnStackReplacement // Note: offset must be in wINST -#endif - ldr w7, [xSELF, #THREAD_FLAGS_OFFSET] - adds w2, wINST, wINST // convert to bytes & set flags + csel w1, w1, w0, le // Branch if true + adds w2, w1, w1 // convert to bytes & set flags FETCH_ADVANCE_INST_RB w2 // update rPC, load wINST b.mi MterpCheckSuspendAndContinue GET_INST_OPCODE ip // extract opcode from wINST @@ -11802,19 +11679,6 @@ check1: GOTO_OPCODE ip // jump to next instruction /* - * On-stack replacement pending. - * Branch offset in wINST on entry. - */ -MterpOnStackReplacement: -#if MTERP_LOGGING - mov x0, xSELF - add x1, xFP, #OFF_FP_SHADOWFRAME - sbfm x2, xINST, 0, 31 - bl MterpLogOSR -#endif - b MterpFallback // Let the reference interpreter deal with it. - -/* * Bail out to reference interpreter. */ MterpFallback: -- 2.11.0