diff options
| author | 2017-01-09 18:48:11 -0800 | |
|---|---|---|
| committer | 2017-01-20 11:32:47 -0800 | |
| commit | 61049e87018d5c7420f14a552a726fd66249ace3 (patch) | |
| tree | 0a0fb1faa0c24da47457a70b698f410c6e2917a2 | |
| parent | 2f3fb4d725327f661eb3d8fe224a693b7589787a (diff) | |
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
| -rw-r--r-- | runtime/interpreter/mterp/arm64/footer.S | 6 | ||||
| -rw-r--r-- | runtime/interpreter/mterp/mips64/footer.S | 6 | ||||
| -rw-r--r-- | runtime/interpreter/mterp/out/mterp_arm64.S | 6 | ||||
| -rw-r--r-- | runtime/interpreter/mterp/out/mterp_mips64.S | 6 |
4 files changed, 0 insertions, 24 deletions
diff --git a/runtime/interpreter/mterp/arm64/footer.S b/runtime/interpreter/mterp/arm64/footer.S index 2d3a11eafa..dbcbc71469 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 14d5fe01f5..0545194dba 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 55797e676f..33c1abd868 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 a17252b2f8..b96b4bdd1c 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) |