From 61049e87018d5c7420f14a552a726fd66249ace3 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Mon, 9 Jan 2017 18:48:11 -0800 Subject: [PATCH] Delete extra arm64/mips64 MterpReturn suspend check Doing a suspend check after moving the result into the shadow frame result_register_ is not safe since result_register_ is not a GC root. The suspend check is unnecessary since the opcodes that branch to MterpReturn already do a suspend check. This could maybe explain one crash for CC that was seen after calling a getter that had no compiled code. The extra suspend check appears to only be present on arm64 amd mips64. Test: test-art-target ART_TEST_INTERPRETER=true, N5X booting (cherry picked from commit aceff18580b94a586a469110565f2ba166f3635a) Bug: 33211261 Change-Id: I70b8863f40a25a26f278ac8ef0d57e083b663e0f --- runtime/interpreter/mterp/arm64/footer.S | 6 ------ runtime/interpreter/mterp/mips64/footer.S | 6 ------ runtime/interpreter/mterp/out/mterp_arm64.S | 6 ------ runtime/interpreter/mterp/out/mterp_mips64.S | 6 ------ 4 files changed, 24 deletions(-) diff --git a/runtime/interpreter/mterp/arm64/footer.S b/runtime/interpreter/mterp/arm64/footer.S index 2d3a11eaf..dbcbc7146 100644 --- a/runtime/interpreter/mterp/arm64/footer.S +++ b/runtime/interpreter/mterp/arm64/footer.S @@ -267,13 +267,7 @@ MterpExceptionReturn: b MterpDone MterpReturn: ldr x2, [xFP, #OFF_FP_RESULT_REGISTER] - ldr lr, [xSELF, #THREAD_FLAGS_OFFSET] str x0, [x2] - mov x0, xSELF - ands lr, lr, #(THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST) - b.eq check2 - bl MterpSuspendCheck // (self) -check2: mov x0, #1 // signal return to caller. MterpDone: /* diff --git a/runtime/interpreter/mterp/mips64/footer.S b/runtime/interpreter/mterp/mips64/footer.S index 14d5fe01f..0545194db 100644 --- a/runtime/interpreter/mterp/mips64/footer.S +++ b/runtime/interpreter/mterp/mips64/footer.S @@ -134,13 +134,7 @@ MterpExceptionReturn: */ MterpReturn: ld a2, OFF_FP_RESULT_REGISTER(rFP) - lw ra, THREAD_FLAGS_OFFSET(rSELF) sd a0, 0(a2) - move a0, rSELF - and ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST) - beqzc ra, check2 - jal MterpSuspendCheck # (self) -check2: li v0, 1 # signal return to caller. MterpDone: ld s5, STACK_OFFSET_S5(sp) diff --git a/runtime/interpreter/mterp/out/mterp_arm64.S b/runtime/interpreter/mterp/out/mterp_arm64.S index 55797e676..33c1abd86 100644 --- a/runtime/interpreter/mterp/out/mterp_arm64.S +++ b/runtime/interpreter/mterp/out/mterp_arm64.S @@ -11554,13 +11554,7 @@ MterpExceptionReturn: b MterpDone MterpReturn: ldr x2, [xFP, #OFF_FP_RESULT_REGISTER] - ldr lr, [xSELF, #THREAD_FLAGS_OFFSET] str x0, [x2] - mov x0, xSELF - ands lr, lr, #(THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST) - b.eq check2 - bl MterpSuspendCheck // (self) -check2: mov x0, #1 // signal return to caller. MterpDone: /* diff --git a/runtime/interpreter/mterp/out/mterp_mips64.S b/runtime/interpreter/mterp/out/mterp_mips64.S index a17252b2f..b96b4bdd1 100644 --- a/runtime/interpreter/mterp/out/mterp_mips64.S +++ b/runtime/interpreter/mterp/out/mterp_mips64.S @@ -12386,13 +12386,7 @@ MterpExceptionReturn: */ MterpReturn: ld a2, OFF_FP_RESULT_REGISTER(rFP) - lw ra, THREAD_FLAGS_OFFSET(rSELF) sd a0, 0(a2) - move a0, rSELF - and ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST) - beqzc ra, check2 - jal MterpSuspendCheck # (self) -check2: li v0, 1 # signal return to caller. MterpDone: ld s5, STACK_OFFSET_S5(sp) -- 2.11.0