OSDN Git Service

Delete extra arm64/mips64 MterpReturn suspend check
authorMathieu Chartier <mathieuc@google.com>
Tue, 10 Jan 2017 02:48:11 +0000 (18:48 -0800)
committerbuzbee <buzbee@google.com>
Tue, 10 Jan 2017 15:58:01 +0000 (07:58 -0800)
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

Bug: 33211261
Change-Id: I70b8863f40a25a26f278ac8ef0d57e083b663e0f

runtime/interpreter/mterp/arm64/footer.S
runtime/interpreter/mterp/mips64/footer.S
runtime/interpreter/mterp/out/mterp_arm64.S
runtime/interpreter/mterp/out/mterp_mips64.S

index 6ffbd3f..388fc8d 100644 (file)
@@ -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_OR_CHECKPOINT_REQUEST
-    b.eq    check2
-    bl      MterpSuspendCheck                       // (self)
-check2:
     mov     x0, #1                                  // signal return to caller.
 MterpDone:
 /*
index 64772c8..312fa9c 100644 (file)
@@ -222,13 +222,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_OR_CHECKPOINT_REQUEST
-    beqzc   ra, check2
-    jal     MterpSuspendCheck                       # (self)
-check2:
     li      v0, 1                                   # signal return to caller.
 MterpDone:
 /*
index 34d99a8..681790d 100644 (file)
@@ -7246,13 +7246,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_OR_CHECKPOINT_REQUEST
-    b.eq    check2
-    bl      MterpSuspendCheck                       // (self)
-check2:
     mov     x0, #1                                  // signal return to caller.
 MterpDone:
 /*
index 037787f..bf09666 100644 (file)
@@ -12293,13 +12293,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_OR_CHECKPOINT_REQUEST
-    beqzc   ra, check2
-    jal     MterpSuspendCheck                       # (self)
-check2:
     li      v0, 1                                   # signal return to caller.
 MterpDone:
 /*