x86/x86_64/arm/arm64 nterp: Smaller `op_const_object`.

Test: testrunner.py --host --interpreter
Test: testrunner.py --target --interpreter
Flag: EXEMPT PURE_REFACTOR
Change-Id: I9f5db9e185662f90771e50a1232d9e10e06cb32c
diff --git a/runtime/interpreter/mterp/arm64ng/other.S b/runtime/interpreter/mterp/arm64ng/other.S
index 3470ee8..820d008 100644
--- a/runtime/interpreter/mterp/arm64ng/other.S
+++ b/runtime/interpreter/mterp/arm64ng/other.S
@@ -41,10 +41,11 @@
     GOTO_OPCODE ip                      // jump to next instruction
 
 %def op_const_object(jumbo="0", helper="nterp_load_object"):
+%  slow_path = add_slow_path(op_const_object_slow_path, helper)
    // Fast-path which gets the object from thread-local cache.
-%  fetch_from_thread_cache("x0", miss_label="2f")
-   TEST_IF_MARKING 3f
-1:
+%  fetch_from_thread_cache("x0", miss_label=slow_path)
+   TEST_IF_MARKING 1f
+.L${opcode}_resume:
    lsr     w1, wINST, #8               // w1<- AA
    .if $jumbo
    FETCH_ADVANCE_INST 3                // advance rPC, load wINST
@@ -54,16 +55,17 @@
    GET_INST_OPCODE ip                  // extract opcode from wINST
    SET_VREG_OBJECT w0, w1              // vAA <- value
    GOTO_OPCODE ip                      // jump to next instruction
-2:
+1:
+   bl art_quick_read_barrier_mark_reg00
+   b .L${opcode}_resume
+
+%def op_const_object_slow_path(helper):
    EXPORT_PC
    mov x0, xSELF
    ldr x1, [sp]
    mov x2, xPC
    bl $helper
-   b 1b
-3:
-   bl art_quick_read_barrier_mark_reg00
-   b 1b
+   b .L${opcode}_resume
 
 %def op_const_class():
 %  op_const_object(jumbo="0", helper="nterp_get_class")
diff --git a/runtime/interpreter/mterp/armng/other.S b/runtime/interpreter/mterp/armng/other.S
index 7dfed62..68826c4 100644
--- a/runtime/interpreter/mterp/armng/other.S
+++ b/runtime/interpreter/mterp/armng/other.S
@@ -41,11 +41,12 @@
     GOTO_OPCODE ip                      @ jump to next instruction
 
 %def op_const_object(jumbo="0", helper="nterp_load_object"):
+%  slow_path = add_slow_path(op_const_object_slow_path, helper)
    // Fast-path which gets the object from thread-local cache.
-%  fetch_from_thread_cache("r0", miss_label="2f")
+%  fetch_from_thread_cache("r0", miss_label=slow_path)
    cmp rMR, #0
-   bne 3f
-1:
+   bne 1f
+.L${opcode}_resume:
    mov     r1, rINST, lsr #8           @ r1<- AA
    .if $jumbo
    FETCH_ADVANCE_INST 3                // advance rPC, load rINST
@@ -55,16 +56,17 @@
    GET_INST_OPCODE ip                  // extract opcode from rINST
    SET_VREG_OBJECT r0, r1              // vAA <- value
    GOTO_OPCODE ip                      // jump to next instruction
-2:
+1:
+   bl art_quick_read_barrier_mark_reg00
+   b .L${opcode}_resume
+
+%def op_const_object_slow_path(helper):
    EXPORT_PC
    mov r0, rSELF
    ldr r1, [sp]
    mov r2, rPC
    bl $helper
-   b 1b
-3:
-   bl art_quick_read_barrier_mark_reg00
-   b 1b
+   b .L${opcode}_resume
 
 %def op_const_class():
 %  op_const_object(jumbo="0", helper="nterp_get_class")
diff --git a/runtime/interpreter/mterp/x86_64ng/other.S b/runtime/interpreter/mterp/x86_64ng/other.S
index f789086..940d90e 100644
--- a/runtime/interpreter/mterp/x86_64ng/other.S
+++ b/runtime/interpreter/mterp/x86_64ng/other.S
@@ -29,28 +29,30 @@
     ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
 
 %def op_const_object(jumbo="0", helper="nterp_load_object"):
+%  slow_path = add_slow_path(op_const_object_slow_path, helper)
    // Fast-path which gets the object from thread-local cache.
-%  fetch_from_thread_cache("%rax", miss_label="2f")
+%  fetch_from_thread_cache("%rax", miss_label=slow_path)
    cmpq MACRO_LITERAL(0), rSELF:THREAD_READ_BARRIER_MARK_REG00_OFFSET
-   jne 3f
-1:
+   jne 1f
+.L${opcode}_resume:
    SET_VREG_OBJECT %eax, rINSTq            # vAA <- value
    .if $jumbo
    ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
    .else
    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
    .endif
-2:
+1:
+   // 00 is %rax
+   call art_quick_read_barrier_mark_reg00
+   jmp .L${opcode}_resume
+
+%def op_const_object_slow_path(helper):
    EXPORT_PC
    movq rSELF:THREAD_SELF_OFFSET, %rdi
    movq 0(%rsp), %rsi
    movq rPC, %rdx
    call SYMBOL($helper)
-   jmp 1b
-3:
-   // 00 is %rax
-   call art_quick_read_barrier_mark_reg00
-   jmp 1b
+   jmp .L${opcode}_resume
 
 %def op_const_class():
 %  op_const_object(jumbo="0", helper="nterp_get_class")
diff --git a/runtime/interpreter/mterp/x86ng/other.S b/runtime/interpreter/mterp/x86ng/other.S
index 6dd1ce3..7c78bad 100644
--- a/runtime/interpreter/mterp/x86ng/other.S
+++ b/runtime/interpreter/mterp/x86ng/other.S
@@ -29,28 +29,30 @@
     ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
 
 %def op_const_object(jumbo="0", helper="nterp_load_object"):
+%  slow_path = add_slow_path(op_const_object_slow_path, helper)
    // Fast-path which gets the object from thread-local cache.
-%  fetch_from_thread_cache("%eax", miss_label="2f")
+%  fetch_from_thread_cache("%eax", miss_label=slow_path)
    cmpl MACRO_LITERAL(0), rSELF:THREAD_READ_BARRIER_MARK_REG00_OFFSET
-   jne 3f
-1:
+   jne 1f
+.L${opcode}_resume:
    SET_VREG_OBJECT %eax, rINST             # vAA <- value
    .if $jumbo
    ADVANCE_PC_FETCH_AND_GOTO_NEXT 3
    .else
    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
    .endif
-2:
+1:
+   // 00 is %eax
+   call art_quick_read_barrier_mark_reg00
+   jmp .L${opcode}_resume
+
+%def op_const_object_slow_path(helper):
    EXPORT_PC
    movl rSELF:THREAD_SELF_OFFSET, ARG0
    movl 0(%esp), ARG1
    movl rPC, ARG2
    call SYMBOL($helper)
-   jmp 1b
-3:
-   // 00 is %eax
-   call art_quick_read_barrier_mark_reg00
-   jmp 1b
+   jmp .L${opcode}_resume
 
 %def op_const_class():
 %  op_const_object(jumbo="0", helper="nterp_get_class")