summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mathieu Chartier <mathieuc@google.com> 2017-01-09 18:48:11 -0800
committer Mathieu Chartier <mathieuc@google.com> 2017-01-20 11:32:47 -0800
commit61049e87018d5c7420f14a552a726fd66249ace3 (patch)
tree0a0fb1faa0c24da47457a70b698f410c6e2917a2
parent2f3fb4d725327f661eb3d8fe224a693b7589787a (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.S6
-rw-r--r--runtime/interpreter/mterp/mips64/footer.S6
-rw-r--r--runtime/interpreter/mterp/out/mterp_arm64.S6
-rw-r--r--runtime/interpreter/mterp/out/mterp_mips64.S6
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)