Refactor code using the marking register in nterp.

Use a helper to abstract away how we're looking at the marking state.

Test: test.py
Change-Id: I560ccb9a043c7d394e8befce2e9e0bca3f44e187
diff --git a/runtime/interpreter/mterp/arm64ng/array.S b/runtime/interpreter/mterp/arm64ng/array.S
index b596bfb..f43bc7d 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 08a7a80..ffd1b13 100644
--- a/runtime/interpreter/mterp/arm64ng/main.S
+++ b/runtime/interpreter/mterp/arm64ng/main.S
@@ -370,6 +370,10 @@
 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 @@
    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 00490a7..41131c2 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 caaec3d..be42dfb 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 93f11c6..305cb93 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 13d5dfe..e21c64f 100644
--- a/runtime/interpreter/mterp/armng/main.S
+++ b/runtime/interpreter/mterp/armng/main.S
@@ -325,6 +325,11 @@
     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 @@
    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 c56ec05..50f1c4f 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