diff options
-rw-r--r-- | runtime/interpreter/mterp/arm64ng/array.S | 2 | ||||
-rw-r--r-- | runtime/interpreter/mterp/arm64ng/main.S | 6 | ||||
-rw-r--r-- | runtime/interpreter/mterp/arm64ng/object.S | 20 | ||||
-rw-r--r-- | runtime/interpreter/mterp/arm64ng/other.S | 2 | ||||
-rw-r--r-- | runtime/interpreter/mterp/armng/array.S | 3 | ||||
-rw-r--r-- | runtime/interpreter/mterp/armng/main.S | 8 | ||||
-rw-r--r-- | runtime/interpreter/mterp/armng/object.S | 30 |
7 files changed, 34 insertions, 37 deletions
diff --git a/runtime/interpreter/mterp/arm64ng/array.S b/runtime/interpreter/mterp/arm64ng/array.S index b596bfbc61..f43bc7dace 100644 --- a/runtime/interpreter/mterp/arm64ng/array.S +++ b/runtime/interpreter/mterp/arm64ng/array.S @@ -23,7 +23,7 @@ GOTO_OPCODE x10 // jump to next instruction .elseif $is_object $load w2, [x0, #$data_offset] // w2<- vBB[vCC] - cbnz wMR, 2f + TEST_IF_MARKING 2f 1: SET_VREG_OBJECT w2, w9 // vAA<- w2 GOTO_OPCODE x10 // jump to next instruction diff --git a/runtime/interpreter/mterp/arm64ng/main.S b/runtime/interpreter/mterp/arm64ng/main.S index 08a7a804a3..ffd1b13805 100644 --- a/runtime/interpreter/mterp/arm64ng/main.S +++ b/runtime/interpreter/mterp/arm64ng/main.S @@ -370,6 +370,10 @@ END \name 5: .endm +.macro TEST_IF_MARKING label + cbnz wMR, \label +.endm + // Setup the stack to start executing the method. Expects: // - x0 to contain the ArtMethod // @@ -1756,7 +1760,7 @@ NterpNewArray: EXPORT_PC // Fast-path which gets the class from thread-local cache. FETCH_FROM_THREAD_CACHE x0, 2f - cbnz wMR, 3f + TEST_IF_MARKING 3f 1: lsr w1, wINST, #12 // w1<- B GET_VREG w1, w1 // w1<- vB (array length) diff --git a/runtime/interpreter/mterp/arm64ng/object.S b/runtime/interpreter/mterp/arm64ng/object.S index 00490a7bcd..41131c286c 100644 --- a/runtime/interpreter/mterp/arm64ng/object.S +++ b/runtime/interpreter/mterp/arm64ng/object.S @@ -2,7 +2,7 @@ // Fast-path which gets the class from thread-local cache. EXPORT_PC FETCH_FROM_THREAD_CACHE x1, 3f - cbnz wMR, 4f + TEST_IF_MARKING 4f 1: lsr w2, wINST, #8 // w2<- A GET_VREG w0, w2 // w0<- vA (object) @@ -28,7 +28,7 @@ // Fast-path which gets the class from thread-local cache. EXPORT_PC FETCH_FROM_THREAD_CACHE x1, 3f - cbnz wMR, 4f + TEST_IF_MARKING 4f 1: lsr w2, wINST, #12 // w2<- B GET_VREG w0, w2 // w0<- vB (object) @@ -77,7 +77,7 @@ SET_VREG_WIDE x0, w2 // fp[A] <- value .elseif $is_object $load w0, [x3, x0] - cbnz wMR, .L${opcode}_read_barrier + TEST_IF_MARKING .L${opcode}_read_barrier .L${opcode}_resume_after_read_barrier: SET_VREG_OBJECT w0, w2 // fp[A] <- value .else @@ -112,7 +112,7 @@ SET_VREG_WIDE x0, w2 // fp[A] <- value .elseif $is_object $volatile_load w0, [x3] - cbnz wMR, .L${opcode}_read_barrier + TEST_IF_MARKING .L${opcode}_read_barrier SET_VREG_OBJECT w0, w2 // fp[A] <- value .else $volatile_load w0, [x3] @@ -226,7 +226,7 @@ ldr w1, [x0, #ART_FIELD_OFFSET_OFFSET] lsr w2, wINST, #8 // w2 <- A ldr w0, [x0, #ART_FIELD_DECLARING_CLASS_OFFSET] - cbnz wMR, .L${opcode}_read_barrier + TEST_IF_MARKING .L${opcode}_read_barrier .L${opcode}_resume_after_read_barrier: .if $wide ldr x0, [x0, x1] @@ -267,7 +267,7 @@ ldr w1, [x0, #ART_FIELD_OFFSET_OFFSET] lsr w2, wINST, #8 // w2 <- A ldr w0, [x0, #ART_FIELD_DECLARING_CLASS_OFFSET] - cbnz wMR, .L${opcode}_slow_path_read_barrier + TEST_IF_MARKING .L${opcode}_slow_path_read_barrier .L${opcode}_slow_path_resume_after_read_barrier: add x0, x0, x1 .if $wide @@ -275,7 +275,7 @@ SET_VREG_WIDE x0, w2 // fp[A] <- value .elseif $is_object $volatile_load w0, [x0] - cbnz wMR, .L${opcode}_mark_after_load + TEST_IF_MARKING .L${opcode}_mark_after_load SET_VREG_OBJECT w0, w2 // fp[A] <- value .else $volatile_load w0, [x0] @@ -323,7 +323,7 @@ .L${opcode}_resume: ldr w1, [x0, #ART_FIELD_OFFSET_OFFSET] ldr w0, [x0, #ART_FIELD_DECLARING_CLASS_OFFSET] - cbnz wMR, .L${opcode}_read_barrier + TEST_IF_MARKING .L${opcode}_read_barrier .L${opcode}_resume_after_read_barrier: .if $wide $store x26, [x0, x1] @@ -358,7 +358,7 @@ CLEAR_STATIC_VOLATILE_MARKER x0 ldr w1, [x0, #ART_FIELD_OFFSET_OFFSET] ldr w0, [x0, #ART_FIELD_DECLARING_CLASS_OFFSET] - cbnz wMR, .L${opcode}_slow_path_read_barrier + TEST_IF_MARKING .L${opcode}_slow_path_read_barrier .L${opcode}_slow_path_resume_after_read_barrier: add x1, x0, x1 .if $wide @@ -384,7 +384,7 @@ EXPORT_PC // Fast-path which gets the class from thread-local cache. FETCH_FROM_THREAD_CACHE x0, 2f - cbnz wMR, 3f + TEST_IF_MARKING 3f 4: ldr lr, [xSELF, #THREAD_ALLOC_OBJECT_ENTRYPOINT_OFFSET] blr lr diff --git a/runtime/interpreter/mterp/arm64ng/other.S b/runtime/interpreter/mterp/arm64ng/other.S index caaec3d7cc..be42dfbf57 100644 --- a/runtime/interpreter/mterp/arm64ng/other.S +++ b/runtime/interpreter/mterp/arm64ng/other.S @@ -43,7 +43,7 @@ %def op_const_object(jumbo="0", helper="nterp_load_object"): // Fast-path which gets the object from thread-local cache. FETCH_FROM_THREAD_CACHE x0, 2f - cbnz wMR, 3f + TEST_IF_MARKING 3f 1: lsr w1, wINST, #8 // w1<- AA .if $jumbo diff --git a/runtime/interpreter/mterp/armng/array.S b/runtime/interpreter/mterp/armng/array.S index 93f11c64dd..305cb9370d 100644 --- a/runtime/interpreter/mterp/armng/array.S +++ b/runtime/interpreter/mterp/armng/array.S @@ -26,8 +26,7 @@ GOTO_OPCODE ip @ jump to next instruction .elseif $is_object $load r2, [r0, #$data_offset] @ w2<- vBB[vCC] - cmp rMR, #0 - bne 2f + TEST_IF_MARKING 2f 1: GET_INST_OPCODE ip @ extract opcode from rINST SET_VREG_OBJECT r2, r4 @ vAA<- w2 diff --git a/runtime/interpreter/mterp/armng/main.S b/runtime/interpreter/mterp/armng/main.S index 13d5dfe3fb..e21c64f8f9 100644 --- a/runtime/interpreter/mterp/armng/main.S +++ b/runtime/interpreter/mterp/armng/main.S @@ -325,6 +325,11 @@ END \name b 1b .endm +.macro TEST_IF_MARKING label + cmp rMR, #0 + bne \label +.endm + // Expects: // - ip and lr to be available. // Outputs: @@ -1771,8 +1776,7 @@ NterpNewArray: EXPORT_PC // Fast-path which gets the class from thread-local cache. FETCH_FROM_THREAD_CACHE r0, 2f - cmp rMR, #0 - bne 3f + TEST_IF_MARKING 3f 1: lsr r1, rINST, #12 // r1<- B GET_VREG r1, r1 // r1<- vB (array length) diff --git a/runtime/interpreter/mterp/armng/object.S b/runtime/interpreter/mterp/armng/object.S index c56ec05b7d..50f1c4f755 100644 --- a/runtime/interpreter/mterp/armng/object.S +++ b/runtime/interpreter/mterp/armng/object.S @@ -2,8 +2,7 @@ // Fast-path which gets the class from thread-local cache. EXPORT_PC FETCH_FROM_THREAD_CACHE r1, 3f - cmp rMR, #0 - bne 4f + TEST_IF_MARKING 4f 1: lsr r2, rINST, #8 // r2<- A GET_VREG r0, r2 // r0<- vA (object) @@ -30,8 +29,7 @@ // Fast-path which gets the class from thread-local cache. EXPORT_PC FETCH_FROM_THREAD_CACHE r1, 3f - cmp rMR, #0 - bne 4f + TEST_IF_MARKING 4f 1: lsr r2, rINST, #12 // r2<- B GET_VREG r0, r2 // r0<- vB (object) @@ -85,8 +83,7 @@ SET_VREG_WIDE_BY_ADDR r0, r1, r2 // fp[A] <- value .elseif $is_object $load r0, [r3, r0] - cmp rMR, #0 - bne .L${opcode}_read_barrier + TEST_IF_MARKING .L${opcode}_read_barrier .L${opcode}_resume_after_read_barrier: SET_VREG_OBJECT r0, r2 // fp[A] <- value .else @@ -128,8 +125,7 @@ $load r0, [r3, r0] dmb ish .if $is_object - cmp rMR, #0 - bne .L${opcode}_read_barrier + TEST_IF_MARKING .L${opcode}_read_barrier SET_VREG_OBJECT r0, r2 // fp[A] <- value .else SET_VREG r0, r2 // fp[A] <- value @@ -258,8 +254,7 @@ ldr r1, [r0, #ART_FIELD_OFFSET_OFFSET] lsr r2, rINST, #8 // r2 <- A ldr r0, [r0, #ART_FIELD_DECLARING_CLASS_OFFSET] - cmp rMR, #0 - bne .L${opcode}_read_barrier + TEST_IF_MARKING .L${opcode}_read_barrier .L${opcode}_resume_after_read_barrier: .if $wide add r0, r0, r1 @@ -304,8 +299,7 @@ ldr r1, [r0, #ART_FIELD_OFFSET_OFFSET] lsr r2, rINST, #8 // r2 <- A ldr r0, [r0, #ART_FIELD_DECLARING_CLASS_OFFSET] - cmp rMR, #0 - bne .L${opcode}_slow_path_read_barrier + TEST_IF_MARKING .L${opcode}_slow_path_read_barrier .L${opcode}_slow_path_resume_after_read_barrier: .if $wide add ip, r0, r1 @@ -318,8 +312,7 @@ $load r0, [r0, r1] dmb ish .if $is_object - cmp rMR, #0 - bne .L${opcode}_mark_after_load + TEST_IF_MARKING .L${opcode}_mark_after_load SET_VREG_OBJECT r0, r2 // fp[A] <- value .else SET_VREG r0, r2 // fp[A] <- value @@ -364,8 +357,7 @@ .L${opcode}_resume: ldr r1, [r0, #ART_FIELD_OFFSET_OFFSET] ldr r0, [r0, #ART_FIELD_DECLARING_CLASS_OFFSET] - cmp rMR, #0 - bne .L${opcode}_read_barrier + TEST_IF_MARKING .L${opcode}_read_barrier .L${opcode}_resume_after_read_barrier: .if $wide lsr r2, rINST, #8 // r2 <- A @@ -405,8 +397,7 @@ CLEAR_STATIC_VOLATILE_MARKER r0 ldr r1, [r0, #ART_FIELD_OFFSET_OFFSET] ldr r0, [r0, #ART_FIELD_DECLARING_CLASS_OFFSET] - cmp rMR, #0 - bne .L${opcode}_slow_path_read_barrier + TEST_IF_MARKING .L${opcode}_slow_path_read_barrier .L${opcode}_slow_path_resume_after_read_barrier: .if $wide lsr r2, rINST, #8 // r2 <- A @@ -440,8 +431,7 @@ EXPORT_PC // Fast-path which gets the class from thread-local cache. FETCH_FROM_THREAD_CACHE r0, 2f - cmp rMR, #0 - bne 3f + TEST_IF_MARKING 3f 4: ldr lr, [rSELF, #THREAD_ALLOC_OBJECT_ENTRYPOINT_OFFSET] blx lr |