Home | History | Annotate | Download | only in out
      1 /*
      2  * This file was generated automatically by gen-mterp.py for 'mips64'.
      3  *
      4  * --> DO NOT EDIT <--
      5  */
      6 
      7 /* File: mips64/header.S */
      8 /*
      9  * Copyright (C) 2016 The Android Open Source Project
     10  *
     11  * Licensed under the Apache License, Version 2.0 (the "License");
     12  * you may not use this file except in compliance with the License.
     13  * You may obtain a copy of the License at
     14  *
     15  *      http://www.apache.org/licenses/LICENSE-2.0
     16  *
     17  * Unless required by applicable law or agreed to in writing, software
     18  * distributed under the License is distributed on an "AS IS" BASIS,
     19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     20  * See the License for the specific language governing permissions and
     21  * limitations under the License.
     22  */
     23 
     24 #include <machine/regdef.h>
     25 
     26 /* TODO: add the missing file and use its FP register definitions. */
     27 /* #include <machine/fpregdef.h> */
     28 /* FP register definitions */
     29 #define f0  $f0
     30 #define f1  $f1
     31 #define f2  $f2
     32 #define f3  $f3
     33 #define f12 $f12
     34 #define f13 $f13
     35 
     36 /*
     37  * It looks like the GNU assembler currently does not support the blec and bgtc
     38  * idioms, which should translate into bgec and bltc respectively with swapped
     39  * left and right register operands.
     40  * TODO: remove these macros when the assembler is fixed.
     41  */
     42 .macro blec lreg, rreg, target
     43     bgec    \rreg, \lreg, \target
     44 .endm
     45 .macro bgtc lreg, rreg, target
     46     bltc    \rreg, \lreg, \target
     47 .endm
     48 
     49 /*
     50 Mterp and MIPS64 notes:
     51 
     52 The following registers have fixed assignments:
     53 
     54   reg nick      purpose
     55   s0  rPC       interpreted program counter, used for fetching instructions
     56   s1  rFP       interpreted frame pointer, used for accessing locals and args
     57   s2  rSELF     self (Thread) pointer
     58   s3  rINST     first 16-bit code unit of current instruction
     59   s4  rIBASE    interpreted instruction base pointer, used for computed goto
     60   s5  rREFS     base of object references in shadow frame  (ideally, we'll get rid of this later).
     61 */
     62 
     63 /* During bringup, we'll use the shadow frame model instead of rFP */
     64 /* single-purpose registers, given names for clarity */
     65 #define rPC     s0
     66 #define rFP     s1
     67 #define rSELF   s2
     68 #define rINST   s3
     69 #define rIBASE  s4
     70 #define rREFS   s5
     71 
     72 /*
     73  * This is a #include, not a %include, because we want the C pre-processor
     74  * to expand the macros into assembler assignment statements.
     75  */
     76 #include "asm_support.h"
     77 
     78 /*
     79  * Instead of holding a pointer to the shadow frame, we keep rFP at the base of the vregs.  So,
     80  * to access other shadow frame fields, we need to use a backwards offset.  Define those here.
     81  */
     82 #define OFF_FP(a) (a - SHADOWFRAME_VREGS_OFFSET)
     83 #define OFF_FP_NUMBER_OF_VREGS OFF_FP(SHADOWFRAME_NUMBER_OF_VREGS_OFFSET)
     84 #define OFF_FP_DEX_PC OFF_FP(SHADOWFRAME_DEX_PC_OFFSET)
     85 #define OFF_FP_LINK OFF_FP(SHADOWFRAME_LINK_OFFSET)
     86 #define OFF_FP_METHOD OFF_FP(SHADOWFRAME_METHOD_OFFSET)
     87 #define OFF_FP_RESULT_REGISTER OFF_FP(SHADOWFRAME_RESULT_REGISTER_OFFSET)
     88 #define OFF_FP_DEX_PC_PTR OFF_FP(SHADOWFRAME_DEX_PC_PTR_OFFSET)
     89 #define OFF_FP_CODE_ITEM OFF_FP(SHADOWFRAME_CODE_ITEM_OFFSET)
     90 #define OFF_FP_SHADOWFRAME (-SHADOWFRAME_VREGS_OFFSET)
     91 
     92 #define MTERP_PROFILE_BRANCHES 1
     93 #define MTERP_LOGGING 0
     94 
     95 /*
     96  * "export" the PC to dex_pc field in the shadow frame, f/b/o future exception objects.  Must
     97  * be done *before* something throws.
     98  *
     99  * It's okay to do this more than once.
    100  *
    101  * NOTE: the fast interpreter keeps track of dex pc as a direct pointer to the mapped
    102  * dex byte codes.  However, the rest of the runtime expects dex pc to be an instruction
    103  * offset into the code_items_[] array.  For effiency, we will "export" the
    104  * current dex pc as a direct pointer using the EXPORT_PC macro, and rely on GetDexPC
    105  * to convert to a dex pc when needed.
    106  */
    107 .macro EXPORT_PC
    108     sd      rPC, OFF_FP_DEX_PC_PTR(rFP)
    109 .endm
    110 
    111 /*
    112  * Refresh handler table.
    113  */
    114 .macro REFRESH_IBASE
    115     ld      rIBASE, THREAD_CURRENT_IBASE_OFFSET(rSELF)
    116 .endm
    117 
    118 /*
    119  * Fetch the next instruction from rPC into rINST.  Does not advance rPC.
    120  */
    121 .macro FETCH_INST
    122     lhu     rINST, 0(rPC)
    123 .endm
    124 
    125 /* Advance rPC by some number of code units. */
    126 .macro ADVANCE count
    127     daddu   rPC, rPC, (\count) * 2
    128 .endm
    129 
    130 /*
    131  * Fetch the next instruction from the specified offset.  Advances rPC
    132  * to point to the next instruction.
    133  *
    134  * This must come AFTER anything that can throw an exception, or the
    135  * exception catch may miss.  (This also implies that it must come after
    136  * EXPORT_PC.)
    137  */
    138 .macro FETCH_ADVANCE_INST count
    139     ADVANCE \count
    140     FETCH_INST
    141 .endm
    142 
    143 /*
    144  * Similar to FETCH_ADVANCE_INST, but does not update rPC.  Used to load
    145  * rINST ahead of possible exception point.  Be sure to manually advance rPC
    146  * later.
    147  */
    148 .macro PREFETCH_INST count
    149     lhu     rINST, ((\count) * 2)(rPC)
    150 .endm
    151 
    152 /*
    153  * Put the instruction's opcode field into the specified register.
    154  */
    155 .macro GET_INST_OPCODE reg
    156     and     \reg, rINST, 255
    157 .endm
    158 
    159 /*
    160  * Begin executing the opcode in _reg.
    161  */
    162 .macro GOTO_OPCODE reg
    163     .set noat
    164     sll     AT, \reg, 7
    165     daddu   AT, rIBASE, AT
    166     jic     AT, 0
    167     .set at
    168 .endm
    169 
    170 /*
    171  * Get/set the 32-bit value from a Dalvik register.
    172  * Note, GET_VREG does sign extension to 64 bits while
    173  * GET_VREG_U does zero extension to 64 bits.
    174  * One is useful for arithmetic while the other is
    175  * useful for storing the result value as 64-bit.
    176  */
    177 .macro GET_VREG reg, vreg
    178     .set noat
    179     dlsa    AT, \vreg, rFP, 2
    180     lw      \reg, 0(AT)
    181     .set at
    182 .endm
    183 .macro GET_VREG_U reg, vreg
    184     .set noat
    185     dlsa    AT, \vreg, rFP, 2
    186     lwu     \reg, 0(AT)
    187     .set at
    188 .endm
    189 .macro GET_VREG_FLOAT reg, vreg
    190     .set noat
    191     dlsa    AT, \vreg, rFP, 2
    192     lwc1    \reg, 0(AT)
    193     .set at
    194 .endm
    195 .macro SET_VREG reg, vreg
    196     .set noat
    197     dlsa    AT, \vreg, rFP, 2
    198     sw      \reg, 0(AT)
    199     dlsa    AT, \vreg, rREFS, 2
    200     sw      zero, 0(AT)
    201     .set at
    202 .endm
    203 .macro SET_VREG_OBJECT reg, vreg
    204     .set noat
    205     dlsa    AT, \vreg, rFP, 2
    206     sw      \reg, 0(AT)
    207     dlsa    AT, \vreg, rREFS, 2
    208     sw      \reg, 0(AT)
    209     .set at
    210 .endm
    211 .macro SET_VREG_FLOAT reg, vreg
    212     .set noat
    213     dlsa    AT, \vreg, rFP, 2
    214     swc1    \reg, 0(AT)
    215     dlsa    AT, \vreg, rREFS, 2
    216     sw      zero, 0(AT)
    217     .set at
    218 .endm
    219 
    220 /*
    221  * Get/set the 64-bit value from a Dalvik register.
    222  * Avoid unaligned memory accesses.
    223  * Note, SET_VREG_WIDE clobbers the register containing the value being stored.
    224  * Note, SET_VREG_DOUBLE clobbers the register containing the Dalvik register number.
    225  */
    226 .macro GET_VREG_WIDE reg, vreg
    227     .set noat
    228     dlsa    AT, \vreg, rFP, 2
    229     lw      \reg, 0(AT)
    230     lw      AT, 4(AT)
    231     dinsu   \reg, AT, 32, 32
    232     .set at
    233 .endm
    234 .macro GET_VREG_DOUBLE reg, vreg
    235     .set noat
    236     dlsa    AT, \vreg, rFP, 2
    237     lwc1    \reg, 0(AT)
    238     lw      AT, 4(AT)
    239     mthc1   AT, \reg
    240     .set at
    241 .endm
    242 .macro SET_VREG_WIDE reg, vreg
    243     .set noat
    244     dlsa    AT, \vreg, rFP, 2
    245     sw      \reg, 0(AT)
    246     drotr32 \reg, \reg, 0
    247     sw      \reg, 4(AT)
    248     dlsa    AT, \vreg, rREFS, 2
    249     sw      zero, 0(AT)
    250     sw      zero, 4(AT)
    251     .set at
    252 .endm
    253 .macro SET_VREG_DOUBLE reg, vreg
    254     .set noat
    255     dlsa    AT, \vreg, rREFS, 2
    256     sw      zero, 0(AT)
    257     sw      zero, 4(AT)
    258     dlsa    AT, \vreg, rFP, 2
    259     swc1    \reg, 0(AT)
    260     mfhc1   \vreg, \reg
    261     sw      \vreg, 4(AT)
    262     .set at
    263 .endm
    264 
    265 /*
    266  * On-stack offsets for spilling/unspilling callee-saved registers
    267  * and the frame size.
    268  */
    269 #define STACK_OFFSET_RA 0
    270 #define STACK_OFFSET_GP 8
    271 #define STACK_OFFSET_S0 16
    272 #define STACK_OFFSET_S1 24
    273 #define STACK_OFFSET_S2 32
    274 #define STACK_OFFSET_S3 40
    275 #define STACK_OFFSET_S4 48
    276 #define STACK_OFFSET_S5 56
    277 #define STACK_SIZE      64
    278 
    279 /* Constants for float/double_to_int/long conversions */
    280 #define INT_MIN             0x80000000
    281 #define INT_MIN_AS_FLOAT    0xCF000000
    282 #define INT_MIN_AS_DOUBLE   0xC1E0000000000000
    283 #define LONG_MIN            0x8000000000000000
    284 #define LONG_MIN_AS_FLOAT   0xDF000000
    285 #define LONG_MIN_AS_DOUBLE  0xC3E0000000000000
    286 
    287 /* File: mips64/entry.S */
    288 /*
    289  * Copyright (C) 2016 The Android Open Source Project
    290  *
    291  * Licensed under the Apache License, Version 2.0 (the "License");
    292  * you may not use this file except in compliance with the License.
    293  * You may obtain a copy of the License at
    294  *
    295  *      http://www.apache.org/licenses/LICENSE-2.0
    296  *
    297  * Unless required by applicable law or agreed to in writing, software
    298  * distributed under the License is distributed on an "AS IS" BASIS,
    299  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    300  * See the License for the specific language governing permissions and
    301  * limitations under the License.
    302  */
    303 
    304 /*
    305  * Interpreter entry point.
    306  */
    307 
    308     .set    reorder
    309 
    310     .text
    311     .global ExecuteMterpImpl
    312     .type   ExecuteMterpImpl, %function
    313     .balign 16
    314 /*
    315  * On entry:
    316  *  a0  Thread* self
    317  *  a1  code_item
    318  *  a2  ShadowFrame
    319  *  a3  JValue* result_register
    320  *
    321  */
    322 ExecuteMterpImpl:
    323     .cfi_startproc
    324     .cpsetup t9, t8, ExecuteMterpImpl
    325 
    326     .cfi_def_cfa sp, 0
    327     daddu   sp, sp, -STACK_SIZE
    328     .cfi_adjust_cfa_offset STACK_SIZE
    329 
    330     sd      t8, STACK_OFFSET_GP(sp)
    331     .cfi_rel_offset 28, STACK_OFFSET_GP
    332     sd      ra, STACK_OFFSET_RA(sp)
    333     .cfi_rel_offset 31, STACK_OFFSET_RA
    334 
    335     sd      s0, STACK_OFFSET_S0(sp)
    336     .cfi_rel_offset 16, STACK_OFFSET_S0
    337     sd      s1, STACK_OFFSET_S1(sp)
    338     .cfi_rel_offset 17, STACK_OFFSET_S1
    339     sd      s2, STACK_OFFSET_S2(sp)
    340     .cfi_rel_offset 18, STACK_OFFSET_S2
    341     sd      s3, STACK_OFFSET_S3(sp)
    342     .cfi_rel_offset 19, STACK_OFFSET_S3
    343     sd      s4, STACK_OFFSET_S4(sp)
    344     .cfi_rel_offset 20, STACK_OFFSET_S4
    345     sd      s5, STACK_OFFSET_S5(sp)
    346     .cfi_rel_offset 21, STACK_OFFSET_S5
    347 
    348     /* Remember the return register */
    349     sd      a3, SHADOWFRAME_RESULT_REGISTER_OFFSET(a2)
    350 
    351     /* Remember the code_item */
    352     sd      a1, SHADOWFRAME_CODE_ITEM_OFFSET(a2)
    353 
    354     /* set up "named" registers */
    355     move    rSELF, a0
    356     daddu   rFP, a2, SHADOWFRAME_VREGS_OFFSET
    357     lw      v0, SHADOWFRAME_NUMBER_OF_VREGS_OFFSET(a2)
    358     dlsa    rREFS, v0, rFP, 2
    359     daddu   rPC, a1, CODEITEM_INSNS_OFFSET
    360     lw      v0, SHADOWFRAME_DEX_PC_OFFSET(a2)
    361     dlsa    rPC, v0, rPC, 1
    362     EXPORT_PC
    363 
    364     /* Starting ibase */
    365     REFRESH_IBASE
    366 
    367     /* start executing the instruction at rPC */
    368     FETCH_INST
    369     GET_INST_OPCODE v0
    370     GOTO_OPCODE v0
    371 
    372     /* NOTE: no fallthrough */
    373 
    374 
    375     .global artMterpAsmInstructionStart
    376     .type   artMterpAsmInstructionStart, %function
    377 artMterpAsmInstructionStart = .L_op_nop
    378     .text
    379 
    380 /* ------------------------------ */
    381     .balign 128
    382 .L_op_nop: /* 0x00 */
    383 /* File: mips64/op_nop.S */
    384     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    385     GET_INST_OPCODE v0                  # extract opcode from rINST
    386     GOTO_OPCODE v0                      # jump to next instruction
    387 
    388 /* ------------------------------ */
    389     .balign 128
    390 .L_op_move: /* 0x01 */
    391 /* File: mips64/op_move.S */
    392     /* for move, move-object, long-to-int */
    393     /* op vA, vB */
    394     ext     a2, rINST, 8, 4             # a2 <- A
    395     ext     a3, rINST, 12, 4            # a3 <- B
    396     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    397     GET_VREG a0, a3                     # a0 <- vB
    398     GET_INST_OPCODE v0                  # extract opcode from rINST
    399     .if 0
    400     SET_VREG_OBJECT a0, a2              # vA <- vB
    401     .else
    402     SET_VREG a0, a2                     # vA <- vB
    403     .endif
    404     GOTO_OPCODE v0                      # jump to next instruction
    405 
    406 /* ------------------------------ */
    407     .balign 128
    408 .L_op_move_from16: /* 0x02 */
    409 /* File: mips64/op_move_from16.S */
    410     /* for: move/from16, move-object/from16 */
    411     /* op vAA, vBBBB */
    412     lhu     a3, 2(rPC)                  # a3 <- BBBB
    413     srl     a2, rINST, 8                # a2 <- AA
    414     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
    415     GET_VREG a0, a3                     # a0 <- vBBBB
    416     GET_INST_OPCODE v0                  # extract opcode from rINST
    417     .if 0
    418     SET_VREG_OBJECT a0, a2              # vAA <- vBBBB
    419     .else
    420     SET_VREG a0, a2                     # vAA <- vBBBB
    421     .endif
    422     GOTO_OPCODE v0                      # jump to next instruction
    423 
    424 /* ------------------------------ */
    425     .balign 128
    426 .L_op_move_16: /* 0x03 */
    427 /* File: mips64/op_move_16.S */
    428     /* for: move/16, move-object/16 */
    429     /* op vAAAA, vBBBB */
    430     lhu     a3, 4(rPC)                  # a3 <- BBBB
    431     lhu     a2, 2(rPC)                  # a2 <- AAAA
    432     FETCH_ADVANCE_INST 3                # advance rPC, load rINST
    433     GET_VREG a0, a3                     # a0 <- vBBBB
    434     GET_INST_OPCODE v0                  # extract opcode from rINST
    435     .if 0
    436     SET_VREG_OBJECT a0, a2              # vAAAA <- vBBBB
    437     .else
    438     SET_VREG a0, a2                     # vAAAA <- vBBBB
    439     .endif
    440     GOTO_OPCODE v0                      # jump to next instruction
    441 
    442 /* ------------------------------ */
    443     .balign 128
    444 .L_op_move_wide: /* 0x04 */
    445 /* File: mips64/op_move_wide.S */
    446     /* move-wide vA, vB */
    447     /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */
    448     ext     a3, rINST, 12, 4            # a3 <- B
    449     ext     a2, rINST, 8, 4             # a2 <- A
    450     GET_VREG_WIDE a0, a3                # a0 <- vB
    451     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    452     GET_INST_OPCODE v0                  # extract opcode from rINST
    453     SET_VREG_WIDE a0, a2                # vA <- vB
    454     GOTO_OPCODE v0                      # jump to next instruction
    455 
    456 /* ------------------------------ */
    457     .balign 128
    458 .L_op_move_wide_from16: /* 0x05 */
    459 /* File: mips64/op_move_wide_from16.S */
    460     /* move-wide/from16 vAA, vBBBB */
    461     /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */
    462     lhu     a3, 2(rPC)                  # a3 <- BBBB
    463     srl     a2, rINST, 8                # a2 <- AA
    464     GET_VREG_WIDE a0, a3                # a0 <- vBBBB
    465     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
    466     GET_INST_OPCODE v0                  # extract opcode from rINST
    467     SET_VREG_WIDE a0, a2                # vAA <- vBBBB
    468     GOTO_OPCODE v0                      # jump to next instruction
    469 
    470 /* ------------------------------ */
    471     .balign 128
    472 .L_op_move_wide_16: /* 0x06 */
    473 /* File: mips64/op_move_wide_16.S */
    474     /* move-wide/16 vAAAA, vBBBB */
    475     /* NOTE: regs can overlap, e.g. "move v6,v7" or "move v7,v6" */
    476     lhu     a3, 4(rPC)                  # a3 <- BBBB
    477     lhu     a2, 2(rPC)                  # a2 <- AAAA
    478     GET_VREG_WIDE a0, a3                # a0 <- vBBBB
    479     FETCH_ADVANCE_INST 3                # advance rPC, load rINST
    480     GET_INST_OPCODE v0                  # extract opcode from rINST
    481     SET_VREG_WIDE a0, a2                # vAAAA <- vBBBB
    482     GOTO_OPCODE v0                      # jump to next instruction
    483 
    484 /* ------------------------------ */
    485     .balign 128
    486 .L_op_move_object: /* 0x07 */
    487 /* File: mips64/op_move_object.S */
    488 /* File: mips64/op_move.S */
    489     /* for move, move-object, long-to-int */
    490     /* op vA, vB */
    491     ext     a2, rINST, 8, 4             # a2 <- A
    492     ext     a3, rINST, 12, 4            # a3 <- B
    493     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    494     GET_VREG a0, a3                     # a0 <- vB
    495     GET_INST_OPCODE v0                  # extract opcode from rINST
    496     .if 1
    497     SET_VREG_OBJECT a0, a2              # vA <- vB
    498     .else
    499     SET_VREG a0, a2                     # vA <- vB
    500     .endif
    501     GOTO_OPCODE v0                      # jump to next instruction
    502 
    503 
    504 /* ------------------------------ */
    505     .balign 128
    506 .L_op_move_object_from16: /* 0x08 */
    507 /* File: mips64/op_move_object_from16.S */
    508 /* File: mips64/op_move_from16.S */
    509     /* for: move/from16, move-object/from16 */
    510     /* op vAA, vBBBB */
    511     lhu     a3, 2(rPC)                  # a3 <- BBBB
    512     srl     a2, rINST, 8                # a2 <- AA
    513     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
    514     GET_VREG a0, a3                     # a0 <- vBBBB
    515     GET_INST_OPCODE v0                  # extract opcode from rINST
    516     .if 1
    517     SET_VREG_OBJECT a0, a2              # vAA <- vBBBB
    518     .else
    519     SET_VREG a0, a2                     # vAA <- vBBBB
    520     .endif
    521     GOTO_OPCODE v0                      # jump to next instruction
    522 
    523 
    524 /* ------------------------------ */
    525     .balign 128
    526 .L_op_move_object_16: /* 0x09 */
    527 /* File: mips64/op_move_object_16.S */
    528 /* File: mips64/op_move_16.S */
    529     /* for: move/16, move-object/16 */
    530     /* op vAAAA, vBBBB */
    531     lhu     a3, 4(rPC)                  # a3 <- BBBB
    532     lhu     a2, 2(rPC)                  # a2 <- AAAA
    533     FETCH_ADVANCE_INST 3                # advance rPC, load rINST
    534     GET_VREG a0, a3                     # a0 <- vBBBB
    535     GET_INST_OPCODE v0                  # extract opcode from rINST
    536     .if 1
    537     SET_VREG_OBJECT a0, a2              # vAAAA <- vBBBB
    538     .else
    539     SET_VREG a0, a2                     # vAAAA <- vBBBB
    540     .endif
    541     GOTO_OPCODE v0                      # jump to next instruction
    542 
    543 
    544 /* ------------------------------ */
    545     .balign 128
    546 .L_op_move_result: /* 0x0a */
    547 /* File: mips64/op_move_result.S */
    548     /* for: move-result, move-result-object */
    549     /* op vAA */
    550     srl     a2, rINST, 8                # a2 <- AA
    551     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    552     ld      a0, OFF_FP_RESULT_REGISTER(rFP)  # get pointer to result JType
    553     lw      a0, 0(a0)                   # a0 <- result.i
    554     GET_INST_OPCODE v0                  # extract opcode from rINST
    555     .if 0
    556     SET_VREG_OBJECT a0, a2              # vAA <- result
    557     .else
    558     SET_VREG a0, a2                     # vAA <- result
    559     .endif
    560     GOTO_OPCODE v0                      # jump to next instruction
    561 
    562 /* ------------------------------ */
    563     .balign 128
    564 .L_op_move_result_wide: /* 0x0b */
    565 /* File: mips64/op_move_result_wide.S */
    566     /* for: move-result-wide */
    567     /* op vAA */
    568     srl     a2, rINST, 8                # a2 <- AA
    569     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    570     ld      a0, OFF_FP_RESULT_REGISTER(rFP)  # get pointer to result JType
    571     ld      a0, 0(a0)                   # a0 <- result.j
    572     GET_INST_OPCODE v0                  # extract opcode from rINST
    573     SET_VREG_WIDE a0, a2                # vAA <- result
    574     GOTO_OPCODE v0                      # jump to next instruction
    575 
    576 /* ------------------------------ */
    577     .balign 128
    578 .L_op_move_result_object: /* 0x0c */
    579 /* File: mips64/op_move_result_object.S */
    580 /* File: mips64/op_move_result.S */
    581     /* for: move-result, move-result-object */
    582     /* op vAA */
    583     srl     a2, rINST, 8                # a2 <- AA
    584     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    585     ld      a0, OFF_FP_RESULT_REGISTER(rFP)  # get pointer to result JType
    586     lw      a0, 0(a0)                   # a0 <- result.i
    587     GET_INST_OPCODE v0                  # extract opcode from rINST
    588     .if 1
    589     SET_VREG_OBJECT a0, a2              # vAA <- result
    590     .else
    591     SET_VREG a0, a2                     # vAA <- result
    592     .endif
    593     GOTO_OPCODE v0                      # jump to next instruction
    594 
    595 
    596 /* ------------------------------ */
    597     .balign 128
    598 .L_op_move_exception: /* 0x0d */
    599 /* File: mips64/op_move_exception.S */
    600     /* move-exception vAA */
    601     srl     a2, rINST, 8                # a2 <- AA
    602     ld      a0, THREAD_EXCEPTION_OFFSET(rSELF)  # load exception obj
    603     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    604     SET_VREG_OBJECT a0, a2              # vAA <- exception obj
    605     GET_INST_OPCODE v0                  # extract opcode from rINST
    606     sd      zero, THREAD_EXCEPTION_OFFSET(rSELF)  # clear exception
    607     GOTO_OPCODE v0                      # jump to next instruction
    608 
    609 /* ------------------------------ */
    610     .balign 128
    611 .L_op_return_void: /* 0x0e */
    612 /* File: mips64/op_return_void.S */
    613     .extern MterpThreadFenceForConstructor
    614     .extern MterpSuspendCheck
    615     jal     MterpThreadFenceForConstructor
    616     lw      ra, THREAD_FLAGS_OFFSET(rSELF)
    617     move    a0, rSELF
    618     and     ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST)
    619     beqzc   ra, 1f
    620     jal     MterpSuspendCheck           # (self)
    621 1:
    622     li      a0, 0
    623     b       MterpReturn
    624 
    625 /* ------------------------------ */
    626     .balign 128
    627 .L_op_return: /* 0x0f */
    628 /* File: mips64/op_return.S */
    629     /*
    630      * Return a 32-bit value.
    631      *
    632      * for: return, return-object
    633      */
    634     /* op vAA */
    635     .extern MterpThreadFenceForConstructor
    636     .extern MterpSuspendCheck
    637     jal     MterpThreadFenceForConstructor
    638     lw      ra, THREAD_FLAGS_OFFSET(rSELF)
    639     move    a0, rSELF
    640     and     ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST)
    641     beqzc   ra, 1f
    642     jal     MterpSuspendCheck           # (self)
    643 1:
    644     srl     a2, rINST, 8                # a2 <- AA
    645     GET_VREG_U a0, a2                   # a0 <- vAA
    646     b       MterpReturn
    647 
    648 /* ------------------------------ */
    649     .balign 128
    650 .L_op_return_wide: /* 0x10 */
    651 /* File: mips64/op_return_wide.S */
    652     /*
    653      * Return a 64-bit value.
    654      */
    655     /* return-wide vAA */
    656     /* op vAA */
    657     .extern MterpThreadFenceForConstructor
    658     .extern MterpSuspendCheck
    659     jal     MterpThreadFenceForConstructor
    660     lw      ra, THREAD_FLAGS_OFFSET(rSELF)
    661     move    a0, rSELF
    662     and     ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST)
    663     beqzc   ra, 1f
    664     jal     MterpSuspendCheck           # (self)
    665 1:
    666     srl     a2, rINST, 8                # a2 <- AA
    667     GET_VREG_WIDE a0, a2                # a0 <- vAA
    668     b       MterpReturn
    669 
    670 /* ------------------------------ */
    671     .balign 128
    672 .L_op_return_object: /* 0x11 */
    673 /* File: mips64/op_return_object.S */
    674 /* File: mips64/op_return.S */
    675     /*
    676      * Return a 32-bit value.
    677      *
    678      * for: return, return-object
    679      */
    680     /* op vAA */
    681     .extern MterpThreadFenceForConstructor
    682     .extern MterpSuspendCheck
    683     jal     MterpThreadFenceForConstructor
    684     lw      ra, THREAD_FLAGS_OFFSET(rSELF)
    685     move    a0, rSELF
    686     and     ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST)
    687     beqzc   ra, 1f
    688     jal     MterpSuspendCheck           # (self)
    689 1:
    690     srl     a2, rINST, 8                # a2 <- AA
    691     GET_VREG_U a0, a2                   # a0 <- vAA
    692     b       MterpReturn
    693 
    694 
    695 /* ------------------------------ */
    696     .balign 128
    697 .L_op_const_4: /* 0x12 */
    698 /* File: mips64/op_const_4.S */
    699     /* const/4 vA, #+B */
    700     ext     a2, rINST, 8, 4             # a2 <- A
    701     seh     a0, rINST                   # sign extend B in rINST
    702     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    703     sra     a0, a0, 12                  # shift B into its final position
    704     GET_INST_OPCODE v0                  # extract opcode from rINST
    705     SET_VREG a0, a2                     # vA <- +B
    706     GOTO_OPCODE v0                      # jump to next instruction
    707 
    708 /* ------------------------------ */
    709     .balign 128
    710 .L_op_const_16: /* 0x13 */
    711 /* File: mips64/op_const_16.S */
    712     /* const/16 vAA, #+BBBB */
    713     srl     a2, rINST, 8                # a2 <- AA
    714     lh      a0, 2(rPC)                  # a0 <- sign-extended BBBB
    715     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
    716     GET_INST_OPCODE v0                  # extract opcode from rINST
    717     SET_VREG a0, a2                     # vAA <- +BBBB
    718     GOTO_OPCODE v0                      # jump to next instruction
    719 
    720 /* ------------------------------ */
    721     .balign 128
    722 .L_op_const: /* 0x14 */
    723 /* File: mips64/op_const.S */
    724     /* const vAA, #+BBBBbbbb */
    725     srl     a2, rINST, 8                # a2 <- AA
    726     lh      a0, 2(rPC)                  # a0 <- bbbb (low)
    727     lh      a1, 4(rPC)                  # a1 <- BBBB (high)
    728     FETCH_ADVANCE_INST 3                # advance rPC, load rINST
    729     ins     a0, a1, 16, 16              # a0 = BBBBbbbb
    730     GET_INST_OPCODE v0                  # extract opcode from rINST
    731     SET_VREG a0, a2                     # vAA <- +BBBBbbbb
    732     GOTO_OPCODE v0                      # jump to next instruction
    733 
    734 /* ------------------------------ */
    735     .balign 128
    736 .L_op_const_high16: /* 0x15 */
    737 /* File: mips64/op_const_high16.S */
    738     /* const/high16 vAA, #+BBBB0000 */
    739     srl     a2, rINST, 8                # a2 <- AA
    740     lh      a0, 2(rPC)                  # a0 <- BBBB
    741     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
    742     sll     a0, a0, 16                  # a0 <- BBBB0000
    743     GET_INST_OPCODE v0                  # extract opcode from rINST
    744     SET_VREG a0, a2                     # vAA <- +BBBB0000
    745     GOTO_OPCODE v0                      # jump to next instruction
    746 
    747 /* ------------------------------ */
    748     .balign 128
    749 .L_op_const_wide_16: /* 0x16 */
    750 /* File: mips64/op_const_wide_16.S */
    751     /* const-wide/16 vAA, #+BBBB */
    752     srl     a2, rINST, 8                # a2 <- AA
    753     lh      a0, 2(rPC)                  # a0 <- sign-extended BBBB
    754     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
    755     GET_INST_OPCODE v0                  # extract opcode from rINST
    756     SET_VREG_WIDE a0, a2                # vAA <- +BBBB
    757     GOTO_OPCODE v0                      # jump to next instruction
    758 
    759 /* ------------------------------ */
    760     .balign 128
    761 .L_op_const_wide_32: /* 0x17 */
    762 /* File: mips64/op_const_wide_32.S */
    763     /* const-wide/32 vAA, #+BBBBbbbb */
    764     srl     a2, rINST, 8                # a2 <- AA
    765     lh      a0, 2(rPC)                  # a0 <- bbbb (low)
    766     lh      a1, 4(rPC)                  # a1 <- BBBB (high)
    767     FETCH_ADVANCE_INST 3                # advance rPC, load rINST
    768     ins     a0, a1, 16, 16              # a0 = BBBBbbbb
    769     GET_INST_OPCODE v0                  # extract opcode from rINST
    770     SET_VREG_WIDE a0, a2                # vAA <- +BBBBbbbb
    771     GOTO_OPCODE v0                      # jump to next instruction
    772 
    773 /* ------------------------------ */
    774     .balign 128
    775 .L_op_const_wide: /* 0x18 */
    776 /* File: mips64/op_const_wide.S */
    777     /* const-wide vAA, #+HHHHhhhhBBBBbbbb */
    778     srl     a4, rINST, 8                # a4 <- AA
    779     lh      a0, 2(rPC)                  # a0 <- bbbb (low)
    780     lh      a1, 4(rPC)                  # a1 <- BBBB (low middle)
    781     lh      a2, 6(rPC)                  # a2 <- hhhh (high middle)
    782     lh      a3, 8(rPC)                  # a3 <- HHHH (high)
    783     FETCH_ADVANCE_INST 5                # advance rPC, load rINST
    784     ins     a0, a1, 16, 16              # a0 = BBBBbbbb
    785     ins     a2, a3, 16, 16              # a2 = HHHHhhhh
    786     dinsu   a0, a2, 32, 32              # a0 = HHHHhhhhBBBBbbbb
    787     GET_INST_OPCODE v0                  # extract opcode from rINST
    788     SET_VREG_WIDE a0, a4                # vAA <- +HHHHhhhhBBBBbbbb
    789     GOTO_OPCODE v0                      # jump to next instruction
    790 
    791 /* ------------------------------ */
    792     .balign 128
    793 .L_op_const_wide_high16: /* 0x19 */
    794 /* File: mips64/op_const_wide_high16.S */
    795     /* const-wide/high16 vAA, #+BBBB000000000000 */
    796     srl     a2, rINST, 8                # a2 <- AA
    797     lh      a0, 2(rPC)                  # a0 <- BBBB
    798     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
    799     dsll32  a0, a0, 16                  # a0 <- BBBB000000000000
    800     GET_INST_OPCODE v0                  # extract opcode from rINST
    801     SET_VREG_WIDE a0, a2                # vAA <- +BBBB000000000000
    802     GOTO_OPCODE v0                      # jump to next instruction
    803 
    804 /* ------------------------------ */
    805     .balign 128
    806 .L_op_const_string: /* 0x1a */
    807 /* File: mips64/op_const_string.S */
    808     /* const/string vAA, String//BBBB */
    809     .extern MterpConstString
    810     EXPORT_PC
    811     lhu     a0, 2(rPC)                  # a0 <- BBBB
    812     srl     a1, rINST, 8                # a1 <- AA
    813     daddu   a2, rFP, OFF_FP_SHADOWFRAME
    814     move    a3, rSELF
    815     jal     MterpConstString            # (index, tgt_reg, shadow_frame, self)
    816     PREFETCH_INST 2                     # load rINST
    817     bnez    v0, MterpPossibleException  # let reference interpreter deal with it.
    818     ADVANCE 2                           # advance rPC
    819     GET_INST_OPCODE v0                  # extract opcode from rINST
    820     GOTO_OPCODE v0                      # jump to next instruction
    821 
    822 /* ------------------------------ */
    823     .balign 128
    824 .L_op_const_string_jumbo: /* 0x1b */
    825 /* File: mips64/op_const_string_jumbo.S */
    826     /* const/string vAA, String//BBBBBBBB */
    827     .extern MterpConstString
    828     EXPORT_PC
    829     lh      a0, 2(rPC)                  # a0 <- bbbb (low)
    830     lh      a4, 4(rPC)                  # a4 <- BBBB (high)
    831     srl     a1, rINST, 8                # a1 <- AA
    832     ins     a0, a4, 16, 16              # a0 <- BBBBbbbb
    833     daddu   a2, rFP, OFF_FP_SHADOWFRAME
    834     move    a3, rSELF
    835     jal     MterpConstString            # (index, tgt_reg, shadow_frame, self)
    836     PREFETCH_INST 3                     # load rINST
    837     bnez    v0, MterpPossibleException  # let reference interpreter deal with it.
    838     ADVANCE 3                           # advance rPC
    839     GET_INST_OPCODE v0                  # extract opcode from rINST
    840     GOTO_OPCODE v0                      # jump to next instruction
    841 
    842 /* ------------------------------ */
    843     .balign 128
    844 .L_op_const_class: /* 0x1c */
    845 /* File: mips64/op_const_class.S */
    846     /* const/class vAA, Class//BBBB */
    847     .extern MterpConstClass
    848     EXPORT_PC
    849     lhu     a0, 2(rPC)                  # a0 <- BBBB
    850     srl     a1, rINST, 8                # a1 <- AA
    851     daddu   a2, rFP, OFF_FP_SHADOWFRAME
    852     move    a3, rSELF
    853     jal     MterpConstClass             # (index, tgt_reg, shadow_frame, self)
    854     PREFETCH_INST 2                     # load rINST
    855     bnez    v0, MterpPossibleException  # let reference interpreter deal with it.
    856     ADVANCE 2                           # advance rPC
    857     GET_INST_OPCODE v0                  # extract opcode from rINST
    858     GOTO_OPCODE v0                      # jump to next instruction
    859 
    860 /* ------------------------------ */
    861     .balign 128
    862 .L_op_monitor_enter: /* 0x1d */
    863 /* File: mips64/op_monitor_enter.S */
    864     /*
    865      * Synchronize on an object.
    866      */
    867     /* monitor-enter vAA */
    868     .extern artLockObjectFromCode
    869     EXPORT_PC
    870     srl     a2, rINST, 8                # a2 <- AA
    871     GET_VREG_U a0, a2                   # a0 <- vAA (object)
    872     move    a1, rSELF                   # a1 <- self
    873     jal     artLockObjectFromCode
    874     bnezc   v0, MterpException
    875     FETCH_ADVANCE_INST 1
    876     GET_INST_OPCODE v0                  # extract opcode from rINST
    877     GOTO_OPCODE v0                      # jump to next instruction
    878 
    879 /* ------------------------------ */
    880     .balign 128
    881 .L_op_monitor_exit: /* 0x1e */
    882 /* File: mips64/op_monitor_exit.S */
    883     /*
    884      * Unlock an object.
    885      *
    886      * Exceptions that occur when unlocking a monitor need to appear as
    887      * if they happened at the following instruction.  See the Dalvik
    888      * instruction spec.
    889      */
    890     /* monitor-exit vAA */
    891     .extern artUnlockObjectFromCode
    892     EXPORT_PC
    893     srl     a2, rINST, 8                # a2 <- AA
    894     GET_VREG_U a0, a2                   # a0 <- vAA (object)
    895     move    a1, rSELF                   # a1 <- self
    896     jal     artUnlockObjectFromCode     # v0 <- success for unlock(self, obj)
    897     bnezc   v0, MterpException
    898     FETCH_ADVANCE_INST 1                # before throw: advance rPC, load rINST
    899     GET_INST_OPCODE v0                  # extract opcode from rINST
    900     GOTO_OPCODE v0                      # jump to next instruction
    901 
    902 /* ------------------------------ */
    903     .balign 128
    904 .L_op_check_cast: /* 0x1f */
    905 /* File: mips64/op_check_cast.S */
    906     /*
    907      * Check to see if a cast from one class to another is allowed.
    908      */
    909     /* check-cast vAA, class//BBBB */
    910     .extern MterpCheckCast
    911     EXPORT_PC
    912     lhu     a0, 2(rPC)                  # a0 <- BBBB
    913     srl     a1, rINST, 8                # a1 <- AA
    914     dlsa    a1, a1, rFP, 2              # a1 <- &object
    915     ld      a2, OFF_FP_METHOD(rFP)      # a2 <- method
    916     move    a3, rSELF                   # a3 <- self
    917     jal     MterpCheckCast              # (index, &obj, method, self)
    918     PREFETCH_INST 2
    919     bnez    v0, MterpPossibleException
    920     ADVANCE 2
    921     GET_INST_OPCODE v0                  # extract opcode from rINST
    922     GOTO_OPCODE v0                      # jump to next instruction
    923 
    924 /* ------------------------------ */
    925     .balign 128
    926 .L_op_instance_of: /* 0x20 */
    927 /* File: mips64/op_instance_of.S */
    928     /*
    929      * Check to see if an object reference is an instance of a class.
    930      *
    931      * Most common situation is a non-null object, being compared against
    932      * an already-resolved class.
    933      */
    934     /* instance-of vA, vB, class//CCCC */
    935     .extern MterpInstanceOf
    936     EXPORT_PC
    937     lhu     a0, 2(rPC)                  # a0 <- CCCC
    938     srl     a1, rINST, 12               # a1 <- B
    939     dlsa    a1, a1, rFP, 2              # a1 <- &object
    940     ld      a2, OFF_FP_METHOD(rFP)      # a2 <- method
    941     move    a3, rSELF                   # a3 <- self
    942     jal     MterpInstanceOf             # (index, &obj, method, self)
    943     ld      a1, THREAD_EXCEPTION_OFFSET(rSELF)
    944     ext     a2, rINST, 8, 4             # a2 <- A
    945     PREFETCH_INST 2
    946     bnez    a1, MterpException
    947     ADVANCE 2                           # advance rPC
    948     SET_VREG v0, a2                     # vA <- v0
    949     GET_INST_OPCODE v0                  # extract opcode from rINST
    950     GOTO_OPCODE v0                      # jump to next instruction
    951 
    952 /* ------------------------------ */
    953     .balign 128
    954 .L_op_array_length: /* 0x21 */
    955 /* File: mips64/op_array_length.S */
    956     /*
    957      * Return the length of an array.
    958      */
    959     srl     a1, rINST, 12               # a1 <- B
    960     GET_VREG_U a0, a1                   # a0 <- vB (object ref)
    961     ext     a2, rINST, 8, 4             # a2 <- A
    962     beqz    a0, common_errNullObject    # yup, fail
    963     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
    964     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- array length
    965     GET_INST_OPCODE v0                  # extract opcode from rINST
    966     SET_VREG a3, a2                     # vB <- length
    967     GOTO_OPCODE v0                      # jump to next instruction
    968 
    969 /* ------------------------------ */
    970     .balign 128
    971 .L_op_new_instance: /* 0x22 */
    972 /* File: mips64/op_new_instance.S */
    973     /*
    974      * Create a new instance of a class.
    975      */
    976     /* new-instance vAA, class//BBBB */
    977     .extern MterpNewInstance
    978     EXPORT_PC
    979     daddu   a0, rFP, OFF_FP_SHADOWFRAME
    980     move    a1, rSELF
    981     move    a2, rINST
    982     jal     MterpNewInstance            # (shadow_frame, self, inst_data)
    983     beqzc   v0, MterpPossibleException
    984     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
    985     GET_INST_OPCODE v0                  # extract opcode from rINST
    986     GOTO_OPCODE v0                      # jump to next instruction
    987 
    988 /* ------------------------------ */
    989     .balign 128
    990 .L_op_new_array: /* 0x23 */
    991 /* File: mips64/op_new_array.S */
    992     /*
    993      * Allocate an array of objects, specified with the array class
    994      * and a count.
    995      *
    996      * The verifier guarantees that this is an array class, so we don't
    997      * check for it here.
    998      */
    999     /* new-array vA, vB, class//CCCC */
   1000     .extern MterpNewArray
   1001     EXPORT_PC
   1002     daddu   a0, rFP, OFF_FP_SHADOWFRAME
   1003     move    a1, rPC
   1004     move    a2, rINST
   1005     move    a3, rSELF
   1006     jal     MterpNewArray
   1007     beqzc   v0, MterpPossibleException
   1008     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   1009     GET_INST_OPCODE v0                  # extract opcode from rINST
   1010     GOTO_OPCODE v0                      # jump to next instruction
   1011 
   1012 /* ------------------------------ */
   1013     .balign 128
   1014 .L_op_filled_new_array: /* 0x24 */
   1015 /* File: mips64/op_filled_new_array.S */
   1016     /*
   1017      * Create a new array with elements filled from registers.
   1018      *
   1019      * for: filled-new-array, filled-new-array/range
   1020      */
   1021     /* op vB, {vD, vE, vF, vG, vA}, class//CCCC */
   1022     /* op {vCCCC..v(CCCC+AA-1)}, type//BBBB */
   1023     .extern MterpFilledNewArray
   1024     EXPORT_PC
   1025     daddu   a0, rFP, OFF_FP_SHADOWFRAME
   1026     move    a1, rPC
   1027     move    a2, rSELF
   1028     jal     MterpFilledNewArray
   1029     beqzc   v0, MterpPossibleException
   1030     FETCH_ADVANCE_INST 3                # advance rPC, load rINST
   1031     GET_INST_OPCODE v0                  # extract opcode from rINST
   1032     GOTO_OPCODE v0                      # jump to next instruction
   1033 
   1034 /* ------------------------------ */
   1035     .balign 128
   1036 .L_op_filled_new_array_range: /* 0x25 */
   1037 /* File: mips64/op_filled_new_array_range.S */
   1038 /* File: mips64/op_filled_new_array.S */
   1039     /*
   1040      * Create a new array with elements filled from registers.
   1041      *
   1042      * for: filled-new-array, filled-new-array/range
   1043      */
   1044     /* op vB, {vD, vE, vF, vG, vA}, class//CCCC */
   1045     /* op {vCCCC..v(CCCC+AA-1)}, type//BBBB */
   1046     .extern MterpFilledNewArrayRange
   1047     EXPORT_PC
   1048     daddu   a0, rFP, OFF_FP_SHADOWFRAME
   1049     move    a1, rPC
   1050     move    a2, rSELF
   1051     jal     MterpFilledNewArrayRange
   1052     beqzc   v0, MterpPossibleException
   1053     FETCH_ADVANCE_INST 3                # advance rPC, load rINST
   1054     GET_INST_OPCODE v0                  # extract opcode from rINST
   1055     GOTO_OPCODE v0                      # jump to next instruction
   1056 
   1057 
   1058 /* ------------------------------ */
   1059     .balign 128
   1060 .L_op_fill_array_data: /* 0x26 */
   1061 /* File: mips64/op_fill_array_data.S */
   1062     /* fill-array-data vAA, +BBBBBBBB */
   1063     .extern MterpFillArrayData
   1064     EXPORT_PC
   1065     lh      a1, 2(rPC)                  # a1 <- bbbb (lo)
   1066     lh      a0, 4(rPC)                  # a0 <- BBBB (hi)
   1067     srl     a3, rINST, 8                # a3 <- AA
   1068     ins     a1, a0, 16, 16              # a1 <- BBBBbbbb
   1069     GET_VREG_U a0, a3                   # a0 <- vAA (array object)
   1070     dlsa    a1, a1, rPC, 1              # a1 <- PC + BBBBbbbb*2 (array data off.)
   1071     jal     MterpFillArrayData          # (obj, payload)
   1072     beqzc   v0, MterpPossibleException  # exception?
   1073     FETCH_ADVANCE_INST 3                # advance rPC, load rINST
   1074     GET_INST_OPCODE v0                  # extract opcode from rINST
   1075     GOTO_OPCODE v0                      # jump to next instruction
   1076 
   1077 /* ------------------------------ */
   1078     .balign 128
   1079 .L_op_throw: /* 0x27 */
   1080 /* File: mips64/op_throw.S */
   1081     /*
   1082      * Throw an exception object in the current thread.
   1083      */
   1084     /* throw vAA */
   1085     EXPORT_PC
   1086     srl     a2, rINST, 8                # a2 <- AA
   1087     GET_VREG_U a0, a2                   # a0 <- vAA (exception object)
   1088     beqzc   a0, common_errNullObject
   1089     sd      a0, THREAD_EXCEPTION_OFFSET(rSELF)  # thread->exception <- obj
   1090     b       MterpException
   1091 
   1092 /* ------------------------------ */
   1093     .balign 128
   1094 .L_op_goto: /* 0x28 */
   1095 /* File: mips64/op_goto.S */
   1096     /*
   1097      * Unconditional branch, 8-bit offset.
   1098      *
   1099      * The branch distance is a signed code-unit offset, which we need to
   1100      * double to get a byte offset.
   1101      */
   1102     /* goto +AA */
   1103     .extern MterpProfileBranch
   1104     srl     rINST, rINST, 8
   1105     seb     rINST, rINST                # rINST <- offset (sign-extended AA)
   1106 #if MTERP_PROFILE_BRANCHES
   1107     EXPORT_PC
   1108     move    a0, rSELF
   1109     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1110     move    a2, rINST
   1111     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1112     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1113 #endif
   1114     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1115     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1116     move    a0, rINST                   # a0 <- offset
   1117     FETCH_INST                          # load rINST
   1118     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1119     GET_INST_OPCODE v0                  # extract opcode from rINST
   1120     GOTO_OPCODE v0                      # jump to next instruction
   1121 
   1122 /* ------------------------------ */
   1123     .balign 128
   1124 .L_op_goto_16: /* 0x29 */
   1125 /* File: mips64/op_goto_16.S */
   1126     /*
   1127      * Unconditional branch, 16-bit offset.
   1128      *
   1129      * The branch distance is a signed code-unit offset, which we need to
   1130      * double to get a byte offset.
   1131      */
   1132     /* goto/16 +AAAA */
   1133     .extern MterpProfileBranch
   1134     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended AAAA)
   1135 #if MTERP_PROFILE_BRANCHES
   1136     EXPORT_PC
   1137     move    a0, rSELF
   1138     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1139     move    a2, rINST
   1140     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1141     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1142 #endif
   1143     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1144     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1145     move    a0, rINST                   # a0 <- offset
   1146     FETCH_INST                          # load rINST
   1147     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1148     GET_INST_OPCODE v0                  # extract opcode from rINST
   1149     GOTO_OPCODE v0                      # jump to next instruction
   1150 
   1151 /* ------------------------------ */
   1152     .balign 128
   1153 .L_op_goto_32: /* 0x2a */
   1154 /* File: mips64/op_goto_32.S */
   1155     /*
   1156      * Unconditional branch, 32-bit offset.
   1157      *
   1158      * The branch distance is a signed code-unit offset, which we need to
   1159      * double to get a byte offset.
   1160      *
   1161      * Unlike most opcodes, this one is allowed to branch to itself, so
   1162      * our "backward branch" test must be "<=0" instead of "<0".
   1163      */
   1164     /* goto/32 +AAAAAAAA */
   1165     .extern MterpProfileBranch
   1166     lh      rINST, 2(rPC)               # rINST <- aaaa (low)
   1167     lh      a1, 4(rPC)                  # a1 <- AAAA (high)
   1168     ins     rINST, a1, 16, 16           # rINST <- offset (sign-extended AAAAaaaa)
   1169 #if MTERP_PROFILE_BRANCHES
   1170     EXPORT_PC
   1171     move    a0, rSELF
   1172     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1173     move    a2, rINST
   1174     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1175     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1176 #endif
   1177     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1178     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1179     move    a0, rINST                   # a0 <- offset
   1180     FETCH_INST                          # load rINST
   1181     blez    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1182     GET_INST_OPCODE v0                  # extract opcode from rINST
   1183     GOTO_OPCODE v0                      # jump to next instruction
   1184 
   1185 /* ------------------------------ */
   1186     .balign 128
   1187 .L_op_packed_switch: /* 0x2b */
   1188 /* File: mips64/op_packed_switch.S */
   1189     /*
   1190      * Handle a packed-switch or sparse-switch instruction.  In both cases
   1191      * we decode it and hand it off to a helper function.
   1192      *
   1193      * We don't really expect backward branches in a switch statement, but
   1194      * they're perfectly legal, so we check for them here.
   1195      *
   1196      * for: packed-switch, sparse-switch
   1197      */
   1198     /* op vAA, +BBBBBBBB */
   1199     .extern MterpDoPackedSwitch
   1200     .extern MterpProfileBranch
   1201     lh      a0, 2(rPC)                  # a0 <- bbbb (lo)
   1202     lh      a1, 4(rPC)                  # a1 <- BBBB (hi)
   1203     srl     a3, rINST, 8                # a3 <- AA
   1204     ins     a0, a1, 16, 16              # a0 <- BBBBbbbb
   1205     GET_VREG a1, a3                     # a1 <- vAA
   1206     dlsa    a0, a0, rPC, 1              # a0 <- PC + BBBBbbbb*2
   1207     jal     MterpDoPackedSwitch                       # v0 <- code-unit branch offset
   1208     move    rINST, v0
   1209 #if MTERP_PROFILE_BRANCHES
   1210     EXPORT_PC
   1211     move    a0, rSELF
   1212     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1213     move    a2, rINST
   1214     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1215     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1216 #endif
   1217     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1218     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1219     move    a0, rINST                   # a0 <- offset
   1220     FETCH_INST                          # load rINST
   1221     blez    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1222     GET_INST_OPCODE v0                  # extract opcode from rINST
   1223     GOTO_OPCODE v0                      # jump to next instruction
   1224 
   1225 /* ------------------------------ */
   1226     .balign 128
   1227 .L_op_sparse_switch: /* 0x2c */
   1228 /* File: mips64/op_sparse_switch.S */
   1229 /* File: mips64/op_packed_switch.S */
   1230     /*
   1231      * Handle a packed-switch or sparse-switch instruction.  In both cases
   1232      * we decode it and hand it off to a helper function.
   1233      *
   1234      * We don't really expect backward branches in a switch statement, but
   1235      * they're perfectly legal, so we check for them here.
   1236      *
   1237      * for: packed-switch, sparse-switch
   1238      */
   1239     /* op vAA, +BBBBBBBB */
   1240     .extern MterpDoSparseSwitch
   1241     .extern MterpProfileBranch
   1242     lh      a0, 2(rPC)                  # a0 <- bbbb (lo)
   1243     lh      a1, 4(rPC)                  # a1 <- BBBB (hi)
   1244     srl     a3, rINST, 8                # a3 <- AA
   1245     ins     a0, a1, 16, 16              # a0 <- BBBBbbbb
   1246     GET_VREG a1, a3                     # a1 <- vAA
   1247     dlsa    a0, a0, rPC, 1              # a0 <- PC + BBBBbbbb*2
   1248     jal     MterpDoSparseSwitch                       # v0 <- code-unit branch offset
   1249     move    rINST, v0
   1250 #if MTERP_PROFILE_BRANCHES
   1251     EXPORT_PC
   1252     move    a0, rSELF
   1253     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1254     move    a2, rINST
   1255     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1256     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1257 #endif
   1258     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1259     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1260     move    a0, rINST                   # a0 <- offset
   1261     FETCH_INST                          # load rINST
   1262     blez    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1263     GET_INST_OPCODE v0                  # extract opcode from rINST
   1264     GOTO_OPCODE v0                      # jump to next instruction
   1265 
   1266 
   1267 /* ------------------------------ */
   1268     .balign 128
   1269 .L_op_cmpl_float: /* 0x2d */
   1270 /* File: mips64/op_cmpl_float.S */
   1271 /* File: mips64/fcmp.S */
   1272     /*
   1273      * Compare two floating-point values.  Puts 0, 1, or -1 into the
   1274      * destination register based on the results of the comparison.
   1275      *
   1276      * For: cmpl-float, cmpg-float
   1277      */
   1278     /* op vAA, vBB, vCC */
   1279     srl     a4, rINST, 8                # a4 <- AA
   1280     lbu     a2, 2(rPC)                  # a2 <- BB
   1281     lbu     a3, 3(rPC)                  # a3 <- CC
   1282     GET_VREG_FLOAT f0, a2               # f0 <- vBB
   1283     GET_VREG_FLOAT f1, a3               # f1 <- vCC
   1284     cmp.eq.s f2, f0, f1
   1285     li      a0, 0
   1286     bc1nez  f2, 1f                      # done if vBB == vCC (ordered)
   1287     .if 0
   1288     cmp.lt.s f2, f0, f1
   1289     li      a0, -1
   1290     bc1nez  f2, 1f                      # done if vBB < vCC (ordered)
   1291     li      a0, 1                       # vBB > vCC or unordered
   1292     .else
   1293     cmp.lt.s f2, f1, f0
   1294     li      a0, 1
   1295     bc1nez  f2, 1f                      # done if vBB > vCC (ordered)
   1296     li      a0, -1                      # vBB < vCC or unordered
   1297     .endif
   1298 1:
   1299     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   1300     GET_INST_OPCODE v0                  # extract opcode from rINST
   1301     SET_VREG a0, a4                     # vAA <- a0
   1302     GOTO_OPCODE v0                      # jump to next instruction
   1303 
   1304 
   1305 /* ------------------------------ */
   1306     .balign 128
   1307 .L_op_cmpg_float: /* 0x2e */
   1308 /* File: mips64/op_cmpg_float.S */
   1309 /* File: mips64/fcmp.S */
   1310     /*
   1311      * Compare two floating-point values.  Puts 0, 1, or -1 into the
   1312      * destination register based on the results of the comparison.
   1313      *
   1314      * For: cmpl-float, cmpg-float
   1315      */
   1316     /* op vAA, vBB, vCC */
   1317     srl     a4, rINST, 8                # a4 <- AA
   1318     lbu     a2, 2(rPC)                  # a2 <- BB
   1319     lbu     a3, 3(rPC)                  # a3 <- CC
   1320     GET_VREG_FLOAT f0, a2               # f0 <- vBB
   1321     GET_VREG_FLOAT f1, a3               # f1 <- vCC
   1322     cmp.eq.s f2, f0, f1
   1323     li      a0, 0
   1324     bc1nez  f2, 1f                      # done if vBB == vCC (ordered)
   1325     .if 1
   1326     cmp.lt.s f2, f0, f1
   1327     li      a0, -1
   1328     bc1nez  f2, 1f                      # done if vBB < vCC (ordered)
   1329     li      a0, 1                       # vBB > vCC or unordered
   1330     .else
   1331     cmp.lt.s f2, f1, f0
   1332     li      a0, 1
   1333     bc1nez  f2, 1f                      # done if vBB > vCC (ordered)
   1334     li      a0, -1                      # vBB < vCC or unordered
   1335     .endif
   1336 1:
   1337     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   1338     GET_INST_OPCODE v0                  # extract opcode from rINST
   1339     SET_VREG a0, a4                     # vAA <- a0
   1340     GOTO_OPCODE v0                      # jump to next instruction
   1341 
   1342 
   1343 /* ------------------------------ */
   1344     .balign 128
   1345 .L_op_cmpl_double: /* 0x2f */
   1346 /* File: mips64/op_cmpl_double.S */
   1347 /* File: mips64/fcmpWide.S */
   1348     /*
   1349      * Compare two floating-point values.  Puts 0, 1, or -1 into the
   1350      * destination register based on the results of the comparison.
   1351      *
   1352      * For: cmpl-double, cmpg-double
   1353      */
   1354     /* op vAA, vBB, vCC */
   1355     srl     a4, rINST, 8                # a4 <- AA
   1356     lbu     a2, 2(rPC)                  # a2 <- BB
   1357     lbu     a3, 3(rPC)                  # a3 <- CC
   1358     GET_VREG_DOUBLE f0, a2              # f0 <- vBB
   1359     GET_VREG_DOUBLE f1, a3              # f1 <- vCC
   1360     cmp.eq.d f2, f0, f1
   1361     li      a0, 0
   1362     bc1nez  f2, 1f                      # done if vBB == vCC (ordered)
   1363     .if 0
   1364     cmp.lt.d f2, f0, f1
   1365     li      a0, -1
   1366     bc1nez  f2, 1f                      # done if vBB < vCC (ordered)
   1367     li      a0, 1                       # vBB > vCC or unordered
   1368     .else
   1369     cmp.lt.d f2, f1, f0
   1370     li      a0, 1
   1371     bc1nez  f2, 1f                      # done if vBB > vCC (ordered)
   1372     li      a0, -1                      # vBB < vCC or unordered
   1373     .endif
   1374 1:
   1375     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   1376     GET_INST_OPCODE v0                  # extract opcode from rINST
   1377     SET_VREG a0, a4                     # vAA <- a0
   1378     GOTO_OPCODE v0                      # jump to next instruction
   1379 
   1380 
   1381 /* ------------------------------ */
   1382     .balign 128
   1383 .L_op_cmpg_double: /* 0x30 */
   1384 /* File: mips64/op_cmpg_double.S */
   1385 /* File: mips64/fcmpWide.S */
   1386     /*
   1387      * Compare two floating-point values.  Puts 0, 1, or -1 into the
   1388      * destination register based on the results of the comparison.
   1389      *
   1390      * For: cmpl-double, cmpg-double
   1391      */
   1392     /* op vAA, vBB, vCC */
   1393     srl     a4, rINST, 8                # a4 <- AA
   1394     lbu     a2, 2(rPC)                  # a2 <- BB
   1395     lbu     a3, 3(rPC)                  # a3 <- CC
   1396     GET_VREG_DOUBLE f0, a2              # f0 <- vBB
   1397     GET_VREG_DOUBLE f1, a3              # f1 <- vCC
   1398     cmp.eq.d f2, f0, f1
   1399     li      a0, 0
   1400     bc1nez  f2, 1f                      # done if vBB == vCC (ordered)
   1401     .if 1
   1402     cmp.lt.d f2, f0, f1
   1403     li      a0, -1
   1404     bc1nez  f2, 1f                      # done if vBB < vCC (ordered)
   1405     li      a0, 1                       # vBB > vCC or unordered
   1406     .else
   1407     cmp.lt.d f2, f1, f0
   1408     li      a0, 1
   1409     bc1nez  f2, 1f                      # done if vBB > vCC (ordered)
   1410     li      a0, -1                      # vBB < vCC or unordered
   1411     .endif
   1412 1:
   1413     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   1414     GET_INST_OPCODE v0                  # extract opcode from rINST
   1415     SET_VREG a0, a4                     # vAA <- a0
   1416     GOTO_OPCODE v0                      # jump to next instruction
   1417 
   1418 
   1419 /* ------------------------------ */
   1420     .balign 128
   1421 .L_op_cmp_long: /* 0x31 */
   1422 /* File: mips64/op_cmp_long.S */
   1423     /* cmp-long vAA, vBB, vCC */
   1424     lbu     a2, 2(rPC)                  # a2 <- BB
   1425     lbu     a3, 3(rPC)                  # a3 <- CC
   1426     srl     a4, rINST, 8                # a4 <- AA
   1427     GET_VREG_WIDE a0, a2                # a0 <- vBB
   1428     GET_VREG_WIDE a1, a3                # a1 <- vCC
   1429     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   1430     slt     a2, a0, a1
   1431     slt     a0, a1, a0
   1432     subu    a0, a0, a2
   1433     GET_INST_OPCODE v0                  # extract opcode from rINST
   1434     SET_VREG a0, a4                     # vAA <- result
   1435     GOTO_OPCODE v0                      # jump to next instruction
   1436 
   1437 /* ------------------------------ */
   1438     .balign 128
   1439 .L_op_if_eq: /* 0x32 */
   1440 /* File: mips64/op_if_eq.S */
   1441 /* File: mips64/bincmp.S */
   1442     /*
   1443      * Generic two-operand compare-and-branch operation.  Provide a "condition"
   1444      * fragment that specifies the comparison to perform, e.g. for
   1445      * "if-le" you would use "le".
   1446      *
   1447      * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
   1448      */
   1449     /* if-cmp vA, vB, +CCCC */
   1450     .extern MterpProfileBranch
   1451     ext     a2, rINST, 8, 4             # a2 <- A
   1452     ext     a3, rINST, 12, 4            # a3 <- B
   1453     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended CCCC)
   1454     GET_VREG a0, a2                     # a0 <- vA
   1455     GET_VREG a1, a3                     # a1 <- vB
   1456     beqc a0, a1, 1f
   1457     li      rINST, 2                    # offset if branch not taken
   1458 1:
   1459 #if MTERP_PROFILE_BRANCHES
   1460     EXPORT_PC
   1461     move    a0, rSELF
   1462     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1463     move    a2, rINST
   1464     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1465     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1466 #endif
   1467     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1468     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1469     move    a0, rINST                   # a0 <- offset
   1470     FETCH_INST                          # load rINST
   1471     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1472     GET_INST_OPCODE v0                  # extract opcode from rINST
   1473     GOTO_OPCODE v0                      # jump to next instruction
   1474 
   1475 
   1476 /* ------------------------------ */
   1477     .balign 128
   1478 .L_op_if_ne: /* 0x33 */
   1479 /* File: mips64/op_if_ne.S */
   1480 /* File: mips64/bincmp.S */
   1481     /*
   1482      * Generic two-operand compare-and-branch operation.  Provide a "condition"
   1483      * fragment that specifies the comparison to perform, e.g. for
   1484      * "if-le" you would use "le".
   1485      *
   1486      * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
   1487      */
   1488     /* if-cmp vA, vB, +CCCC */
   1489     .extern MterpProfileBranch
   1490     ext     a2, rINST, 8, 4             # a2 <- A
   1491     ext     a3, rINST, 12, 4            # a3 <- B
   1492     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended CCCC)
   1493     GET_VREG a0, a2                     # a0 <- vA
   1494     GET_VREG a1, a3                     # a1 <- vB
   1495     bnec a0, a1, 1f
   1496     li      rINST, 2                    # offset if branch not taken
   1497 1:
   1498 #if MTERP_PROFILE_BRANCHES
   1499     EXPORT_PC
   1500     move    a0, rSELF
   1501     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1502     move    a2, rINST
   1503     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1504     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1505 #endif
   1506     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1507     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1508     move    a0, rINST                   # a0 <- offset
   1509     FETCH_INST                          # load rINST
   1510     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1511     GET_INST_OPCODE v0                  # extract opcode from rINST
   1512     GOTO_OPCODE v0                      # jump to next instruction
   1513 
   1514 
   1515 /* ------------------------------ */
   1516     .balign 128
   1517 .L_op_if_lt: /* 0x34 */
   1518 /* File: mips64/op_if_lt.S */
   1519 /* File: mips64/bincmp.S */
   1520     /*
   1521      * Generic two-operand compare-and-branch operation.  Provide a "condition"
   1522      * fragment that specifies the comparison to perform, e.g. for
   1523      * "if-le" you would use "le".
   1524      *
   1525      * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
   1526      */
   1527     /* if-cmp vA, vB, +CCCC */
   1528     .extern MterpProfileBranch
   1529     ext     a2, rINST, 8, 4             # a2 <- A
   1530     ext     a3, rINST, 12, 4            # a3 <- B
   1531     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended CCCC)
   1532     GET_VREG a0, a2                     # a0 <- vA
   1533     GET_VREG a1, a3                     # a1 <- vB
   1534     bltc a0, a1, 1f
   1535     li      rINST, 2                    # offset if branch not taken
   1536 1:
   1537 #if MTERP_PROFILE_BRANCHES
   1538     EXPORT_PC
   1539     move    a0, rSELF
   1540     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1541     move    a2, rINST
   1542     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1543     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1544 #endif
   1545     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1546     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1547     move    a0, rINST                   # a0 <- offset
   1548     FETCH_INST                          # load rINST
   1549     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1550     GET_INST_OPCODE v0                  # extract opcode from rINST
   1551     GOTO_OPCODE v0                      # jump to next instruction
   1552 
   1553 
   1554 /* ------------------------------ */
   1555     .balign 128
   1556 .L_op_if_ge: /* 0x35 */
   1557 /* File: mips64/op_if_ge.S */
   1558 /* File: mips64/bincmp.S */
   1559     /*
   1560      * Generic two-operand compare-and-branch operation.  Provide a "condition"
   1561      * fragment that specifies the comparison to perform, e.g. for
   1562      * "if-le" you would use "le".
   1563      *
   1564      * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
   1565      */
   1566     /* if-cmp vA, vB, +CCCC */
   1567     .extern MterpProfileBranch
   1568     ext     a2, rINST, 8, 4             # a2 <- A
   1569     ext     a3, rINST, 12, 4            # a3 <- B
   1570     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended CCCC)
   1571     GET_VREG a0, a2                     # a0 <- vA
   1572     GET_VREG a1, a3                     # a1 <- vB
   1573     bgec a0, a1, 1f
   1574     li      rINST, 2                    # offset if branch not taken
   1575 1:
   1576 #if MTERP_PROFILE_BRANCHES
   1577     EXPORT_PC
   1578     move    a0, rSELF
   1579     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1580     move    a2, rINST
   1581     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1582     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1583 #endif
   1584     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1585     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1586     move    a0, rINST                   # a0 <- offset
   1587     FETCH_INST                          # load rINST
   1588     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1589     GET_INST_OPCODE v0                  # extract opcode from rINST
   1590     GOTO_OPCODE v0                      # jump to next instruction
   1591 
   1592 
   1593 /* ------------------------------ */
   1594     .balign 128
   1595 .L_op_if_gt: /* 0x36 */
   1596 /* File: mips64/op_if_gt.S */
   1597 /* File: mips64/bincmp.S */
   1598     /*
   1599      * Generic two-operand compare-and-branch operation.  Provide a "condition"
   1600      * fragment that specifies the comparison to perform, e.g. for
   1601      * "if-le" you would use "le".
   1602      *
   1603      * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
   1604      */
   1605     /* if-cmp vA, vB, +CCCC */
   1606     .extern MterpProfileBranch
   1607     ext     a2, rINST, 8, 4             # a2 <- A
   1608     ext     a3, rINST, 12, 4            # a3 <- B
   1609     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended CCCC)
   1610     GET_VREG a0, a2                     # a0 <- vA
   1611     GET_VREG a1, a3                     # a1 <- vB
   1612     bgtc a0, a1, 1f
   1613     li      rINST, 2                    # offset if branch not taken
   1614 1:
   1615 #if MTERP_PROFILE_BRANCHES
   1616     EXPORT_PC
   1617     move    a0, rSELF
   1618     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1619     move    a2, rINST
   1620     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1621     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1622 #endif
   1623     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1624     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1625     move    a0, rINST                   # a0 <- offset
   1626     FETCH_INST                          # load rINST
   1627     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1628     GET_INST_OPCODE v0                  # extract opcode from rINST
   1629     GOTO_OPCODE v0                      # jump to next instruction
   1630 
   1631 
   1632 /* ------------------------------ */
   1633     .balign 128
   1634 .L_op_if_le: /* 0x37 */
   1635 /* File: mips64/op_if_le.S */
   1636 /* File: mips64/bincmp.S */
   1637     /*
   1638      * Generic two-operand compare-and-branch operation.  Provide a "condition"
   1639      * fragment that specifies the comparison to perform, e.g. for
   1640      * "if-le" you would use "le".
   1641      *
   1642      * For: if-eq, if-ne, if-lt, if-ge, if-gt, if-le
   1643      */
   1644     /* if-cmp vA, vB, +CCCC */
   1645     .extern MterpProfileBranch
   1646     ext     a2, rINST, 8, 4             # a2 <- A
   1647     ext     a3, rINST, 12, 4            # a3 <- B
   1648     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended CCCC)
   1649     GET_VREG a0, a2                     # a0 <- vA
   1650     GET_VREG a1, a3                     # a1 <- vB
   1651     blec a0, a1, 1f
   1652     li      rINST, 2                    # offset if branch not taken
   1653 1:
   1654 #if MTERP_PROFILE_BRANCHES
   1655     EXPORT_PC
   1656     move    a0, rSELF
   1657     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1658     move    a2, rINST
   1659     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1660     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1661 #endif
   1662     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1663     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1664     move    a0, rINST                   # a0 <- offset
   1665     FETCH_INST                          # load rINST
   1666     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1667     GET_INST_OPCODE v0                  # extract opcode from rINST
   1668     GOTO_OPCODE v0                      # jump to next instruction
   1669 
   1670 
   1671 /* ------------------------------ */
   1672     .balign 128
   1673 .L_op_if_eqz: /* 0x38 */
   1674 /* File: mips64/op_if_eqz.S */
   1675 /* File: mips64/zcmp.S */
   1676     /*
   1677      * Generic one-operand compare-and-branch operation.  Provide a "condition"
   1678      * fragment that specifies the comparison to perform, e.g. for
   1679      * "if-lez" you would use "le".
   1680      *
   1681      * For: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
   1682      */
   1683     /* if-cmp vAA, +BBBB */
   1684     .extern MterpProfileBranch
   1685     srl     a2, rINST, 8                # a2 <- AA
   1686     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended BBBB)
   1687     GET_VREG a0, a2                     # a0 <- vAA
   1688     beqzc a0, 1f
   1689     li      rINST, 2                    # offset if branch not taken
   1690 1:
   1691 #if MTERP_PROFILE_BRANCHES
   1692     EXPORT_PC
   1693     move    a0, rSELF
   1694     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1695     move    a2, rINST
   1696     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1697     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1698 #endif
   1699     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1700     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1701     move    a0, rINST                   # a0 <- offset
   1702     FETCH_INST                          # load rINST
   1703     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1704     GET_INST_OPCODE v0                  # extract opcode from rINST
   1705     GOTO_OPCODE v0                      # jump to next instruction
   1706 
   1707 
   1708 /* ------------------------------ */
   1709     .balign 128
   1710 .L_op_if_nez: /* 0x39 */
   1711 /* File: mips64/op_if_nez.S */
   1712 /* File: mips64/zcmp.S */
   1713     /*
   1714      * Generic one-operand compare-and-branch operation.  Provide a "condition"
   1715      * fragment that specifies the comparison to perform, e.g. for
   1716      * "if-lez" you would use "le".
   1717      *
   1718      * For: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
   1719      */
   1720     /* if-cmp vAA, +BBBB */
   1721     .extern MterpProfileBranch
   1722     srl     a2, rINST, 8                # a2 <- AA
   1723     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended BBBB)
   1724     GET_VREG a0, a2                     # a0 <- vAA
   1725     bnezc a0, 1f
   1726     li      rINST, 2                    # offset if branch not taken
   1727 1:
   1728 #if MTERP_PROFILE_BRANCHES
   1729     EXPORT_PC
   1730     move    a0, rSELF
   1731     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1732     move    a2, rINST
   1733     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1734     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1735 #endif
   1736     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1737     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1738     move    a0, rINST                   # a0 <- offset
   1739     FETCH_INST                          # load rINST
   1740     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1741     GET_INST_OPCODE v0                  # extract opcode from rINST
   1742     GOTO_OPCODE v0                      # jump to next instruction
   1743 
   1744 
   1745 /* ------------------------------ */
   1746     .balign 128
   1747 .L_op_if_ltz: /* 0x3a */
   1748 /* File: mips64/op_if_ltz.S */
   1749 /* File: mips64/zcmp.S */
   1750     /*
   1751      * Generic one-operand compare-and-branch operation.  Provide a "condition"
   1752      * fragment that specifies the comparison to perform, e.g. for
   1753      * "if-lez" you would use "le".
   1754      *
   1755      * For: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
   1756      */
   1757     /* if-cmp vAA, +BBBB */
   1758     .extern MterpProfileBranch
   1759     srl     a2, rINST, 8                # a2 <- AA
   1760     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended BBBB)
   1761     GET_VREG a0, a2                     # a0 <- vAA
   1762     bltzc a0, 1f
   1763     li      rINST, 2                    # offset if branch not taken
   1764 1:
   1765 #if MTERP_PROFILE_BRANCHES
   1766     EXPORT_PC
   1767     move    a0, rSELF
   1768     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1769     move    a2, rINST
   1770     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1771     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1772 #endif
   1773     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1774     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1775     move    a0, rINST                   # a0 <- offset
   1776     FETCH_INST                          # load rINST
   1777     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1778     GET_INST_OPCODE v0                  # extract opcode from rINST
   1779     GOTO_OPCODE v0                      # jump to next instruction
   1780 
   1781 
   1782 /* ------------------------------ */
   1783     .balign 128
   1784 .L_op_if_gez: /* 0x3b */
   1785 /* File: mips64/op_if_gez.S */
   1786 /* File: mips64/zcmp.S */
   1787     /*
   1788      * Generic one-operand compare-and-branch operation.  Provide a "condition"
   1789      * fragment that specifies the comparison to perform, e.g. for
   1790      * "if-lez" you would use "le".
   1791      *
   1792      * For: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
   1793      */
   1794     /* if-cmp vAA, +BBBB */
   1795     .extern MterpProfileBranch
   1796     srl     a2, rINST, 8                # a2 <- AA
   1797     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended BBBB)
   1798     GET_VREG a0, a2                     # a0 <- vAA
   1799     bgezc a0, 1f
   1800     li      rINST, 2                    # offset if branch not taken
   1801 1:
   1802 #if MTERP_PROFILE_BRANCHES
   1803     EXPORT_PC
   1804     move    a0, rSELF
   1805     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1806     move    a2, rINST
   1807     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1808     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1809 #endif
   1810     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1811     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1812     move    a0, rINST                   # a0 <- offset
   1813     FETCH_INST                          # load rINST
   1814     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1815     GET_INST_OPCODE v0                  # extract opcode from rINST
   1816     GOTO_OPCODE v0                      # jump to next instruction
   1817 
   1818 
   1819 /* ------------------------------ */
   1820     .balign 128
   1821 .L_op_if_gtz: /* 0x3c */
   1822 /* File: mips64/op_if_gtz.S */
   1823 /* File: mips64/zcmp.S */
   1824     /*
   1825      * Generic one-operand compare-and-branch operation.  Provide a "condition"
   1826      * fragment that specifies the comparison to perform, e.g. for
   1827      * "if-lez" you would use "le".
   1828      *
   1829      * For: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
   1830      */
   1831     /* if-cmp vAA, +BBBB */
   1832     .extern MterpProfileBranch
   1833     srl     a2, rINST, 8                # a2 <- AA
   1834     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended BBBB)
   1835     GET_VREG a0, a2                     # a0 <- vAA
   1836     bgtzc a0, 1f
   1837     li      rINST, 2                    # offset if branch not taken
   1838 1:
   1839 #if MTERP_PROFILE_BRANCHES
   1840     EXPORT_PC
   1841     move    a0, rSELF
   1842     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1843     move    a2, rINST
   1844     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1845     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1846 #endif
   1847     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1848     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1849     move    a0, rINST                   # a0 <- offset
   1850     FETCH_INST                          # load rINST
   1851     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1852     GET_INST_OPCODE v0                  # extract opcode from rINST
   1853     GOTO_OPCODE v0                      # jump to next instruction
   1854 
   1855 
   1856 /* ------------------------------ */
   1857     .balign 128
   1858 .L_op_if_lez: /* 0x3d */
   1859 /* File: mips64/op_if_lez.S */
   1860 /* File: mips64/zcmp.S */
   1861     /*
   1862      * Generic one-operand compare-and-branch operation.  Provide a "condition"
   1863      * fragment that specifies the comparison to perform, e.g. for
   1864      * "if-lez" you would use "le".
   1865      *
   1866      * For: if-eqz, if-nez, if-ltz, if-gez, if-gtz, if-lez
   1867      */
   1868     /* if-cmp vAA, +BBBB */
   1869     .extern MterpProfileBranch
   1870     srl     a2, rINST, 8                # a2 <- AA
   1871     lh      rINST, 2(rPC)               # rINST <- offset (sign-extended BBBB)
   1872     GET_VREG a0, a2                     # a0 <- vAA
   1873     blezc a0, 1f
   1874     li      rINST, 2                    # offset if branch not taken
   1875 1:
   1876 #if MTERP_PROFILE_BRANCHES
   1877     EXPORT_PC
   1878     move    a0, rSELF
   1879     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   1880     move    a2, rINST
   1881     jal     MterpProfileBranch          # (self, shadow_frame, offset)
   1882     bnezc   v0, MterpOnStackReplacement # Note: offset must be in rINST
   1883 #endif
   1884     dlsa    rPC, rINST, rPC, 1          # rPC <- rPC + offset * 2
   1885     lw      ra, THREAD_FLAGS_OFFSET(rSELF)  # Preload flags for MterpCheckSuspendAndContinue
   1886     move    a0, rINST                   # a0 <- offset
   1887     FETCH_INST                          # load rINST
   1888     bltz    a0, MterpCheckSuspendAndContinue  # suspend check if backwards branch
   1889     GET_INST_OPCODE v0                  # extract opcode from rINST
   1890     GOTO_OPCODE v0                      # jump to next instruction
   1891 
   1892 
   1893 /* ------------------------------ */
   1894     .balign 128
   1895 .L_op_unused_3e: /* 0x3e */
   1896 /* File: mips64/op_unused_3e.S */
   1897 /* File: mips64/unused.S */
   1898 /*
   1899  * Bail to reference interpreter to throw.
   1900  */
   1901     b       MterpFallback
   1902 
   1903 
   1904 /* ------------------------------ */
   1905     .balign 128
   1906 .L_op_unused_3f: /* 0x3f */
   1907 /* File: mips64/op_unused_3f.S */
   1908 /* File: mips64/unused.S */
   1909 /*
   1910  * Bail to reference interpreter to throw.
   1911  */
   1912     b       MterpFallback
   1913 
   1914 
   1915 /* ------------------------------ */
   1916     .balign 128
   1917 .L_op_unused_40: /* 0x40 */
   1918 /* File: mips64/op_unused_40.S */
   1919 /* File: mips64/unused.S */
   1920 /*
   1921  * Bail to reference interpreter to throw.
   1922  */
   1923     b       MterpFallback
   1924 
   1925 
   1926 /* ------------------------------ */
   1927     .balign 128
   1928 .L_op_unused_41: /* 0x41 */
   1929 /* File: mips64/op_unused_41.S */
   1930 /* File: mips64/unused.S */
   1931 /*
   1932  * Bail to reference interpreter to throw.
   1933  */
   1934     b       MterpFallback
   1935 
   1936 
   1937 /* ------------------------------ */
   1938     .balign 128
   1939 .L_op_unused_42: /* 0x42 */
   1940 /* File: mips64/op_unused_42.S */
   1941 /* File: mips64/unused.S */
   1942 /*
   1943  * Bail to reference interpreter to throw.
   1944  */
   1945     b       MterpFallback
   1946 
   1947 
   1948 /* ------------------------------ */
   1949     .balign 128
   1950 .L_op_unused_43: /* 0x43 */
   1951 /* File: mips64/op_unused_43.S */
   1952 /* File: mips64/unused.S */
   1953 /*
   1954  * Bail to reference interpreter to throw.
   1955  */
   1956     b       MterpFallback
   1957 
   1958 
   1959 /* ------------------------------ */
   1960     .balign 128
   1961 .L_op_aget: /* 0x44 */
   1962 /* File: mips64/op_aget.S */
   1963     /*
   1964      * Array get, 32 bits or less.  vAA <- vBB[vCC].
   1965      *
   1966      * for: aget, aget-boolean, aget-byte, aget-char, aget-short
   1967      *
   1968      * NOTE: assumes data offset for arrays is the same for all non-wide types.
   1969      * If this changes, specialize.
   1970      */
   1971     /* op vAA, vBB, vCC */
   1972     lbu     a2, 2(rPC)                  # a2 <- BB
   1973     lbu     a3, 3(rPC)                  # a3 <- CC
   1974     srl     a4, rINST, 8                # a4 <- AA
   1975     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   1976     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   1977     beqz    a0, common_errNullObject    # bail if null array object
   1978     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   1979     .if 2
   1980     # [d]lsa does not support shift count of 0.
   1981     dlsa    a0, a1, a0, 2          # a0 <- arrayObj + index*width
   1982     .else
   1983     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   1984     .endif
   1985     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   1986     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   1987     lw   a2, MIRROR_INT_ARRAY_DATA_OFFSET(a0)        # a2 <- vBB[vCC]
   1988     GET_INST_OPCODE v0                  # extract opcode from rINST
   1989     SET_VREG a2, a4                     # vAA <- a2
   1990     GOTO_OPCODE v0                      # jump to next instruction
   1991 
   1992 /* ------------------------------ */
   1993     .balign 128
   1994 .L_op_aget_wide: /* 0x45 */
   1995 /* File: mips64/op_aget_wide.S */
   1996     /*
   1997      * Array get, 64 bits.  vAA <- vBB[vCC].
   1998      *
   1999      */
   2000     /* aget-wide vAA, vBB, vCC */
   2001     lbu     a2, 2(rPC)                  # a2 <- BB
   2002     lbu     a3, 3(rPC)                  # a3 <- CC
   2003     srl     a4, rINST, 8                # a4 <- AA
   2004     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2005     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2006     beqz    a0, common_errNullObject    # bail if null array object
   2007     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2008     dlsa    a0, a1, a0, 3               # a0 <- arrayObj + index*width
   2009     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2010     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2011     lw      a2, MIRROR_WIDE_ARRAY_DATA_OFFSET(a0)
   2012     lw      a3, (MIRROR_WIDE_ARRAY_DATA_OFFSET+4)(a0)
   2013     dinsu   a2, a3, 32, 32              # a2 <- vBB[vCC]
   2014     GET_INST_OPCODE v0                  # extract opcode from rINST
   2015     SET_VREG_WIDE a2, a4                # vAA <- a2
   2016     GOTO_OPCODE v0                      # jump to next instruction
   2017 
   2018 /* ------------------------------ */
   2019     .balign 128
   2020 .L_op_aget_object: /* 0x46 */
   2021 /* File: mips64/op_aget_object.S */
   2022     /*
   2023      * Array object get.  vAA <- vBB[vCC].
   2024      *
   2025      * for: aget-object
   2026      */
   2027     /* op vAA, vBB, vCC */
   2028     .extern artAGetObjectFromMterp
   2029     lbu     a2, 2(rPC)                  # a2 <- BB
   2030     lbu     a3, 3(rPC)                  # a3 <- CC
   2031     EXPORT_PC
   2032     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2033     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2034     jal     artAGetObjectFromMterp      # (array, index)
   2035     ld      a1, THREAD_EXCEPTION_OFFSET(rSELF)
   2036     srl     a4, rINST, 8                # a4 <- AA
   2037     PREFETCH_INST 2
   2038     bnez    a1, MterpException
   2039     SET_VREG_OBJECT v0, a4              # vAA <- v0
   2040     ADVANCE 2
   2041     GET_INST_OPCODE v0                  # extract opcode from rINST
   2042     GOTO_OPCODE v0                      # jump to next instruction
   2043 
   2044 /* ------------------------------ */
   2045     .balign 128
   2046 .L_op_aget_boolean: /* 0x47 */
   2047 /* File: mips64/op_aget_boolean.S */
   2048 /* File: mips64/op_aget.S */
   2049     /*
   2050      * Array get, 32 bits or less.  vAA <- vBB[vCC].
   2051      *
   2052      * for: aget, aget-boolean, aget-byte, aget-char, aget-short
   2053      *
   2054      * NOTE: assumes data offset for arrays is the same for all non-wide types.
   2055      * If this changes, specialize.
   2056      */
   2057     /* op vAA, vBB, vCC */
   2058     lbu     a2, 2(rPC)                  # a2 <- BB
   2059     lbu     a3, 3(rPC)                  # a3 <- CC
   2060     srl     a4, rINST, 8                # a4 <- AA
   2061     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2062     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2063     beqz    a0, common_errNullObject    # bail if null array object
   2064     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2065     .if 0
   2066     # [d]lsa does not support shift count of 0.
   2067     dlsa    a0, a1, a0, 0          # a0 <- arrayObj + index*width
   2068     .else
   2069     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   2070     .endif
   2071     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2072     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2073     lbu   a2, MIRROR_BOOLEAN_ARRAY_DATA_OFFSET(a0)        # a2 <- vBB[vCC]
   2074     GET_INST_OPCODE v0                  # extract opcode from rINST
   2075     SET_VREG a2, a4                     # vAA <- a2
   2076     GOTO_OPCODE v0                      # jump to next instruction
   2077 
   2078 
   2079 /* ------------------------------ */
   2080     .balign 128
   2081 .L_op_aget_byte: /* 0x48 */
   2082 /* File: mips64/op_aget_byte.S */
   2083 /* File: mips64/op_aget.S */
   2084     /*
   2085      * Array get, 32 bits or less.  vAA <- vBB[vCC].
   2086      *
   2087      * for: aget, aget-boolean, aget-byte, aget-char, aget-short
   2088      *
   2089      * NOTE: assumes data offset for arrays is the same for all non-wide types.
   2090      * If this changes, specialize.
   2091      */
   2092     /* op vAA, vBB, vCC */
   2093     lbu     a2, 2(rPC)                  # a2 <- BB
   2094     lbu     a3, 3(rPC)                  # a3 <- CC
   2095     srl     a4, rINST, 8                # a4 <- AA
   2096     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2097     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2098     beqz    a0, common_errNullObject    # bail if null array object
   2099     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2100     .if 0
   2101     # [d]lsa does not support shift count of 0.
   2102     dlsa    a0, a1, a0, 0          # a0 <- arrayObj + index*width
   2103     .else
   2104     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   2105     .endif
   2106     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2107     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2108     lb   a2, MIRROR_BYTE_ARRAY_DATA_OFFSET(a0)        # a2 <- vBB[vCC]
   2109     GET_INST_OPCODE v0                  # extract opcode from rINST
   2110     SET_VREG a2, a4                     # vAA <- a2
   2111     GOTO_OPCODE v0                      # jump to next instruction
   2112 
   2113 
   2114 /* ------------------------------ */
   2115     .balign 128
   2116 .L_op_aget_char: /* 0x49 */
   2117 /* File: mips64/op_aget_char.S */
   2118 /* File: mips64/op_aget.S */
   2119     /*
   2120      * Array get, 32 bits or less.  vAA <- vBB[vCC].
   2121      *
   2122      * for: aget, aget-boolean, aget-byte, aget-char, aget-short
   2123      *
   2124      * NOTE: assumes data offset for arrays is the same for all non-wide types.
   2125      * If this changes, specialize.
   2126      */
   2127     /* op vAA, vBB, vCC */
   2128     lbu     a2, 2(rPC)                  # a2 <- BB
   2129     lbu     a3, 3(rPC)                  # a3 <- CC
   2130     srl     a4, rINST, 8                # a4 <- AA
   2131     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2132     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2133     beqz    a0, common_errNullObject    # bail if null array object
   2134     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2135     .if 1
   2136     # [d]lsa does not support shift count of 0.
   2137     dlsa    a0, a1, a0, 1          # a0 <- arrayObj + index*width
   2138     .else
   2139     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   2140     .endif
   2141     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2142     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2143     lhu   a2, MIRROR_CHAR_ARRAY_DATA_OFFSET(a0)        # a2 <- vBB[vCC]
   2144     GET_INST_OPCODE v0                  # extract opcode from rINST
   2145     SET_VREG a2, a4                     # vAA <- a2
   2146     GOTO_OPCODE v0                      # jump to next instruction
   2147 
   2148 
   2149 /* ------------------------------ */
   2150     .balign 128
   2151 .L_op_aget_short: /* 0x4a */
   2152 /* File: mips64/op_aget_short.S */
   2153 /* File: mips64/op_aget.S */
   2154     /*
   2155      * Array get, 32 bits or less.  vAA <- vBB[vCC].
   2156      *
   2157      * for: aget, aget-boolean, aget-byte, aget-char, aget-short
   2158      *
   2159      * NOTE: assumes data offset for arrays is the same for all non-wide types.
   2160      * If this changes, specialize.
   2161      */
   2162     /* op vAA, vBB, vCC */
   2163     lbu     a2, 2(rPC)                  # a2 <- BB
   2164     lbu     a3, 3(rPC)                  # a3 <- CC
   2165     srl     a4, rINST, 8                # a4 <- AA
   2166     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2167     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2168     beqz    a0, common_errNullObject    # bail if null array object
   2169     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2170     .if 1
   2171     # [d]lsa does not support shift count of 0.
   2172     dlsa    a0, a1, a0, 1          # a0 <- arrayObj + index*width
   2173     .else
   2174     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   2175     .endif
   2176     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2177     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2178     lh   a2, MIRROR_SHORT_ARRAY_DATA_OFFSET(a0)        # a2 <- vBB[vCC]
   2179     GET_INST_OPCODE v0                  # extract opcode from rINST
   2180     SET_VREG a2, a4                     # vAA <- a2
   2181     GOTO_OPCODE v0                      # jump to next instruction
   2182 
   2183 
   2184 /* ------------------------------ */
   2185     .balign 128
   2186 .L_op_aput: /* 0x4b */
   2187 /* File: mips64/op_aput.S */
   2188     /*
   2189      * Array put, 32 bits or less.  vBB[vCC] <- vAA.
   2190      *
   2191      * for: aput, aput-boolean, aput-byte, aput-char, aput-short
   2192      *
   2193      * NOTE: this assumes data offset for arrays is the same for all non-wide types.
   2194      * If this changes, specialize.
   2195      */
   2196     /* op vAA, vBB, vCC */
   2197     lbu     a2, 2(rPC)                  # a2 <- BB
   2198     lbu     a3, 3(rPC)                  # a3 <- CC
   2199     srl     a4, rINST, 8                # a4 <- AA
   2200     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2201     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2202     beqz    a0, common_errNullObject    # bail if null array object
   2203     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2204     .if 2
   2205     # [d]lsa does not support shift count of 0.
   2206     dlsa    a0, a1, a0, 2          # a0 <- arrayObj + index*width
   2207     .else
   2208     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   2209     .endif
   2210     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2211     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2212     GET_VREG a2, a4                     # a2 <- vAA
   2213     GET_INST_OPCODE v0                  # extract opcode from rINST
   2214     sw  a2, MIRROR_INT_ARRAY_DATA_OFFSET(a0)        # vBB[vCC] <- a2
   2215     GOTO_OPCODE v0                      # jump to next instruction
   2216 
   2217 /* ------------------------------ */
   2218     .balign 128
   2219 .L_op_aput_wide: /* 0x4c */
   2220 /* File: mips64/op_aput_wide.S */
   2221     /*
   2222      * Array put, 64 bits.  vBB[vCC] <- vAA.
   2223      *
   2224      */
   2225     /* aput-wide vAA, vBB, vCC */
   2226     lbu     a2, 2(rPC)                  # a2 <- BB
   2227     lbu     a3, 3(rPC)                  # a3 <- CC
   2228     srl     a4, rINST, 8                # a4 <- AA
   2229     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2230     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2231     beqz    a0, common_errNullObject    # bail if null array object
   2232     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2233     dlsa    a0, a1, a0, 3               # a0 <- arrayObj + index*width
   2234     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2235     GET_VREG_WIDE a2, a4                # a2 <- vAA
   2236     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2237     GET_INST_OPCODE v0                  # extract opcode from rINST
   2238     sw      a2, MIRROR_WIDE_ARRAY_DATA_OFFSET(a0)
   2239     dsrl32  a2, a2, 0
   2240     sw      a2, (MIRROR_WIDE_ARRAY_DATA_OFFSET+4)(a0)  # vBB[vCC] <- a2
   2241     GOTO_OPCODE v0                      # jump to next instruction
   2242 
   2243 /* ------------------------------ */
   2244     .balign 128
   2245 .L_op_aput_object: /* 0x4d */
   2246 /* File: mips64/op_aput_object.S */
   2247     /*
   2248      * Store an object into an array.  vBB[vCC] <- vAA.
   2249      */
   2250     /* op vAA, vBB, vCC */
   2251     .extern MterpAputObject
   2252     EXPORT_PC
   2253     daddu   a0, rFP, OFF_FP_SHADOWFRAME
   2254     move    a1, rPC
   2255     move    a2, rINST
   2256     jal     MterpAputObject
   2257     beqzc   v0, MterpPossibleException
   2258     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2259     GET_INST_OPCODE v0                  # extract opcode from rINST
   2260     GOTO_OPCODE v0                      # jump to next instruction
   2261 
   2262 /* ------------------------------ */
   2263     .balign 128
   2264 .L_op_aput_boolean: /* 0x4e */
   2265 /* File: mips64/op_aput_boolean.S */
   2266 /* File: mips64/op_aput.S */
   2267     /*
   2268      * Array put, 32 bits or less.  vBB[vCC] <- vAA.
   2269      *
   2270      * for: aput, aput-boolean, aput-byte, aput-char, aput-short
   2271      *
   2272      * NOTE: this assumes data offset for arrays is the same for all non-wide types.
   2273      * If this changes, specialize.
   2274      */
   2275     /* op vAA, vBB, vCC */
   2276     lbu     a2, 2(rPC)                  # a2 <- BB
   2277     lbu     a3, 3(rPC)                  # a3 <- CC
   2278     srl     a4, rINST, 8                # a4 <- AA
   2279     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2280     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2281     beqz    a0, common_errNullObject    # bail if null array object
   2282     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2283     .if 0
   2284     # [d]lsa does not support shift count of 0.
   2285     dlsa    a0, a1, a0, 0          # a0 <- arrayObj + index*width
   2286     .else
   2287     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   2288     .endif
   2289     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2290     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2291     GET_VREG a2, a4                     # a2 <- vAA
   2292     GET_INST_OPCODE v0                  # extract opcode from rINST
   2293     sb  a2, MIRROR_BOOLEAN_ARRAY_DATA_OFFSET(a0)        # vBB[vCC] <- a2
   2294     GOTO_OPCODE v0                      # jump to next instruction
   2295 
   2296 
   2297 /* ------------------------------ */
   2298     .balign 128
   2299 .L_op_aput_byte: /* 0x4f */
   2300 /* File: mips64/op_aput_byte.S */
   2301 /* File: mips64/op_aput.S */
   2302     /*
   2303      * Array put, 32 bits or less.  vBB[vCC] <- vAA.
   2304      *
   2305      * for: aput, aput-boolean, aput-byte, aput-char, aput-short
   2306      *
   2307      * NOTE: this assumes data offset for arrays is the same for all non-wide types.
   2308      * If this changes, specialize.
   2309      */
   2310     /* op vAA, vBB, vCC */
   2311     lbu     a2, 2(rPC)                  # a2 <- BB
   2312     lbu     a3, 3(rPC)                  # a3 <- CC
   2313     srl     a4, rINST, 8                # a4 <- AA
   2314     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2315     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2316     beqz    a0, common_errNullObject    # bail if null array object
   2317     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2318     .if 0
   2319     # [d]lsa does not support shift count of 0.
   2320     dlsa    a0, a1, a0, 0          # a0 <- arrayObj + index*width
   2321     .else
   2322     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   2323     .endif
   2324     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2325     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2326     GET_VREG a2, a4                     # a2 <- vAA
   2327     GET_INST_OPCODE v0                  # extract opcode from rINST
   2328     sb  a2, MIRROR_BYTE_ARRAY_DATA_OFFSET(a0)        # vBB[vCC] <- a2
   2329     GOTO_OPCODE v0                      # jump to next instruction
   2330 
   2331 
   2332 /* ------------------------------ */
   2333     .balign 128
   2334 .L_op_aput_char: /* 0x50 */
   2335 /* File: mips64/op_aput_char.S */
   2336 /* File: mips64/op_aput.S */
   2337     /*
   2338      * Array put, 32 bits or less.  vBB[vCC] <- vAA.
   2339      *
   2340      * for: aput, aput-boolean, aput-byte, aput-char, aput-short
   2341      *
   2342      * NOTE: this assumes data offset for arrays is the same for all non-wide types.
   2343      * If this changes, specialize.
   2344      */
   2345     /* op vAA, vBB, vCC */
   2346     lbu     a2, 2(rPC)                  # a2 <- BB
   2347     lbu     a3, 3(rPC)                  # a3 <- CC
   2348     srl     a4, rINST, 8                # a4 <- AA
   2349     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2350     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2351     beqz    a0, common_errNullObject    # bail if null array object
   2352     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2353     .if 1
   2354     # [d]lsa does not support shift count of 0.
   2355     dlsa    a0, a1, a0, 1          # a0 <- arrayObj + index*width
   2356     .else
   2357     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   2358     .endif
   2359     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2360     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2361     GET_VREG a2, a4                     # a2 <- vAA
   2362     GET_INST_OPCODE v0                  # extract opcode from rINST
   2363     sh  a2, MIRROR_CHAR_ARRAY_DATA_OFFSET(a0)        # vBB[vCC] <- a2
   2364     GOTO_OPCODE v0                      # jump to next instruction
   2365 
   2366 
   2367 /* ------------------------------ */
   2368     .balign 128
   2369 .L_op_aput_short: /* 0x51 */
   2370 /* File: mips64/op_aput_short.S */
   2371 /* File: mips64/op_aput.S */
   2372     /*
   2373      * Array put, 32 bits or less.  vBB[vCC] <- vAA.
   2374      *
   2375      * for: aput, aput-boolean, aput-byte, aput-char, aput-short
   2376      *
   2377      * NOTE: this assumes data offset for arrays is the same for all non-wide types.
   2378      * If this changes, specialize.
   2379      */
   2380     /* op vAA, vBB, vCC */
   2381     lbu     a2, 2(rPC)                  # a2 <- BB
   2382     lbu     a3, 3(rPC)                  # a3 <- CC
   2383     srl     a4, rINST, 8                # a4 <- AA
   2384     GET_VREG_U a0, a2                   # a0 <- vBB (array object)
   2385     GET_VREG a1, a3                     # a1 <- vCC (requested index)
   2386     beqz    a0, common_errNullObject    # bail if null array object
   2387     lw      a3, MIRROR_ARRAY_LENGTH_OFFSET(a0)  # a3 <- arrayObj->length
   2388     .if 1
   2389     # [d]lsa does not support shift count of 0.
   2390     dlsa    a0, a1, a0, 1          # a0 <- arrayObj + index*width
   2391     .else
   2392     daddu   a0, a1, a0                  # a0 <- arrayObj + index*width
   2393     .endif
   2394     bgeu    a1, a3, common_errArrayIndex  # unsigned compare: index >= length, bail
   2395     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2396     GET_VREG a2, a4                     # a2 <- vAA
   2397     GET_INST_OPCODE v0                  # extract opcode from rINST
   2398     sh  a2, MIRROR_SHORT_ARRAY_DATA_OFFSET(a0)        # vBB[vCC] <- a2
   2399     GOTO_OPCODE v0                      # jump to next instruction
   2400 
   2401 
   2402 /* ------------------------------ */
   2403     .balign 128
   2404 .L_op_iget: /* 0x52 */
   2405 /* File: mips64/op_iget.S */
   2406     /*
   2407      * General instance field get.
   2408      *
   2409      * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
   2410      */
   2411     .extern artGet32InstanceFromCode
   2412     EXPORT_PC
   2413     lhu      a0, 2(rPC)                 # a0 <- field ref CCCC
   2414     srl      a1, rINST, 12              # a1 <- B
   2415     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2416     ld       a2, OFF_FP_METHOD(rFP)     # a2 <- referrer
   2417     move     a3, rSELF                  # a3 <- self
   2418     jal      artGet32InstanceFromCode
   2419     ld       a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2420     ext      a2, rINST, 8, 4            # a2 <- A
   2421     PREFETCH_INST 2
   2422     bnez     a3, MterpPossibleException # bail out
   2423     .if 0
   2424     SET_VREG_OBJECT v0, a2              # fp[A] <- v0
   2425     .else
   2426     SET_VREG v0, a2                     # fp[A] <- v0
   2427     .endif
   2428     ADVANCE 2
   2429     GET_INST_OPCODE v0                  # extract opcode from rINST
   2430     GOTO_OPCODE v0                      # jump to next instruction
   2431 
   2432 /* ------------------------------ */
   2433     .balign 128
   2434 .L_op_iget_wide: /* 0x53 */
   2435 /* File: mips64/op_iget_wide.S */
   2436     /*
   2437      * 64-bit instance field get.
   2438      *
   2439      * for: iget-wide
   2440      */
   2441     .extern artGet64InstanceFromCode
   2442     EXPORT_PC
   2443     lhu      a0, 2(rPC)                 # a0 <- field ref CCCC
   2444     srl      a1, rINST, 12              # a1 <- B
   2445     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2446     ld       a2, OFF_FP_METHOD(rFP)     # a2 <- referrer
   2447     move     a3, rSELF                  # a3 <- self
   2448     jal      artGet64InstanceFromCode
   2449     ld       a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2450     ext      a2, rINST, 8, 4            # a2 <- A
   2451     PREFETCH_INST 2
   2452     bnez     a3, MterpPossibleException # bail out
   2453     SET_VREG_WIDE v0, a2                # fp[A] <- v0
   2454     ADVANCE 2
   2455     GET_INST_OPCODE v0                  # extract opcode from rINST
   2456     GOTO_OPCODE v0                      # jump to next instruction
   2457 
   2458 /* ------------------------------ */
   2459     .balign 128
   2460 .L_op_iget_object: /* 0x54 */
   2461 /* File: mips64/op_iget_object.S */
   2462 /* File: mips64/op_iget.S */
   2463     /*
   2464      * General instance field get.
   2465      *
   2466      * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
   2467      */
   2468     .extern artGetObjInstanceFromCode
   2469     EXPORT_PC
   2470     lhu      a0, 2(rPC)                 # a0 <- field ref CCCC
   2471     srl      a1, rINST, 12              # a1 <- B
   2472     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2473     ld       a2, OFF_FP_METHOD(rFP)     # a2 <- referrer
   2474     move     a3, rSELF                  # a3 <- self
   2475     jal      artGetObjInstanceFromCode
   2476     ld       a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2477     ext      a2, rINST, 8, 4            # a2 <- A
   2478     PREFETCH_INST 2
   2479     bnez     a3, MterpPossibleException # bail out
   2480     .if 1
   2481     SET_VREG_OBJECT v0, a2              # fp[A] <- v0
   2482     .else
   2483     SET_VREG v0, a2                     # fp[A] <- v0
   2484     .endif
   2485     ADVANCE 2
   2486     GET_INST_OPCODE v0                  # extract opcode from rINST
   2487     GOTO_OPCODE v0                      # jump to next instruction
   2488 
   2489 
   2490 /* ------------------------------ */
   2491     .balign 128
   2492 .L_op_iget_boolean: /* 0x55 */
   2493 /* File: mips64/op_iget_boolean.S */
   2494 /* File: mips64/op_iget.S */
   2495     /*
   2496      * General instance field get.
   2497      *
   2498      * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
   2499      */
   2500     .extern artGetBooleanInstanceFromCode
   2501     EXPORT_PC
   2502     lhu      a0, 2(rPC)                 # a0 <- field ref CCCC
   2503     srl      a1, rINST, 12              # a1 <- B
   2504     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2505     ld       a2, OFF_FP_METHOD(rFP)     # a2 <- referrer
   2506     move     a3, rSELF                  # a3 <- self
   2507     jal      artGetBooleanInstanceFromCode
   2508     ld       a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2509     ext      a2, rINST, 8, 4            # a2 <- A
   2510     PREFETCH_INST 2
   2511     bnez     a3, MterpPossibleException # bail out
   2512     .if 0
   2513     SET_VREG_OBJECT v0, a2              # fp[A] <- v0
   2514     .else
   2515     SET_VREG v0, a2                     # fp[A] <- v0
   2516     .endif
   2517     ADVANCE 2
   2518     GET_INST_OPCODE v0                  # extract opcode from rINST
   2519     GOTO_OPCODE v0                      # jump to next instruction
   2520 
   2521 
   2522 /* ------------------------------ */
   2523     .balign 128
   2524 .L_op_iget_byte: /* 0x56 */
   2525 /* File: mips64/op_iget_byte.S */
   2526 /* File: mips64/op_iget.S */
   2527     /*
   2528      * General instance field get.
   2529      *
   2530      * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
   2531      */
   2532     .extern artGetByteInstanceFromCode
   2533     EXPORT_PC
   2534     lhu      a0, 2(rPC)                 # a0 <- field ref CCCC
   2535     srl      a1, rINST, 12              # a1 <- B
   2536     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2537     ld       a2, OFF_FP_METHOD(rFP)     # a2 <- referrer
   2538     move     a3, rSELF                  # a3 <- self
   2539     jal      artGetByteInstanceFromCode
   2540     ld       a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2541     ext      a2, rINST, 8, 4            # a2 <- A
   2542     PREFETCH_INST 2
   2543     bnez     a3, MterpPossibleException # bail out
   2544     .if 0
   2545     SET_VREG_OBJECT v0, a2              # fp[A] <- v0
   2546     .else
   2547     SET_VREG v0, a2                     # fp[A] <- v0
   2548     .endif
   2549     ADVANCE 2
   2550     GET_INST_OPCODE v0                  # extract opcode from rINST
   2551     GOTO_OPCODE v0                      # jump to next instruction
   2552 
   2553 
   2554 /* ------------------------------ */
   2555     .balign 128
   2556 .L_op_iget_char: /* 0x57 */
   2557 /* File: mips64/op_iget_char.S */
   2558 /* File: mips64/op_iget.S */
   2559     /*
   2560      * General instance field get.
   2561      *
   2562      * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
   2563      */
   2564     .extern artGetCharInstanceFromCode
   2565     EXPORT_PC
   2566     lhu      a0, 2(rPC)                 # a0 <- field ref CCCC
   2567     srl      a1, rINST, 12              # a1 <- B
   2568     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2569     ld       a2, OFF_FP_METHOD(rFP)     # a2 <- referrer
   2570     move     a3, rSELF                  # a3 <- self
   2571     jal      artGetCharInstanceFromCode
   2572     ld       a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2573     ext      a2, rINST, 8, 4            # a2 <- A
   2574     PREFETCH_INST 2
   2575     bnez     a3, MterpPossibleException # bail out
   2576     .if 0
   2577     SET_VREG_OBJECT v0, a2              # fp[A] <- v0
   2578     .else
   2579     SET_VREG v0, a2                     # fp[A] <- v0
   2580     .endif
   2581     ADVANCE 2
   2582     GET_INST_OPCODE v0                  # extract opcode from rINST
   2583     GOTO_OPCODE v0                      # jump to next instruction
   2584 
   2585 
   2586 /* ------------------------------ */
   2587     .balign 128
   2588 .L_op_iget_short: /* 0x58 */
   2589 /* File: mips64/op_iget_short.S */
   2590 /* File: mips64/op_iget.S */
   2591     /*
   2592      * General instance field get.
   2593      *
   2594      * for: iget, iget-object, iget-boolean, iget-byte, iget-char, iget-short
   2595      */
   2596     .extern artGetShortInstanceFromCode
   2597     EXPORT_PC
   2598     lhu      a0, 2(rPC)                 # a0 <- field ref CCCC
   2599     srl      a1, rINST, 12              # a1 <- B
   2600     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2601     ld       a2, OFF_FP_METHOD(rFP)     # a2 <- referrer
   2602     move     a3, rSELF                  # a3 <- self
   2603     jal      artGetShortInstanceFromCode
   2604     ld       a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2605     ext      a2, rINST, 8, 4            # a2 <- A
   2606     PREFETCH_INST 2
   2607     bnez     a3, MterpPossibleException # bail out
   2608     .if 0
   2609     SET_VREG_OBJECT v0, a2              # fp[A] <- v0
   2610     .else
   2611     SET_VREG v0, a2                     # fp[A] <- v0
   2612     .endif
   2613     ADVANCE 2
   2614     GET_INST_OPCODE v0                  # extract opcode from rINST
   2615     GOTO_OPCODE v0                      # jump to next instruction
   2616 
   2617 
   2618 /* ------------------------------ */
   2619     .balign 128
   2620 .L_op_iput: /* 0x59 */
   2621 /* File: mips64/op_iput.S */
   2622     /*
   2623      * General 32-bit instance field put.
   2624      *
   2625      * for: iput, iput-boolean, iput-byte, iput-char, iput-short
   2626      */
   2627     /* op vA, vB, field//CCCC */
   2628     .extern artSet32InstanceFromMterp
   2629     EXPORT_PC
   2630     lhu     a0, 2(rPC)                  # a0 <- field ref CCCC
   2631     srl     a1, rINST, 12               # a1 <- B
   2632     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2633     ext     a2, rINST, 8, 4             # a2 <- A
   2634     GET_VREG a2, a2                     # a2 <- fp[A]
   2635     ld      a3, OFF_FP_METHOD(rFP)      # a3 <- referrer
   2636     PREFETCH_INST 2
   2637     jal     artSet32InstanceFromMterp
   2638     bnez    v0, MterpPossibleException  # bail out
   2639     ADVANCE 2
   2640     GET_INST_OPCODE v0                  # extract opcode from rINST
   2641     GOTO_OPCODE v0                      # jump to next instruction
   2642 
   2643 /* ------------------------------ */
   2644     .balign 128
   2645 .L_op_iput_wide: /* 0x5a */
   2646 /* File: mips64/op_iput_wide.S */
   2647     /* iput-wide vA, vB, field//CCCC */
   2648     .extern artSet64InstanceFromMterp
   2649     EXPORT_PC
   2650     lhu      a0, 2(rPC)                 # a0 <- field ref CCCC
   2651     srl      a1, rINST, 12              # a1 <- B
   2652     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2653     ext      a2, rINST, 8, 4            # a2 <- A
   2654     dlsa     a2, a2, rFP, 2             # a2 <- &fp[A]
   2655     ld       a3, OFF_FP_METHOD(rFP)     # a3 <- referrer
   2656     PREFETCH_INST 2
   2657     jal      artSet64InstanceFromMterp
   2658     bnez     v0, MterpPossibleException # bail out
   2659     ADVANCE 2
   2660     GET_INST_OPCODE v0                  # extract opcode from rINST
   2661     GOTO_OPCODE v0                      # jump to next instruction
   2662 
   2663 /* ------------------------------ */
   2664     .balign 128
   2665 .L_op_iput_object: /* 0x5b */
   2666 /* File: mips64/op_iput_object.S */
   2667     .extern MterpIputObject
   2668     EXPORT_PC
   2669     daddu   a0, rFP, OFF_FP_SHADOWFRAME
   2670     move    a1, rPC
   2671     move    a2, rINST
   2672     move    a3, rSELF
   2673     jal     MterpIputObject
   2674     beqzc   v0, MterpException
   2675     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2676     GET_INST_OPCODE v0                  # extract opcode from rINST
   2677     GOTO_OPCODE v0                      # jump to next instruction
   2678 
   2679 /* ------------------------------ */
   2680     .balign 128
   2681 .L_op_iput_boolean: /* 0x5c */
   2682 /* File: mips64/op_iput_boolean.S */
   2683 /* File: mips64/op_iput.S */
   2684     /*
   2685      * General 32-bit instance field put.
   2686      *
   2687      * for: iput, iput-boolean, iput-byte, iput-char, iput-short
   2688      */
   2689     /* op vA, vB, field//CCCC */
   2690     .extern artSet8InstanceFromMterp
   2691     EXPORT_PC
   2692     lhu     a0, 2(rPC)                  # a0 <- field ref CCCC
   2693     srl     a1, rINST, 12               # a1 <- B
   2694     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2695     ext     a2, rINST, 8, 4             # a2 <- A
   2696     GET_VREG a2, a2                     # a2 <- fp[A]
   2697     ld      a3, OFF_FP_METHOD(rFP)      # a3 <- referrer
   2698     PREFETCH_INST 2
   2699     jal     artSet8InstanceFromMterp
   2700     bnez    v0, MterpPossibleException  # bail out
   2701     ADVANCE 2
   2702     GET_INST_OPCODE v0                  # extract opcode from rINST
   2703     GOTO_OPCODE v0                      # jump to next instruction
   2704 
   2705 
   2706 /* ------------------------------ */
   2707     .balign 128
   2708 .L_op_iput_byte: /* 0x5d */
   2709 /* File: mips64/op_iput_byte.S */
   2710 /* File: mips64/op_iput.S */
   2711     /*
   2712      * General 32-bit instance field put.
   2713      *
   2714      * for: iput, iput-boolean, iput-byte, iput-char, iput-short
   2715      */
   2716     /* op vA, vB, field//CCCC */
   2717     .extern artSet8InstanceFromMterp
   2718     EXPORT_PC
   2719     lhu     a0, 2(rPC)                  # a0 <- field ref CCCC
   2720     srl     a1, rINST, 12               # a1 <- B
   2721     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2722     ext     a2, rINST, 8, 4             # a2 <- A
   2723     GET_VREG a2, a2                     # a2 <- fp[A]
   2724     ld      a3, OFF_FP_METHOD(rFP)      # a3 <- referrer
   2725     PREFETCH_INST 2
   2726     jal     artSet8InstanceFromMterp
   2727     bnez    v0, MterpPossibleException  # bail out
   2728     ADVANCE 2
   2729     GET_INST_OPCODE v0                  # extract opcode from rINST
   2730     GOTO_OPCODE v0                      # jump to next instruction
   2731 
   2732 
   2733 /* ------------------------------ */
   2734     .balign 128
   2735 .L_op_iput_char: /* 0x5e */
   2736 /* File: mips64/op_iput_char.S */
   2737 /* File: mips64/op_iput.S */
   2738     /*
   2739      * General 32-bit instance field put.
   2740      *
   2741      * for: iput, iput-boolean, iput-byte, iput-char, iput-short
   2742      */
   2743     /* op vA, vB, field//CCCC */
   2744     .extern artSet16InstanceFromMterp
   2745     EXPORT_PC
   2746     lhu     a0, 2(rPC)                  # a0 <- field ref CCCC
   2747     srl     a1, rINST, 12               # a1 <- B
   2748     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2749     ext     a2, rINST, 8, 4             # a2 <- A
   2750     GET_VREG a2, a2                     # a2 <- fp[A]
   2751     ld      a3, OFF_FP_METHOD(rFP)      # a3 <- referrer
   2752     PREFETCH_INST 2
   2753     jal     artSet16InstanceFromMterp
   2754     bnez    v0, MterpPossibleException  # bail out
   2755     ADVANCE 2
   2756     GET_INST_OPCODE v0                  # extract opcode from rINST
   2757     GOTO_OPCODE v0                      # jump to next instruction
   2758 
   2759 
   2760 /* ------------------------------ */
   2761     .balign 128
   2762 .L_op_iput_short: /* 0x5f */
   2763 /* File: mips64/op_iput_short.S */
   2764 /* File: mips64/op_iput.S */
   2765     /*
   2766      * General 32-bit instance field put.
   2767      *
   2768      * for: iput, iput-boolean, iput-byte, iput-char, iput-short
   2769      */
   2770     /* op vA, vB, field//CCCC */
   2771     .extern artSet16InstanceFromMterp
   2772     EXPORT_PC
   2773     lhu     a0, 2(rPC)                  # a0 <- field ref CCCC
   2774     srl     a1, rINST, 12               # a1 <- B
   2775     GET_VREG_U a1, a1                   # a1 <- fp[B], the object pointer
   2776     ext     a2, rINST, 8, 4             # a2 <- A
   2777     GET_VREG a2, a2                     # a2 <- fp[A]
   2778     ld      a3, OFF_FP_METHOD(rFP)      # a3 <- referrer
   2779     PREFETCH_INST 2
   2780     jal     artSet16InstanceFromMterp
   2781     bnez    v0, MterpPossibleException  # bail out
   2782     ADVANCE 2
   2783     GET_INST_OPCODE v0                  # extract opcode from rINST
   2784     GOTO_OPCODE v0                      # jump to next instruction
   2785 
   2786 
   2787 /* ------------------------------ */
   2788     .balign 128
   2789 .L_op_sget: /* 0x60 */
   2790 /* File: mips64/op_sget.S */
   2791     /*
   2792      * General SGET handler wrapper.
   2793      *
   2794      * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
   2795      */
   2796     /* op vAA, field//BBBB */
   2797     .extern artGet32StaticFromCode
   2798     EXPORT_PC
   2799     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   2800     ld      a1, OFF_FP_METHOD(rFP)
   2801     move    a2, rSELF
   2802     jal     artGet32StaticFromCode
   2803     ld      a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2804     srl     a2, rINST, 8                # a2 <- AA
   2805 
   2806     PREFETCH_INST 2
   2807     bnez    a3, MterpException          # bail out
   2808     .if 0
   2809     SET_VREG_OBJECT v0, a2              # fp[AA] <- v0
   2810     .else
   2811     SET_VREG v0, a2                     # fp[AA] <- v0
   2812     .endif
   2813     ADVANCE 2
   2814     GET_INST_OPCODE v0                  # extract opcode from rINST
   2815     GOTO_OPCODE v0
   2816 
   2817 /* ------------------------------ */
   2818     .balign 128
   2819 .L_op_sget_wide: /* 0x61 */
   2820 /* File: mips64/op_sget_wide.S */
   2821     /*
   2822      * SGET_WIDE handler wrapper.
   2823      *
   2824      */
   2825     /* sget-wide vAA, field//BBBB */
   2826     .extern artGet64StaticFromCode
   2827     EXPORT_PC
   2828     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   2829     ld      a1, OFF_FP_METHOD(rFP)
   2830     move    a2, rSELF
   2831     jal     artGet64StaticFromCode
   2832     ld      a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2833     srl     a4, rINST, 8                # a4 <- AA
   2834     bnez    a3, MterpException          # bail out
   2835     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   2836     SET_VREG_WIDE v0, a4
   2837     GET_INST_OPCODE v0                  # extract opcode from rINST
   2838     GOTO_OPCODE v0                      # jump to next instruction
   2839 
   2840 /* ------------------------------ */
   2841     .balign 128
   2842 .L_op_sget_object: /* 0x62 */
   2843 /* File: mips64/op_sget_object.S */
   2844 /* File: mips64/op_sget.S */
   2845     /*
   2846      * General SGET handler wrapper.
   2847      *
   2848      * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
   2849      */
   2850     /* op vAA, field//BBBB */
   2851     .extern artGetObjStaticFromCode
   2852     EXPORT_PC
   2853     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   2854     ld      a1, OFF_FP_METHOD(rFP)
   2855     move    a2, rSELF
   2856     jal     artGetObjStaticFromCode
   2857     ld      a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2858     srl     a2, rINST, 8                # a2 <- AA
   2859 
   2860     PREFETCH_INST 2
   2861     bnez    a3, MterpException          # bail out
   2862     .if 1
   2863     SET_VREG_OBJECT v0, a2              # fp[AA] <- v0
   2864     .else
   2865     SET_VREG v0, a2                     # fp[AA] <- v0
   2866     .endif
   2867     ADVANCE 2
   2868     GET_INST_OPCODE v0                  # extract opcode from rINST
   2869     GOTO_OPCODE v0
   2870 
   2871 
   2872 /* ------------------------------ */
   2873     .balign 128
   2874 .L_op_sget_boolean: /* 0x63 */
   2875 /* File: mips64/op_sget_boolean.S */
   2876 /* File: mips64/op_sget.S */
   2877     /*
   2878      * General SGET handler wrapper.
   2879      *
   2880      * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
   2881      */
   2882     /* op vAA, field//BBBB */
   2883     .extern artGetBooleanStaticFromCode
   2884     EXPORT_PC
   2885     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   2886     ld      a1, OFF_FP_METHOD(rFP)
   2887     move    a2, rSELF
   2888     jal     artGetBooleanStaticFromCode
   2889     ld      a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2890     srl     a2, rINST, 8                # a2 <- AA
   2891     and v0, v0, 0xff
   2892     PREFETCH_INST 2
   2893     bnez    a3, MterpException          # bail out
   2894     .if 0
   2895     SET_VREG_OBJECT v0, a2              # fp[AA] <- v0
   2896     .else
   2897     SET_VREG v0, a2                     # fp[AA] <- v0
   2898     .endif
   2899     ADVANCE 2
   2900     GET_INST_OPCODE v0                  # extract opcode from rINST
   2901     GOTO_OPCODE v0
   2902 
   2903 
   2904 /* ------------------------------ */
   2905     .balign 128
   2906 .L_op_sget_byte: /* 0x64 */
   2907 /* File: mips64/op_sget_byte.S */
   2908 /* File: mips64/op_sget.S */
   2909     /*
   2910      * General SGET handler wrapper.
   2911      *
   2912      * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
   2913      */
   2914     /* op vAA, field//BBBB */
   2915     .extern artGetByteStaticFromCode
   2916     EXPORT_PC
   2917     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   2918     ld      a1, OFF_FP_METHOD(rFP)
   2919     move    a2, rSELF
   2920     jal     artGetByteStaticFromCode
   2921     ld      a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2922     srl     a2, rINST, 8                # a2 <- AA
   2923     seb v0, v0
   2924     PREFETCH_INST 2
   2925     bnez    a3, MterpException          # bail out
   2926     .if 0
   2927     SET_VREG_OBJECT v0, a2              # fp[AA] <- v0
   2928     .else
   2929     SET_VREG v0, a2                     # fp[AA] <- v0
   2930     .endif
   2931     ADVANCE 2
   2932     GET_INST_OPCODE v0                  # extract opcode from rINST
   2933     GOTO_OPCODE v0
   2934 
   2935 
   2936 /* ------------------------------ */
   2937     .balign 128
   2938 .L_op_sget_char: /* 0x65 */
   2939 /* File: mips64/op_sget_char.S */
   2940 /* File: mips64/op_sget.S */
   2941     /*
   2942      * General SGET handler wrapper.
   2943      *
   2944      * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
   2945      */
   2946     /* op vAA, field//BBBB */
   2947     .extern artGetCharStaticFromCode
   2948     EXPORT_PC
   2949     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   2950     ld      a1, OFF_FP_METHOD(rFP)
   2951     move    a2, rSELF
   2952     jal     artGetCharStaticFromCode
   2953     ld      a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2954     srl     a2, rINST, 8                # a2 <- AA
   2955     and v0, v0, 0xffff
   2956     PREFETCH_INST 2
   2957     bnez    a3, MterpException          # bail out
   2958     .if 0
   2959     SET_VREG_OBJECT v0, a2              # fp[AA] <- v0
   2960     .else
   2961     SET_VREG v0, a2                     # fp[AA] <- v0
   2962     .endif
   2963     ADVANCE 2
   2964     GET_INST_OPCODE v0                  # extract opcode from rINST
   2965     GOTO_OPCODE v0
   2966 
   2967 
   2968 /* ------------------------------ */
   2969     .balign 128
   2970 .L_op_sget_short: /* 0x66 */
   2971 /* File: mips64/op_sget_short.S */
   2972 /* File: mips64/op_sget.S */
   2973     /*
   2974      * General SGET handler wrapper.
   2975      *
   2976      * for: sget, sget-object, sget-boolean, sget-byte, sget-char, sget-short
   2977      */
   2978     /* op vAA, field//BBBB */
   2979     .extern artGetShortStaticFromCode
   2980     EXPORT_PC
   2981     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   2982     ld      a1, OFF_FP_METHOD(rFP)
   2983     move    a2, rSELF
   2984     jal     artGetShortStaticFromCode
   2985     ld      a3, THREAD_EXCEPTION_OFFSET(rSELF)
   2986     srl     a2, rINST, 8                # a2 <- AA
   2987     seh v0, v0
   2988     PREFETCH_INST 2
   2989     bnez    a3, MterpException          # bail out
   2990     .if 0
   2991     SET_VREG_OBJECT v0, a2              # fp[AA] <- v0
   2992     .else
   2993     SET_VREG v0, a2                     # fp[AA] <- v0
   2994     .endif
   2995     ADVANCE 2
   2996     GET_INST_OPCODE v0                  # extract opcode from rINST
   2997     GOTO_OPCODE v0
   2998 
   2999 
   3000 /* ------------------------------ */
   3001     .balign 128
   3002 .L_op_sput: /* 0x67 */
   3003 /* File: mips64/op_sput.S */
   3004     /*
   3005      * General SPUT handler wrapper.
   3006      *
   3007      * for: sput, sput-boolean, sput-byte, sput-char, sput-short
   3008      */
   3009     /* op vAA, field//BBBB */
   3010     .extern artSet32StaticFromCode
   3011     EXPORT_PC
   3012     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   3013     srl     a3, rINST, 8                # a3 <- AA
   3014     GET_VREG a1, a3                     # a1 <- fp[AA]
   3015     ld      a2, OFF_FP_METHOD(rFP)
   3016     move    a3, rSELF
   3017     PREFETCH_INST 2                     # Get next inst, but don't advance rPC
   3018     jal     artSet32StaticFromCode
   3019     bnezc   v0, MterpException          # 0 on success
   3020     ADVANCE 2                           # Past exception point - now advance rPC
   3021     GET_INST_OPCODE v0                  # extract opcode from rINST
   3022     GOTO_OPCODE v0                      # jump to next instruction
   3023 
   3024 /* ------------------------------ */
   3025     .balign 128
   3026 .L_op_sput_wide: /* 0x68 */
   3027 /* File: mips64/op_sput_wide.S */
   3028     /*
   3029      * SPUT_WIDE handler wrapper.
   3030      *
   3031      */
   3032     /* sput-wide vAA, field//BBBB */
   3033     .extern artSet64IndirectStaticFromMterp
   3034     EXPORT_PC
   3035     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   3036     ld      a1, OFF_FP_METHOD(rFP)
   3037     srl     a2, rINST, 8                # a2 <- AA
   3038     dlsa    a2, a2, rFP, 2
   3039     move    a3, rSELF
   3040     PREFETCH_INST 2                     # Get next inst, but don't advance rPC
   3041     jal     artSet64IndirectStaticFromMterp
   3042     bnezc   v0, MterpException          # 0 on success, -1 on failure
   3043     ADVANCE 2                           # Past exception point - now advance rPC
   3044     GET_INST_OPCODE v0                  # extract opcode from rINST
   3045     GOTO_OPCODE v0                      # jump to next instruction
   3046 
   3047 /* ------------------------------ */
   3048     .balign 128
   3049 .L_op_sput_object: /* 0x69 */
   3050 /* File: mips64/op_sput_object.S */
   3051     .extern MterpSputObject
   3052     EXPORT_PC
   3053     daddu   a0, rFP, OFF_FP_SHADOWFRAME
   3054     move    a1, rPC
   3055     move    a2, rINST
   3056     move    a3, rSELF
   3057     jal     MterpSputObject
   3058     beqzc   v0, MterpException
   3059     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   3060     GET_INST_OPCODE v0                  # extract opcode from rINST
   3061     GOTO_OPCODE v0                      # jump to next instruction
   3062 
   3063 /* ------------------------------ */
   3064     .balign 128
   3065 .L_op_sput_boolean: /* 0x6a */
   3066 /* File: mips64/op_sput_boolean.S */
   3067 /* File: mips64/op_sput.S */
   3068     /*
   3069      * General SPUT handler wrapper.
   3070      *
   3071      * for: sput, sput-boolean, sput-byte, sput-char, sput-short
   3072      */
   3073     /* op vAA, field//BBBB */
   3074     .extern artSet8StaticFromCode
   3075     EXPORT_PC
   3076     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   3077     srl     a3, rINST, 8                # a3 <- AA
   3078     GET_VREG a1, a3                     # a1 <- fp[AA]
   3079     ld      a2, OFF_FP_METHOD(rFP)
   3080     move    a3, rSELF
   3081     PREFETCH_INST 2                     # Get next inst, but don't advance rPC
   3082     jal     artSet8StaticFromCode
   3083     bnezc   v0, MterpException          # 0 on success
   3084     ADVANCE 2                           # Past exception point - now advance rPC
   3085     GET_INST_OPCODE v0                  # extract opcode from rINST
   3086     GOTO_OPCODE v0                      # jump to next instruction
   3087 
   3088 
   3089 /* ------------------------------ */
   3090     .balign 128
   3091 .L_op_sput_byte: /* 0x6b */
   3092 /* File: mips64/op_sput_byte.S */
   3093 /* File: mips64/op_sput.S */
   3094     /*
   3095      * General SPUT handler wrapper.
   3096      *
   3097      * for: sput, sput-boolean, sput-byte, sput-char, sput-short
   3098      */
   3099     /* op vAA, field//BBBB */
   3100     .extern artSet8StaticFromCode
   3101     EXPORT_PC
   3102     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   3103     srl     a3, rINST, 8                # a3 <- AA
   3104     GET_VREG a1, a3                     # a1 <- fp[AA]
   3105     ld      a2, OFF_FP_METHOD(rFP)
   3106     move    a3, rSELF
   3107     PREFETCH_INST 2                     # Get next inst, but don't advance rPC
   3108     jal     artSet8StaticFromCode
   3109     bnezc   v0, MterpException          # 0 on success
   3110     ADVANCE 2                           # Past exception point - now advance rPC
   3111     GET_INST_OPCODE v0                  # extract opcode from rINST
   3112     GOTO_OPCODE v0                      # jump to next instruction
   3113 
   3114 
   3115 /* ------------------------------ */
   3116     .balign 128
   3117 .L_op_sput_char: /* 0x6c */
   3118 /* File: mips64/op_sput_char.S */
   3119 /* File: mips64/op_sput.S */
   3120     /*
   3121      * General SPUT handler wrapper.
   3122      *
   3123      * for: sput, sput-boolean, sput-byte, sput-char, sput-short
   3124      */
   3125     /* op vAA, field//BBBB */
   3126     .extern artSet16StaticFromCode
   3127     EXPORT_PC
   3128     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   3129     srl     a3, rINST, 8                # a3 <- AA
   3130     GET_VREG a1, a3                     # a1 <- fp[AA]
   3131     ld      a2, OFF_FP_METHOD(rFP)
   3132     move    a3, rSELF
   3133     PREFETCH_INST 2                     # Get next inst, but don't advance rPC
   3134     jal     artSet16StaticFromCode
   3135     bnezc   v0, MterpException          # 0 on success
   3136     ADVANCE 2                           # Past exception point - now advance rPC
   3137     GET_INST_OPCODE v0                  # extract opcode from rINST
   3138     GOTO_OPCODE v0                      # jump to next instruction
   3139 
   3140 
   3141 /* ------------------------------ */
   3142     .balign 128
   3143 .L_op_sput_short: /* 0x6d */
   3144 /* File: mips64/op_sput_short.S */
   3145 /* File: mips64/op_sput.S */
   3146     /*
   3147      * General SPUT handler wrapper.
   3148      *
   3149      * for: sput, sput-boolean, sput-byte, sput-char, sput-short
   3150      */
   3151     /* op vAA, field//BBBB */
   3152     .extern artSet16StaticFromCode
   3153     EXPORT_PC
   3154     lhu     a0, 2(rPC)                  # a0 <- field ref BBBB
   3155     srl     a3, rINST, 8                # a3 <- AA
   3156     GET_VREG a1, a3                     # a1 <- fp[AA]
   3157     ld      a2, OFF_FP_METHOD(rFP)
   3158     move    a3, rSELF
   3159     PREFETCH_INST 2                     # Get next inst, but don't advance rPC
   3160     jal     artSet16StaticFromCode
   3161     bnezc   v0, MterpException          # 0 on success
   3162     ADVANCE 2                           # Past exception point - now advance rPC
   3163     GET_INST_OPCODE v0                  # extract opcode from rINST
   3164     GOTO_OPCODE v0                      # jump to next instruction
   3165 
   3166 
   3167 /* ------------------------------ */
   3168     .balign 128
   3169 .L_op_invoke_virtual: /* 0x6e */
   3170 /* File: mips64/op_invoke_virtual.S */
   3171 /* File: mips64/invoke.S */
   3172     /*
   3173      * Generic invoke handler wrapper.
   3174      */
   3175     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3176     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3177     .extern MterpInvokeVirtual
   3178     .extern MterpShouldSwitchInterpreters
   3179     EXPORT_PC
   3180     move    a0, rSELF
   3181     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3182     move    a2, rPC
   3183     move    a3, rINST
   3184     jal     MterpInvokeVirtual
   3185     beqzc   v0, MterpException
   3186     FETCH_ADVANCE_INST 3
   3187     jal     MterpShouldSwitchInterpreters
   3188     bnezc   v0, MterpFallback
   3189     GET_INST_OPCODE v0
   3190     GOTO_OPCODE v0
   3191 
   3192     /*
   3193      * Handle a virtual method call.
   3194      *
   3195      * for: invoke-virtual, invoke-virtual/range
   3196      */
   3197     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3198     /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3199 
   3200 /* ------------------------------ */
   3201     .balign 128
   3202 .L_op_invoke_super: /* 0x6f */
   3203 /* File: mips64/op_invoke_super.S */
   3204 /* File: mips64/invoke.S */
   3205     /*
   3206      * Generic invoke handler wrapper.
   3207      */
   3208     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3209     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3210     .extern MterpInvokeSuper
   3211     .extern MterpShouldSwitchInterpreters
   3212     EXPORT_PC
   3213     move    a0, rSELF
   3214     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3215     move    a2, rPC
   3216     move    a3, rINST
   3217     jal     MterpInvokeSuper
   3218     beqzc   v0, MterpException
   3219     FETCH_ADVANCE_INST 3
   3220     jal     MterpShouldSwitchInterpreters
   3221     bnezc   v0, MterpFallback
   3222     GET_INST_OPCODE v0
   3223     GOTO_OPCODE v0
   3224 
   3225     /*
   3226      * Handle a "super" method call.
   3227      *
   3228      * for: invoke-super, invoke-super/range
   3229      */
   3230     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3231     /* op vAA, {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3232 
   3233 /* ------------------------------ */
   3234     .balign 128
   3235 .L_op_invoke_direct: /* 0x70 */
   3236 /* File: mips64/op_invoke_direct.S */
   3237 /* File: mips64/invoke.S */
   3238     /*
   3239      * Generic invoke handler wrapper.
   3240      */
   3241     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3242     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3243     .extern MterpInvokeDirect
   3244     .extern MterpShouldSwitchInterpreters
   3245     EXPORT_PC
   3246     move    a0, rSELF
   3247     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3248     move    a2, rPC
   3249     move    a3, rINST
   3250     jal     MterpInvokeDirect
   3251     beqzc   v0, MterpException
   3252     FETCH_ADVANCE_INST 3
   3253     jal     MterpShouldSwitchInterpreters
   3254     bnezc   v0, MterpFallback
   3255     GET_INST_OPCODE v0
   3256     GOTO_OPCODE v0
   3257 
   3258 
   3259 /* ------------------------------ */
   3260     .balign 128
   3261 .L_op_invoke_static: /* 0x71 */
   3262 /* File: mips64/op_invoke_static.S */
   3263 /* File: mips64/invoke.S */
   3264     /*
   3265      * Generic invoke handler wrapper.
   3266      */
   3267     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3268     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3269     .extern MterpInvokeStatic
   3270     .extern MterpShouldSwitchInterpreters
   3271     EXPORT_PC
   3272     move    a0, rSELF
   3273     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3274     move    a2, rPC
   3275     move    a3, rINST
   3276     jal     MterpInvokeStatic
   3277     beqzc   v0, MterpException
   3278     FETCH_ADVANCE_INST 3
   3279     jal     MterpShouldSwitchInterpreters
   3280     bnezc   v0, MterpFallback
   3281     GET_INST_OPCODE v0
   3282     GOTO_OPCODE v0
   3283 
   3284 
   3285 /* ------------------------------ */
   3286     .balign 128
   3287 .L_op_invoke_interface: /* 0x72 */
   3288 /* File: mips64/op_invoke_interface.S */
   3289 /* File: mips64/invoke.S */
   3290     /*
   3291      * Generic invoke handler wrapper.
   3292      */
   3293     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3294     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3295     .extern MterpInvokeInterface
   3296     .extern MterpShouldSwitchInterpreters
   3297     EXPORT_PC
   3298     move    a0, rSELF
   3299     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3300     move    a2, rPC
   3301     move    a3, rINST
   3302     jal     MterpInvokeInterface
   3303     beqzc   v0, MterpException
   3304     FETCH_ADVANCE_INST 3
   3305     jal     MterpShouldSwitchInterpreters
   3306     bnezc   v0, MterpFallback
   3307     GET_INST_OPCODE v0
   3308     GOTO_OPCODE v0
   3309 
   3310     /*
   3311      * Handle an interface method call.
   3312      *
   3313      * for: invoke-interface, invoke-interface/range
   3314      */
   3315     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3316     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3317 
   3318 /* ------------------------------ */
   3319     .balign 128
   3320 .L_op_return_void_no_barrier: /* 0x73 */
   3321 /* File: mips64/op_return_void_no_barrier.S */
   3322     .extern MterpSuspendCheck
   3323     lw      ra, THREAD_FLAGS_OFFSET(rSELF)
   3324     move    a0, rSELF
   3325     and     ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST)
   3326     beqzc   ra, 1f
   3327     jal     MterpSuspendCheck           # (self)
   3328 1:
   3329     li      a0, 0
   3330     b       MterpReturn
   3331 
   3332 /* ------------------------------ */
   3333     .balign 128
   3334 .L_op_invoke_virtual_range: /* 0x74 */
   3335 /* File: mips64/op_invoke_virtual_range.S */
   3336 /* File: mips64/invoke.S */
   3337     /*
   3338      * Generic invoke handler wrapper.
   3339      */
   3340     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3341     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3342     .extern MterpInvokeVirtualRange
   3343     .extern MterpShouldSwitchInterpreters
   3344     EXPORT_PC
   3345     move    a0, rSELF
   3346     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3347     move    a2, rPC
   3348     move    a3, rINST
   3349     jal     MterpInvokeVirtualRange
   3350     beqzc   v0, MterpException
   3351     FETCH_ADVANCE_INST 3
   3352     jal     MterpShouldSwitchInterpreters
   3353     bnezc   v0, MterpFallback
   3354     GET_INST_OPCODE v0
   3355     GOTO_OPCODE v0
   3356 
   3357 
   3358 /* ------------------------------ */
   3359     .balign 128
   3360 .L_op_invoke_super_range: /* 0x75 */
   3361 /* File: mips64/op_invoke_super_range.S */
   3362 /* File: mips64/invoke.S */
   3363     /*
   3364      * Generic invoke handler wrapper.
   3365      */
   3366     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3367     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3368     .extern MterpInvokeSuperRange
   3369     .extern MterpShouldSwitchInterpreters
   3370     EXPORT_PC
   3371     move    a0, rSELF
   3372     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3373     move    a2, rPC
   3374     move    a3, rINST
   3375     jal     MterpInvokeSuperRange
   3376     beqzc   v0, MterpException
   3377     FETCH_ADVANCE_INST 3
   3378     jal     MterpShouldSwitchInterpreters
   3379     bnezc   v0, MterpFallback
   3380     GET_INST_OPCODE v0
   3381     GOTO_OPCODE v0
   3382 
   3383 
   3384 /* ------------------------------ */
   3385     .balign 128
   3386 .L_op_invoke_direct_range: /* 0x76 */
   3387 /* File: mips64/op_invoke_direct_range.S */
   3388 /* File: mips64/invoke.S */
   3389     /*
   3390      * Generic invoke handler wrapper.
   3391      */
   3392     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3393     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3394     .extern MterpInvokeDirectRange
   3395     .extern MterpShouldSwitchInterpreters
   3396     EXPORT_PC
   3397     move    a0, rSELF
   3398     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3399     move    a2, rPC
   3400     move    a3, rINST
   3401     jal     MterpInvokeDirectRange
   3402     beqzc   v0, MterpException
   3403     FETCH_ADVANCE_INST 3
   3404     jal     MterpShouldSwitchInterpreters
   3405     bnezc   v0, MterpFallback
   3406     GET_INST_OPCODE v0
   3407     GOTO_OPCODE v0
   3408 
   3409 
   3410 /* ------------------------------ */
   3411     .balign 128
   3412 .L_op_invoke_static_range: /* 0x77 */
   3413 /* File: mips64/op_invoke_static_range.S */
   3414 /* File: mips64/invoke.S */
   3415     /*
   3416      * Generic invoke handler wrapper.
   3417      */
   3418     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3419     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3420     .extern MterpInvokeStaticRange
   3421     .extern MterpShouldSwitchInterpreters
   3422     EXPORT_PC
   3423     move    a0, rSELF
   3424     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3425     move    a2, rPC
   3426     move    a3, rINST
   3427     jal     MterpInvokeStaticRange
   3428     beqzc   v0, MterpException
   3429     FETCH_ADVANCE_INST 3
   3430     jal     MterpShouldSwitchInterpreters
   3431     bnezc   v0, MterpFallback
   3432     GET_INST_OPCODE v0
   3433     GOTO_OPCODE v0
   3434 
   3435 
   3436 /* ------------------------------ */
   3437     .balign 128
   3438 .L_op_invoke_interface_range: /* 0x78 */
   3439 /* File: mips64/op_invoke_interface_range.S */
   3440 /* File: mips64/invoke.S */
   3441     /*
   3442      * Generic invoke handler wrapper.
   3443      */
   3444     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   3445     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   3446     .extern MterpInvokeInterfaceRange
   3447     .extern MterpShouldSwitchInterpreters
   3448     EXPORT_PC
   3449     move    a0, rSELF
   3450     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   3451     move    a2, rPC
   3452     move    a3, rINST
   3453     jal     MterpInvokeInterfaceRange
   3454     beqzc   v0, MterpException
   3455     FETCH_ADVANCE_INST 3
   3456     jal     MterpShouldSwitchInterpreters
   3457     bnezc   v0, MterpFallback
   3458     GET_INST_OPCODE v0
   3459     GOTO_OPCODE v0
   3460 
   3461 
   3462 /* ------------------------------ */
   3463     .balign 128
   3464 .L_op_unused_79: /* 0x79 */
   3465 /* File: mips64/op_unused_79.S */
   3466 /* File: mips64/unused.S */
   3467 /*
   3468  * Bail to reference interpreter to throw.
   3469  */
   3470     b       MterpFallback
   3471 
   3472 
   3473 /* ------------------------------ */
   3474     .balign 128
   3475 .L_op_unused_7a: /* 0x7a */
   3476 /* File: mips64/op_unused_7a.S */
   3477 /* File: mips64/unused.S */
   3478 /*
   3479  * Bail to reference interpreter to throw.
   3480  */
   3481     b       MterpFallback
   3482 
   3483 
   3484 /* ------------------------------ */
   3485     .balign 128
   3486 .L_op_neg_int: /* 0x7b */
   3487 /* File: mips64/op_neg_int.S */
   3488 /* File: mips64/unop.S */
   3489     /*
   3490      * Generic 32-bit unary operation.  Provide an "instr" line that
   3491      * specifies an instruction that performs "a0 = op a0".
   3492      *
   3493      * for: int-to-byte, int-to-char, int-to-short,
   3494      *      not-int, neg-int
   3495      */
   3496     /* unop vA, vB */
   3497     ext     a3, rINST, 12, 4            # a3 <- B
   3498     GET_VREG a0, a3                     # a0 <- vB
   3499     ext     a2, rINST, 8, 4             # a2 <- A
   3500                                # optional op
   3501     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3502     subu    a0, zero, a0                              # a0 <- op, a0-a3 changed
   3503     GET_INST_OPCODE v0                  # extract opcode from rINST
   3504     SET_VREG a0, a2                     # vA <- a0
   3505     GOTO_OPCODE v0                      # jump to next instruction
   3506 
   3507 
   3508 /* ------------------------------ */
   3509     .balign 128
   3510 .L_op_not_int: /* 0x7c */
   3511 /* File: mips64/op_not_int.S */
   3512 /* File: mips64/unop.S */
   3513     /*
   3514      * Generic 32-bit unary operation.  Provide an "instr" line that
   3515      * specifies an instruction that performs "a0 = op a0".
   3516      *
   3517      * for: int-to-byte, int-to-char, int-to-short,
   3518      *      not-int, neg-int
   3519      */
   3520     /* unop vA, vB */
   3521     ext     a3, rINST, 12, 4            # a3 <- B
   3522     GET_VREG a0, a3                     # a0 <- vB
   3523     ext     a2, rINST, 8, 4             # a2 <- A
   3524                                # optional op
   3525     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3526     nor     a0, zero, a0                              # a0 <- op, a0-a3 changed
   3527     GET_INST_OPCODE v0                  # extract opcode from rINST
   3528     SET_VREG a0, a2                     # vA <- a0
   3529     GOTO_OPCODE v0                      # jump to next instruction
   3530 
   3531 
   3532 /* ------------------------------ */
   3533     .balign 128
   3534 .L_op_neg_long: /* 0x7d */
   3535 /* File: mips64/op_neg_long.S */
   3536 /* File: mips64/unopWide.S */
   3537     /*
   3538      * Generic 64-bit unary operation.  Provide an "instr" line that
   3539      * specifies an instruction that performs "a0 = op a0".
   3540      *
   3541      * For: not-long, neg-long
   3542      */
   3543     /* unop vA, vB */
   3544     ext     a3, rINST, 12, 4            # a3 <- B
   3545     GET_VREG_WIDE a0, a3                # a0 <- vB
   3546     ext     a2, rINST, 8, 4             # a2 <- A
   3547                                # optional op
   3548     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3549     dsubu   a0, zero, a0                              # a0 <- op, a0-a3 changed
   3550     GET_INST_OPCODE v0                  # extract opcode from rINST
   3551     SET_VREG_WIDE a0, a2                # vA <- a0
   3552     GOTO_OPCODE v0                      # jump to next instruction
   3553 
   3554 
   3555 /* ------------------------------ */
   3556     .balign 128
   3557 .L_op_not_long: /* 0x7e */
   3558 /* File: mips64/op_not_long.S */
   3559 /* File: mips64/unopWide.S */
   3560     /*
   3561      * Generic 64-bit unary operation.  Provide an "instr" line that
   3562      * specifies an instruction that performs "a0 = op a0".
   3563      *
   3564      * For: not-long, neg-long
   3565      */
   3566     /* unop vA, vB */
   3567     ext     a3, rINST, 12, 4            # a3 <- B
   3568     GET_VREG_WIDE a0, a3                # a0 <- vB
   3569     ext     a2, rINST, 8, 4             # a2 <- A
   3570                                # optional op
   3571     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3572     nor     a0, zero, a0                              # a0 <- op, a0-a3 changed
   3573     GET_INST_OPCODE v0                  # extract opcode from rINST
   3574     SET_VREG_WIDE a0, a2                # vA <- a0
   3575     GOTO_OPCODE v0                      # jump to next instruction
   3576 
   3577 
   3578 /* ------------------------------ */
   3579     .balign 128
   3580 .L_op_neg_float: /* 0x7f */
   3581 /* File: mips64/op_neg_float.S */
   3582 /* File: mips64/fcvtHeader.S */
   3583     /*
   3584      * Loads a specified register from vB. Used primarily for conversions
   3585      * from or to a floating-point type.
   3586      *
   3587      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   3588      * store the result in vA and jump to the next instruction.
   3589      *
   3590      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3591      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3592      *      double-to-long, double-to-float, neg-float, neg-double.
   3593      */
   3594     ext     a1, rINST, 8, 4             # a1 <- A
   3595     srl     a2, rINST, 12               # a2 <- B
   3596     GET_VREG_FLOAT f0, a2
   3597     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3598 
   3599     neg.s   f0, f0
   3600 /* File: mips64/fcvtFooter.S */
   3601     /*
   3602      * Stores a specified register containing the result of conversion
   3603      * from or to a floating-point type and jumps to the next instruction.
   3604      *
   3605      * Expects a1 to contain the destination Dalvik register number.
   3606      * a1 is set up by fcvtHeader.S.
   3607      *
   3608      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3609      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3610      *      double-to-long, double-to-float, neg-float, neg-double.
   3611      *
   3612      * Note that this file can't be included after a break in other files
   3613      * and in those files its contents appear as a copy.
   3614      * See: float-to-int, float-to-long, double-to-int, double-to-long.
   3615      */
   3616     GET_INST_OPCODE v0                  # extract opcode from rINST
   3617     SET_VREG_FLOAT f0, a1
   3618     GOTO_OPCODE v0                      # jump to next instruction
   3619 
   3620 
   3621 /* ------------------------------ */
   3622     .balign 128
   3623 .L_op_neg_double: /* 0x80 */
   3624 /* File: mips64/op_neg_double.S */
   3625 /* File: mips64/fcvtHeader.S */
   3626     /*
   3627      * Loads a specified register from vB. Used primarily for conversions
   3628      * from or to a floating-point type.
   3629      *
   3630      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   3631      * store the result in vA and jump to the next instruction.
   3632      *
   3633      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3634      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3635      *      double-to-long, double-to-float, neg-float, neg-double.
   3636      */
   3637     ext     a1, rINST, 8, 4             # a1 <- A
   3638     srl     a2, rINST, 12               # a2 <- B
   3639     GET_VREG_DOUBLE f0, a2
   3640     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3641 
   3642     neg.d   f0, f0
   3643 /* File: mips64/fcvtFooter.S */
   3644     /*
   3645      * Stores a specified register containing the result of conversion
   3646      * from or to a floating-point type and jumps to the next instruction.
   3647      *
   3648      * Expects a1 to contain the destination Dalvik register number.
   3649      * a1 is set up by fcvtHeader.S.
   3650      *
   3651      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3652      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3653      *      double-to-long, double-to-float, neg-float, neg-double.
   3654      *
   3655      * Note that this file can't be included after a break in other files
   3656      * and in those files its contents appear as a copy.
   3657      * See: float-to-int, float-to-long, double-to-int, double-to-long.
   3658      */
   3659     GET_INST_OPCODE v0                  # extract opcode from rINST
   3660     SET_VREG_DOUBLE f0, a1
   3661     GOTO_OPCODE v0                      # jump to next instruction
   3662 
   3663 
   3664 /* ------------------------------ */
   3665     .balign 128
   3666 .L_op_int_to_long: /* 0x81 */
   3667 /* File: mips64/op_int_to_long.S */
   3668     /* int-to-long vA, vB */
   3669     ext     a3, rINST, 12, 4            # a3 <- B
   3670     GET_VREG a0, a3                     # a0 <- vB (sign-extended to 64 bits)
   3671     ext     a2, rINST, 8, 4             # a2 <- A
   3672     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3673     GET_INST_OPCODE v0                  # extract opcode from rINST
   3674     SET_VREG_WIDE a0, a2                # vA <- vB
   3675     GOTO_OPCODE v0                      # jump to next instruction
   3676 
   3677 /* ------------------------------ */
   3678     .balign 128
   3679 .L_op_int_to_float: /* 0x82 */
   3680 /* File: mips64/op_int_to_float.S */
   3681     /*
   3682      * Conversion from or to floating-point happens in a floating-point register.
   3683      * Therefore we load the input and store the output into or from a
   3684      * floating-point register irrespective of the type.
   3685      */
   3686 /* File: mips64/fcvtHeader.S */
   3687     /*
   3688      * Loads a specified register from vB. Used primarily for conversions
   3689      * from or to a floating-point type.
   3690      *
   3691      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   3692      * store the result in vA and jump to the next instruction.
   3693      *
   3694      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3695      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3696      *      double-to-long, double-to-float, neg-float, neg-double.
   3697      */
   3698     ext     a1, rINST, 8, 4             # a1 <- A
   3699     srl     a2, rINST, 12               # a2 <- B
   3700     GET_VREG_FLOAT f0, a2
   3701     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3702 
   3703     cvt.s.w f0, f0
   3704 /* File: mips64/fcvtFooter.S */
   3705     /*
   3706      * Stores a specified register containing the result of conversion
   3707      * from or to a floating-point type and jumps to the next instruction.
   3708      *
   3709      * Expects a1 to contain the destination Dalvik register number.
   3710      * a1 is set up by fcvtHeader.S.
   3711      *
   3712      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3713      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3714      *      double-to-long, double-to-float, neg-float, neg-double.
   3715      *
   3716      * Note that this file can't be included after a break in other files
   3717      * and in those files its contents appear as a copy.
   3718      * See: float-to-int, float-to-long, double-to-int, double-to-long.
   3719      */
   3720     GET_INST_OPCODE v0                  # extract opcode from rINST
   3721     SET_VREG_FLOAT f0, a1
   3722     GOTO_OPCODE v0                      # jump to next instruction
   3723 
   3724 
   3725 /* ------------------------------ */
   3726     .balign 128
   3727 .L_op_int_to_double: /* 0x83 */
   3728 /* File: mips64/op_int_to_double.S */
   3729     /*
   3730      * Conversion from or to floating-point happens in a floating-point register.
   3731      * Therefore we load the input and store the output into or from a
   3732      * floating-point register irrespective of the type.
   3733      */
   3734 /* File: mips64/fcvtHeader.S */
   3735     /*
   3736      * Loads a specified register from vB. Used primarily for conversions
   3737      * from or to a floating-point type.
   3738      *
   3739      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   3740      * store the result in vA and jump to the next instruction.
   3741      *
   3742      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3743      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3744      *      double-to-long, double-to-float, neg-float, neg-double.
   3745      */
   3746     ext     a1, rINST, 8, 4             # a1 <- A
   3747     srl     a2, rINST, 12               # a2 <- B
   3748     GET_VREG_FLOAT f0, a2
   3749     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3750 
   3751     cvt.d.w f0, f0
   3752 /* File: mips64/fcvtFooter.S */
   3753     /*
   3754      * Stores a specified register containing the result of conversion
   3755      * from or to a floating-point type and jumps to the next instruction.
   3756      *
   3757      * Expects a1 to contain the destination Dalvik register number.
   3758      * a1 is set up by fcvtHeader.S.
   3759      *
   3760      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3761      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3762      *      double-to-long, double-to-float, neg-float, neg-double.
   3763      *
   3764      * Note that this file can't be included after a break in other files
   3765      * and in those files its contents appear as a copy.
   3766      * See: float-to-int, float-to-long, double-to-int, double-to-long.
   3767      */
   3768     GET_INST_OPCODE v0                  # extract opcode from rINST
   3769     SET_VREG_DOUBLE f0, a1
   3770     GOTO_OPCODE v0                      # jump to next instruction
   3771 
   3772 
   3773 /* ------------------------------ */
   3774     .balign 128
   3775 .L_op_long_to_int: /* 0x84 */
   3776 /* File: mips64/op_long_to_int.S */
   3777 /* we ignore the high word, making this equivalent to a 32-bit reg move */
   3778 /* File: mips64/op_move.S */
   3779     /* for move, move-object, long-to-int */
   3780     /* op vA, vB */
   3781     ext     a2, rINST, 8, 4             # a2 <- A
   3782     ext     a3, rINST, 12, 4            # a3 <- B
   3783     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3784     GET_VREG a0, a3                     # a0 <- vB
   3785     GET_INST_OPCODE v0                  # extract opcode from rINST
   3786     .if 0
   3787     SET_VREG_OBJECT a0, a2              # vA <- vB
   3788     .else
   3789     SET_VREG a0, a2                     # vA <- vB
   3790     .endif
   3791     GOTO_OPCODE v0                      # jump to next instruction
   3792 
   3793 
   3794 /* ------------------------------ */
   3795     .balign 128
   3796 .L_op_long_to_float: /* 0x85 */
   3797 /* File: mips64/op_long_to_float.S */
   3798     /*
   3799      * Conversion from or to floating-point happens in a floating-point register.
   3800      * Therefore we load the input and store the output into or from a
   3801      * floating-point register irrespective of the type.
   3802      */
   3803 /* File: mips64/fcvtHeader.S */
   3804     /*
   3805      * Loads a specified register from vB. Used primarily for conversions
   3806      * from or to a floating-point type.
   3807      *
   3808      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   3809      * store the result in vA and jump to the next instruction.
   3810      *
   3811      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3812      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3813      *      double-to-long, double-to-float, neg-float, neg-double.
   3814      */
   3815     ext     a1, rINST, 8, 4             # a1 <- A
   3816     srl     a2, rINST, 12               # a2 <- B
   3817     GET_VREG_DOUBLE f0, a2
   3818     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3819 
   3820     cvt.s.l f0, f0
   3821 /* File: mips64/fcvtFooter.S */
   3822     /*
   3823      * Stores a specified register containing the result of conversion
   3824      * from or to a floating-point type and jumps to the next instruction.
   3825      *
   3826      * Expects a1 to contain the destination Dalvik register number.
   3827      * a1 is set up by fcvtHeader.S.
   3828      *
   3829      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3830      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3831      *      double-to-long, double-to-float, neg-float, neg-double.
   3832      *
   3833      * Note that this file can't be included after a break in other files
   3834      * and in those files its contents appear as a copy.
   3835      * See: float-to-int, float-to-long, double-to-int, double-to-long.
   3836      */
   3837     GET_INST_OPCODE v0                  # extract opcode from rINST
   3838     SET_VREG_FLOAT f0, a1
   3839     GOTO_OPCODE v0                      # jump to next instruction
   3840 
   3841 
   3842 /* ------------------------------ */
   3843     .balign 128
   3844 .L_op_long_to_double: /* 0x86 */
   3845 /* File: mips64/op_long_to_double.S */
   3846     /*
   3847      * Conversion from or to floating-point happens in a floating-point register.
   3848      * Therefore we load the input and store the output into or from a
   3849      * floating-point register irrespective of the type.
   3850      */
   3851 /* File: mips64/fcvtHeader.S */
   3852     /*
   3853      * Loads a specified register from vB. Used primarily for conversions
   3854      * from or to a floating-point type.
   3855      *
   3856      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   3857      * store the result in vA and jump to the next instruction.
   3858      *
   3859      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3860      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3861      *      double-to-long, double-to-float, neg-float, neg-double.
   3862      */
   3863     ext     a1, rINST, 8, 4             # a1 <- A
   3864     srl     a2, rINST, 12               # a2 <- B
   3865     GET_VREG_DOUBLE f0, a2
   3866     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3867 
   3868     cvt.d.l f0, f0
   3869 /* File: mips64/fcvtFooter.S */
   3870     /*
   3871      * Stores a specified register containing the result of conversion
   3872      * from or to a floating-point type and jumps to the next instruction.
   3873      *
   3874      * Expects a1 to contain the destination Dalvik register number.
   3875      * a1 is set up by fcvtHeader.S.
   3876      *
   3877      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3878      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3879      *      double-to-long, double-to-float, neg-float, neg-double.
   3880      *
   3881      * Note that this file can't be included after a break in other files
   3882      * and in those files its contents appear as a copy.
   3883      * See: float-to-int, float-to-long, double-to-int, double-to-long.
   3884      */
   3885     GET_INST_OPCODE v0                  # extract opcode from rINST
   3886     SET_VREG_DOUBLE f0, a1
   3887     GOTO_OPCODE v0                      # jump to next instruction
   3888 
   3889 
   3890 /* ------------------------------ */
   3891     .balign 128
   3892 .L_op_float_to_int: /* 0x87 */
   3893 /* File: mips64/op_float_to_int.S */
   3894 /* File: mips64/fcvtHeader.S */
   3895     /*
   3896      * Loads a specified register from vB. Used primarily for conversions
   3897      * from or to a floating-point type.
   3898      *
   3899      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   3900      * store the result in vA and jump to the next instruction.
   3901      *
   3902      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3903      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3904      *      double-to-long, double-to-float, neg-float, neg-double.
   3905      */
   3906     ext     a1, rINST, 8, 4             # a1 <- A
   3907     srl     a2, rINST, 12               # a2 <- B
   3908     GET_VREG_FLOAT f0, a2
   3909     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3910 
   3911     /*
   3912      * TODO: simplify this when the MIPS64R6 emulator
   3913      * supports NAN2008=1.
   3914      */
   3915     li      t0, INT_MIN_AS_FLOAT
   3916     mtc1    t0, f1
   3917     cmp.le.s f1, f1, f0
   3918     bc1nez  f1, .Lop_float_to_int_trunc
   3919     cmp.eq.s f1, f0, f0
   3920     li      t0, INT_MIN
   3921     mfc1    t1, f1
   3922     and     t0, t0, t1
   3923     b       .Lop_float_to_int_done
   3924 
   3925 /* ------------------------------ */
   3926     .balign 128
   3927 .L_op_float_to_long: /* 0x88 */
   3928 /* File: mips64/op_float_to_long.S */
   3929 /* File: mips64/fcvtHeader.S */
   3930     /*
   3931      * Loads a specified register from vB. Used primarily for conversions
   3932      * from or to a floating-point type.
   3933      *
   3934      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   3935      * store the result in vA and jump to the next instruction.
   3936      *
   3937      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3938      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3939      *      double-to-long, double-to-float, neg-float, neg-double.
   3940      */
   3941     ext     a1, rINST, 8, 4             # a1 <- A
   3942     srl     a2, rINST, 12               # a2 <- B
   3943     GET_VREG_FLOAT f0, a2
   3944     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3945 
   3946     /*
   3947      * TODO: simplify this when the MIPS64R6 emulator
   3948      * supports NAN2008=1.
   3949      */
   3950     li      t0, LONG_MIN_AS_FLOAT
   3951     mtc1    t0, f1
   3952     cmp.le.s f1, f1, f0
   3953     bc1nez  f1, .Lop_float_to_long_trunc
   3954     cmp.eq.s f1, f0, f0
   3955     dli     t0, LONG_MIN
   3956     mfc1    t1, f1
   3957     and     t0, t0, t1
   3958     b       .Lop_float_to_long_done
   3959 
   3960 /* ------------------------------ */
   3961     .balign 128
   3962 .L_op_float_to_double: /* 0x89 */
   3963 /* File: mips64/op_float_to_double.S */
   3964     /*
   3965      * Conversion from or to floating-point happens in a floating-point register.
   3966      * Therefore we load the input and store the output into or from a
   3967      * floating-point register irrespective of the type.
   3968      */
   3969 /* File: mips64/fcvtHeader.S */
   3970     /*
   3971      * Loads a specified register from vB. Used primarily for conversions
   3972      * from or to a floating-point type.
   3973      *
   3974      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   3975      * store the result in vA and jump to the next instruction.
   3976      *
   3977      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3978      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3979      *      double-to-long, double-to-float, neg-float, neg-double.
   3980      */
   3981     ext     a1, rINST, 8, 4             # a1 <- A
   3982     srl     a2, rINST, 12               # a2 <- B
   3983     GET_VREG_FLOAT f0, a2
   3984     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   3985 
   3986     cvt.d.s f0, f0
   3987 /* File: mips64/fcvtFooter.S */
   3988     /*
   3989      * Stores a specified register containing the result of conversion
   3990      * from or to a floating-point type and jumps to the next instruction.
   3991      *
   3992      * Expects a1 to contain the destination Dalvik register number.
   3993      * a1 is set up by fcvtHeader.S.
   3994      *
   3995      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   3996      *      float-to-int, float-to-long, float-to-double, double-to-int,
   3997      *      double-to-long, double-to-float, neg-float, neg-double.
   3998      *
   3999      * Note that this file can't be included after a break in other files
   4000      * and in those files its contents appear as a copy.
   4001      * See: float-to-int, float-to-long, double-to-int, double-to-long.
   4002      */
   4003     GET_INST_OPCODE v0                  # extract opcode from rINST
   4004     SET_VREG_DOUBLE f0, a1
   4005     GOTO_OPCODE v0                      # jump to next instruction
   4006 
   4007 
   4008 /* ------------------------------ */
   4009     .balign 128
   4010 .L_op_double_to_int: /* 0x8a */
   4011 /* File: mips64/op_double_to_int.S */
   4012 /* File: mips64/fcvtHeader.S */
   4013     /*
   4014      * Loads a specified register from vB. Used primarily for conversions
   4015      * from or to a floating-point type.
   4016      *
   4017      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   4018      * store the result in vA and jump to the next instruction.
   4019      *
   4020      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   4021      *      float-to-int, float-to-long, float-to-double, double-to-int,
   4022      *      double-to-long, double-to-float, neg-float, neg-double.
   4023      */
   4024     ext     a1, rINST, 8, 4             # a1 <- A
   4025     srl     a2, rINST, 12               # a2 <- B
   4026     GET_VREG_DOUBLE f0, a2
   4027     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   4028 
   4029     /*
   4030      * TODO: simplify this when the MIPS64R6 emulator
   4031      * supports NAN2008=1.
   4032      */
   4033     dli     t0, INT_MIN_AS_DOUBLE
   4034     dmtc1   t0, f1
   4035     cmp.le.d f1, f1, f0
   4036     bc1nez  f1, .Lop_double_to_int_trunc
   4037     cmp.eq.d f1, f0, f0
   4038     li      t0, INT_MIN
   4039     mfc1    t1, f1
   4040     and     t0, t0, t1
   4041     b       .Lop_double_to_int_done
   4042 
   4043 /* ------------------------------ */
   4044     .balign 128
   4045 .L_op_double_to_long: /* 0x8b */
   4046 /* File: mips64/op_double_to_long.S */
   4047 /* File: mips64/fcvtHeader.S */
   4048     /*
   4049      * Loads a specified register from vB. Used primarily for conversions
   4050      * from or to a floating-point type.
   4051      *
   4052      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   4053      * store the result in vA and jump to the next instruction.
   4054      *
   4055      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   4056      *      float-to-int, float-to-long, float-to-double, double-to-int,
   4057      *      double-to-long, double-to-float, neg-float, neg-double.
   4058      */
   4059     ext     a1, rINST, 8, 4             # a1 <- A
   4060     srl     a2, rINST, 12               # a2 <- B
   4061     GET_VREG_DOUBLE f0, a2
   4062     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   4063 
   4064     /*
   4065      * TODO: simplify this when the MIPS64R6 emulator
   4066      * supports NAN2008=1.
   4067      */
   4068     dli     t0, LONG_MIN_AS_DOUBLE
   4069     dmtc1   t0, f1
   4070     cmp.le.d f1, f1, f0
   4071     bc1nez  f1, .Lop_double_to_long_trunc
   4072     cmp.eq.d f1, f0, f0
   4073     dli     t0, LONG_MIN
   4074     mfc1    t1, f1
   4075     and     t0, t0, t1
   4076     b       .Lop_double_to_long_done
   4077 
   4078 /* ------------------------------ */
   4079     .balign 128
   4080 .L_op_double_to_float: /* 0x8c */
   4081 /* File: mips64/op_double_to_float.S */
   4082     /*
   4083      * Conversion from or to floating-point happens in a floating-point register.
   4084      * Therefore we load the input and store the output into or from a
   4085      * floating-point register irrespective of the type.
   4086      */
   4087 /* File: mips64/fcvtHeader.S */
   4088     /*
   4089      * Loads a specified register from vB. Used primarily for conversions
   4090      * from or to a floating-point type.
   4091      *
   4092      * Sets up a1 = A and a2 = B. a2 is later used by fcvtFooter.S to
   4093      * store the result in vA and jump to the next instruction.
   4094      *
   4095      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   4096      *      float-to-int, float-to-long, float-to-double, double-to-int,
   4097      *      double-to-long, double-to-float, neg-float, neg-double.
   4098      */
   4099     ext     a1, rINST, 8, 4             # a1 <- A
   4100     srl     a2, rINST, 12               # a2 <- B
   4101     GET_VREG_DOUBLE f0, a2
   4102     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   4103 
   4104     cvt.s.d f0, f0
   4105 /* File: mips64/fcvtFooter.S */
   4106     /*
   4107      * Stores a specified register containing the result of conversion
   4108      * from or to a floating-point type and jumps to the next instruction.
   4109      *
   4110      * Expects a1 to contain the destination Dalvik register number.
   4111      * a1 is set up by fcvtHeader.S.
   4112      *
   4113      * For: int-to-float, int-to-double, long-to-float, long-to-double,
   4114      *      float-to-int, float-to-long, float-to-double, double-to-int,
   4115      *      double-to-long, double-to-float, neg-float, neg-double.
   4116      *
   4117      * Note that this file can't be included after a break in other files
   4118      * and in those files its contents appear as a copy.
   4119      * See: float-to-int, float-to-long, double-to-int, double-to-long.
   4120      */
   4121     GET_INST_OPCODE v0                  # extract opcode from rINST
   4122     SET_VREG_FLOAT f0, a1
   4123     GOTO_OPCODE v0                      # jump to next instruction
   4124 
   4125 
   4126 /* ------------------------------ */
   4127     .balign 128
   4128 .L_op_int_to_byte: /* 0x8d */
   4129 /* File: mips64/op_int_to_byte.S */
   4130 /* File: mips64/unop.S */
   4131     /*
   4132      * Generic 32-bit unary operation.  Provide an "instr" line that
   4133      * specifies an instruction that performs "a0 = op a0".
   4134      *
   4135      * for: int-to-byte, int-to-char, int-to-short,
   4136      *      not-int, neg-int
   4137      */
   4138     /* unop vA, vB */
   4139     ext     a3, rINST, 12, 4            # a3 <- B
   4140     GET_VREG a0, a3                     # a0 <- vB
   4141     ext     a2, rINST, 8, 4             # a2 <- A
   4142                                # optional op
   4143     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   4144     seb     a0, a0                              # a0 <- op, a0-a3 changed
   4145     GET_INST_OPCODE v0                  # extract opcode from rINST
   4146     SET_VREG a0, a2                     # vA <- a0
   4147     GOTO_OPCODE v0                      # jump to next instruction
   4148 
   4149 
   4150 /* ------------------------------ */
   4151     .balign 128
   4152 .L_op_int_to_char: /* 0x8e */
   4153 /* File: mips64/op_int_to_char.S */
   4154 /* File: mips64/unop.S */
   4155     /*
   4156      * Generic 32-bit unary operation.  Provide an "instr" line that
   4157      * specifies an instruction that performs "a0 = op a0".
   4158      *
   4159      * for: int-to-byte, int-to-char, int-to-short,
   4160      *      not-int, neg-int
   4161      */
   4162     /* unop vA, vB */
   4163     ext     a3, rINST, 12, 4            # a3 <- B
   4164     GET_VREG a0, a3                     # a0 <- vB
   4165     ext     a2, rINST, 8, 4             # a2 <- A
   4166                                # optional op
   4167     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   4168     and     a0, a0, 0xffff                              # a0 <- op, a0-a3 changed
   4169     GET_INST_OPCODE v0                  # extract opcode from rINST
   4170     SET_VREG a0, a2                     # vA <- a0
   4171     GOTO_OPCODE v0                      # jump to next instruction
   4172 
   4173 
   4174 /* ------------------------------ */
   4175     .balign 128
   4176 .L_op_int_to_short: /* 0x8f */
   4177 /* File: mips64/op_int_to_short.S */
   4178 /* File: mips64/unop.S */
   4179     /*
   4180      * Generic 32-bit unary operation.  Provide an "instr" line that
   4181      * specifies an instruction that performs "a0 = op a0".
   4182      *
   4183      * for: int-to-byte, int-to-char, int-to-short,
   4184      *      not-int, neg-int
   4185      */
   4186     /* unop vA, vB */
   4187     ext     a3, rINST, 12, 4            # a3 <- B
   4188     GET_VREG a0, a3                     # a0 <- vB
   4189     ext     a2, rINST, 8, 4             # a2 <- A
   4190                                # optional op
   4191     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   4192     seh     a0, a0                              # a0 <- op, a0-a3 changed
   4193     GET_INST_OPCODE v0                  # extract opcode from rINST
   4194     SET_VREG a0, a2                     # vA <- a0
   4195     GOTO_OPCODE v0                      # jump to next instruction
   4196 
   4197 
   4198 /* ------------------------------ */
   4199     .balign 128
   4200 .L_op_add_int: /* 0x90 */
   4201 /* File: mips64/op_add_int.S */
   4202 /* File: mips64/binop.S */
   4203     /*
   4204      * Generic 32-bit binary operation.  Provide an "instr" line that
   4205      * specifies an instruction that performs "result = a0 op a1".
   4206      * This could be a MIPS instruction or a function call.  (If the result
   4207      * comes back in a register other than a0, you can override "result".)
   4208      *
   4209      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4210      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4211      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4212      * correctly.
   4213      *
   4214      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4215      *      xor-int, shl-int, shr-int, ushr-int
   4216      */
   4217     /* binop vAA, vBB, vCC */
   4218     srl     a4, rINST, 8                # a4 <- AA
   4219     lbu     a2, 2(rPC)                  # a2 <- BB
   4220     lbu     a3, 3(rPC)                  # a3 <- CC
   4221     GET_VREG a0, a2                     # a0 <- vBB
   4222     GET_VREG a1, a3                     # a1 <- vCC
   4223     .if 0
   4224     beqz    a1, common_errDivideByZero  # is second operand zero?
   4225     .endif
   4226     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4227                                # optional op
   4228     addu a0, a0, a1                              # a0 <- op, a0-a3 changed
   4229     GET_INST_OPCODE v0                  # extract opcode from rINST
   4230     SET_VREG a0, a4                # vAA <- a0
   4231     GOTO_OPCODE v0                      # jump to next instruction
   4232 
   4233 
   4234 /* ------------------------------ */
   4235     .balign 128
   4236 .L_op_sub_int: /* 0x91 */
   4237 /* File: mips64/op_sub_int.S */
   4238 /* File: mips64/binop.S */
   4239     /*
   4240      * Generic 32-bit binary operation.  Provide an "instr" line that
   4241      * specifies an instruction that performs "result = a0 op a1".
   4242      * This could be a MIPS instruction or a function call.  (If the result
   4243      * comes back in a register other than a0, you can override "result".)
   4244      *
   4245      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4246      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4247      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4248      * correctly.
   4249      *
   4250      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4251      *      xor-int, shl-int, shr-int, ushr-int
   4252      */
   4253     /* binop vAA, vBB, vCC */
   4254     srl     a4, rINST, 8                # a4 <- AA
   4255     lbu     a2, 2(rPC)                  # a2 <- BB
   4256     lbu     a3, 3(rPC)                  # a3 <- CC
   4257     GET_VREG a0, a2                     # a0 <- vBB
   4258     GET_VREG a1, a3                     # a1 <- vCC
   4259     .if 0
   4260     beqz    a1, common_errDivideByZero  # is second operand zero?
   4261     .endif
   4262     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4263                                # optional op
   4264     subu a0, a0, a1                              # a0 <- op, a0-a3 changed
   4265     GET_INST_OPCODE v0                  # extract opcode from rINST
   4266     SET_VREG a0, a4                # vAA <- a0
   4267     GOTO_OPCODE v0                      # jump to next instruction
   4268 
   4269 
   4270 /* ------------------------------ */
   4271     .balign 128
   4272 .L_op_mul_int: /* 0x92 */
   4273 /* File: mips64/op_mul_int.S */
   4274 /* File: mips64/binop.S */
   4275     /*
   4276      * Generic 32-bit binary operation.  Provide an "instr" line that
   4277      * specifies an instruction that performs "result = a0 op a1".
   4278      * This could be a MIPS instruction or a function call.  (If the result
   4279      * comes back in a register other than a0, you can override "result".)
   4280      *
   4281      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4282      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4283      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4284      * correctly.
   4285      *
   4286      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4287      *      xor-int, shl-int, shr-int, ushr-int
   4288      */
   4289     /* binop vAA, vBB, vCC */
   4290     srl     a4, rINST, 8                # a4 <- AA
   4291     lbu     a2, 2(rPC)                  # a2 <- BB
   4292     lbu     a3, 3(rPC)                  # a3 <- CC
   4293     GET_VREG a0, a2                     # a0 <- vBB
   4294     GET_VREG a1, a3                     # a1 <- vCC
   4295     .if 0
   4296     beqz    a1, common_errDivideByZero  # is second operand zero?
   4297     .endif
   4298     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4299                                # optional op
   4300     mul a0, a0, a1                              # a0 <- op, a0-a3 changed
   4301     GET_INST_OPCODE v0                  # extract opcode from rINST
   4302     SET_VREG a0, a4                # vAA <- a0
   4303     GOTO_OPCODE v0                      # jump to next instruction
   4304 
   4305 
   4306 /* ------------------------------ */
   4307     .balign 128
   4308 .L_op_div_int: /* 0x93 */
   4309 /* File: mips64/op_div_int.S */
   4310 /* File: mips64/binop.S */
   4311     /*
   4312      * Generic 32-bit binary operation.  Provide an "instr" line that
   4313      * specifies an instruction that performs "result = a0 op a1".
   4314      * This could be a MIPS instruction or a function call.  (If the result
   4315      * comes back in a register other than a0, you can override "result".)
   4316      *
   4317      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4318      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4319      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4320      * correctly.
   4321      *
   4322      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4323      *      xor-int, shl-int, shr-int, ushr-int
   4324      */
   4325     /* binop vAA, vBB, vCC */
   4326     srl     a4, rINST, 8                # a4 <- AA
   4327     lbu     a2, 2(rPC)                  # a2 <- BB
   4328     lbu     a3, 3(rPC)                  # a3 <- CC
   4329     GET_VREG a0, a2                     # a0 <- vBB
   4330     GET_VREG a1, a3                     # a1 <- vCC
   4331     .if 1
   4332     beqz    a1, common_errDivideByZero  # is second operand zero?
   4333     .endif
   4334     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4335                                # optional op
   4336     div a0, a0, a1                              # a0 <- op, a0-a3 changed
   4337     GET_INST_OPCODE v0                  # extract opcode from rINST
   4338     SET_VREG a0, a4                # vAA <- a0
   4339     GOTO_OPCODE v0                      # jump to next instruction
   4340 
   4341 
   4342 /* ------------------------------ */
   4343     .balign 128
   4344 .L_op_rem_int: /* 0x94 */
   4345 /* File: mips64/op_rem_int.S */
   4346 /* File: mips64/binop.S */
   4347     /*
   4348      * Generic 32-bit binary operation.  Provide an "instr" line that
   4349      * specifies an instruction that performs "result = a0 op a1".
   4350      * This could be a MIPS instruction or a function call.  (If the result
   4351      * comes back in a register other than a0, you can override "result".)
   4352      *
   4353      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4354      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4355      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4356      * correctly.
   4357      *
   4358      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4359      *      xor-int, shl-int, shr-int, ushr-int
   4360      */
   4361     /* binop vAA, vBB, vCC */
   4362     srl     a4, rINST, 8                # a4 <- AA
   4363     lbu     a2, 2(rPC)                  # a2 <- BB
   4364     lbu     a3, 3(rPC)                  # a3 <- CC
   4365     GET_VREG a0, a2                     # a0 <- vBB
   4366     GET_VREG a1, a3                     # a1 <- vCC
   4367     .if 1
   4368     beqz    a1, common_errDivideByZero  # is second operand zero?
   4369     .endif
   4370     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4371                                # optional op
   4372     mod a0, a0, a1                              # a0 <- op, a0-a3 changed
   4373     GET_INST_OPCODE v0                  # extract opcode from rINST
   4374     SET_VREG a0, a4                # vAA <- a0
   4375     GOTO_OPCODE v0                      # jump to next instruction
   4376 
   4377 
   4378 /* ------------------------------ */
   4379     .balign 128
   4380 .L_op_and_int: /* 0x95 */
   4381 /* File: mips64/op_and_int.S */
   4382 /* File: mips64/binop.S */
   4383     /*
   4384      * Generic 32-bit binary operation.  Provide an "instr" line that
   4385      * specifies an instruction that performs "result = a0 op a1".
   4386      * This could be a MIPS instruction or a function call.  (If the result
   4387      * comes back in a register other than a0, you can override "result".)
   4388      *
   4389      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4390      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4391      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4392      * correctly.
   4393      *
   4394      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4395      *      xor-int, shl-int, shr-int, ushr-int
   4396      */
   4397     /* binop vAA, vBB, vCC */
   4398     srl     a4, rINST, 8                # a4 <- AA
   4399     lbu     a2, 2(rPC)                  # a2 <- BB
   4400     lbu     a3, 3(rPC)                  # a3 <- CC
   4401     GET_VREG a0, a2                     # a0 <- vBB
   4402     GET_VREG a1, a3                     # a1 <- vCC
   4403     .if 0
   4404     beqz    a1, common_errDivideByZero  # is second operand zero?
   4405     .endif
   4406     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4407                                # optional op
   4408     and a0, a0, a1                              # a0 <- op, a0-a3 changed
   4409     GET_INST_OPCODE v0                  # extract opcode from rINST
   4410     SET_VREG a0, a4                # vAA <- a0
   4411     GOTO_OPCODE v0                      # jump to next instruction
   4412 
   4413 
   4414 /* ------------------------------ */
   4415     .balign 128
   4416 .L_op_or_int: /* 0x96 */
   4417 /* File: mips64/op_or_int.S */
   4418 /* File: mips64/binop.S */
   4419     /*
   4420      * Generic 32-bit binary operation.  Provide an "instr" line that
   4421      * specifies an instruction that performs "result = a0 op a1".
   4422      * This could be a MIPS instruction or a function call.  (If the result
   4423      * comes back in a register other than a0, you can override "result".)
   4424      *
   4425      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4426      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4427      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4428      * correctly.
   4429      *
   4430      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4431      *      xor-int, shl-int, shr-int, ushr-int
   4432      */
   4433     /* binop vAA, vBB, vCC */
   4434     srl     a4, rINST, 8                # a4 <- AA
   4435     lbu     a2, 2(rPC)                  # a2 <- BB
   4436     lbu     a3, 3(rPC)                  # a3 <- CC
   4437     GET_VREG a0, a2                     # a0 <- vBB
   4438     GET_VREG a1, a3                     # a1 <- vCC
   4439     .if 0
   4440     beqz    a1, common_errDivideByZero  # is second operand zero?
   4441     .endif
   4442     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4443                                # optional op
   4444     or a0, a0, a1                              # a0 <- op, a0-a3 changed
   4445     GET_INST_OPCODE v0                  # extract opcode from rINST
   4446     SET_VREG a0, a4                # vAA <- a0
   4447     GOTO_OPCODE v0                      # jump to next instruction
   4448 
   4449 
   4450 /* ------------------------------ */
   4451     .balign 128
   4452 .L_op_xor_int: /* 0x97 */
   4453 /* File: mips64/op_xor_int.S */
   4454 /* File: mips64/binop.S */
   4455     /*
   4456      * Generic 32-bit binary operation.  Provide an "instr" line that
   4457      * specifies an instruction that performs "result = a0 op a1".
   4458      * This could be a MIPS instruction or a function call.  (If the result
   4459      * comes back in a register other than a0, you can override "result".)
   4460      *
   4461      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4462      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4463      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4464      * correctly.
   4465      *
   4466      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4467      *      xor-int, shl-int, shr-int, ushr-int
   4468      */
   4469     /* binop vAA, vBB, vCC */
   4470     srl     a4, rINST, 8                # a4 <- AA
   4471     lbu     a2, 2(rPC)                  # a2 <- BB
   4472     lbu     a3, 3(rPC)                  # a3 <- CC
   4473     GET_VREG a0, a2                     # a0 <- vBB
   4474     GET_VREG a1, a3                     # a1 <- vCC
   4475     .if 0
   4476     beqz    a1, common_errDivideByZero  # is second operand zero?
   4477     .endif
   4478     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4479                                # optional op
   4480     xor a0, a0, a1                              # a0 <- op, a0-a3 changed
   4481     GET_INST_OPCODE v0                  # extract opcode from rINST
   4482     SET_VREG a0, a4                # vAA <- a0
   4483     GOTO_OPCODE v0                      # jump to next instruction
   4484 
   4485 
   4486 /* ------------------------------ */
   4487     .balign 128
   4488 .L_op_shl_int: /* 0x98 */
   4489 /* File: mips64/op_shl_int.S */
   4490 /* File: mips64/binop.S */
   4491     /*
   4492      * Generic 32-bit binary operation.  Provide an "instr" line that
   4493      * specifies an instruction that performs "result = a0 op a1".
   4494      * This could be a MIPS instruction or a function call.  (If the result
   4495      * comes back in a register other than a0, you can override "result".)
   4496      *
   4497      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4498      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4499      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4500      * correctly.
   4501      *
   4502      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4503      *      xor-int, shl-int, shr-int, ushr-int
   4504      */
   4505     /* binop vAA, vBB, vCC */
   4506     srl     a4, rINST, 8                # a4 <- AA
   4507     lbu     a2, 2(rPC)                  # a2 <- BB
   4508     lbu     a3, 3(rPC)                  # a3 <- CC
   4509     GET_VREG a0, a2                     # a0 <- vBB
   4510     GET_VREG a1, a3                     # a1 <- vCC
   4511     .if 0
   4512     beqz    a1, common_errDivideByZero  # is second operand zero?
   4513     .endif
   4514     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4515                                # optional op
   4516     sll a0, a0, a1                              # a0 <- op, a0-a3 changed
   4517     GET_INST_OPCODE v0                  # extract opcode from rINST
   4518     SET_VREG a0, a4                # vAA <- a0
   4519     GOTO_OPCODE v0                      # jump to next instruction
   4520 
   4521 
   4522 /* ------------------------------ */
   4523     .balign 128
   4524 .L_op_shr_int: /* 0x99 */
   4525 /* File: mips64/op_shr_int.S */
   4526 /* File: mips64/binop.S */
   4527     /*
   4528      * Generic 32-bit binary operation.  Provide an "instr" line that
   4529      * specifies an instruction that performs "result = a0 op a1".
   4530      * This could be a MIPS instruction or a function call.  (If the result
   4531      * comes back in a register other than a0, you can override "result".)
   4532      *
   4533      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4534      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4535      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4536      * correctly.
   4537      *
   4538      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4539      *      xor-int, shl-int, shr-int, ushr-int
   4540      */
   4541     /* binop vAA, vBB, vCC */
   4542     srl     a4, rINST, 8                # a4 <- AA
   4543     lbu     a2, 2(rPC)                  # a2 <- BB
   4544     lbu     a3, 3(rPC)                  # a3 <- CC
   4545     GET_VREG a0, a2                     # a0 <- vBB
   4546     GET_VREG a1, a3                     # a1 <- vCC
   4547     .if 0
   4548     beqz    a1, common_errDivideByZero  # is second operand zero?
   4549     .endif
   4550     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4551                                # optional op
   4552     sra a0, a0, a1                              # a0 <- op, a0-a3 changed
   4553     GET_INST_OPCODE v0                  # extract opcode from rINST
   4554     SET_VREG a0, a4                # vAA <- a0
   4555     GOTO_OPCODE v0                      # jump to next instruction
   4556 
   4557 
   4558 /* ------------------------------ */
   4559     .balign 128
   4560 .L_op_ushr_int: /* 0x9a */
   4561 /* File: mips64/op_ushr_int.S */
   4562 /* File: mips64/binop.S */
   4563     /*
   4564      * Generic 32-bit binary operation.  Provide an "instr" line that
   4565      * specifies an instruction that performs "result = a0 op a1".
   4566      * This could be a MIPS instruction or a function call.  (If the result
   4567      * comes back in a register other than a0, you can override "result".)
   4568      *
   4569      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4570      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4571      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   4572      * correctly.
   4573      *
   4574      * For: add-int, sub-int, mul-int, div-int, rem-int, and-int, or-int,
   4575      *      xor-int, shl-int, shr-int, ushr-int
   4576      */
   4577     /* binop vAA, vBB, vCC */
   4578     srl     a4, rINST, 8                # a4 <- AA
   4579     lbu     a2, 2(rPC)                  # a2 <- BB
   4580     lbu     a3, 3(rPC)                  # a3 <- CC
   4581     GET_VREG a0, a2                     # a0 <- vBB
   4582     GET_VREG a1, a3                     # a1 <- vCC
   4583     .if 0
   4584     beqz    a1, common_errDivideByZero  # is second operand zero?
   4585     .endif
   4586     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4587                                # optional op
   4588     srl a0, a0, a1                              # a0 <- op, a0-a3 changed
   4589     GET_INST_OPCODE v0                  # extract opcode from rINST
   4590     SET_VREG a0, a4                # vAA <- a0
   4591     GOTO_OPCODE v0                      # jump to next instruction
   4592 
   4593 
   4594 /* ------------------------------ */
   4595     .balign 128
   4596 .L_op_add_long: /* 0x9b */
   4597 /* File: mips64/op_add_long.S */
   4598 /* File: mips64/binopWide.S */
   4599     /*
   4600      * Generic 64-bit binary operation.  Provide an "instr" line that
   4601      * specifies an instruction that performs "result = a0 op a1".
   4602      * This could be a MIPS instruction or a function call.  (If the result
   4603      * comes back in a register other than a0, you can override "result".)
   4604      *
   4605      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4606      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4607      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4608      * correctly.
   4609      *
   4610      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4611      *      xor-long, shl-long, shr-long, ushr-long
   4612      */
   4613     /* binop vAA, vBB, vCC */
   4614     srl     a4, rINST, 8                # a4 <- AA
   4615     lbu     a2, 2(rPC)                  # a2 <- BB
   4616     lbu     a3, 3(rPC)                  # a3 <- CC
   4617     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4618     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4619     .if 0
   4620     beqz    a1, common_errDivideByZero  # is second operand zero?
   4621     .endif
   4622     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4623                                # optional op
   4624     daddu a0, a0, a1                              # a0 <- op, a0-a3 changed
   4625     GET_INST_OPCODE v0                  # extract opcode from rINST
   4626     SET_VREG_WIDE a0, a4           # vAA <- a0
   4627     GOTO_OPCODE v0                      # jump to next instruction
   4628 
   4629 
   4630 /* ------------------------------ */
   4631     .balign 128
   4632 .L_op_sub_long: /* 0x9c */
   4633 /* File: mips64/op_sub_long.S */
   4634 /* File: mips64/binopWide.S */
   4635     /*
   4636      * Generic 64-bit binary operation.  Provide an "instr" line that
   4637      * specifies an instruction that performs "result = a0 op a1".
   4638      * This could be a MIPS instruction or a function call.  (If the result
   4639      * comes back in a register other than a0, you can override "result".)
   4640      *
   4641      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4642      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4643      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4644      * correctly.
   4645      *
   4646      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4647      *      xor-long, shl-long, shr-long, ushr-long
   4648      */
   4649     /* binop vAA, vBB, vCC */
   4650     srl     a4, rINST, 8                # a4 <- AA
   4651     lbu     a2, 2(rPC)                  # a2 <- BB
   4652     lbu     a3, 3(rPC)                  # a3 <- CC
   4653     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4654     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4655     .if 0
   4656     beqz    a1, common_errDivideByZero  # is second operand zero?
   4657     .endif
   4658     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4659                                # optional op
   4660     dsubu a0, a0, a1                              # a0 <- op, a0-a3 changed
   4661     GET_INST_OPCODE v0                  # extract opcode from rINST
   4662     SET_VREG_WIDE a0, a4           # vAA <- a0
   4663     GOTO_OPCODE v0                      # jump to next instruction
   4664 
   4665 
   4666 /* ------------------------------ */
   4667     .balign 128
   4668 .L_op_mul_long: /* 0x9d */
   4669 /* File: mips64/op_mul_long.S */
   4670 /* File: mips64/binopWide.S */
   4671     /*
   4672      * Generic 64-bit binary operation.  Provide an "instr" line that
   4673      * specifies an instruction that performs "result = a0 op a1".
   4674      * This could be a MIPS instruction or a function call.  (If the result
   4675      * comes back in a register other than a0, you can override "result".)
   4676      *
   4677      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4678      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4679      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4680      * correctly.
   4681      *
   4682      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4683      *      xor-long, shl-long, shr-long, ushr-long
   4684      */
   4685     /* binop vAA, vBB, vCC */
   4686     srl     a4, rINST, 8                # a4 <- AA
   4687     lbu     a2, 2(rPC)                  # a2 <- BB
   4688     lbu     a3, 3(rPC)                  # a3 <- CC
   4689     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4690     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4691     .if 0
   4692     beqz    a1, common_errDivideByZero  # is second operand zero?
   4693     .endif
   4694     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4695                                # optional op
   4696     dmul a0, a0, a1                              # a0 <- op, a0-a3 changed
   4697     GET_INST_OPCODE v0                  # extract opcode from rINST
   4698     SET_VREG_WIDE a0, a4           # vAA <- a0
   4699     GOTO_OPCODE v0                      # jump to next instruction
   4700 
   4701 
   4702 /* ------------------------------ */
   4703     .balign 128
   4704 .L_op_div_long: /* 0x9e */
   4705 /* File: mips64/op_div_long.S */
   4706 /* File: mips64/binopWide.S */
   4707     /*
   4708      * Generic 64-bit binary operation.  Provide an "instr" line that
   4709      * specifies an instruction that performs "result = a0 op a1".
   4710      * This could be a MIPS instruction or a function call.  (If the result
   4711      * comes back in a register other than a0, you can override "result".)
   4712      *
   4713      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4714      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4715      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4716      * correctly.
   4717      *
   4718      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4719      *      xor-long, shl-long, shr-long, ushr-long
   4720      */
   4721     /* binop vAA, vBB, vCC */
   4722     srl     a4, rINST, 8                # a4 <- AA
   4723     lbu     a2, 2(rPC)                  # a2 <- BB
   4724     lbu     a3, 3(rPC)                  # a3 <- CC
   4725     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4726     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4727     .if 1
   4728     beqz    a1, common_errDivideByZero  # is second operand zero?
   4729     .endif
   4730     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4731                                # optional op
   4732     ddiv a0, a0, a1                              # a0 <- op, a0-a3 changed
   4733     GET_INST_OPCODE v0                  # extract opcode from rINST
   4734     SET_VREG_WIDE a0, a4           # vAA <- a0
   4735     GOTO_OPCODE v0                      # jump to next instruction
   4736 
   4737 
   4738 /* ------------------------------ */
   4739     .balign 128
   4740 .L_op_rem_long: /* 0x9f */
   4741 /* File: mips64/op_rem_long.S */
   4742 /* File: mips64/binopWide.S */
   4743     /*
   4744      * Generic 64-bit binary operation.  Provide an "instr" line that
   4745      * specifies an instruction that performs "result = a0 op a1".
   4746      * This could be a MIPS instruction or a function call.  (If the result
   4747      * comes back in a register other than a0, you can override "result".)
   4748      *
   4749      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4750      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4751      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4752      * correctly.
   4753      *
   4754      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4755      *      xor-long, shl-long, shr-long, ushr-long
   4756      */
   4757     /* binop vAA, vBB, vCC */
   4758     srl     a4, rINST, 8                # a4 <- AA
   4759     lbu     a2, 2(rPC)                  # a2 <- BB
   4760     lbu     a3, 3(rPC)                  # a3 <- CC
   4761     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4762     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4763     .if 1
   4764     beqz    a1, common_errDivideByZero  # is second operand zero?
   4765     .endif
   4766     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4767                                # optional op
   4768     dmod a0, a0, a1                              # a0 <- op, a0-a3 changed
   4769     GET_INST_OPCODE v0                  # extract opcode from rINST
   4770     SET_VREG_WIDE a0, a4           # vAA <- a0
   4771     GOTO_OPCODE v0                      # jump to next instruction
   4772 
   4773 
   4774 /* ------------------------------ */
   4775     .balign 128
   4776 .L_op_and_long: /* 0xa0 */
   4777 /* File: mips64/op_and_long.S */
   4778 /* File: mips64/binopWide.S */
   4779     /*
   4780      * Generic 64-bit binary operation.  Provide an "instr" line that
   4781      * specifies an instruction that performs "result = a0 op a1".
   4782      * This could be a MIPS instruction or a function call.  (If the result
   4783      * comes back in a register other than a0, you can override "result".)
   4784      *
   4785      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4786      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4787      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4788      * correctly.
   4789      *
   4790      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4791      *      xor-long, shl-long, shr-long, ushr-long
   4792      */
   4793     /* binop vAA, vBB, vCC */
   4794     srl     a4, rINST, 8                # a4 <- AA
   4795     lbu     a2, 2(rPC)                  # a2 <- BB
   4796     lbu     a3, 3(rPC)                  # a3 <- CC
   4797     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4798     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4799     .if 0
   4800     beqz    a1, common_errDivideByZero  # is second operand zero?
   4801     .endif
   4802     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4803                                # optional op
   4804     and a0, a0, a1                              # a0 <- op, a0-a3 changed
   4805     GET_INST_OPCODE v0                  # extract opcode from rINST
   4806     SET_VREG_WIDE a0, a4           # vAA <- a0
   4807     GOTO_OPCODE v0                      # jump to next instruction
   4808 
   4809 
   4810 /* ------------------------------ */
   4811     .balign 128
   4812 .L_op_or_long: /* 0xa1 */
   4813 /* File: mips64/op_or_long.S */
   4814 /* File: mips64/binopWide.S */
   4815     /*
   4816      * Generic 64-bit binary operation.  Provide an "instr" line that
   4817      * specifies an instruction that performs "result = a0 op a1".
   4818      * This could be a MIPS instruction or a function call.  (If the result
   4819      * comes back in a register other than a0, you can override "result".)
   4820      *
   4821      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4822      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4823      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4824      * correctly.
   4825      *
   4826      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4827      *      xor-long, shl-long, shr-long, ushr-long
   4828      */
   4829     /* binop vAA, vBB, vCC */
   4830     srl     a4, rINST, 8                # a4 <- AA
   4831     lbu     a2, 2(rPC)                  # a2 <- BB
   4832     lbu     a3, 3(rPC)                  # a3 <- CC
   4833     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4834     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4835     .if 0
   4836     beqz    a1, common_errDivideByZero  # is second operand zero?
   4837     .endif
   4838     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4839                                # optional op
   4840     or a0, a0, a1                              # a0 <- op, a0-a3 changed
   4841     GET_INST_OPCODE v0                  # extract opcode from rINST
   4842     SET_VREG_WIDE a0, a4           # vAA <- a0
   4843     GOTO_OPCODE v0                      # jump to next instruction
   4844 
   4845 
   4846 /* ------------------------------ */
   4847     .balign 128
   4848 .L_op_xor_long: /* 0xa2 */
   4849 /* File: mips64/op_xor_long.S */
   4850 /* File: mips64/binopWide.S */
   4851     /*
   4852      * Generic 64-bit binary operation.  Provide an "instr" line that
   4853      * specifies an instruction that performs "result = a0 op a1".
   4854      * This could be a MIPS instruction or a function call.  (If the result
   4855      * comes back in a register other than a0, you can override "result".)
   4856      *
   4857      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4858      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4859      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4860      * correctly.
   4861      *
   4862      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4863      *      xor-long, shl-long, shr-long, ushr-long
   4864      */
   4865     /* binop vAA, vBB, vCC */
   4866     srl     a4, rINST, 8                # a4 <- AA
   4867     lbu     a2, 2(rPC)                  # a2 <- BB
   4868     lbu     a3, 3(rPC)                  # a3 <- CC
   4869     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4870     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4871     .if 0
   4872     beqz    a1, common_errDivideByZero  # is second operand zero?
   4873     .endif
   4874     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4875                                # optional op
   4876     xor a0, a0, a1                              # a0 <- op, a0-a3 changed
   4877     GET_INST_OPCODE v0                  # extract opcode from rINST
   4878     SET_VREG_WIDE a0, a4           # vAA <- a0
   4879     GOTO_OPCODE v0                      # jump to next instruction
   4880 
   4881 
   4882 /* ------------------------------ */
   4883     .balign 128
   4884 .L_op_shl_long: /* 0xa3 */
   4885 /* File: mips64/op_shl_long.S */
   4886 /* File: mips64/binopWide.S */
   4887     /*
   4888      * Generic 64-bit binary operation.  Provide an "instr" line that
   4889      * specifies an instruction that performs "result = a0 op a1".
   4890      * This could be a MIPS instruction or a function call.  (If the result
   4891      * comes back in a register other than a0, you can override "result".)
   4892      *
   4893      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4894      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4895      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4896      * correctly.
   4897      *
   4898      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4899      *      xor-long, shl-long, shr-long, ushr-long
   4900      */
   4901     /* binop vAA, vBB, vCC */
   4902     srl     a4, rINST, 8                # a4 <- AA
   4903     lbu     a2, 2(rPC)                  # a2 <- BB
   4904     lbu     a3, 3(rPC)                  # a3 <- CC
   4905     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4906     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4907     .if 0
   4908     beqz    a1, common_errDivideByZero  # is second operand zero?
   4909     .endif
   4910     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4911                                # optional op
   4912     dsll a0, a0, a1                              # a0 <- op, a0-a3 changed
   4913     GET_INST_OPCODE v0                  # extract opcode from rINST
   4914     SET_VREG_WIDE a0, a4           # vAA <- a0
   4915     GOTO_OPCODE v0                      # jump to next instruction
   4916 
   4917 
   4918 /* ------------------------------ */
   4919     .balign 128
   4920 .L_op_shr_long: /* 0xa4 */
   4921 /* File: mips64/op_shr_long.S */
   4922 /* File: mips64/binopWide.S */
   4923     /*
   4924      * Generic 64-bit binary operation.  Provide an "instr" line that
   4925      * specifies an instruction that performs "result = a0 op a1".
   4926      * This could be a MIPS instruction or a function call.  (If the result
   4927      * comes back in a register other than a0, you can override "result".)
   4928      *
   4929      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4930      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4931      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4932      * correctly.
   4933      *
   4934      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4935      *      xor-long, shl-long, shr-long, ushr-long
   4936      */
   4937     /* binop vAA, vBB, vCC */
   4938     srl     a4, rINST, 8                # a4 <- AA
   4939     lbu     a2, 2(rPC)                  # a2 <- BB
   4940     lbu     a3, 3(rPC)                  # a3 <- CC
   4941     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4942     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4943     .if 0
   4944     beqz    a1, common_errDivideByZero  # is second operand zero?
   4945     .endif
   4946     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4947                                # optional op
   4948     dsra a0, a0, a1                              # a0 <- op, a0-a3 changed
   4949     GET_INST_OPCODE v0                  # extract opcode from rINST
   4950     SET_VREG_WIDE a0, a4           # vAA <- a0
   4951     GOTO_OPCODE v0                      # jump to next instruction
   4952 
   4953 
   4954 /* ------------------------------ */
   4955     .balign 128
   4956 .L_op_ushr_long: /* 0xa5 */
   4957 /* File: mips64/op_ushr_long.S */
   4958 /* File: mips64/binopWide.S */
   4959     /*
   4960      * Generic 64-bit binary operation.  Provide an "instr" line that
   4961      * specifies an instruction that performs "result = a0 op a1".
   4962      * This could be a MIPS instruction or a function call.  (If the result
   4963      * comes back in a register other than a0, you can override "result".)
   4964      *
   4965      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   4966      * vCC (a1).  Useful for integer division and modulus.  Note that we
   4967      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   4968      * correctly.
   4969      *
   4970      * For: add-long, sub-long, mul-long, div-long, rem-long, and-long, or-long,
   4971      *      xor-long, shl-long, shr-long, ushr-long
   4972      */
   4973     /* binop vAA, vBB, vCC */
   4974     srl     a4, rINST, 8                # a4 <- AA
   4975     lbu     a2, 2(rPC)                  # a2 <- BB
   4976     lbu     a3, 3(rPC)                  # a3 <- CC
   4977     GET_VREG_WIDE a0, a2                # a0 <- vBB
   4978     GET_VREG_WIDE a1, a3                # a1 <- vCC
   4979     .if 0
   4980     beqz    a1, common_errDivideByZero  # is second operand zero?
   4981     .endif
   4982     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   4983                                # optional op
   4984     dsrl a0, a0, a1                              # a0 <- op, a0-a3 changed
   4985     GET_INST_OPCODE v0                  # extract opcode from rINST
   4986     SET_VREG_WIDE a0, a4           # vAA <- a0
   4987     GOTO_OPCODE v0                      # jump to next instruction
   4988 
   4989 
   4990 /* ------------------------------ */
   4991     .balign 128
   4992 .L_op_add_float: /* 0xa6 */
   4993 /* File: mips64/op_add_float.S */
   4994 /* File: mips64/fbinop.S */
   4995     /*:
   4996      * Generic 32-bit floating-point operation.
   4997      *
   4998      * For: add-float, sub-float, mul-float, div-float.
   4999      * form: <op> f0, f0, f1
   5000      */
   5001     /* binop vAA, vBB, vCC */
   5002     srl     a4, rINST, 8                # a4 <- AA
   5003     lbu     a2, 2(rPC)                  # a2 <- BB
   5004     lbu     a3, 3(rPC)                  # a3 <- CC
   5005     GET_VREG_FLOAT f0, a2               # f0 <- vBB
   5006     GET_VREG_FLOAT f1, a3               # f1 <- vCC
   5007     add.s f0, f0, f1                              # f0 <- f0 op f1
   5008     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5009     GET_INST_OPCODE v0                  # extract opcode from rINST
   5010     SET_VREG_FLOAT f0, a4               # vAA <- f0
   5011     GOTO_OPCODE v0                      # jump to next instruction
   5012 
   5013 
   5014 /* ------------------------------ */
   5015     .balign 128
   5016 .L_op_sub_float: /* 0xa7 */
   5017 /* File: mips64/op_sub_float.S */
   5018 /* File: mips64/fbinop.S */
   5019     /*:
   5020      * Generic 32-bit floating-point operation.
   5021      *
   5022      * For: add-float, sub-float, mul-float, div-float.
   5023      * form: <op> f0, f0, f1
   5024      */
   5025     /* binop vAA, vBB, vCC */
   5026     srl     a4, rINST, 8                # a4 <- AA
   5027     lbu     a2, 2(rPC)                  # a2 <- BB
   5028     lbu     a3, 3(rPC)                  # a3 <- CC
   5029     GET_VREG_FLOAT f0, a2               # f0 <- vBB
   5030     GET_VREG_FLOAT f1, a3               # f1 <- vCC
   5031     sub.s f0, f0, f1                              # f0 <- f0 op f1
   5032     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5033     GET_INST_OPCODE v0                  # extract opcode from rINST
   5034     SET_VREG_FLOAT f0, a4               # vAA <- f0
   5035     GOTO_OPCODE v0                      # jump to next instruction
   5036 
   5037 
   5038 /* ------------------------------ */
   5039     .balign 128
   5040 .L_op_mul_float: /* 0xa8 */
   5041 /* File: mips64/op_mul_float.S */
   5042 /* File: mips64/fbinop.S */
   5043     /*:
   5044      * Generic 32-bit floating-point operation.
   5045      *
   5046      * For: add-float, sub-float, mul-float, div-float.
   5047      * form: <op> f0, f0, f1
   5048      */
   5049     /* binop vAA, vBB, vCC */
   5050     srl     a4, rINST, 8                # a4 <- AA
   5051     lbu     a2, 2(rPC)                  # a2 <- BB
   5052     lbu     a3, 3(rPC)                  # a3 <- CC
   5053     GET_VREG_FLOAT f0, a2               # f0 <- vBB
   5054     GET_VREG_FLOAT f1, a3               # f1 <- vCC
   5055     mul.s f0, f0, f1                              # f0 <- f0 op f1
   5056     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5057     GET_INST_OPCODE v0                  # extract opcode from rINST
   5058     SET_VREG_FLOAT f0, a4               # vAA <- f0
   5059     GOTO_OPCODE v0                      # jump to next instruction
   5060 
   5061 
   5062 /* ------------------------------ */
   5063     .balign 128
   5064 .L_op_div_float: /* 0xa9 */
   5065 /* File: mips64/op_div_float.S */
   5066 /* File: mips64/fbinop.S */
   5067     /*:
   5068      * Generic 32-bit floating-point operation.
   5069      *
   5070      * For: add-float, sub-float, mul-float, div-float.
   5071      * form: <op> f0, f0, f1
   5072      */
   5073     /* binop vAA, vBB, vCC */
   5074     srl     a4, rINST, 8                # a4 <- AA
   5075     lbu     a2, 2(rPC)                  # a2 <- BB
   5076     lbu     a3, 3(rPC)                  # a3 <- CC
   5077     GET_VREG_FLOAT f0, a2               # f0 <- vBB
   5078     GET_VREG_FLOAT f1, a3               # f1 <- vCC
   5079     div.s f0, f0, f1                              # f0 <- f0 op f1
   5080     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5081     GET_INST_OPCODE v0                  # extract opcode from rINST
   5082     SET_VREG_FLOAT f0, a4               # vAA <- f0
   5083     GOTO_OPCODE v0                      # jump to next instruction
   5084 
   5085 
   5086 /* ------------------------------ */
   5087     .balign 128
   5088 .L_op_rem_float: /* 0xaa */
   5089 /* File: mips64/op_rem_float.S */
   5090     /* rem-float vAA, vBB, vCC */
   5091     .extern fmodf
   5092     lbu     a2, 2(rPC)                  # a2 <- BB
   5093     lbu     a3, 3(rPC)                  # a3 <- CC
   5094     GET_VREG_FLOAT f12, a2              # f12 <- vBB
   5095     GET_VREG_FLOAT f13, a3              # f13 <- vCC
   5096     jal     fmodf                       # f0 <- f12 op f13
   5097     srl     a4, rINST, 8                # a4 <- AA
   5098     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5099     GET_INST_OPCODE v0                  # extract opcode from rINST
   5100     SET_VREG_FLOAT f0, a4               # vAA <- f0
   5101     GOTO_OPCODE v0                      # jump to next instruction
   5102 
   5103 /* ------------------------------ */
   5104     .balign 128
   5105 .L_op_add_double: /* 0xab */
   5106 /* File: mips64/op_add_double.S */
   5107 /* File: mips64/fbinopWide.S */
   5108     /*:
   5109      * Generic 64-bit floating-point operation.
   5110      *
   5111      * For: add-double, sub-double, mul-double, div-double.
   5112      * form: <op> f0, f0, f1
   5113      */
   5114     /* binop vAA, vBB, vCC */
   5115     srl     a4, rINST, 8                # a4 <- AA
   5116     lbu     a2, 2(rPC)                  # a2 <- BB
   5117     lbu     a3, 3(rPC)                  # a3 <- CC
   5118     GET_VREG_DOUBLE f0, a2              # f0 <- vBB
   5119     GET_VREG_DOUBLE f1, a3              # f1 <- vCC
   5120     add.d f0, f0, f1                              # f0 <- f0 op f1
   5121     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5122     GET_INST_OPCODE v0                  # extract opcode from rINST
   5123     SET_VREG_DOUBLE f0, a4              # vAA <- f0
   5124     GOTO_OPCODE v0                      # jump to next instruction
   5125 
   5126 
   5127 /* ------------------------------ */
   5128     .balign 128
   5129 .L_op_sub_double: /* 0xac */
   5130 /* File: mips64/op_sub_double.S */
   5131 /* File: mips64/fbinopWide.S */
   5132     /*:
   5133      * Generic 64-bit floating-point operation.
   5134      *
   5135      * For: add-double, sub-double, mul-double, div-double.
   5136      * form: <op> f0, f0, f1
   5137      */
   5138     /* binop vAA, vBB, vCC */
   5139     srl     a4, rINST, 8                # a4 <- AA
   5140     lbu     a2, 2(rPC)                  # a2 <- BB
   5141     lbu     a3, 3(rPC)                  # a3 <- CC
   5142     GET_VREG_DOUBLE f0, a2              # f0 <- vBB
   5143     GET_VREG_DOUBLE f1, a3              # f1 <- vCC
   5144     sub.d f0, f0, f1                              # f0 <- f0 op f1
   5145     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5146     GET_INST_OPCODE v0                  # extract opcode from rINST
   5147     SET_VREG_DOUBLE f0, a4              # vAA <- f0
   5148     GOTO_OPCODE v0                      # jump to next instruction
   5149 
   5150 
   5151 /* ------------------------------ */
   5152     .balign 128
   5153 .L_op_mul_double: /* 0xad */
   5154 /* File: mips64/op_mul_double.S */
   5155 /* File: mips64/fbinopWide.S */
   5156     /*:
   5157      * Generic 64-bit floating-point operation.
   5158      *
   5159      * For: add-double, sub-double, mul-double, div-double.
   5160      * form: <op> f0, f0, f1
   5161      */
   5162     /* binop vAA, vBB, vCC */
   5163     srl     a4, rINST, 8                # a4 <- AA
   5164     lbu     a2, 2(rPC)                  # a2 <- BB
   5165     lbu     a3, 3(rPC)                  # a3 <- CC
   5166     GET_VREG_DOUBLE f0, a2              # f0 <- vBB
   5167     GET_VREG_DOUBLE f1, a3              # f1 <- vCC
   5168     mul.d f0, f0, f1                              # f0 <- f0 op f1
   5169     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5170     GET_INST_OPCODE v0                  # extract opcode from rINST
   5171     SET_VREG_DOUBLE f0, a4              # vAA <- f0
   5172     GOTO_OPCODE v0                      # jump to next instruction
   5173 
   5174 
   5175 /* ------------------------------ */
   5176     .balign 128
   5177 .L_op_div_double: /* 0xae */
   5178 /* File: mips64/op_div_double.S */
   5179 /* File: mips64/fbinopWide.S */
   5180     /*:
   5181      * Generic 64-bit floating-point operation.
   5182      *
   5183      * For: add-double, sub-double, mul-double, div-double.
   5184      * form: <op> f0, f0, f1
   5185      */
   5186     /* binop vAA, vBB, vCC */
   5187     srl     a4, rINST, 8                # a4 <- AA
   5188     lbu     a2, 2(rPC)                  # a2 <- BB
   5189     lbu     a3, 3(rPC)                  # a3 <- CC
   5190     GET_VREG_DOUBLE f0, a2              # f0 <- vBB
   5191     GET_VREG_DOUBLE f1, a3              # f1 <- vCC
   5192     div.d f0, f0, f1                              # f0 <- f0 op f1
   5193     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5194     GET_INST_OPCODE v0                  # extract opcode from rINST
   5195     SET_VREG_DOUBLE f0, a4              # vAA <- f0
   5196     GOTO_OPCODE v0                      # jump to next instruction
   5197 
   5198 
   5199 /* ------------------------------ */
   5200     .balign 128
   5201 .L_op_rem_double: /* 0xaf */
   5202 /* File: mips64/op_rem_double.S */
   5203     /* rem-double vAA, vBB, vCC */
   5204     .extern fmod
   5205     lbu     a2, 2(rPC)                  # a2 <- BB
   5206     lbu     a3, 3(rPC)                  # a3 <- CC
   5207     GET_VREG_DOUBLE f12, a2             # f12 <- vBB
   5208     GET_VREG_DOUBLE f13, a3             # f13 <- vCC
   5209     jal     fmod                        # f0 <- f12 op f13
   5210     srl     a4, rINST, 8                # a4 <- AA
   5211     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   5212     GET_INST_OPCODE v0                  # extract opcode from rINST
   5213     SET_VREG_DOUBLE f0, a4              # vAA <- f0
   5214     GOTO_OPCODE v0                      # jump to next instruction
   5215 
   5216 /* ------------------------------ */
   5217     .balign 128
   5218 .L_op_add_int_2addr: /* 0xb0 */
   5219 /* File: mips64/op_add_int_2addr.S */
   5220 /* File: mips64/binop2addr.S */
   5221     /*
   5222      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5223      * that specifies an instruction that performs "result = a0 op a1".
   5224      * This could be a MIPS instruction or a function call.  (If the result
   5225      * comes back in a register other than a0, you can override "result".)
   5226      *
   5227      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5228      * vB (a1).  Useful for integer division and modulus.  Note that we
   5229      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5230      * correctly.
   5231      *
   5232      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5233      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5234      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5235      */
   5236     /* binop/2addr vA, vB */
   5237     ext     a2, rINST, 8, 4             # a2 <- A
   5238     ext     a3, rINST, 12, 4            # a3 <- B
   5239     GET_VREG a0, a2                     # a0 <- vA
   5240     GET_VREG a1, a3                     # a1 <- vB
   5241     .if 0
   5242     beqz    a1, common_errDivideByZero  # is second operand zero?
   5243     .endif
   5244     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5245                                # optional op
   5246     addu a0, a0, a1                              # a0 <- op, a0-a3 changed
   5247     GET_INST_OPCODE v0                  # extract opcode from rINST
   5248     SET_VREG a0, a2                # vA <- a0
   5249     GOTO_OPCODE v0                      # jump to next instruction
   5250 
   5251 
   5252 /* ------------------------------ */
   5253     .balign 128
   5254 .L_op_sub_int_2addr: /* 0xb1 */
   5255 /* File: mips64/op_sub_int_2addr.S */
   5256 /* File: mips64/binop2addr.S */
   5257     /*
   5258      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5259      * that specifies an instruction that performs "result = a0 op a1".
   5260      * This could be a MIPS instruction or a function call.  (If the result
   5261      * comes back in a register other than a0, you can override "result".)
   5262      *
   5263      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5264      * vB (a1).  Useful for integer division and modulus.  Note that we
   5265      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5266      * correctly.
   5267      *
   5268      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5269      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5270      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5271      */
   5272     /* binop/2addr vA, vB */
   5273     ext     a2, rINST, 8, 4             # a2 <- A
   5274     ext     a3, rINST, 12, 4            # a3 <- B
   5275     GET_VREG a0, a2                     # a0 <- vA
   5276     GET_VREG a1, a3                     # a1 <- vB
   5277     .if 0
   5278     beqz    a1, common_errDivideByZero  # is second operand zero?
   5279     .endif
   5280     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5281                                # optional op
   5282     subu a0, a0, a1                              # a0 <- op, a0-a3 changed
   5283     GET_INST_OPCODE v0                  # extract opcode from rINST
   5284     SET_VREG a0, a2                # vA <- a0
   5285     GOTO_OPCODE v0                      # jump to next instruction
   5286 
   5287 
   5288 /* ------------------------------ */
   5289     .balign 128
   5290 .L_op_mul_int_2addr: /* 0xb2 */
   5291 /* File: mips64/op_mul_int_2addr.S */
   5292 /* File: mips64/binop2addr.S */
   5293     /*
   5294      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5295      * that specifies an instruction that performs "result = a0 op a1".
   5296      * This could be a MIPS instruction or a function call.  (If the result
   5297      * comes back in a register other than a0, you can override "result".)
   5298      *
   5299      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5300      * vB (a1).  Useful for integer division and modulus.  Note that we
   5301      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5302      * correctly.
   5303      *
   5304      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5305      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5306      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5307      */
   5308     /* binop/2addr vA, vB */
   5309     ext     a2, rINST, 8, 4             # a2 <- A
   5310     ext     a3, rINST, 12, 4            # a3 <- B
   5311     GET_VREG a0, a2                     # a0 <- vA
   5312     GET_VREG a1, a3                     # a1 <- vB
   5313     .if 0
   5314     beqz    a1, common_errDivideByZero  # is second operand zero?
   5315     .endif
   5316     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5317                                # optional op
   5318     mul a0, a0, a1                              # a0 <- op, a0-a3 changed
   5319     GET_INST_OPCODE v0                  # extract opcode from rINST
   5320     SET_VREG a0, a2                # vA <- a0
   5321     GOTO_OPCODE v0                      # jump to next instruction
   5322 
   5323 
   5324 /* ------------------------------ */
   5325     .balign 128
   5326 .L_op_div_int_2addr: /* 0xb3 */
   5327 /* File: mips64/op_div_int_2addr.S */
   5328 /* File: mips64/binop2addr.S */
   5329     /*
   5330      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5331      * that specifies an instruction that performs "result = a0 op a1".
   5332      * This could be a MIPS instruction or a function call.  (If the result
   5333      * comes back in a register other than a0, you can override "result".)
   5334      *
   5335      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5336      * vB (a1).  Useful for integer division and modulus.  Note that we
   5337      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5338      * correctly.
   5339      *
   5340      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5341      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5342      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5343      */
   5344     /* binop/2addr vA, vB */
   5345     ext     a2, rINST, 8, 4             # a2 <- A
   5346     ext     a3, rINST, 12, 4            # a3 <- B
   5347     GET_VREG a0, a2                     # a0 <- vA
   5348     GET_VREG a1, a3                     # a1 <- vB
   5349     .if 1
   5350     beqz    a1, common_errDivideByZero  # is second operand zero?
   5351     .endif
   5352     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5353                                # optional op
   5354     div a0, a0, a1                              # a0 <- op, a0-a3 changed
   5355     GET_INST_OPCODE v0                  # extract opcode from rINST
   5356     SET_VREG a0, a2                # vA <- a0
   5357     GOTO_OPCODE v0                      # jump to next instruction
   5358 
   5359 
   5360 /* ------------------------------ */
   5361     .balign 128
   5362 .L_op_rem_int_2addr: /* 0xb4 */
   5363 /* File: mips64/op_rem_int_2addr.S */
   5364 /* File: mips64/binop2addr.S */
   5365     /*
   5366      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5367      * that specifies an instruction that performs "result = a0 op a1".
   5368      * This could be a MIPS instruction or a function call.  (If the result
   5369      * comes back in a register other than a0, you can override "result".)
   5370      *
   5371      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5372      * vB (a1).  Useful for integer division and modulus.  Note that we
   5373      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5374      * correctly.
   5375      *
   5376      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5377      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5378      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5379      */
   5380     /* binop/2addr vA, vB */
   5381     ext     a2, rINST, 8, 4             # a2 <- A
   5382     ext     a3, rINST, 12, 4            # a3 <- B
   5383     GET_VREG a0, a2                     # a0 <- vA
   5384     GET_VREG a1, a3                     # a1 <- vB
   5385     .if 1
   5386     beqz    a1, common_errDivideByZero  # is second operand zero?
   5387     .endif
   5388     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5389                                # optional op
   5390     mod a0, a0, a1                              # a0 <- op, a0-a3 changed
   5391     GET_INST_OPCODE v0                  # extract opcode from rINST
   5392     SET_VREG a0, a2                # vA <- a0
   5393     GOTO_OPCODE v0                      # jump to next instruction
   5394 
   5395 
   5396 /* ------------------------------ */
   5397     .balign 128
   5398 .L_op_and_int_2addr: /* 0xb5 */
   5399 /* File: mips64/op_and_int_2addr.S */
   5400 /* File: mips64/binop2addr.S */
   5401     /*
   5402      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5403      * that specifies an instruction that performs "result = a0 op a1".
   5404      * This could be a MIPS instruction or a function call.  (If the result
   5405      * comes back in a register other than a0, you can override "result".)
   5406      *
   5407      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5408      * vB (a1).  Useful for integer division and modulus.  Note that we
   5409      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5410      * correctly.
   5411      *
   5412      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5413      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5414      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5415      */
   5416     /* binop/2addr vA, vB */
   5417     ext     a2, rINST, 8, 4             # a2 <- A
   5418     ext     a3, rINST, 12, 4            # a3 <- B
   5419     GET_VREG a0, a2                     # a0 <- vA
   5420     GET_VREG a1, a3                     # a1 <- vB
   5421     .if 0
   5422     beqz    a1, common_errDivideByZero  # is second operand zero?
   5423     .endif
   5424     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5425                                # optional op
   5426     and a0, a0, a1                              # a0 <- op, a0-a3 changed
   5427     GET_INST_OPCODE v0                  # extract opcode from rINST
   5428     SET_VREG a0, a2                # vA <- a0
   5429     GOTO_OPCODE v0                      # jump to next instruction
   5430 
   5431 
   5432 /* ------------------------------ */
   5433     .balign 128
   5434 .L_op_or_int_2addr: /* 0xb6 */
   5435 /* File: mips64/op_or_int_2addr.S */
   5436 /* File: mips64/binop2addr.S */
   5437     /*
   5438      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5439      * that specifies an instruction that performs "result = a0 op a1".
   5440      * This could be a MIPS instruction or a function call.  (If the result
   5441      * comes back in a register other than a0, you can override "result".)
   5442      *
   5443      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5444      * vB (a1).  Useful for integer division and modulus.  Note that we
   5445      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5446      * correctly.
   5447      *
   5448      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5449      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5450      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5451      */
   5452     /* binop/2addr vA, vB */
   5453     ext     a2, rINST, 8, 4             # a2 <- A
   5454     ext     a3, rINST, 12, 4            # a3 <- B
   5455     GET_VREG a0, a2                     # a0 <- vA
   5456     GET_VREG a1, a3                     # a1 <- vB
   5457     .if 0
   5458     beqz    a1, common_errDivideByZero  # is second operand zero?
   5459     .endif
   5460     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5461                                # optional op
   5462     or a0, a0, a1                              # a0 <- op, a0-a3 changed
   5463     GET_INST_OPCODE v0                  # extract opcode from rINST
   5464     SET_VREG a0, a2                # vA <- a0
   5465     GOTO_OPCODE v0                      # jump to next instruction
   5466 
   5467 
   5468 /* ------------------------------ */
   5469     .balign 128
   5470 .L_op_xor_int_2addr: /* 0xb7 */
   5471 /* File: mips64/op_xor_int_2addr.S */
   5472 /* File: mips64/binop2addr.S */
   5473     /*
   5474      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5475      * that specifies an instruction that performs "result = a0 op a1".
   5476      * This could be a MIPS instruction or a function call.  (If the result
   5477      * comes back in a register other than a0, you can override "result".)
   5478      *
   5479      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5480      * vB (a1).  Useful for integer division and modulus.  Note that we
   5481      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5482      * correctly.
   5483      *
   5484      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5485      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5486      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5487      */
   5488     /* binop/2addr vA, vB */
   5489     ext     a2, rINST, 8, 4             # a2 <- A
   5490     ext     a3, rINST, 12, 4            # a3 <- B
   5491     GET_VREG a0, a2                     # a0 <- vA
   5492     GET_VREG a1, a3                     # a1 <- vB
   5493     .if 0
   5494     beqz    a1, common_errDivideByZero  # is second operand zero?
   5495     .endif
   5496     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5497                                # optional op
   5498     xor a0, a0, a1                              # a0 <- op, a0-a3 changed
   5499     GET_INST_OPCODE v0                  # extract opcode from rINST
   5500     SET_VREG a0, a2                # vA <- a0
   5501     GOTO_OPCODE v0                      # jump to next instruction
   5502 
   5503 
   5504 /* ------------------------------ */
   5505     .balign 128
   5506 .L_op_shl_int_2addr: /* 0xb8 */
   5507 /* File: mips64/op_shl_int_2addr.S */
   5508 /* File: mips64/binop2addr.S */
   5509     /*
   5510      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5511      * that specifies an instruction that performs "result = a0 op a1".
   5512      * This could be a MIPS instruction or a function call.  (If the result
   5513      * comes back in a register other than a0, you can override "result".)
   5514      *
   5515      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5516      * vB (a1).  Useful for integer division and modulus.  Note that we
   5517      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5518      * correctly.
   5519      *
   5520      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5521      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5522      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5523      */
   5524     /* binop/2addr vA, vB */
   5525     ext     a2, rINST, 8, 4             # a2 <- A
   5526     ext     a3, rINST, 12, 4            # a3 <- B
   5527     GET_VREG a0, a2                     # a0 <- vA
   5528     GET_VREG a1, a3                     # a1 <- vB
   5529     .if 0
   5530     beqz    a1, common_errDivideByZero  # is second operand zero?
   5531     .endif
   5532     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5533                                # optional op
   5534     sll a0, a0, a1                              # a0 <- op, a0-a3 changed
   5535     GET_INST_OPCODE v0                  # extract opcode from rINST
   5536     SET_VREG a0, a2                # vA <- a0
   5537     GOTO_OPCODE v0                      # jump to next instruction
   5538 
   5539 
   5540 /* ------------------------------ */
   5541     .balign 128
   5542 .L_op_shr_int_2addr: /* 0xb9 */
   5543 /* File: mips64/op_shr_int_2addr.S */
   5544 /* File: mips64/binop2addr.S */
   5545     /*
   5546      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5547      * that specifies an instruction that performs "result = a0 op a1".
   5548      * This could be a MIPS instruction or a function call.  (If the result
   5549      * comes back in a register other than a0, you can override "result".)
   5550      *
   5551      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5552      * vB (a1).  Useful for integer division and modulus.  Note that we
   5553      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5554      * correctly.
   5555      *
   5556      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5557      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5558      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5559      */
   5560     /* binop/2addr vA, vB */
   5561     ext     a2, rINST, 8, 4             # a2 <- A
   5562     ext     a3, rINST, 12, 4            # a3 <- B
   5563     GET_VREG a0, a2                     # a0 <- vA
   5564     GET_VREG a1, a3                     # a1 <- vB
   5565     .if 0
   5566     beqz    a1, common_errDivideByZero  # is second operand zero?
   5567     .endif
   5568     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5569                                # optional op
   5570     sra a0, a0, a1                              # a0 <- op, a0-a3 changed
   5571     GET_INST_OPCODE v0                  # extract opcode from rINST
   5572     SET_VREG a0, a2                # vA <- a0
   5573     GOTO_OPCODE v0                      # jump to next instruction
   5574 
   5575 
   5576 /* ------------------------------ */
   5577     .balign 128
   5578 .L_op_ushr_int_2addr: /* 0xba */
   5579 /* File: mips64/op_ushr_int_2addr.S */
   5580 /* File: mips64/binop2addr.S */
   5581     /*
   5582      * Generic 32-bit "/2addr" binary operation.  Provide an "instr" line
   5583      * that specifies an instruction that performs "result = a0 op a1".
   5584      * This could be a MIPS instruction or a function call.  (If the result
   5585      * comes back in a register other than a0, you can override "result".)
   5586      *
   5587      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5588      * vB (a1).  Useful for integer division and modulus.  Note that we
   5589      * *don't* check for (INT_MIN / -1) here, because the CPU handles it
   5590      * correctly.
   5591      *
   5592      * For: add-int/2addr, sub-int/2addr, mul-int/2addr, div-int/2addr,
   5593      *      rem-int/2addr, and-int/2addr, or-int/2addr, xor-int/2addr,
   5594      *      shl-int/2addr, shr-int/2addr, ushr-int/2addr
   5595      */
   5596     /* binop/2addr vA, vB */
   5597     ext     a2, rINST, 8, 4             # a2 <- A
   5598     ext     a3, rINST, 12, 4            # a3 <- B
   5599     GET_VREG a0, a2                     # a0 <- vA
   5600     GET_VREG a1, a3                     # a1 <- vB
   5601     .if 0
   5602     beqz    a1, common_errDivideByZero  # is second operand zero?
   5603     .endif
   5604     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5605                                # optional op
   5606     srl a0, a0, a1                              # a0 <- op, a0-a3 changed
   5607     GET_INST_OPCODE v0                  # extract opcode from rINST
   5608     SET_VREG a0, a2                # vA <- a0
   5609     GOTO_OPCODE v0                      # jump to next instruction
   5610 
   5611 
   5612 /* ------------------------------ */
   5613     .balign 128
   5614 .L_op_add_long_2addr: /* 0xbb */
   5615 /* File: mips64/op_add_long_2addr.S */
   5616 /* File: mips64/binopWide2addr.S */
   5617     /*
   5618      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5619      * that specifies an instruction that performs "result = a0 op a1".
   5620      * This could be a MIPS instruction or a function call.  (If the result
   5621      * comes back in a register other than a0, you can override "result".)
   5622      *
   5623      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5624      * vB (a1).  Useful for integer division and modulus.  Note that we
   5625      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5626      * correctly.
   5627      *
   5628      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5629      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5630      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5631      */
   5632     /* binop/2addr vA, vB */
   5633     ext     a2, rINST, 8, 4             # a2 <- A
   5634     ext     a3, rINST, 12, 4            # a3 <- B
   5635     GET_VREG_WIDE a0, a2                # a0 <- vA
   5636     GET_VREG_WIDE a1, a3                # a1 <- vB
   5637     .if 0
   5638     beqz    a1, common_errDivideByZero  # is second operand zero?
   5639     .endif
   5640     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5641                                # optional op
   5642     daddu a0, a0, a1                              # a0 <- op, a0-a3 changed
   5643     GET_INST_OPCODE v0                  # extract opcode from rINST
   5644     SET_VREG_WIDE a0, a2           # vA <- a0
   5645     GOTO_OPCODE v0                      # jump to next instruction
   5646 
   5647 
   5648 /* ------------------------------ */
   5649     .balign 128
   5650 .L_op_sub_long_2addr: /* 0xbc */
   5651 /* File: mips64/op_sub_long_2addr.S */
   5652 /* File: mips64/binopWide2addr.S */
   5653     /*
   5654      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5655      * that specifies an instruction that performs "result = a0 op a1".
   5656      * This could be a MIPS instruction or a function call.  (If the result
   5657      * comes back in a register other than a0, you can override "result".)
   5658      *
   5659      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5660      * vB (a1).  Useful for integer division and modulus.  Note that we
   5661      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5662      * correctly.
   5663      *
   5664      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5665      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5666      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5667      */
   5668     /* binop/2addr vA, vB */
   5669     ext     a2, rINST, 8, 4             # a2 <- A
   5670     ext     a3, rINST, 12, 4            # a3 <- B
   5671     GET_VREG_WIDE a0, a2                # a0 <- vA
   5672     GET_VREG_WIDE a1, a3                # a1 <- vB
   5673     .if 0
   5674     beqz    a1, common_errDivideByZero  # is second operand zero?
   5675     .endif
   5676     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5677                                # optional op
   5678     dsubu a0, a0, a1                              # a0 <- op, a0-a3 changed
   5679     GET_INST_OPCODE v0                  # extract opcode from rINST
   5680     SET_VREG_WIDE a0, a2           # vA <- a0
   5681     GOTO_OPCODE v0                      # jump to next instruction
   5682 
   5683 
   5684 /* ------------------------------ */
   5685     .balign 128
   5686 .L_op_mul_long_2addr: /* 0xbd */
   5687 /* File: mips64/op_mul_long_2addr.S */
   5688 /* File: mips64/binopWide2addr.S */
   5689     /*
   5690      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5691      * that specifies an instruction that performs "result = a0 op a1".
   5692      * This could be a MIPS instruction or a function call.  (If the result
   5693      * comes back in a register other than a0, you can override "result".)
   5694      *
   5695      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5696      * vB (a1).  Useful for integer division and modulus.  Note that we
   5697      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5698      * correctly.
   5699      *
   5700      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5701      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5702      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5703      */
   5704     /* binop/2addr vA, vB */
   5705     ext     a2, rINST, 8, 4             # a2 <- A
   5706     ext     a3, rINST, 12, 4            # a3 <- B
   5707     GET_VREG_WIDE a0, a2                # a0 <- vA
   5708     GET_VREG_WIDE a1, a3                # a1 <- vB
   5709     .if 0
   5710     beqz    a1, common_errDivideByZero  # is second operand zero?
   5711     .endif
   5712     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5713                                # optional op
   5714     dmul a0, a0, a1                              # a0 <- op, a0-a3 changed
   5715     GET_INST_OPCODE v0                  # extract opcode from rINST
   5716     SET_VREG_WIDE a0, a2           # vA <- a0
   5717     GOTO_OPCODE v0                      # jump to next instruction
   5718 
   5719 
   5720 /* ------------------------------ */
   5721     .balign 128
   5722 .L_op_div_long_2addr: /* 0xbe */
   5723 /* File: mips64/op_div_long_2addr.S */
   5724 /* File: mips64/binopWide2addr.S */
   5725     /*
   5726      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5727      * that specifies an instruction that performs "result = a0 op a1".
   5728      * This could be a MIPS instruction or a function call.  (If the result
   5729      * comes back in a register other than a0, you can override "result".)
   5730      *
   5731      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5732      * vB (a1).  Useful for integer division and modulus.  Note that we
   5733      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5734      * correctly.
   5735      *
   5736      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5737      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5738      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5739      */
   5740     /* binop/2addr vA, vB */
   5741     ext     a2, rINST, 8, 4             # a2 <- A
   5742     ext     a3, rINST, 12, 4            # a3 <- B
   5743     GET_VREG_WIDE a0, a2                # a0 <- vA
   5744     GET_VREG_WIDE a1, a3                # a1 <- vB
   5745     .if 1
   5746     beqz    a1, common_errDivideByZero  # is second operand zero?
   5747     .endif
   5748     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5749                                # optional op
   5750     ddiv a0, a0, a1                              # a0 <- op, a0-a3 changed
   5751     GET_INST_OPCODE v0                  # extract opcode from rINST
   5752     SET_VREG_WIDE a0, a2           # vA <- a0
   5753     GOTO_OPCODE v0                      # jump to next instruction
   5754 
   5755 
   5756 /* ------------------------------ */
   5757     .balign 128
   5758 .L_op_rem_long_2addr: /* 0xbf */
   5759 /* File: mips64/op_rem_long_2addr.S */
   5760 /* File: mips64/binopWide2addr.S */
   5761     /*
   5762      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5763      * that specifies an instruction that performs "result = a0 op a1".
   5764      * This could be a MIPS instruction or a function call.  (If the result
   5765      * comes back in a register other than a0, you can override "result".)
   5766      *
   5767      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5768      * vB (a1).  Useful for integer division and modulus.  Note that we
   5769      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5770      * correctly.
   5771      *
   5772      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5773      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5774      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5775      */
   5776     /* binop/2addr vA, vB */
   5777     ext     a2, rINST, 8, 4             # a2 <- A
   5778     ext     a3, rINST, 12, 4            # a3 <- B
   5779     GET_VREG_WIDE a0, a2                # a0 <- vA
   5780     GET_VREG_WIDE a1, a3                # a1 <- vB
   5781     .if 1
   5782     beqz    a1, common_errDivideByZero  # is second operand zero?
   5783     .endif
   5784     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5785                                # optional op
   5786     dmod a0, a0, a1                              # a0 <- op, a0-a3 changed
   5787     GET_INST_OPCODE v0                  # extract opcode from rINST
   5788     SET_VREG_WIDE a0, a2           # vA <- a0
   5789     GOTO_OPCODE v0                      # jump to next instruction
   5790 
   5791 
   5792 /* ------------------------------ */
   5793     .balign 128
   5794 .L_op_and_long_2addr: /* 0xc0 */
   5795 /* File: mips64/op_and_long_2addr.S */
   5796 /* File: mips64/binopWide2addr.S */
   5797     /*
   5798      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5799      * that specifies an instruction that performs "result = a0 op a1".
   5800      * This could be a MIPS instruction or a function call.  (If the result
   5801      * comes back in a register other than a0, you can override "result".)
   5802      *
   5803      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5804      * vB (a1).  Useful for integer division and modulus.  Note that we
   5805      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5806      * correctly.
   5807      *
   5808      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5809      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5810      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5811      */
   5812     /* binop/2addr vA, vB */
   5813     ext     a2, rINST, 8, 4             # a2 <- A
   5814     ext     a3, rINST, 12, 4            # a3 <- B
   5815     GET_VREG_WIDE a0, a2                # a0 <- vA
   5816     GET_VREG_WIDE a1, a3                # a1 <- vB
   5817     .if 0
   5818     beqz    a1, common_errDivideByZero  # is second operand zero?
   5819     .endif
   5820     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5821                                # optional op
   5822     and a0, a0, a1                              # a0 <- op, a0-a3 changed
   5823     GET_INST_OPCODE v0                  # extract opcode from rINST
   5824     SET_VREG_WIDE a0, a2           # vA <- a0
   5825     GOTO_OPCODE v0                      # jump to next instruction
   5826 
   5827 
   5828 /* ------------------------------ */
   5829     .balign 128
   5830 .L_op_or_long_2addr: /* 0xc1 */
   5831 /* File: mips64/op_or_long_2addr.S */
   5832 /* File: mips64/binopWide2addr.S */
   5833     /*
   5834      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5835      * that specifies an instruction that performs "result = a0 op a1".
   5836      * This could be a MIPS instruction or a function call.  (If the result
   5837      * comes back in a register other than a0, you can override "result".)
   5838      *
   5839      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5840      * vB (a1).  Useful for integer division and modulus.  Note that we
   5841      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5842      * correctly.
   5843      *
   5844      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5845      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5846      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5847      */
   5848     /* binop/2addr vA, vB */
   5849     ext     a2, rINST, 8, 4             # a2 <- A
   5850     ext     a3, rINST, 12, 4            # a3 <- B
   5851     GET_VREG_WIDE a0, a2                # a0 <- vA
   5852     GET_VREG_WIDE a1, a3                # a1 <- vB
   5853     .if 0
   5854     beqz    a1, common_errDivideByZero  # is second operand zero?
   5855     .endif
   5856     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5857                                # optional op
   5858     or a0, a0, a1                              # a0 <- op, a0-a3 changed
   5859     GET_INST_OPCODE v0                  # extract opcode from rINST
   5860     SET_VREG_WIDE a0, a2           # vA <- a0
   5861     GOTO_OPCODE v0                      # jump to next instruction
   5862 
   5863 
   5864 /* ------------------------------ */
   5865     .balign 128
   5866 .L_op_xor_long_2addr: /* 0xc2 */
   5867 /* File: mips64/op_xor_long_2addr.S */
   5868 /* File: mips64/binopWide2addr.S */
   5869     /*
   5870      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5871      * that specifies an instruction that performs "result = a0 op a1".
   5872      * This could be a MIPS instruction or a function call.  (If the result
   5873      * comes back in a register other than a0, you can override "result".)
   5874      *
   5875      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5876      * vB (a1).  Useful for integer division and modulus.  Note that we
   5877      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5878      * correctly.
   5879      *
   5880      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5881      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5882      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5883      */
   5884     /* binop/2addr vA, vB */
   5885     ext     a2, rINST, 8, 4             # a2 <- A
   5886     ext     a3, rINST, 12, 4            # a3 <- B
   5887     GET_VREG_WIDE a0, a2                # a0 <- vA
   5888     GET_VREG_WIDE a1, a3                # a1 <- vB
   5889     .if 0
   5890     beqz    a1, common_errDivideByZero  # is second operand zero?
   5891     .endif
   5892     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5893                                # optional op
   5894     xor a0, a0, a1                              # a0 <- op, a0-a3 changed
   5895     GET_INST_OPCODE v0                  # extract opcode from rINST
   5896     SET_VREG_WIDE a0, a2           # vA <- a0
   5897     GOTO_OPCODE v0                      # jump to next instruction
   5898 
   5899 
   5900 /* ------------------------------ */
   5901     .balign 128
   5902 .L_op_shl_long_2addr: /* 0xc3 */
   5903 /* File: mips64/op_shl_long_2addr.S */
   5904 /* File: mips64/binopWide2addr.S */
   5905     /*
   5906      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5907      * that specifies an instruction that performs "result = a0 op a1".
   5908      * This could be a MIPS instruction or a function call.  (If the result
   5909      * comes back in a register other than a0, you can override "result".)
   5910      *
   5911      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5912      * vB (a1).  Useful for integer division and modulus.  Note that we
   5913      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5914      * correctly.
   5915      *
   5916      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5917      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5918      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5919      */
   5920     /* binop/2addr vA, vB */
   5921     ext     a2, rINST, 8, 4             # a2 <- A
   5922     ext     a3, rINST, 12, 4            # a3 <- B
   5923     GET_VREG_WIDE a0, a2                # a0 <- vA
   5924     GET_VREG_WIDE a1, a3                # a1 <- vB
   5925     .if 0
   5926     beqz    a1, common_errDivideByZero  # is second operand zero?
   5927     .endif
   5928     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5929                                # optional op
   5930     dsll a0, a0, a1                              # a0 <- op, a0-a3 changed
   5931     GET_INST_OPCODE v0                  # extract opcode from rINST
   5932     SET_VREG_WIDE a0, a2           # vA <- a0
   5933     GOTO_OPCODE v0                      # jump to next instruction
   5934 
   5935 
   5936 /* ------------------------------ */
   5937     .balign 128
   5938 .L_op_shr_long_2addr: /* 0xc4 */
   5939 /* File: mips64/op_shr_long_2addr.S */
   5940 /* File: mips64/binopWide2addr.S */
   5941     /*
   5942      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5943      * that specifies an instruction that performs "result = a0 op a1".
   5944      * This could be a MIPS instruction or a function call.  (If the result
   5945      * comes back in a register other than a0, you can override "result".)
   5946      *
   5947      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5948      * vB (a1).  Useful for integer division and modulus.  Note that we
   5949      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5950      * correctly.
   5951      *
   5952      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5953      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5954      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5955      */
   5956     /* binop/2addr vA, vB */
   5957     ext     a2, rINST, 8, 4             # a2 <- A
   5958     ext     a3, rINST, 12, 4            # a3 <- B
   5959     GET_VREG_WIDE a0, a2                # a0 <- vA
   5960     GET_VREG_WIDE a1, a3                # a1 <- vB
   5961     .if 0
   5962     beqz    a1, common_errDivideByZero  # is second operand zero?
   5963     .endif
   5964     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   5965                                # optional op
   5966     dsra a0, a0, a1                              # a0 <- op, a0-a3 changed
   5967     GET_INST_OPCODE v0                  # extract opcode from rINST
   5968     SET_VREG_WIDE a0, a2           # vA <- a0
   5969     GOTO_OPCODE v0                      # jump to next instruction
   5970 
   5971 
   5972 /* ------------------------------ */
   5973     .balign 128
   5974 .L_op_ushr_long_2addr: /* 0xc5 */
   5975 /* File: mips64/op_ushr_long_2addr.S */
   5976 /* File: mips64/binopWide2addr.S */
   5977     /*
   5978      * Generic 64-bit "/2addr" binary operation.  Provide an "instr" line
   5979      * that specifies an instruction that performs "result = a0 op a1".
   5980      * This could be a MIPS instruction or a function call.  (If the result
   5981      * comes back in a register other than a0, you can override "result".)
   5982      *
   5983      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   5984      * vB (a1).  Useful for integer division and modulus.  Note that we
   5985      * *don't* check for (LONG_MIN / -1) here, because the CPU handles it
   5986      * correctly.
   5987      *
   5988      * For: add-long/2addr, sub-long/2addr, mul-long/2addr, div-long/2addr,
   5989      *      rem-long/2addr, and-long/2addr, or-long/2addr, xor-long/2addr,
   5990      *      shl-long/2addr, shr-long/2addr, ushr-long/2addr
   5991      */
   5992     /* binop/2addr vA, vB */
   5993     ext     a2, rINST, 8, 4             # a2 <- A
   5994     ext     a3, rINST, 12, 4            # a3 <- B
   5995     GET_VREG_WIDE a0, a2                # a0 <- vA
   5996     GET_VREG_WIDE a1, a3                # a1 <- vB
   5997     .if 0
   5998     beqz    a1, common_errDivideByZero  # is second operand zero?
   5999     .endif
   6000     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6001                                # optional op
   6002     dsrl a0, a0, a1                              # a0 <- op, a0-a3 changed
   6003     GET_INST_OPCODE v0                  # extract opcode from rINST
   6004     SET_VREG_WIDE a0, a2           # vA <- a0
   6005     GOTO_OPCODE v0                      # jump to next instruction
   6006 
   6007 
   6008 /* ------------------------------ */
   6009     .balign 128
   6010 .L_op_add_float_2addr: /* 0xc6 */
   6011 /* File: mips64/op_add_float_2addr.S */
   6012 /* File: mips64/fbinop2addr.S */
   6013     /*:
   6014      * Generic 32-bit "/2addr" floating-point operation.
   6015      *
   6016      * For: add-float/2addr, sub-float/2addr, mul-float/2addr, div-float/2addr.
   6017      * form: <op> f0, f0, f1
   6018      */
   6019     /* binop/2addr vA, vB */
   6020     ext     a2, rINST, 8, 4             # a2 <- A
   6021     ext     a3, rINST, 12, 4            # a3 <- B
   6022     GET_VREG_FLOAT f0, a2               # f0 <- vA
   6023     GET_VREG_FLOAT f1, a3               # f1 <- vB
   6024     add.s f0, f0, f1                              # f0 <- f0 op f1
   6025     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6026     GET_INST_OPCODE v0                  # extract opcode from rINST
   6027     SET_VREG_FLOAT f0, a2               # vA <- f0
   6028     GOTO_OPCODE v0                      # jump to next instruction
   6029 
   6030 
   6031 /* ------------------------------ */
   6032     .balign 128
   6033 .L_op_sub_float_2addr: /* 0xc7 */
   6034 /* File: mips64/op_sub_float_2addr.S */
   6035 /* File: mips64/fbinop2addr.S */
   6036     /*:
   6037      * Generic 32-bit "/2addr" floating-point operation.
   6038      *
   6039      * For: add-float/2addr, sub-float/2addr, mul-float/2addr, div-float/2addr.
   6040      * form: <op> f0, f0, f1
   6041      */
   6042     /* binop/2addr vA, vB */
   6043     ext     a2, rINST, 8, 4             # a2 <- A
   6044     ext     a3, rINST, 12, 4            # a3 <- B
   6045     GET_VREG_FLOAT f0, a2               # f0 <- vA
   6046     GET_VREG_FLOAT f1, a3               # f1 <- vB
   6047     sub.s f0, f0, f1                              # f0 <- f0 op f1
   6048     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6049     GET_INST_OPCODE v0                  # extract opcode from rINST
   6050     SET_VREG_FLOAT f0, a2               # vA <- f0
   6051     GOTO_OPCODE v0                      # jump to next instruction
   6052 
   6053 
   6054 /* ------------------------------ */
   6055     .balign 128
   6056 .L_op_mul_float_2addr: /* 0xc8 */
   6057 /* File: mips64/op_mul_float_2addr.S */
   6058 /* File: mips64/fbinop2addr.S */
   6059     /*:
   6060      * Generic 32-bit "/2addr" floating-point operation.
   6061      *
   6062      * For: add-float/2addr, sub-float/2addr, mul-float/2addr, div-float/2addr.
   6063      * form: <op> f0, f0, f1
   6064      */
   6065     /* binop/2addr vA, vB */
   6066     ext     a2, rINST, 8, 4             # a2 <- A
   6067     ext     a3, rINST, 12, 4            # a3 <- B
   6068     GET_VREG_FLOAT f0, a2               # f0 <- vA
   6069     GET_VREG_FLOAT f1, a3               # f1 <- vB
   6070     mul.s f0, f0, f1                              # f0 <- f0 op f1
   6071     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6072     GET_INST_OPCODE v0                  # extract opcode from rINST
   6073     SET_VREG_FLOAT f0, a2               # vA <- f0
   6074     GOTO_OPCODE v0                      # jump to next instruction
   6075 
   6076 
   6077 /* ------------------------------ */
   6078     .balign 128
   6079 .L_op_div_float_2addr: /* 0xc9 */
   6080 /* File: mips64/op_div_float_2addr.S */
   6081 /* File: mips64/fbinop2addr.S */
   6082     /*:
   6083      * Generic 32-bit "/2addr" floating-point operation.
   6084      *
   6085      * For: add-float/2addr, sub-float/2addr, mul-float/2addr, div-float/2addr.
   6086      * form: <op> f0, f0, f1
   6087      */
   6088     /* binop/2addr vA, vB */
   6089     ext     a2, rINST, 8, 4             # a2 <- A
   6090     ext     a3, rINST, 12, 4            # a3 <- B
   6091     GET_VREG_FLOAT f0, a2               # f0 <- vA
   6092     GET_VREG_FLOAT f1, a3               # f1 <- vB
   6093     div.s f0, f0, f1                              # f0 <- f0 op f1
   6094     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6095     GET_INST_OPCODE v0                  # extract opcode from rINST
   6096     SET_VREG_FLOAT f0, a2               # vA <- f0
   6097     GOTO_OPCODE v0                      # jump to next instruction
   6098 
   6099 
   6100 /* ------------------------------ */
   6101     .balign 128
   6102 .L_op_rem_float_2addr: /* 0xca */
   6103 /* File: mips64/op_rem_float_2addr.S */
   6104     /* rem-float/2addr vA, vB */
   6105     .extern fmodf
   6106     ext     a2, rINST, 8, 4             # a2 <- A
   6107     ext     a3, rINST, 12, 4            # a3 <- B
   6108     GET_VREG_FLOAT f12, a2              # f12 <- vA
   6109     GET_VREG_FLOAT f13, a3              # f13 <- vB
   6110     jal     fmodf                       # f0 <- f12 op f13
   6111     ext     a2, rINST, 8, 4             # a2 <- A
   6112     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6113     GET_INST_OPCODE v0                  # extract opcode from rINST
   6114     SET_VREG_FLOAT f0, a2               # vA <- f0
   6115     GOTO_OPCODE v0                      # jump to next instruction
   6116 
   6117 /* ------------------------------ */
   6118     .balign 128
   6119 .L_op_add_double_2addr: /* 0xcb */
   6120 /* File: mips64/op_add_double_2addr.S */
   6121 /* File: mips64/fbinopWide2addr.S */
   6122     /*:
   6123      * Generic 64-bit "/2addr" floating-point operation.
   6124      *
   6125      * For: add-double/2addr, sub-double/2addr, mul-double/2addr, div-double/2addr.
   6126      * form: <op> f0, f0, f1
   6127      */
   6128     /* binop/2addr vA, vB */
   6129     ext     a2, rINST, 8, 4             # a2 <- A
   6130     ext     a3, rINST, 12, 4            # a3 <- B
   6131     GET_VREG_DOUBLE f0, a2              # f0 <- vA
   6132     GET_VREG_DOUBLE f1, a3              # f1 <- vB
   6133     add.d f0, f0, f1                              # f0 <- f0 op f1
   6134     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6135     GET_INST_OPCODE v0                  # extract opcode from rINST
   6136     SET_VREG_DOUBLE f0, a2              # vA <- f0
   6137     GOTO_OPCODE v0                      # jump to next instruction
   6138 
   6139 
   6140 /* ------------------------------ */
   6141     .balign 128
   6142 .L_op_sub_double_2addr: /* 0xcc */
   6143 /* File: mips64/op_sub_double_2addr.S */
   6144 /* File: mips64/fbinopWide2addr.S */
   6145     /*:
   6146      * Generic 64-bit "/2addr" floating-point operation.
   6147      *
   6148      * For: add-double/2addr, sub-double/2addr, mul-double/2addr, div-double/2addr.
   6149      * form: <op> f0, f0, f1
   6150      */
   6151     /* binop/2addr vA, vB */
   6152     ext     a2, rINST, 8, 4             # a2 <- A
   6153     ext     a3, rINST, 12, 4            # a3 <- B
   6154     GET_VREG_DOUBLE f0, a2              # f0 <- vA
   6155     GET_VREG_DOUBLE f1, a3              # f1 <- vB
   6156     sub.d f0, f0, f1                              # f0 <- f0 op f1
   6157     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6158     GET_INST_OPCODE v0                  # extract opcode from rINST
   6159     SET_VREG_DOUBLE f0, a2              # vA <- f0
   6160     GOTO_OPCODE v0                      # jump to next instruction
   6161 
   6162 
   6163 /* ------------------------------ */
   6164     .balign 128
   6165 .L_op_mul_double_2addr: /* 0xcd */
   6166 /* File: mips64/op_mul_double_2addr.S */
   6167 /* File: mips64/fbinopWide2addr.S */
   6168     /*:
   6169      * Generic 64-bit "/2addr" floating-point operation.
   6170      *
   6171      * For: add-double/2addr, sub-double/2addr, mul-double/2addr, div-double/2addr.
   6172      * form: <op> f0, f0, f1
   6173      */
   6174     /* binop/2addr vA, vB */
   6175     ext     a2, rINST, 8, 4             # a2 <- A
   6176     ext     a3, rINST, 12, 4            # a3 <- B
   6177     GET_VREG_DOUBLE f0, a2              # f0 <- vA
   6178     GET_VREG_DOUBLE f1, a3              # f1 <- vB
   6179     mul.d f0, f0, f1                              # f0 <- f0 op f1
   6180     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6181     GET_INST_OPCODE v0                  # extract opcode from rINST
   6182     SET_VREG_DOUBLE f0, a2              # vA <- f0
   6183     GOTO_OPCODE v0                      # jump to next instruction
   6184 
   6185 
   6186 /* ------------------------------ */
   6187     .balign 128
   6188 .L_op_div_double_2addr: /* 0xce */
   6189 /* File: mips64/op_div_double_2addr.S */
   6190 /* File: mips64/fbinopWide2addr.S */
   6191     /*:
   6192      * Generic 64-bit "/2addr" floating-point operation.
   6193      *
   6194      * For: add-double/2addr, sub-double/2addr, mul-double/2addr, div-double/2addr.
   6195      * form: <op> f0, f0, f1
   6196      */
   6197     /* binop/2addr vA, vB */
   6198     ext     a2, rINST, 8, 4             # a2 <- A
   6199     ext     a3, rINST, 12, 4            # a3 <- B
   6200     GET_VREG_DOUBLE f0, a2              # f0 <- vA
   6201     GET_VREG_DOUBLE f1, a3              # f1 <- vB
   6202     div.d f0, f0, f1                              # f0 <- f0 op f1
   6203     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6204     GET_INST_OPCODE v0                  # extract opcode from rINST
   6205     SET_VREG_DOUBLE f0, a2              # vA <- f0
   6206     GOTO_OPCODE v0                      # jump to next instruction
   6207 
   6208 
   6209 /* ------------------------------ */
   6210     .balign 128
   6211 .L_op_rem_double_2addr: /* 0xcf */
   6212 /* File: mips64/op_rem_double_2addr.S */
   6213     /* rem-double/2addr vA, vB */
   6214     .extern fmod
   6215     ext     a2, rINST, 8, 4             # a2 <- A
   6216     ext     a3, rINST, 12, 4            # a3 <- B
   6217     GET_VREG_DOUBLE f12, a2             # f12 <- vA
   6218     GET_VREG_DOUBLE f13, a3             # f13 <- vB
   6219     jal     fmod                        # f0 <- f12 op f13
   6220     ext     a2, rINST, 8, 4             # a2 <- A
   6221     FETCH_ADVANCE_INST 1                # advance rPC, load rINST
   6222     GET_INST_OPCODE v0                  # extract opcode from rINST
   6223     SET_VREG_DOUBLE f0, a2              # vA <- f0
   6224     GOTO_OPCODE v0                      # jump to next instruction
   6225 
   6226 /* ------------------------------ */
   6227     .balign 128
   6228 .L_op_add_int_lit16: /* 0xd0 */
   6229 /* File: mips64/op_add_int_lit16.S */
   6230 /* File: mips64/binopLit16.S */
   6231     /*
   6232      * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
   6233      * that specifies an instruction that performs "result = a0 op a1".
   6234      * This could be an MIPS instruction or a function call.  (If the result
   6235      * comes back in a register other than a0, you can override "result".)
   6236      *
   6237      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6238      * CCCC (a1).  Useful for integer division and modulus.
   6239      *
   6240      * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
   6241      *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
   6242      */
   6243     /* binop/lit16 vA, vB, #+CCCC */
   6244     lh      a1, 2(rPC)                  # a1 <- sign-extended CCCC
   6245     ext     a2, rINST, 8, 4             # a2 <- A
   6246     ext     a3, rINST, 12, 4            # a3 <- B
   6247     GET_VREG a0, a3                     # a0 <- vB
   6248     .if 0
   6249     beqz    a1, common_errDivideByZero  # is second operand zero?
   6250     .endif
   6251     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6252                                # optional op
   6253     addu a0, a0, a1                              # a0 <- op, a0-a3 changed
   6254     GET_INST_OPCODE v0                  # extract opcode from rINST
   6255     SET_VREG a0, a2                # vA <- a0
   6256     GOTO_OPCODE v0                      # jump to next instruction
   6257 
   6258 
   6259 
   6260 /* ------------------------------ */
   6261     .balign 128
   6262 .L_op_rsub_int: /* 0xd1 */
   6263 /* File: mips64/op_rsub_int.S */
   6264 /* File: mips64/binopLit16.S */
   6265     /*
   6266      * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
   6267      * that specifies an instruction that performs "result = a0 op a1".
   6268      * This could be an MIPS instruction or a function call.  (If the result
   6269      * comes back in a register other than a0, you can override "result".)
   6270      *
   6271      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6272      * CCCC (a1).  Useful for integer division and modulus.
   6273      *
   6274      * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
   6275      *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
   6276      */
   6277     /* binop/lit16 vA, vB, #+CCCC */
   6278     lh      a1, 2(rPC)                  # a1 <- sign-extended CCCC
   6279     ext     a2, rINST, 8, 4             # a2 <- A
   6280     ext     a3, rINST, 12, 4            # a3 <- B
   6281     GET_VREG a0, a3                     # a0 <- vB
   6282     .if 0
   6283     beqz    a1, common_errDivideByZero  # is second operand zero?
   6284     .endif
   6285     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6286                                # optional op
   6287     subu a0, a1, a0                              # a0 <- op, a0-a3 changed
   6288     GET_INST_OPCODE v0                  # extract opcode from rINST
   6289     SET_VREG a0, a2                # vA <- a0
   6290     GOTO_OPCODE v0                      # jump to next instruction
   6291 
   6292 
   6293 
   6294 /* ------------------------------ */
   6295     .balign 128
   6296 .L_op_mul_int_lit16: /* 0xd2 */
   6297 /* File: mips64/op_mul_int_lit16.S */
   6298 /* File: mips64/binopLit16.S */
   6299     /*
   6300      * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
   6301      * that specifies an instruction that performs "result = a0 op a1".
   6302      * This could be an MIPS instruction or a function call.  (If the result
   6303      * comes back in a register other than a0, you can override "result".)
   6304      *
   6305      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6306      * CCCC (a1).  Useful for integer division and modulus.
   6307      *
   6308      * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
   6309      *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
   6310      */
   6311     /* binop/lit16 vA, vB, #+CCCC */
   6312     lh      a1, 2(rPC)                  # a1 <- sign-extended CCCC
   6313     ext     a2, rINST, 8, 4             # a2 <- A
   6314     ext     a3, rINST, 12, 4            # a3 <- B
   6315     GET_VREG a0, a3                     # a0 <- vB
   6316     .if 0
   6317     beqz    a1, common_errDivideByZero  # is second operand zero?
   6318     .endif
   6319     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6320                                # optional op
   6321     mul a0, a0, a1                              # a0 <- op, a0-a3 changed
   6322     GET_INST_OPCODE v0                  # extract opcode from rINST
   6323     SET_VREG a0, a2                # vA <- a0
   6324     GOTO_OPCODE v0                      # jump to next instruction
   6325 
   6326 
   6327 
   6328 /* ------------------------------ */
   6329     .balign 128
   6330 .L_op_div_int_lit16: /* 0xd3 */
   6331 /* File: mips64/op_div_int_lit16.S */
   6332 /* File: mips64/binopLit16.S */
   6333     /*
   6334      * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
   6335      * that specifies an instruction that performs "result = a0 op a1".
   6336      * This could be an MIPS instruction or a function call.  (If the result
   6337      * comes back in a register other than a0, you can override "result".)
   6338      *
   6339      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6340      * CCCC (a1).  Useful for integer division and modulus.
   6341      *
   6342      * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
   6343      *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
   6344      */
   6345     /* binop/lit16 vA, vB, #+CCCC */
   6346     lh      a1, 2(rPC)                  # a1 <- sign-extended CCCC
   6347     ext     a2, rINST, 8, 4             # a2 <- A
   6348     ext     a3, rINST, 12, 4            # a3 <- B
   6349     GET_VREG a0, a3                     # a0 <- vB
   6350     .if 1
   6351     beqz    a1, common_errDivideByZero  # is second operand zero?
   6352     .endif
   6353     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6354                                # optional op
   6355     div a0, a0, a1                              # a0 <- op, a0-a3 changed
   6356     GET_INST_OPCODE v0                  # extract opcode from rINST
   6357     SET_VREG a0, a2                # vA <- a0
   6358     GOTO_OPCODE v0                      # jump to next instruction
   6359 
   6360 
   6361 
   6362 /* ------------------------------ */
   6363     .balign 128
   6364 .L_op_rem_int_lit16: /* 0xd4 */
   6365 /* File: mips64/op_rem_int_lit16.S */
   6366 /* File: mips64/binopLit16.S */
   6367     /*
   6368      * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
   6369      * that specifies an instruction that performs "result = a0 op a1".
   6370      * This could be an MIPS instruction or a function call.  (If the result
   6371      * comes back in a register other than a0, you can override "result".)
   6372      *
   6373      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6374      * CCCC (a1).  Useful for integer division and modulus.
   6375      *
   6376      * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
   6377      *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
   6378      */
   6379     /* binop/lit16 vA, vB, #+CCCC */
   6380     lh      a1, 2(rPC)                  # a1 <- sign-extended CCCC
   6381     ext     a2, rINST, 8, 4             # a2 <- A
   6382     ext     a3, rINST, 12, 4            # a3 <- B
   6383     GET_VREG a0, a3                     # a0 <- vB
   6384     .if 1
   6385     beqz    a1, common_errDivideByZero  # is second operand zero?
   6386     .endif
   6387     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6388                                # optional op
   6389     mod a0, a0, a1                              # a0 <- op, a0-a3 changed
   6390     GET_INST_OPCODE v0                  # extract opcode from rINST
   6391     SET_VREG a0, a2                # vA <- a0
   6392     GOTO_OPCODE v0                      # jump to next instruction
   6393 
   6394 
   6395 
   6396 /* ------------------------------ */
   6397     .balign 128
   6398 .L_op_and_int_lit16: /* 0xd5 */
   6399 /* File: mips64/op_and_int_lit16.S */
   6400 /* File: mips64/binopLit16.S */
   6401     /*
   6402      * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
   6403      * that specifies an instruction that performs "result = a0 op a1".
   6404      * This could be an MIPS instruction or a function call.  (If the result
   6405      * comes back in a register other than a0, you can override "result".)
   6406      *
   6407      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6408      * CCCC (a1).  Useful for integer division and modulus.
   6409      *
   6410      * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
   6411      *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
   6412      */
   6413     /* binop/lit16 vA, vB, #+CCCC */
   6414     lh      a1, 2(rPC)                  # a1 <- sign-extended CCCC
   6415     ext     a2, rINST, 8, 4             # a2 <- A
   6416     ext     a3, rINST, 12, 4            # a3 <- B
   6417     GET_VREG a0, a3                     # a0 <- vB
   6418     .if 0
   6419     beqz    a1, common_errDivideByZero  # is second operand zero?
   6420     .endif
   6421     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6422                                # optional op
   6423     and a0, a0, a1                              # a0 <- op, a0-a3 changed
   6424     GET_INST_OPCODE v0                  # extract opcode from rINST
   6425     SET_VREG a0, a2                # vA <- a0
   6426     GOTO_OPCODE v0                      # jump to next instruction
   6427 
   6428 
   6429 
   6430 /* ------------------------------ */
   6431     .balign 128
   6432 .L_op_or_int_lit16: /* 0xd6 */
   6433 /* File: mips64/op_or_int_lit16.S */
   6434 /* File: mips64/binopLit16.S */
   6435     /*
   6436      * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
   6437      * that specifies an instruction that performs "result = a0 op a1".
   6438      * This could be an MIPS instruction or a function call.  (If the result
   6439      * comes back in a register other than a0, you can override "result".)
   6440      *
   6441      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6442      * CCCC (a1).  Useful for integer division and modulus.
   6443      *
   6444      * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
   6445      *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
   6446      */
   6447     /* binop/lit16 vA, vB, #+CCCC */
   6448     lh      a1, 2(rPC)                  # a1 <- sign-extended CCCC
   6449     ext     a2, rINST, 8, 4             # a2 <- A
   6450     ext     a3, rINST, 12, 4            # a3 <- B
   6451     GET_VREG a0, a3                     # a0 <- vB
   6452     .if 0
   6453     beqz    a1, common_errDivideByZero  # is second operand zero?
   6454     .endif
   6455     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6456                                # optional op
   6457     or a0, a0, a1                              # a0 <- op, a0-a3 changed
   6458     GET_INST_OPCODE v0                  # extract opcode from rINST
   6459     SET_VREG a0, a2                # vA <- a0
   6460     GOTO_OPCODE v0                      # jump to next instruction
   6461 
   6462 
   6463 
   6464 /* ------------------------------ */
   6465     .balign 128
   6466 .L_op_xor_int_lit16: /* 0xd7 */
   6467 /* File: mips64/op_xor_int_lit16.S */
   6468 /* File: mips64/binopLit16.S */
   6469     /*
   6470      * Generic 32-bit "lit16" binary operation.  Provide an "instr" line
   6471      * that specifies an instruction that performs "result = a0 op a1".
   6472      * This could be an MIPS instruction or a function call.  (If the result
   6473      * comes back in a register other than a0, you can override "result".)
   6474      *
   6475      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6476      * CCCC (a1).  Useful for integer division and modulus.
   6477      *
   6478      * For: add-int/lit16, rsub-int, mul-int/lit16, div-int/lit16,
   6479      *      rem-int/lit16, and-int/lit16, or-int/lit16, xor-int/lit16
   6480      */
   6481     /* binop/lit16 vA, vB, #+CCCC */
   6482     lh      a1, 2(rPC)                  # a1 <- sign-extended CCCC
   6483     ext     a2, rINST, 8, 4             # a2 <- A
   6484     ext     a3, rINST, 12, 4            # a3 <- B
   6485     GET_VREG a0, a3                     # a0 <- vB
   6486     .if 0
   6487     beqz    a1, common_errDivideByZero  # is second operand zero?
   6488     .endif
   6489     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6490                                # optional op
   6491     xor a0, a0, a1                              # a0 <- op, a0-a3 changed
   6492     GET_INST_OPCODE v0                  # extract opcode from rINST
   6493     SET_VREG a0, a2                # vA <- a0
   6494     GOTO_OPCODE v0                      # jump to next instruction
   6495 
   6496 
   6497 
   6498 /* ------------------------------ */
   6499     .balign 128
   6500 .L_op_add_int_lit8: /* 0xd8 */
   6501 /* File: mips64/op_add_int_lit8.S */
   6502 /* File: mips64/binopLit8.S */
   6503     /*
   6504      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6505      * that specifies an instruction that performs "result = a0 op a1".
   6506      * This could be an MIPS instruction or a function call.  (If the result
   6507      * comes back in a register other than a0, you can override "result".)
   6508      *
   6509      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6510      * CC (a1).  Useful for integer division and modulus.
   6511      *
   6512      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6513      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6514      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6515      */
   6516     /* binop/lit8 vAA, vBB, #+CC */
   6517     lbu     a3, 2(rPC)                  # a3 <- BB
   6518     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6519     srl     a2, rINST, 8                # a2 <- AA
   6520     GET_VREG a0, a3                     # a0 <- vBB
   6521     .if 0
   6522     beqz    a1, common_errDivideByZero  # is second operand zero?
   6523     .endif
   6524     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6525                                # optional op
   6526     addu a0, a0, a1                              # a0 <- op, a0-a3 changed
   6527     GET_INST_OPCODE v0                  # extract opcode from rINST
   6528     SET_VREG a0, a2                # vAA <- a0
   6529     GOTO_OPCODE v0                      # jump to next instruction
   6530 
   6531 
   6532 
   6533 /* ------------------------------ */
   6534     .balign 128
   6535 .L_op_rsub_int_lit8: /* 0xd9 */
   6536 /* File: mips64/op_rsub_int_lit8.S */
   6537 /* File: mips64/binopLit8.S */
   6538     /*
   6539      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6540      * that specifies an instruction that performs "result = a0 op a1".
   6541      * This could be an MIPS instruction or a function call.  (If the result
   6542      * comes back in a register other than a0, you can override "result".)
   6543      *
   6544      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6545      * CC (a1).  Useful for integer division and modulus.
   6546      *
   6547      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6548      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6549      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6550      */
   6551     /* binop/lit8 vAA, vBB, #+CC */
   6552     lbu     a3, 2(rPC)                  # a3 <- BB
   6553     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6554     srl     a2, rINST, 8                # a2 <- AA
   6555     GET_VREG a0, a3                     # a0 <- vBB
   6556     .if 0
   6557     beqz    a1, common_errDivideByZero  # is second operand zero?
   6558     .endif
   6559     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6560                                # optional op
   6561     subu a0, a1, a0                              # a0 <- op, a0-a3 changed
   6562     GET_INST_OPCODE v0                  # extract opcode from rINST
   6563     SET_VREG a0, a2                # vAA <- a0
   6564     GOTO_OPCODE v0                      # jump to next instruction
   6565 
   6566 
   6567 
   6568 /* ------------------------------ */
   6569     .balign 128
   6570 .L_op_mul_int_lit8: /* 0xda */
   6571 /* File: mips64/op_mul_int_lit8.S */
   6572 /* File: mips64/binopLit8.S */
   6573     /*
   6574      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6575      * that specifies an instruction that performs "result = a0 op a1".
   6576      * This could be an MIPS instruction or a function call.  (If the result
   6577      * comes back in a register other than a0, you can override "result".)
   6578      *
   6579      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6580      * CC (a1).  Useful for integer division and modulus.
   6581      *
   6582      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6583      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6584      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6585      */
   6586     /* binop/lit8 vAA, vBB, #+CC */
   6587     lbu     a3, 2(rPC)                  # a3 <- BB
   6588     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6589     srl     a2, rINST, 8                # a2 <- AA
   6590     GET_VREG a0, a3                     # a0 <- vBB
   6591     .if 0
   6592     beqz    a1, common_errDivideByZero  # is second operand zero?
   6593     .endif
   6594     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6595                                # optional op
   6596     mul a0, a0, a1                              # a0 <- op, a0-a3 changed
   6597     GET_INST_OPCODE v0                  # extract opcode from rINST
   6598     SET_VREG a0, a2                # vAA <- a0
   6599     GOTO_OPCODE v0                      # jump to next instruction
   6600 
   6601 
   6602 
   6603 /* ------------------------------ */
   6604     .balign 128
   6605 .L_op_div_int_lit8: /* 0xdb */
   6606 /* File: mips64/op_div_int_lit8.S */
   6607 /* File: mips64/binopLit8.S */
   6608     /*
   6609      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6610      * that specifies an instruction that performs "result = a0 op a1".
   6611      * This could be an MIPS instruction or a function call.  (If the result
   6612      * comes back in a register other than a0, you can override "result".)
   6613      *
   6614      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6615      * CC (a1).  Useful for integer division and modulus.
   6616      *
   6617      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6618      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6619      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6620      */
   6621     /* binop/lit8 vAA, vBB, #+CC */
   6622     lbu     a3, 2(rPC)                  # a3 <- BB
   6623     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6624     srl     a2, rINST, 8                # a2 <- AA
   6625     GET_VREG a0, a3                     # a0 <- vBB
   6626     .if 1
   6627     beqz    a1, common_errDivideByZero  # is second operand zero?
   6628     .endif
   6629     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6630                                # optional op
   6631     div a0, a0, a1                              # a0 <- op, a0-a3 changed
   6632     GET_INST_OPCODE v0                  # extract opcode from rINST
   6633     SET_VREG a0, a2                # vAA <- a0
   6634     GOTO_OPCODE v0                      # jump to next instruction
   6635 
   6636 
   6637 
   6638 /* ------------------------------ */
   6639     .balign 128
   6640 .L_op_rem_int_lit8: /* 0xdc */
   6641 /* File: mips64/op_rem_int_lit8.S */
   6642 /* File: mips64/binopLit8.S */
   6643     /*
   6644      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6645      * that specifies an instruction that performs "result = a0 op a1".
   6646      * This could be an MIPS instruction or a function call.  (If the result
   6647      * comes back in a register other than a0, you can override "result".)
   6648      *
   6649      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6650      * CC (a1).  Useful for integer division and modulus.
   6651      *
   6652      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6653      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6654      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6655      */
   6656     /* binop/lit8 vAA, vBB, #+CC */
   6657     lbu     a3, 2(rPC)                  # a3 <- BB
   6658     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6659     srl     a2, rINST, 8                # a2 <- AA
   6660     GET_VREG a0, a3                     # a0 <- vBB
   6661     .if 1
   6662     beqz    a1, common_errDivideByZero  # is second operand zero?
   6663     .endif
   6664     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6665                                # optional op
   6666     mod a0, a0, a1                              # a0 <- op, a0-a3 changed
   6667     GET_INST_OPCODE v0                  # extract opcode from rINST
   6668     SET_VREG a0, a2                # vAA <- a0
   6669     GOTO_OPCODE v0                      # jump to next instruction
   6670 
   6671 
   6672 
   6673 /* ------------------------------ */
   6674     .balign 128
   6675 .L_op_and_int_lit8: /* 0xdd */
   6676 /* File: mips64/op_and_int_lit8.S */
   6677 /* File: mips64/binopLit8.S */
   6678     /*
   6679      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6680      * that specifies an instruction that performs "result = a0 op a1".
   6681      * This could be an MIPS instruction or a function call.  (If the result
   6682      * comes back in a register other than a0, you can override "result".)
   6683      *
   6684      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6685      * CC (a1).  Useful for integer division and modulus.
   6686      *
   6687      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6688      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6689      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6690      */
   6691     /* binop/lit8 vAA, vBB, #+CC */
   6692     lbu     a3, 2(rPC)                  # a3 <- BB
   6693     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6694     srl     a2, rINST, 8                # a2 <- AA
   6695     GET_VREG a0, a3                     # a0 <- vBB
   6696     .if 0
   6697     beqz    a1, common_errDivideByZero  # is second operand zero?
   6698     .endif
   6699     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6700                                # optional op
   6701     and a0, a0, a1                              # a0 <- op, a0-a3 changed
   6702     GET_INST_OPCODE v0                  # extract opcode from rINST
   6703     SET_VREG a0, a2                # vAA <- a0
   6704     GOTO_OPCODE v0                      # jump to next instruction
   6705 
   6706 
   6707 
   6708 /* ------------------------------ */
   6709     .balign 128
   6710 .L_op_or_int_lit8: /* 0xde */
   6711 /* File: mips64/op_or_int_lit8.S */
   6712 /* File: mips64/binopLit8.S */
   6713     /*
   6714      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6715      * that specifies an instruction that performs "result = a0 op a1".
   6716      * This could be an MIPS instruction or a function call.  (If the result
   6717      * comes back in a register other than a0, you can override "result".)
   6718      *
   6719      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6720      * CC (a1).  Useful for integer division and modulus.
   6721      *
   6722      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6723      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6724      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6725      */
   6726     /* binop/lit8 vAA, vBB, #+CC */
   6727     lbu     a3, 2(rPC)                  # a3 <- BB
   6728     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6729     srl     a2, rINST, 8                # a2 <- AA
   6730     GET_VREG a0, a3                     # a0 <- vBB
   6731     .if 0
   6732     beqz    a1, common_errDivideByZero  # is second operand zero?
   6733     .endif
   6734     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6735                                # optional op
   6736     or a0, a0, a1                              # a0 <- op, a0-a3 changed
   6737     GET_INST_OPCODE v0                  # extract opcode from rINST
   6738     SET_VREG a0, a2                # vAA <- a0
   6739     GOTO_OPCODE v0                      # jump to next instruction
   6740 
   6741 
   6742 
   6743 /* ------------------------------ */
   6744     .balign 128
   6745 .L_op_xor_int_lit8: /* 0xdf */
   6746 /* File: mips64/op_xor_int_lit8.S */
   6747 /* File: mips64/binopLit8.S */
   6748     /*
   6749      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6750      * that specifies an instruction that performs "result = a0 op a1".
   6751      * This could be an MIPS instruction or a function call.  (If the result
   6752      * comes back in a register other than a0, you can override "result".)
   6753      *
   6754      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6755      * CC (a1).  Useful for integer division and modulus.
   6756      *
   6757      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6758      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6759      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6760      */
   6761     /* binop/lit8 vAA, vBB, #+CC */
   6762     lbu     a3, 2(rPC)                  # a3 <- BB
   6763     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6764     srl     a2, rINST, 8                # a2 <- AA
   6765     GET_VREG a0, a3                     # a0 <- vBB
   6766     .if 0
   6767     beqz    a1, common_errDivideByZero  # is second operand zero?
   6768     .endif
   6769     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6770                                # optional op
   6771     xor a0, a0, a1                              # a0 <- op, a0-a3 changed
   6772     GET_INST_OPCODE v0                  # extract opcode from rINST
   6773     SET_VREG a0, a2                # vAA <- a0
   6774     GOTO_OPCODE v0                      # jump to next instruction
   6775 
   6776 
   6777 
   6778 /* ------------------------------ */
   6779     .balign 128
   6780 .L_op_shl_int_lit8: /* 0xe0 */
   6781 /* File: mips64/op_shl_int_lit8.S */
   6782 /* File: mips64/binopLit8.S */
   6783     /*
   6784      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6785      * that specifies an instruction that performs "result = a0 op a1".
   6786      * This could be an MIPS instruction or a function call.  (If the result
   6787      * comes back in a register other than a0, you can override "result".)
   6788      *
   6789      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6790      * CC (a1).  Useful for integer division and modulus.
   6791      *
   6792      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6793      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6794      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6795      */
   6796     /* binop/lit8 vAA, vBB, #+CC */
   6797     lbu     a3, 2(rPC)                  # a3 <- BB
   6798     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6799     srl     a2, rINST, 8                # a2 <- AA
   6800     GET_VREG a0, a3                     # a0 <- vBB
   6801     .if 0
   6802     beqz    a1, common_errDivideByZero  # is second operand zero?
   6803     .endif
   6804     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6805                                # optional op
   6806     sll a0, a0, a1                              # a0 <- op, a0-a3 changed
   6807     GET_INST_OPCODE v0                  # extract opcode from rINST
   6808     SET_VREG a0, a2                # vAA <- a0
   6809     GOTO_OPCODE v0                      # jump to next instruction
   6810 
   6811 
   6812 
   6813 /* ------------------------------ */
   6814     .balign 128
   6815 .L_op_shr_int_lit8: /* 0xe1 */
   6816 /* File: mips64/op_shr_int_lit8.S */
   6817 /* File: mips64/binopLit8.S */
   6818     /*
   6819      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6820      * that specifies an instruction that performs "result = a0 op a1".
   6821      * This could be an MIPS instruction or a function call.  (If the result
   6822      * comes back in a register other than a0, you can override "result".)
   6823      *
   6824      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6825      * CC (a1).  Useful for integer division and modulus.
   6826      *
   6827      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6828      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6829      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6830      */
   6831     /* binop/lit8 vAA, vBB, #+CC */
   6832     lbu     a3, 2(rPC)                  # a3 <- BB
   6833     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6834     srl     a2, rINST, 8                # a2 <- AA
   6835     GET_VREG a0, a3                     # a0 <- vBB
   6836     .if 0
   6837     beqz    a1, common_errDivideByZero  # is second operand zero?
   6838     .endif
   6839     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6840                                # optional op
   6841     sra a0, a0, a1                              # a0 <- op, a0-a3 changed
   6842     GET_INST_OPCODE v0                  # extract opcode from rINST
   6843     SET_VREG a0, a2                # vAA <- a0
   6844     GOTO_OPCODE v0                      # jump to next instruction
   6845 
   6846 
   6847 
   6848 /* ------------------------------ */
   6849     .balign 128
   6850 .L_op_ushr_int_lit8: /* 0xe2 */
   6851 /* File: mips64/op_ushr_int_lit8.S */
   6852 /* File: mips64/binopLit8.S */
   6853     /*
   6854      * Generic 32-bit "lit8" binary operation.  Provide an "instr" line
   6855      * that specifies an instruction that performs "result = a0 op a1".
   6856      * This could be an MIPS instruction or a function call.  (If the result
   6857      * comes back in a register other than a0, you can override "result".)
   6858      *
   6859      * If "chkzero" is set to 1, we perform a divide-by-zero check on
   6860      * CC (a1).  Useful for integer division and modulus.
   6861      *
   6862      * For: add-int/lit8, rsub-int/lit8, mul-int/lit8, div-int/lit8,
   6863      *      rem-int/lit8, and-int/lit8, or-int/lit8, xor-int/lit8,
   6864      *      shl-int/lit8, shr-int/lit8, ushr-int/lit8
   6865      */
   6866     /* binop/lit8 vAA, vBB, #+CC */
   6867     lbu     a3, 2(rPC)                  # a3 <- BB
   6868     lb      a1, 3(rPC)                  # a1 <- sign-extended CC
   6869     srl     a2, rINST, 8                # a2 <- AA
   6870     GET_VREG a0, a3                     # a0 <- vBB
   6871     .if 0
   6872     beqz    a1, common_errDivideByZero  # is second operand zero?
   6873     .endif
   6874     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6875                                # optional op
   6876     srl a0, a0, a1                              # a0 <- op, a0-a3 changed
   6877     GET_INST_OPCODE v0                  # extract opcode from rINST
   6878     SET_VREG a0, a2                # vAA <- a0
   6879     GOTO_OPCODE v0                      # jump to next instruction
   6880 
   6881 
   6882 
   6883 /* ------------------------------ */
   6884     .balign 128
   6885 .L_op_iget_quick: /* 0xe3 */
   6886 /* File: mips64/op_iget_quick.S */
   6887     /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick */
   6888     /* op vA, vB, offset//CCCC */
   6889     srl     a2, rINST, 12               # a2 <- B
   6890     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   6891     GET_VREG_U a3, a2                   # a3 <- object we're operating on
   6892     ext     a4, rINST, 8, 4             # a4 <- A
   6893     daddu   a1, a1, a3
   6894     beqz    a3, common_errNullObject    # object was null
   6895     lw   a0, 0(a1)                   # a0 <- obj.field
   6896     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6897     SET_VREG a0, a4                     # fp[A] <- a0
   6898     GET_INST_OPCODE v0                  # extract opcode from rINST
   6899     GOTO_OPCODE v0                      # jump to next instruction
   6900 
   6901 /* ------------------------------ */
   6902     .balign 128
   6903 .L_op_iget_wide_quick: /* 0xe4 */
   6904 /* File: mips64/op_iget_wide_quick.S */
   6905     /* iget-wide-quick vA, vB, offset//CCCC */
   6906     srl     a2, rINST, 12               # a2 <- B
   6907     lhu     a4, 2(rPC)                  # a4 <- field byte offset
   6908     GET_VREG_U a3, a2                   # a3 <- object we're operating on
   6909     ext     a2, rINST, 8, 4             # a2 <- A
   6910     beqz    a3, common_errNullObject    # object was null
   6911     daddu   a4, a3, a4                  # create direct pointer
   6912     lw      a0, 0(a4)
   6913     lw      a1, 4(a4)
   6914     dinsu   a0, a1, 32, 32
   6915     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6916     SET_VREG_WIDE a0, a2
   6917     GET_INST_OPCODE v0                  # extract opcode from rINST
   6918     GOTO_OPCODE v0                      # jump to next instruction
   6919 
   6920 /* ------------------------------ */
   6921     .balign 128
   6922 .L_op_iget_object_quick: /* 0xe5 */
   6923 /* File: mips64/op_iget_object_quick.S */
   6924     /* For: iget-object-quick */
   6925     /* op vA, vB, offset//CCCC */
   6926     .extern artIGetObjectFromMterp
   6927     srl     a2, rINST, 12               # a2 <- B
   6928     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   6929     EXPORT_PC
   6930     GET_VREG_U a0, a2                   # a0 <- object we're operating on
   6931     jal     artIGetObjectFromMterp      # (obj, offset)
   6932     ld      a3, THREAD_EXCEPTION_OFFSET(rSELF)
   6933     ext     a2, rINST, 8, 4             # a2 <- A
   6934     PREFETCH_INST 2
   6935     bnez    a3, MterpPossibleException  # bail out
   6936     SET_VREG_OBJECT v0, a2              # fp[A] <- v0
   6937     ADVANCE 2                           # advance rPC
   6938     GET_INST_OPCODE v0                  # extract opcode from rINST
   6939     GOTO_OPCODE v0                      # jump to next instruction
   6940 
   6941 /* ------------------------------ */
   6942     .balign 128
   6943 .L_op_iput_quick: /* 0xe6 */
   6944 /* File: mips64/op_iput_quick.S */
   6945     /* For: iput-quick, iput-boolean-quick, iput-byte-quick, iput-char-quick, iput-short-quick */
   6946     /* op vA, vB, offset//CCCC */
   6947     srl     a2, rINST, 12               # a2 <- B
   6948     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   6949     GET_VREG_U a3, a2                   # a3 <- fp[B], the object pointer
   6950     ext     a2, rINST, 8, 4             # a2 <- A
   6951     beqz    a3, common_errNullObject    # object was null
   6952     GET_VREG a0, a2                     # a0 <- fp[A]
   6953     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6954     daddu   a1, a1, a3
   6955     sw  a0, 0(a1)                   # obj.field <- a0
   6956     GET_INST_OPCODE v0                  # extract opcode from rINST
   6957     GOTO_OPCODE v0                      # jump to next instruction
   6958 
   6959 /* ------------------------------ */
   6960     .balign 128
   6961 .L_op_iput_wide_quick: /* 0xe7 */
   6962 /* File: mips64/op_iput_wide_quick.S */
   6963     /* iput-wide-quick vA, vB, offset//CCCC */
   6964     srl     a2, rINST, 12               # a2 <- B
   6965     lhu     a3, 2(rPC)                  # a3 <- field byte offset
   6966     GET_VREG_U a2, a2                   # a2 <- fp[B], the object pointer
   6967     ext     a0, rINST, 8, 4             # a0 <- A
   6968     beqz    a2, common_errNullObject    # object was null
   6969     GET_VREG_WIDE a0, a0                # a0 <- fp[A]
   6970     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6971     daddu   a1, a2, a3                  # create a direct pointer
   6972     sw      a0, 0(a1)
   6973     dsrl32  a0, a0, 0
   6974     sw      a0, 4(a1)
   6975     GET_INST_OPCODE v0                  # extract opcode from rINST
   6976     GOTO_OPCODE v0                      # jump to next instruction
   6977 
   6978 /* ------------------------------ */
   6979     .balign 128
   6980 .L_op_iput_object_quick: /* 0xe8 */
   6981 /* File: mips64/op_iput_object_quick.S */
   6982     .extern MterpIputObjectQuick
   6983     EXPORT_PC
   6984     daddu   a0, rFP, OFF_FP_SHADOWFRAME
   6985     move    a1, rPC
   6986     move    a2, rINST
   6987     jal     MterpIputObjectQuick
   6988     beqzc   v0, MterpException
   6989     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   6990     GET_INST_OPCODE v0                  # extract opcode from rINST
   6991     GOTO_OPCODE v0                      # jump to next instruction
   6992 
   6993 /* ------------------------------ */
   6994     .balign 128
   6995 .L_op_invoke_virtual_quick: /* 0xe9 */
   6996 /* File: mips64/op_invoke_virtual_quick.S */
   6997 /* File: mips64/invoke.S */
   6998     /*
   6999      * Generic invoke handler wrapper.
   7000      */
   7001     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   7002     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   7003     .extern MterpInvokeVirtualQuick
   7004     .extern MterpShouldSwitchInterpreters
   7005     EXPORT_PC
   7006     move    a0, rSELF
   7007     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7008     move    a2, rPC
   7009     move    a3, rINST
   7010     jal     MterpInvokeVirtualQuick
   7011     beqzc   v0, MterpException
   7012     FETCH_ADVANCE_INST 3
   7013     jal     MterpShouldSwitchInterpreters
   7014     bnezc   v0, MterpFallback
   7015     GET_INST_OPCODE v0
   7016     GOTO_OPCODE v0
   7017 
   7018 
   7019 /* ------------------------------ */
   7020     .balign 128
   7021 .L_op_invoke_virtual_range_quick: /* 0xea */
   7022 /* File: mips64/op_invoke_virtual_range_quick.S */
   7023 /* File: mips64/invoke.S */
   7024     /*
   7025      * Generic invoke handler wrapper.
   7026      */
   7027     /* op vB, {vD, vE, vF, vG, vA}, class@CCCC */
   7028     /* op {vCCCC..v(CCCC+AA-1)}, meth@BBBB */
   7029     .extern MterpInvokeVirtualQuickRange
   7030     .extern MterpShouldSwitchInterpreters
   7031     EXPORT_PC
   7032     move    a0, rSELF
   7033     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7034     move    a2, rPC
   7035     move    a3, rINST
   7036     jal     MterpInvokeVirtualQuickRange
   7037     beqzc   v0, MterpException
   7038     FETCH_ADVANCE_INST 3
   7039     jal     MterpShouldSwitchInterpreters
   7040     bnezc   v0, MterpFallback
   7041     GET_INST_OPCODE v0
   7042     GOTO_OPCODE v0
   7043 
   7044 
   7045 /* ------------------------------ */
   7046     .balign 128
   7047 .L_op_iput_boolean_quick: /* 0xeb */
   7048 /* File: mips64/op_iput_boolean_quick.S */
   7049 /* File: mips64/op_iput_quick.S */
   7050     /* For: iput-quick, iput-boolean-quick, iput-byte-quick, iput-char-quick, iput-short-quick */
   7051     /* op vA, vB, offset//CCCC */
   7052     srl     a2, rINST, 12               # a2 <- B
   7053     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   7054     GET_VREG_U a3, a2                   # a3 <- fp[B], the object pointer
   7055     ext     a2, rINST, 8, 4             # a2 <- A
   7056     beqz    a3, common_errNullObject    # object was null
   7057     GET_VREG a0, a2                     # a0 <- fp[A]
   7058     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   7059     daddu   a1, a1, a3
   7060     sb  a0, 0(a1)                   # obj.field <- a0
   7061     GET_INST_OPCODE v0                  # extract opcode from rINST
   7062     GOTO_OPCODE v0                      # jump to next instruction
   7063 
   7064 
   7065 /* ------------------------------ */
   7066     .balign 128
   7067 .L_op_iput_byte_quick: /* 0xec */
   7068 /* File: mips64/op_iput_byte_quick.S */
   7069 /* File: mips64/op_iput_quick.S */
   7070     /* For: iput-quick, iput-boolean-quick, iput-byte-quick, iput-char-quick, iput-short-quick */
   7071     /* op vA, vB, offset//CCCC */
   7072     srl     a2, rINST, 12               # a2 <- B
   7073     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   7074     GET_VREG_U a3, a2                   # a3 <- fp[B], the object pointer
   7075     ext     a2, rINST, 8, 4             # a2 <- A
   7076     beqz    a3, common_errNullObject    # object was null
   7077     GET_VREG a0, a2                     # a0 <- fp[A]
   7078     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   7079     daddu   a1, a1, a3
   7080     sb  a0, 0(a1)                   # obj.field <- a0
   7081     GET_INST_OPCODE v0                  # extract opcode from rINST
   7082     GOTO_OPCODE v0                      # jump to next instruction
   7083 
   7084 
   7085 /* ------------------------------ */
   7086     .balign 128
   7087 .L_op_iput_char_quick: /* 0xed */
   7088 /* File: mips64/op_iput_char_quick.S */
   7089 /* File: mips64/op_iput_quick.S */
   7090     /* For: iput-quick, iput-boolean-quick, iput-byte-quick, iput-char-quick, iput-short-quick */
   7091     /* op vA, vB, offset//CCCC */
   7092     srl     a2, rINST, 12               # a2 <- B
   7093     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   7094     GET_VREG_U a3, a2                   # a3 <- fp[B], the object pointer
   7095     ext     a2, rINST, 8, 4             # a2 <- A
   7096     beqz    a3, common_errNullObject    # object was null
   7097     GET_VREG a0, a2                     # a0 <- fp[A]
   7098     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   7099     daddu   a1, a1, a3
   7100     sh  a0, 0(a1)                   # obj.field <- a0
   7101     GET_INST_OPCODE v0                  # extract opcode from rINST
   7102     GOTO_OPCODE v0                      # jump to next instruction
   7103 
   7104 
   7105 /* ------------------------------ */
   7106     .balign 128
   7107 .L_op_iput_short_quick: /* 0xee */
   7108 /* File: mips64/op_iput_short_quick.S */
   7109 /* File: mips64/op_iput_quick.S */
   7110     /* For: iput-quick, iput-boolean-quick, iput-byte-quick, iput-char-quick, iput-short-quick */
   7111     /* op vA, vB, offset//CCCC */
   7112     srl     a2, rINST, 12               # a2 <- B
   7113     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   7114     GET_VREG_U a3, a2                   # a3 <- fp[B], the object pointer
   7115     ext     a2, rINST, 8, 4             # a2 <- A
   7116     beqz    a3, common_errNullObject    # object was null
   7117     GET_VREG a0, a2                     # a0 <- fp[A]
   7118     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   7119     daddu   a1, a1, a3
   7120     sh  a0, 0(a1)                   # obj.field <- a0
   7121     GET_INST_OPCODE v0                  # extract opcode from rINST
   7122     GOTO_OPCODE v0                      # jump to next instruction
   7123 
   7124 
   7125 /* ------------------------------ */
   7126     .balign 128
   7127 .L_op_iget_boolean_quick: /* 0xef */
   7128 /* File: mips64/op_iget_boolean_quick.S */
   7129 /* File: mips64/op_iget_quick.S */
   7130     /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick */
   7131     /* op vA, vB, offset//CCCC */
   7132     srl     a2, rINST, 12               # a2 <- B
   7133     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   7134     GET_VREG_U a3, a2                   # a3 <- object we're operating on
   7135     ext     a4, rINST, 8, 4             # a4 <- A
   7136     daddu   a1, a1, a3
   7137     beqz    a3, common_errNullObject    # object was null
   7138     lbu   a0, 0(a1)                   # a0 <- obj.field
   7139     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   7140     SET_VREG a0, a4                     # fp[A] <- a0
   7141     GET_INST_OPCODE v0                  # extract opcode from rINST
   7142     GOTO_OPCODE v0                      # jump to next instruction
   7143 
   7144 
   7145 /* ------------------------------ */
   7146     .balign 128
   7147 .L_op_iget_byte_quick: /* 0xf0 */
   7148 /* File: mips64/op_iget_byte_quick.S */
   7149 /* File: mips64/op_iget_quick.S */
   7150     /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick */
   7151     /* op vA, vB, offset//CCCC */
   7152     srl     a2, rINST, 12               # a2 <- B
   7153     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   7154     GET_VREG_U a3, a2                   # a3 <- object we're operating on
   7155     ext     a4, rINST, 8, 4             # a4 <- A
   7156     daddu   a1, a1, a3
   7157     beqz    a3, common_errNullObject    # object was null
   7158     lb   a0, 0(a1)                   # a0 <- obj.field
   7159     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   7160     SET_VREG a0, a4                     # fp[A] <- a0
   7161     GET_INST_OPCODE v0                  # extract opcode from rINST
   7162     GOTO_OPCODE v0                      # jump to next instruction
   7163 
   7164 
   7165 /* ------------------------------ */
   7166     .balign 128
   7167 .L_op_iget_char_quick: /* 0xf1 */
   7168 /* File: mips64/op_iget_char_quick.S */
   7169 /* File: mips64/op_iget_quick.S */
   7170     /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick */
   7171     /* op vA, vB, offset//CCCC */
   7172     srl     a2, rINST, 12               # a2 <- B
   7173     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   7174     GET_VREG_U a3, a2                   # a3 <- object we're operating on
   7175     ext     a4, rINST, 8, 4             # a4 <- A
   7176     daddu   a1, a1, a3
   7177     beqz    a3, common_errNullObject    # object was null
   7178     lhu   a0, 0(a1)                   # a0 <- obj.field
   7179     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   7180     SET_VREG a0, a4                     # fp[A] <- a0
   7181     GET_INST_OPCODE v0                  # extract opcode from rINST
   7182     GOTO_OPCODE v0                      # jump to next instruction
   7183 
   7184 
   7185 /* ------------------------------ */
   7186     .balign 128
   7187 .L_op_iget_short_quick: /* 0xf2 */
   7188 /* File: mips64/op_iget_short_quick.S */
   7189 /* File: mips64/op_iget_quick.S */
   7190     /* For: iget-quick, iget-boolean-quick, iget-byte-quick, iget-char-quick, iget-short-quick */
   7191     /* op vA, vB, offset//CCCC */
   7192     srl     a2, rINST, 12               # a2 <- B
   7193     lhu     a1, 2(rPC)                  # a1 <- field byte offset
   7194     GET_VREG_U a3, a2                   # a3 <- object we're operating on
   7195     ext     a4, rINST, 8, 4             # a4 <- A
   7196     daddu   a1, a1, a3
   7197     beqz    a3, common_errNullObject    # object was null
   7198     lh   a0, 0(a1)                   # a0 <- obj.field
   7199     FETCH_ADVANCE_INST 2                # advance rPC, load rINST
   7200     SET_VREG a0, a4                     # fp[A] <- a0
   7201     GET_INST_OPCODE v0                  # extract opcode from rINST
   7202     GOTO_OPCODE v0                      # jump to next instruction
   7203 
   7204 
   7205 /* ------------------------------ */
   7206     .balign 128
   7207 .L_op_invoke_lambda: /* 0xf3 */
   7208 /* Transfer stub to alternate interpreter */
   7209     b       MterpFallback
   7210 
   7211 /* ------------------------------ */
   7212     .balign 128
   7213 .L_op_unused_f4: /* 0xf4 */
   7214 /* File: mips64/op_unused_f4.S */
   7215 /* File: mips64/unused.S */
   7216 /*
   7217  * Bail to reference interpreter to throw.
   7218  */
   7219     b       MterpFallback
   7220 
   7221 
   7222 /* ------------------------------ */
   7223     .balign 128
   7224 .L_op_capture_variable: /* 0xf5 */
   7225 /* Transfer stub to alternate interpreter */
   7226     b       MterpFallback
   7227 
   7228 /* ------------------------------ */
   7229     .balign 128
   7230 .L_op_create_lambda: /* 0xf6 */
   7231 /* Transfer stub to alternate interpreter */
   7232     b       MterpFallback
   7233 
   7234 /* ------------------------------ */
   7235     .balign 128
   7236 .L_op_liberate_variable: /* 0xf7 */
   7237 /* Transfer stub to alternate interpreter */
   7238     b       MterpFallback
   7239 
   7240 /* ------------------------------ */
   7241     .balign 128
   7242 .L_op_box_lambda: /* 0xf8 */
   7243 /* Transfer stub to alternate interpreter */
   7244     b       MterpFallback
   7245 
   7246 /* ------------------------------ */
   7247     .balign 128
   7248 .L_op_unbox_lambda: /* 0xf9 */
   7249 /* Transfer stub to alternate interpreter */
   7250     b       MterpFallback
   7251 
   7252 /* ------------------------------ */
   7253     .balign 128
   7254 .L_op_unused_fa: /* 0xfa */
   7255 /* File: mips64/op_unused_fa.S */
   7256 /* File: mips64/unused.S */
   7257 /*
   7258  * Bail to reference interpreter to throw.
   7259  */
   7260     b       MterpFallback
   7261 
   7262 
   7263 /* ------------------------------ */
   7264     .balign 128
   7265 .L_op_unused_fb: /* 0xfb */
   7266 /* File: mips64/op_unused_fb.S */
   7267 /* File: mips64/unused.S */
   7268 /*
   7269  * Bail to reference interpreter to throw.
   7270  */
   7271     b       MterpFallback
   7272 
   7273 
   7274 /* ------------------------------ */
   7275     .balign 128
   7276 .L_op_unused_fc: /* 0xfc */
   7277 /* File: mips64/op_unused_fc.S */
   7278 /* File: mips64/unused.S */
   7279 /*
   7280  * Bail to reference interpreter to throw.
   7281  */
   7282     b       MterpFallback
   7283 
   7284 
   7285 /* ------------------------------ */
   7286     .balign 128
   7287 .L_op_unused_fd: /* 0xfd */
   7288 /* File: mips64/op_unused_fd.S */
   7289 /* File: mips64/unused.S */
   7290 /*
   7291  * Bail to reference interpreter to throw.
   7292  */
   7293     b       MterpFallback
   7294 
   7295 
   7296 /* ------------------------------ */
   7297     .balign 128
   7298 .L_op_unused_fe: /* 0xfe */
   7299 /* File: mips64/op_unused_fe.S */
   7300 /* File: mips64/unused.S */
   7301 /*
   7302  * Bail to reference interpreter to throw.
   7303  */
   7304     b       MterpFallback
   7305 
   7306 
   7307 /* ------------------------------ */
   7308     .balign 128
   7309 .L_op_unused_ff: /* 0xff */
   7310 /* File: mips64/op_unused_ff.S */
   7311 /* File: mips64/unused.S */
   7312 /*
   7313  * Bail to reference interpreter to throw.
   7314  */
   7315     b       MterpFallback
   7316 
   7317 
   7318     .balign 128
   7319     .size   artMterpAsmInstructionStart, .-artMterpAsmInstructionStart
   7320     .global artMterpAsmInstructionEnd
   7321 artMterpAsmInstructionEnd:
   7322 
   7323 /*
   7324  * ===========================================================================
   7325  *  Sister implementations
   7326  * ===========================================================================
   7327  */
   7328     .global artMterpAsmSisterStart
   7329     .type   artMterpAsmSisterStart, %function
   7330     .text
   7331     .balign 4
   7332 artMterpAsmSisterStart:
   7333 
   7334 /* continuation for op_float_to_int */
   7335 .Lop_float_to_int_trunc:
   7336     trunc.w.s f0, f0
   7337     mfc1    t0, f0
   7338 .Lop_float_to_int_done:
   7339     /* Can't include fcvtFooter.S after break */
   7340     GET_INST_OPCODE v0                  # extract opcode from rINST
   7341     SET_VREG t0, a1
   7342     GOTO_OPCODE v0                      # jump to next instruction
   7343 
   7344 /* continuation for op_float_to_long */
   7345 .Lop_float_to_long_trunc:
   7346     trunc.l.s f0, f0
   7347     dmfc1   t0, f0
   7348 .Lop_float_to_long_done:
   7349     /* Can't include fcvtFooter.S after break */
   7350     GET_INST_OPCODE v0                  # extract opcode from rINST
   7351     SET_VREG_WIDE t0, a1
   7352     GOTO_OPCODE v0                      # jump to next instruction
   7353 
   7354 /* continuation for op_double_to_int */
   7355 .Lop_double_to_int_trunc:
   7356     trunc.w.d f0, f0
   7357     mfc1    t0, f0
   7358 .Lop_double_to_int_done:
   7359     /* Can't include fcvtFooter.S after break */
   7360     GET_INST_OPCODE v0                  # extract opcode from rINST
   7361     SET_VREG t0, a1
   7362     GOTO_OPCODE v0                      # jump to next instruction
   7363 
   7364 /* continuation for op_double_to_long */
   7365 .Lop_double_to_long_trunc:
   7366     trunc.l.d f0, f0
   7367     dmfc1   t0, f0
   7368 .Lop_double_to_long_done:
   7369     /* Can't include fcvtFooter.S after break */
   7370     GET_INST_OPCODE v0                  # extract opcode from rINST
   7371     SET_VREG_WIDE t0, a1
   7372     GOTO_OPCODE v0                      # jump to next instruction
   7373 
   7374     .size   artMterpAsmSisterStart, .-artMterpAsmSisterStart
   7375     .global artMterpAsmSisterEnd
   7376 artMterpAsmSisterEnd:
   7377 
   7378 
   7379     .global artMterpAsmAltInstructionStart
   7380     .type   artMterpAsmAltInstructionStart, %function
   7381     .text
   7382 
   7383 artMterpAsmAltInstructionStart = .L_ALT_op_nop
   7384 /* ------------------------------ */
   7385     .balign 128
   7386 .L_ALT_op_nop: /* 0x00 */
   7387 /* File: mips64/alt_stub.S */
   7388 /*
   7389  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7390  * any interesting requests and then jump to the real instruction
   7391  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7392  */
   7393     .extern MterpCheckBefore
   7394     EXPORT_PC
   7395     REFRESH_IBASE
   7396     dla     ra, artMterpAsmInstructionStart
   7397     dla     t9, MterpCheckBefore
   7398     move    a0, rSELF
   7399     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7400     daddu   ra, ra, (0 * 128)            # Addr of primary handler.
   7401     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7402 
   7403 /* ------------------------------ */
   7404     .balign 128
   7405 .L_ALT_op_move: /* 0x01 */
   7406 /* File: mips64/alt_stub.S */
   7407 /*
   7408  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7409  * any interesting requests and then jump to the real instruction
   7410  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7411  */
   7412     .extern MterpCheckBefore
   7413     EXPORT_PC
   7414     REFRESH_IBASE
   7415     dla     ra, artMterpAsmInstructionStart
   7416     dla     t9, MterpCheckBefore
   7417     move    a0, rSELF
   7418     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7419     daddu   ra, ra, (1 * 128)            # Addr of primary handler.
   7420     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7421 
   7422 /* ------------------------------ */
   7423     .balign 128
   7424 .L_ALT_op_move_from16: /* 0x02 */
   7425 /* File: mips64/alt_stub.S */
   7426 /*
   7427  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7428  * any interesting requests and then jump to the real instruction
   7429  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7430  */
   7431     .extern MterpCheckBefore
   7432     EXPORT_PC
   7433     REFRESH_IBASE
   7434     dla     ra, artMterpAsmInstructionStart
   7435     dla     t9, MterpCheckBefore
   7436     move    a0, rSELF
   7437     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7438     daddu   ra, ra, (2 * 128)            # Addr of primary handler.
   7439     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7440 
   7441 /* ------------------------------ */
   7442     .balign 128
   7443 .L_ALT_op_move_16: /* 0x03 */
   7444 /* File: mips64/alt_stub.S */
   7445 /*
   7446  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7447  * any interesting requests and then jump to the real instruction
   7448  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7449  */
   7450     .extern MterpCheckBefore
   7451     EXPORT_PC
   7452     REFRESH_IBASE
   7453     dla     ra, artMterpAsmInstructionStart
   7454     dla     t9, MterpCheckBefore
   7455     move    a0, rSELF
   7456     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7457     daddu   ra, ra, (3 * 128)            # Addr of primary handler.
   7458     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7459 
   7460 /* ------------------------------ */
   7461     .balign 128
   7462 .L_ALT_op_move_wide: /* 0x04 */
   7463 /* File: mips64/alt_stub.S */
   7464 /*
   7465  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7466  * any interesting requests and then jump to the real instruction
   7467  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7468  */
   7469     .extern MterpCheckBefore
   7470     EXPORT_PC
   7471     REFRESH_IBASE
   7472     dla     ra, artMterpAsmInstructionStart
   7473     dla     t9, MterpCheckBefore
   7474     move    a0, rSELF
   7475     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7476     daddu   ra, ra, (4 * 128)            # Addr of primary handler.
   7477     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7478 
   7479 /* ------------------------------ */
   7480     .balign 128
   7481 .L_ALT_op_move_wide_from16: /* 0x05 */
   7482 /* File: mips64/alt_stub.S */
   7483 /*
   7484  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7485  * any interesting requests and then jump to the real instruction
   7486  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7487  */
   7488     .extern MterpCheckBefore
   7489     EXPORT_PC
   7490     REFRESH_IBASE
   7491     dla     ra, artMterpAsmInstructionStart
   7492     dla     t9, MterpCheckBefore
   7493     move    a0, rSELF
   7494     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7495     daddu   ra, ra, (5 * 128)            # Addr of primary handler.
   7496     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7497 
   7498 /* ------------------------------ */
   7499     .balign 128
   7500 .L_ALT_op_move_wide_16: /* 0x06 */
   7501 /* File: mips64/alt_stub.S */
   7502 /*
   7503  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7504  * any interesting requests and then jump to the real instruction
   7505  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7506  */
   7507     .extern MterpCheckBefore
   7508     EXPORT_PC
   7509     REFRESH_IBASE
   7510     dla     ra, artMterpAsmInstructionStart
   7511     dla     t9, MterpCheckBefore
   7512     move    a0, rSELF
   7513     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7514     daddu   ra, ra, (6 * 128)            # Addr of primary handler.
   7515     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7516 
   7517 /* ------------------------------ */
   7518     .balign 128
   7519 .L_ALT_op_move_object: /* 0x07 */
   7520 /* File: mips64/alt_stub.S */
   7521 /*
   7522  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7523  * any interesting requests and then jump to the real instruction
   7524  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7525  */
   7526     .extern MterpCheckBefore
   7527     EXPORT_PC
   7528     REFRESH_IBASE
   7529     dla     ra, artMterpAsmInstructionStart
   7530     dla     t9, MterpCheckBefore
   7531     move    a0, rSELF
   7532     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7533     daddu   ra, ra, (7 * 128)            # Addr of primary handler.
   7534     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7535 
   7536 /* ------------------------------ */
   7537     .balign 128
   7538 .L_ALT_op_move_object_from16: /* 0x08 */
   7539 /* File: mips64/alt_stub.S */
   7540 /*
   7541  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7542  * any interesting requests and then jump to the real instruction
   7543  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7544  */
   7545     .extern MterpCheckBefore
   7546     EXPORT_PC
   7547     REFRESH_IBASE
   7548     dla     ra, artMterpAsmInstructionStart
   7549     dla     t9, MterpCheckBefore
   7550     move    a0, rSELF
   7551     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7552     daddu   ra, ra, (8 * 128)            # Addr of primary handler.
   7553     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7554 
   7555 /* ------------------------------ */
   7556     .balign 128
   7557 .L_ALT_op_move_object_16: /* 0x09 */
   7558 /* File: mips64/alt_stub.S */
   7559 /*
   7560  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7561  * any interesting requests and then jump to the real instruction
   7562  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7563  */
   7564     .extern MterpCheckBefore
   7565     EXPORT_PC
   7566     REFRESH_IBASE
   7567     dla     ra, artMterpAsmInstructionStart
   7568     dla     t9, MterpCheckBefore
   7569     move    a0, rSELF
   7570     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7571     daddu   ra, ra, (9 * 128)            # Addr of primary handler.
   7572     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7573 
   7574 /* ------------------------------ */
   7575     .balign 128
   7576 .L_ALT_op_move_result: /* 0x0a */
   7577 /* File: mips64/alt_stub.S */
   7578 /*
   7579  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7580  * any interesting requests and then jump to the real instruction
   7581  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7582  */
   7583     .extern MterpCheckBefore
   7584     EXPORT_PC
   7585     REFRESH_IBASE
   7586     dla     ra, artMterpAsmInstructionStart
   7587     dla     t9, MterpCheckBefore
   7588     move    a0, rSELF
   7589     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7590     daddu   ra, ra, (10 * 128)            # Addr of primary handler.
   7591     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7592 
   7593 /* ------------------------------ */
   7594     .balign 128
   7595 .L_ALT_op_move_result_wide: /* 0x0b */
   7596 /* File: mips64/alt_stub.S */
   7597 /*
   7598  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7599  * any interesting requests and then jump to the real instruction
   7600  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7601  */
   7602     .extern MterpCheckBefore
   7603     EXPORT_PC
   7604     REFRESH_IBASE
   7605     dla     ra, artMterpAsmInstructionStart
   7606     dla     t9, MterpCheckBefore
   7607     move    a0, rSELF
   7608     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7609     daddu   ra, ra, (11 * 128)            # Addr of primary handler.
   7610     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7611 
   7612 /* ------------------------------ */
   7613     .balign 128
   7614 .L_ALT_op_move_result_object: /* 0x0c */
   7615 /* File: mips64/alt_stub.S */
   7616 /*
   7617  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7618  * any interesting requests and then jump to the real instruction
   7619  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7620  */
   7621     .extern MterpCheckBefore
   7622     EXPORT_PC
   7623     REFRESH_IBASE
   7624     dla     ra, artMterpAsmInstructionStart
   7625     dla     t9, MterpCheckBefore
   7626     move    a0, rSELF
   7627     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7628     daddu   ra, ra, (12 * 128)            # Addr of primary handler.
   7629     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7630 
   7631 /* ------------------------------ */
   7632     .balign 128
   7633 .L_ALT_op_move_exception: /* 0x0d */
   7634 /* File: mips64/alt_stub.S */
   7635 /*
   7636  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7637  * any interesting requests and then jump to the real instruction
   7638  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7639  */
   7640     .extern MterpCheckBefore
   7641     EXPORT_PC
   7642     REFRESH_IBASE
   7643     dla     ra, artMterpAsmInstructionStart
   7644     dla     t9, MterpCheckBefore
   7645     move    a0, rSELF
   7646     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7647     daddu   ra, ra, (13 * 128)            # Addr of primary handler.
   7648     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7649 
   7650 /* ------------------------------ */
   7651     .balign 128
   7652 .L_ALT_op_return_void: /* 0x0e */
   7653 /* File: mips64/alt_stub.S */
   7654 /*
   7655  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7656  * any interesting requests and then jump to the real instruction
   7657  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7658  */
   7659     .extern MterpCheckBefore
   7660     EXPORT_PC
   7661     REFRESH_IBASE
   7662     dla     ra, artMterpAsmInstructionStart
   7663     dla     t9, MterpCheckBefore
   7664     move    a0, rSELF
   7665     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7666     daddu   ra, ra, (14 * 128)            # Addr of primary handler.
   7667     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7668 
   7669 /* ------------------------------ */
   7670     .balign 128
   7671 .L_ALT_op_return: /* 0x0f */
   7672 /* File: mips64/alt_stub.S */
   7673 /*
   7674  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7675  * any interesting requests and then jump to the real instruction
   7676  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7677  */
   7678     .extern MterpCheckBefore
   7679     EXPORT_PC
   7680     REFRESH_IBASE
   7681     dla     ra, artMterpAsmInstructionStart
   7682     dla     t9, MterpCheckBefore
   7683     move    a0, rSELF
   7684     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7685     daddu   ra, ra, (15 * 128)            # Addr of primary handler.
   7686     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7687 
   7688 /* ------------------------------ */
   7689     .balign 128
   7690 .L_ALT_op_return_wide: /* 0x10 */
   7691 /* File: mips64/alt_stub.S */
   7692 /*
   7693  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7694  * any interesting requests and then jump to the real instruction
   7695  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7696  */
   7697     .extern MterpCheckBefore
   7698     EXPORT_PC
   7699     REFRESH_IBASE
   7700     dla     ra, artMterpAsmInstructionStart
   7701     dla     t9, MterpCheckBefore
   7702     move    a0, rSELF
   7703     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7704     daddu   ra, ra, (16 * 128)            # Addr of primary handler.
   7705     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7706 
   7707 /* ------------------------------ */
   7708     .balign 128
   7709 .L_ALT_op_return_object: /* 0x11 */
   7710 /* File: mips64/alt_stub.S */
   7711 /*
   7712  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7713  * any interesting requests and then jump to the real instruction
   7714  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7715  */
   7716     .extern MterpCheckBefore
   7717     EXPORT_PC
   7718     REFRESH_IBASE
   7719     dla     ra, artMterpAsmInstructionStart
   7720     dla     t9, MterpCheckBefore
   7721     move    a0, rSELF
   7722     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7723     daddu   ra, ra, (17 * 128)            # Addr of primary handler.
   7724     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7725 
   7726 /* ------------------------------ */
   7727     .balign 128
   7728 .L_ALT_op_const_4: /* 0x12 */
   7729 /* File: mips64/alt_stub.S */
   7730 /*
   7731  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7732  * any interesting requests and then jump to the real instruction
   7733  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7734  */
   7735     .extern MterpCheckBefore
   7736     EXPORT_PC
   7737     REFRESH_IBASE
   7738     dla     ra, artMterpAsmInstructionStart
   7739     dla     t9, MterpCheckBefore
   7740     move    a0, rSELF
   7741     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7742     daddu   ra, ra, (18 * 128)            # Addr of primary handler.
   7743     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7744 
   7745 /* ------------------------------ */
   7746     .balign 128
   7747 .L_ALT_op_const_16: /* 0x13 */
   7748 /* File: mips64/alt_stub.S */
   7749 /*
   7750  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7751  * any interesting requests and then jump to the real instruction
   7752  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7753  */
   7754     .extern MterpCheckBefore
   7755     EXPORT_PC
   7756     REFRESH_IBASE
   7757     dla     ra, artMterpAsmInstructionStart
   7758     dla     t9, MterpCheckBefore
   7759     move    a0, rSELF
   7760     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7761     daddu   ra, ra, (19 * 128)            # Addr of primary handler.
   7762     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7763 
   7764 /* ------------------------------ */
   7765     .balign 128
   7766 .L_ALT_op_const: /* 0x14 */
   7767 /* File: mips64/alt_stub.S */
   7768 /*
   7769  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7770  * any interesting requests and then jump to the real instruction
   7771  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7772  */
   7773     .extern MterpCheckBefore
   7774     EXPORT_PC
   7775     REFRESH_IBASE
   7776     dla     ra, artMterpAsmInstructionStart
   7777     dla     t9, MterpCheckBefore
   7778     move    a0, rSELF
   7779     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7780     daddu   ra, ra, (20 * 128)            # Addr of primary handler.
   7781     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7782 
   7783 /* ------------------------------ */
   7784     .balign 128
   7785 .L_ALT_op_const_high16: /* 0x15 */
   7786 /* File: mips64/alt_stub.S */
   7787 /*
   7788  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7789  * any interesting requests and then jump to the real instruction
   7790  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7791  */
   7792     .extern MterpCheckBefore
   7793     EXPORT_PC
   7794     REFRESH_IBASE
   7795     dla     ra, artMterpAsmInstructionStart
   7796     dla     t9, MterpCheckBefore
   7797     move    a0, rSELF
   7798     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7799     daddu   ra, ra, (21 * 128)            # Addr of primary handler.
   7800     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7801 
   7802 /* ------------------------------ */
   7803     .balign 128
   7804 .L_ALT_op_const_wide_16: /* 0x16 */
   7805 /* File: mips64/alt_stub.S */
   7806 /*
   7807  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7808  * any interesting requests and then jump to the real instruction
   7809  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7810  */
   7811     .extern MterpCheckBefore
   7812     EXPORT_PC
   7813     REFRESH_IBASE
   7814     dla     ra, artMterpAsmInstructionStart
   7815     dla     t9, MterpCheckBefore
   7816     move    a0, rSELF
   7817     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7818     daddu   ra, ra, (22 * 128)            # Addr of primary handler.
   7819     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7820 
   7821 /* ------------------------------ */
   7822     .balign 128
   7823 .L_ALT_op_const_wide_32: /* 0x17 */
   7824 /* File: mips64/alt_stub.S */
   7825 /*
   7826  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7827  * any interesting requests and then jump to the real instruction
   7828  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7829  */
   7830     .extern MterpCheckBefore
   7831     EXPORT_PC
   7832     REFRESH_IBASE
   7833     dla     ra, artMterpAsmInstructionStart
   7834     dla     t9, MterpCheckBefore
   7835     move    a0, rSELF
   7836     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7837     daddu   ra, ra, (23 * 128)            # Addr of primary handler.
   7838     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7839 
   7840 /* ------------------------------ */
   7841     .balign 128
   7842 .L_ALT_op_const_wide: /* 0x18 */
   7843 /* File: mips64/alt_stub.S */
   7844 /*
   7845  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7846  * any interesting requests and then jump to the real instruction
   7847  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7848  */
   7849     .extern MterpCheckBefore
   7850     EXPORT_PC
   7851     REFRESH_IBASE
   7852     dla     ra, artMterpAsmInstructionStart
   7853     dla     t9, MterpCheckBefore
   7854     move    a0, rSELF
   7855     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7856     daddu   ra, ra, (24 * 128)            # Addr of primary handler.
   7857     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7858 
   7859 /* ------------------------------ */
   7860     .balign 128
   7861 .L_ALT_op_const_wide_high16: /* 0x19 */
   7862 /* File: mips64/alt_stub.S */
   7863 /*
   7864  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7865  * any interesting requests and then jump to the real instruction
   7866  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7867  */
   7868     .extern MterpCheckBefore
   7869     EXPORT_PC
   7870     REFRESH_IBASE
   7871     dla     ra, artMterpAsmInstructionStart
   7872     dla     t9, MterpCheckBefore
   7873     move    a0, rSELF
   7874     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7875     daddu   ra, ra, (25 * 128)            # Addr of primary handler.
   7876     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7877 
   7878 /* ------------------------------ */
   7879     .balign 128
   7880 .L_ALT_op_const_string: /* 0x1a */
   7881 /* File: mips64/alt_stub.S */
   7882 /*
   7883  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7884  * any interesting requests and then jump to the real instruction
   7885  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7886  */
   7887     .extern MterpCheckBefore
   7888     EXPORT_PC
   7889     REFRESH_IBASE
   7890     dla     ra, artMterpAsmInstructionStart
   7891     dla     t9, MterpCheckBefore
   7892     move    a0, rSELF
   7893     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7894     daddu   ra, ra, (26 * 128)            # Addr of primary handler.
   7895     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7896 
   7897 /* ------------------------------ */
   7898     .balign 128
   7899 .L_ALT_op_const_string_jumbo: /* 0x1b */
   7900 /* File: mips64/alt_stub.S */
   7901 /*
   7902  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7903  * any interesting requests and then jump to the real instruction
   7904  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7905  */
   7906     .extern MterpCheckBefore
   7907     EXPORT_PC
   7908     REFRESH_IBASE
   7909     dla     ra, artMterpAsmInstructionStart
   7910     dla     t9, MterpCheckBefore
   7911     move    a0, rSELF
   7912     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7913     daddu   ra, ra, (27 * 128)            # Addr of primary handler.
   7914     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7915 
   7916 /* ------------------------------ */
   7917     .balign 128
   7918 .L_ALT_op_const_class: /* 0x1c */
   7919 /* File: mips64/alt_stub.S */
   7920 /*
   7921  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7922  * any interesting requests and then jump to the real instruction
   7923  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7924  */
   7925     .extern MterpCheckBefore
   7926     EXPORT_PC
   7927     REFRESH_IBASE
   7928     dla     ra, artMterpAsmInstructionStart
   7929     dla     t9, MterpCheckBefore
   7930     move    a0, rSELF
   7931     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7932     daddu   ra, ra, (28 * 128)            # Addr of primary handler.
   7933     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7934 
   7935 /* ------------------------------ */
   7936     .balign 128
   7937 .L_ALT_op_monitor_enter: /* 0x1d */
   7938 /* File: mips64/alt_stub.S */
   7939 /*
   7940  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7941  * any interesting requests and then jump to the real instruction
   7942  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7943  */
   7944     .extern MterpCheckBefore
   7945     EXPORT_PC
   7946     REFRESH_IBASE
   7947     dla     ra, artMterpAsmInstructionStart
   7948     dla     t9, MterpCheckBefore
   7949     move    a0, rSELF
   7950     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7951     daddu   ra, ra, (29 * 128)            # Addr of primary handler.
   7952     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7953 
   7954 /* ------------------------------ */
   7955     .balign 128
   7956 .L_ALT_op_monitor_exit: /* 0x1e */
   7957 /* File: mips64/alt_stub.S */
   7958 /*
   7959  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7960  * any interesting requests and then jump to the real instruction
   7961  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7962  */
   7963     .extern MterpCheckBefore
   7964     EXPORT_PC
   7965     REFRESH_IBASE
   7966     dla     ra, artMterpAsmInstructionStart
   7967     dla     t9, MterpCheckBefore
   7968     move    a0, rSELF
   7969     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7970     daddu   ra, ra, (30 * 128)            # Addr of primary handler.
   7971     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7972 
   7973 /* ------------------------------ */
   7974     .balign 128
   7975 .L_ALT_op_check_cast: /* 0x1f */
   7976 /* File: mips64/alt_stub.S */
   7977 /*
   7978  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7979  * any interesting requests and then jump to the real instruction
   7980  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   7981  */
   7982     .extern MterpCheckBefore
   7983     EXPORT_PC
   7984     REFRESH_IBASE
   7985     dla     ra, artMterpAsmInstructionStart
   7986     dla     t9, MterpCheckBefore
   7987     move    a0, rSELF
   7988     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   7989     daddu   ra, ra, (31 * 128)            # Addr of primary handler.
   7990     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   7991 
   7992 /* ------------------------------ */
   7993     .balign 128
   7994 .L_ALT_op_instance_of: /* 0x20 */
   7995 /* File: mips64/alt_stub.S */
   7996 /*
   7997  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   7998  * any interesting requests and then jump to the real instruction
   7999  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8000  */
   8001     .extern MterpCheckBefore
   8002     EXPORT_PC
   8003     REFRESH_IBASE
   8004     dla     ra, artMterpAsmInstructionStart
   8005     dla     t9, MterpCheckBefore
   8006     move    a0, rSELF
   8007     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8008     daddu   ra, ra, (32 * 128)            # Addr of primary handler.
   8009     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8010 
   8011 /* ------------------------------ */
   8012     .balign 128
   8013 .L_ALT_op_array_length: /* 0x21 */
   8014 /* File: mips64/alt_stub.S */
   8015 /*
   8016  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8017  * any interesting requests and then jump to the real instruction
   8018  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8019  */
   8020     .extern MterpCheckBefore
   8021     EXPORT_PC
   8022     REFRESH_IBASE
   8023     dla     ra, artMterpAsmInstructionStart
   8024     dla     t9, MterpCheckBefore
   8025     move    a0, rSELF
   8026     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8027     daddu   ra, ra, (33 * 128)            # Addr of primary handler.
   8028     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8029 
   8030 /* ------------------------------ */
   8031     .balign 128
   8032 .L_ALT_op_new_instance: /* 0x22 */
   8033 /* File: mips64/alt_stub.S */
   8034 /*
   8035  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8036  * any interesting requests and then jump to the real instruction
   8037  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8038  */
   8039     .extern MterpCheckBefore
   8040     EXPORT_PC
   8041     REFRESH_IBASE
   8042     dla     ra, artMterpAsmInstructionStart
   8043     dla     t9, MterpCheckBefore
   8044     move    a0, rSELF
   8045     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8046     daddu   ra, ra, (34 * 128)            # Addr of primary handler.
   8047     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8048 
   8049 /* ------------------------------ */
   8050     .balign 128
   8051 .L_ALT_op_new_array: /* 0x23 */
   8052 /* File: mips64/alt_stub.S */
   8053 /*
   8054  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8055  * any interesting requests and then jump to the real instruction
   8056  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8057  */
   8058     .extern MterpCheckBefore
   8059     EXPORT_PC
   8060     REFRESH_IBASE
   8061     dla     ra, artMterpAsmInstructionStart
   8062     dla     t9, MterpCheckBefore
   8063     move    a0, rSELF
   8064     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8065     daddu   ra, ra, (35 * 128)            # Addr of primary handler.
   8066     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8067 
   8068 /* ------------------------------ */
   8069     .balign 128
   8070 .L_ALT_op_filled_new_array: /* 0x24 */
   8071 /* File: mips64/alt_stub.S */
   8072 /*
   8073  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8074  * any interesting requests and then jump to the real instruction
   8075  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8076  */
   8077     .extern MterpCheckBefore
   8078     EXPORT_PC
   8079     REFRESH_IBASE
   8080     dla     ra, artMterpAsmInstructionStart
   8081     dla     t9, MterpCheckBefore
   8082     move    a0, rSELF
   8083     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8084     daddu   ra, ra, (36 * 128)            # Addr of primary handler.
   8085     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8086 
   8087 /* ------------------------------ */
   8088     .balign 128
   8089 .L_ALT_op_filled_new_array_range: /* 0x25 */
   8090 /* File: mips64/alt_stub.S */
   8091 /*
   8092  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8093  * any interesting requests and then jump to the real instruction
   8094  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8095  */
   8096     .extern MterpCheckBefore
   8097     EXPORT_PC
   8098     REFRESH_IBASE
   8099     dla     ra, artMterpAsmInstructionStart
   8100     dla     t9, MterpCheckBefore
   8101     move    a0, rSELF
   8102     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8103     daddu   ra, ra, (37 * 128)            # Addr of primary handler.
   8104     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8105 
   8106 /* ------------------------------ */
   8107     .balign 128
   8108 .L_ALT_op_fill_array_data: /* 0x26 */
   8109 /* File: mips64/alt_stub.S */
   8110 /*
   8111  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8112  * any interesting requests and then jump to the real instruction
   8113  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8114  */
   8115     .extern MterpCheckBefore
   8116     EXPORT_PC
   8117     REFRESH_IBASE
   8118     dla     ra, artMterpAsmInstructionStart
   8119     dla     t9, MterpCheckBefore
   8120     move    a0, rSELF
   8121     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8122     daddu   ra, ra, (38 * 128)            # Addr of primary handler.
   8123     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8124 
   8125 /* ------------------------------ */
   8126     .balign 128
   8127 .L_ALT_op_throw: /* 0x27 */
   8128 /* File: mips64/alt_stub.S */
   8129 /*
   8130  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8131  * any interesting requests and then jump to the real instruction
   8132  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8133  */
   8134     .extern MterpCheckBefore
   8135     EXPORT_PC
   8136     REFRESH_IBASE
   8137     dla     ra, artMterpAsmInstructionStart
   8138     dla     t9, MterpCheckBefore
   8139     move    a0, rSELF
   8140     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8141     daddu   ra, ra, (39 * 128)            # Addr of primary handler.
   8142     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8143 
   8144 /* ------------------------------ */
   8145     .balign 128
   8146 .L_ALT_op_goto: /* 0x28 */
   8147 /* File: mips64/alt_stub.S */
   8148 /*
   8149  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8150  * any interesting requests and then jump to the real instruction
   8151  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8152  */
   8153     .extern MterpCheckBefore
   8154     EXPORT_PC
   8155     REFRESH_IBASE
   8156     dla     ra, artMterpAsmInstructionStart
   8157     dla     t9, MterpCheckBefore
   8158     move    a0, rSELF
   8159     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8160     daddu   ra, ra, (40 * 128)            # Addr of primary handler.
   8161     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8162 
   8163 /* ------------------------------ */
   8164     .balign 128
   8165 .L_ALT_op_goto_16: /* 0x29 */
   8166 /* File: mips64/alt_stub.S */
   8167 /*
   8168  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8169  * any interesting requests and then jump to the real instruction
   8170  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8171  */
   8172     .extern MterpCheckBefore
   8173     EXPORT_PC
   8174     REFRESH_IBASE
   8175     dla     ra, artMterpAsmInstructionStart
   8176     dla     t9, MterpCheckBefore
   8177     move    a0, rSELF
   8178     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8179     daddu   ra, ra, (41 * 128)            # Addr of primary handler.
   8180     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8181 
   8182 /* ------------------------------ */
   8183     .balign 128
   8184 .L_ALT_op_goto_32: /* 0x2a */
   8185 /* File: mips64/alt_stub.S */
   8186 /*
   8187  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8188  * any interesting requests and then jump to the real instruction
   8189  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8190  */
   8191     .extern MterpCheckBefore
   8192     EXPORT_PC
   8193     REFRESH_IBASE
   8194     dla     ra, artMterpAsmInstructionStart
   8195     dla     t9, MterpCheckBefore
   8196     move    a0, rSELF
   8197     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8198     daddu   ra, ra, (42 * 128)            # Addr of primary handler.
   8199     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8200 
   8201 /* ------------------------------ */
   8202     .balign 128
   8203 .L_ALT_op_packed_switch: /* 0x2b */
   8204 /* File: mips64/alt_stub.S */
   8205 /*
   8206  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8207  * any interesting requests and then jump to the real instruction
   8208  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8209  */
   8210     .extern MterpCheckBefore
   8211     EXPORT_PC
   8212     REFRESH_IBASE
   8213     dla     ra, artMterpAsmInstructionStart
   8214     dla     t9, MterpCheckBefore
   8215     move    a0, rSELF
   8216     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8217     daddu   ra, ra, (43 * 128)            # Addr of primary handler.
   8218     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8219 
   8220 /* ------------------------------ */
   8221     .balign 128
   8222 .L_ALT_op_sparse_switch: /* 0x2c */
   8223 /* File: mips64/alt_stub.S */
   8224 /*
   8225  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8226  * any interesting requests and then jump to the real instruction
   8227  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8228  */
   8229     .extern MterpCheckBefore
   8230     EXPORT_PC
   8231     REFRESH_IBASE
   8232     dla     ra, artMterpAsmInstructionStart
   8233     dla     t9, MterpCheckBefore
   8234     move    a0, rSELF
   8235     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8236     daddu   ra, ra, (44 * 128)            # Addr of primary handler.
   8237     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8238 
   8239 /* ------------------------------ */
   8240     .balign 128
   8241 .L_ALT_op_cmpl_float: /* 0x2d */
   8242 /* File: mips64/alt_stub.S */
   8243 /*
   8244  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8245  * any interesting requests and then jump to the real instruction
   8246  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8247  */
   8248     .extern MterpCheckBefore
   8249     EXPORT_PC
   8250     REFRESH_IBASE
   8251     dla     ra, artMterpAsmInstructionStart
   8252     dla     t9, MterpCheckBefore
   8253     move    a0, rSELF
   8254     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8255     daddu   ra, ra, (45 * 128)            # Addr of primary handler.
   8256     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8257 
   8258 /* ------------------------------ */
   8259     .balign 128
   8260 .L_ALT_op_cmpg_float: /* 0x2e */
   8261 /* File: mips64/alt_stub.S */
   8262 /*
   8263  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8264  * any interesting requests and then jump to the real instruction
   8265  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8266  */
   8267     .extern MterpCheckBefore
   8268     EXPORT_PC
   8269     REFRESH_IBASE
   8270     dla     ra, artMterpAsmInstructionStart
   8271     dla     t9, MterpCheckBefore
   8272     move    a0, rSELF
   8273     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8274     daddu   ra, ra, (46 * 128)            # Addr of primary handler.
   8275     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8276 
   8277 /* ------------------------------ */
   8278     .balign 128
   8279 .L_ALT_op_cmpl_double: /* 0x2f */
   8280 /* File: mips64/alt_stub.S */
   8281 /*
   8282  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8283  * any interesting requests and then jump to the real instruction
   8284  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8285  */
   8286     .extern MterpCheckBefore
   8287     EXPORT_PC
   8288     REFRESH_IBASE
   8289     dla     ra, artMterpAsmInstructionStart
   8290     dla     t9, MterpCheckBefore
   8291     move    a0, rSELF
   8292     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8293     daddu   ra, ra, (47 * 128)            # Addr of primary handler.
   8294     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8295 
   8296 /* ------------------------------ */
   8297     .balign 128
   8298 .L_ALT_op_cmpg_double: /* 0x30 */
   8299 /* File: mips64/alt_stub.S */
   8300 /*
   8301  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8302  * any interesting requests and then jump to the real instruction
   8303  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8304  */
   8305     .extern MterpCheckBefore
   8306     EXPORT_PC
   8307     REFRESH_IBASE
   8308     dla     ra, artMterpAsmInstructionStart
   8309     dla     t9, MterpCheckBefore
   8310     move    a0, rSELF
   8311     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8312     daddu   ra, ra, (48 * 128)            # Addr of primary handler.
   8313     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8314 
   8315 /* ------------------------------ */
   8316     .balign 128
   8317 .L_ALT_op_cmp_long: /* 0x31 */
   8318 /* File: mips64/alt_stub.S */
   8319 /*
   8320  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8321  * any interesting requests and then jump to the real instruction
   8322  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8323  */
   8324     .extern MterpCheckBefore
   8325     EXPORT_PC
   8326     REFRESH_IBASE
   8327     dla     ra, artMterpAsmInstructionStart
   8328     dla     t9, MterpCheckBefore
   8329     move    a0, rSELF
   8330     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8331     daddu   ra, ra, (49 * 128)            # Addr of primary handler.
   8332     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8333 
   8334 /* ------------------------------ */
   8335     .balign 128
   8336 .L_ALT_op_if_eq: /* 0x32 */
   8337 /* File: mips64/alt_stub.S */
   8338 /*
   8339  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8340  * any interesting requests and then jump to the real instruction
   8341  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8342  */
   8343     .extern MterpCheckBefore
   8344     EXPORT_PC
   8345     REFRESH_IBASE
   8346     dla     ra, artMterpAsmInstructionStart
   8347     dla     t9, MterpCheckBefore
   8348     move    a0, rSELF
   8349     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8350     daddu   ra, ra, (50 * 128)            # Addr of primary handler.
   8351     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8352 
   8353 /* ------------------------------ */
   8354     .balign 128
   8355 .L_ALT_op_if_ne: /* 0x33 */
   8356 /* File: mips64/alt_stub.S */
   8357 /*
   8358  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8359  * any interesting requests and then jump to the real instruction
   8360  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8361  */
   8362     .extern MterpCheckBefore
   8363     EXPORT_PC
   8364     REFRESH_IBASE
   8365     dla     ra, artMterpAsmInstructionStart
   8366     dla     t9, MterpCheckBefore
   8367     move    a0, rSELF
   8368     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8369     daddu   ra, ra, (51 * 128)            # Addr of primary handler.
   8370     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8371 
   8372 /* ------------------------------ */
   8373     .balign 128
   8374 .L_ALT_op_if_lt: /* 0x34 */
   8375 /* File: mips64/alt_stub.S */
   8376 /*
   8377  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8378  * any interesting requests and then jump to the real instruction
   8379  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8380  */
   8381     .extern MterpCheckBefore
   8382     EXPORT_PC
   8383     REFRESH_IBASE
   8384     dla     ra, artMterpAsmInstructionStart
   8385     dla     t9, MterpCheckBefore
   8386     move    a0, rSELF
   8387     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8388     daddu   ra, ra, (52 * 128)            # Addr of primary handler.
   8389     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8390 
   8391 /* ------------------------------ */
   8392     .balign 128
   8393 .L_ALT_op_if_ge: /* 0x35 */
   8394 /* File: mips64/alt_stub.S */
   8395 /*
   8396  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8397  * any interesting requests and then jump to the real instruction
   8398  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8399  */
   8400     .extern MterpCheckBefore
   8401     EXPORT_PC
   8402     REFRESH_IBASE
   8403     dla     ra, artMterpAsmInstructionStart
   8404     dla     t9, MterpCheckBefore
   8405     move    a0, rSELF
   8406     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8407     daddu   ra, ra, (53 * 128)            # Addr of primary handler.
   8408     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8409 
   8410 /* ------------------------------ */
   8411     .balign 128
   8412 .L_ALT_op_if_gt: /* 0x36 */
   8413 /* File: mips64/alt_stub.S */
   8414 /*
   8415  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8416  * any interesting requests and then jump to the real instruction
   8417  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8418  */
   8419     .extern MterpCheckBefore
   8420     EXPORT_PC
   8421     REFRESH_IBASE
   8422     dla     ra, artMterpAsmInstructionStart
   8423     dla     t9, MterpCheckBefore
   8424     move    a0, rSELF
   8425     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8426     daddu   ra, ra, (54 * 128)            # Addr of primary handler.
   8427     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8428 
   8429 /* ------------------------------ */
   8430     .balign 128
   8431 .L_ALT_op_if_le: /* 0x37 */
   8432 /* File: mips64/alt_stub.S */
   8433 /*
   8434  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8435  * any interesting requests and then jump to the real instruction
   8436  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8437  */
   8438     .extern MterpCheckBefore
   8439     EXPORT_PC
   8440     REFRESH_IBASE
   8441     dla     ra, artMterpAsmInstructionStart
   8442     dla     t9, MterpCheckBefore
   8443     move    a0, rSELF
   8444     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8445     daddu   ra, ra, (55 * 128)            # Addr of primary handler.
   8446     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8447 
   8448 /* ------------------------------ */
   8449     .balign 128
   8450 .L_ALT_op_if_eqz: /* 0x38 */
   8451 /* File: mips64/alt_stub.S */
   8452 /*
   8453  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8454  * any interesting requests and then jump to the real instruction
   8455  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8456  */
   8457     .extern MterpCheckBefore
   8458     EXPORT_PC
   8459     REFRESH_IBASE
   8460     dla     ra, artMterpAsmInstructionStart
   8461     dla     t9, MterpCheckBefore
   8462     move    a0, rSELF
   8463     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8464     daddu   ra, ra, (56 * 128)            # Addr of primary handler.
   8465     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8466 
   8467 /* ------------------------------ */
   8468     .balign 128
   8469 .L_ALT_op_if_nez: /* 0x39 */
   8470 /* File: mips64/alt_stub.S */
   8471 /*
   8472  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8473  * any interesting requests and then jump to the real instruction
   8474  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8475  */
   8476     .extern MterpCheckBefore
   8477     EXPORT_PC
   8478     REFRESH_IBASE
   8479     dla     ra, artMterpAsmInstructionStart
   8480     dla     t9, MterpCheckBefore
   8481     move    a0, rSELF
   8482     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8483     daddu   ra, ra, (57 * 128)            # Addr of primary handler.
   8484     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8485 
   8486 /* ------------------------------ */
   8487     .balign 128
   8488 .L_ALT_op_if_ltz: /* 0x3a */
   8489 /* File: mips64/alt_stub.S */
   8490 /*
   8491  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8492  * any interesting requests and then jump to the real instruction
   8493  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8494  */
   8495     .extern MterpCheckBefore
   8496     EXPORT_PC
   8497     REFRESH_IBASE
   8498     dla     ra, artMterpAsmInstructionStart
   8499     dla     t9, MterpCheckBefore
   8500     move    a0, rSELF
   8501     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8502     daddu   ra, ra, (58 * 128)            # Addr of primary handler.
   8503     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8504 
   8505 /* ------------------------------ */
   8506     .balign 128
   8507 .L_ALT_op_if_gez: /* 0x3b */
   8508 /* File: mips64/alt_stub.S */
   8509 /*
   8510  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8511  * any interesting requests and then jump to the real instruction
   8512  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8513  */
   8514     .extern MterpCheckBefore
   8515     EXPORT_PC
   8516     REFRESH_IBASE
   8517     dla     ra, artMterpAsmInstructionStart
   8518     dla     t9, MterpCheckBefore
   8519     move    a0, rSELF
   8520     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8521     daddu   ra, ra, (59 * 128)            # Addr of primary handler.
   8522     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8523 
   8524 /* ------------------------------ */
   8525     .balign 128
   8526 .L_ALT_op_if_gtz: /* 0x3c */
   8527 /* File: mips64/alt_stub.S */
   8528 /*
   8529  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8530  * any interesting requests and then jump to the real instruction
   8531  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8532  */
   8533     .extern MterpCheckBefore
   8534     EXPORT_PC
   8535     REFRESH_IBASE
   8536     dla     ra, artMterpAsmInstructionStart
   8537     dla     t9, MterpCheckBefore
   8538     move    a0, rSELF
   8539     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8540     daddu   ra, ra, (60 * 128)            # Addr of primary handler.
   8541     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8542 
   8543 /* ------------------------------ */
   8544     .balign 128
   8545 .L_ALT_op_if_lez: /* 0x3d */
   8546 /* File: mips64/alt_stub.S */
   8547 /*
   8548  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8549  * any interesting requests and then jump to the real instruction
   8550  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8551  */
   8552     .extern MterpCheckBefore
   8553     EXPORT_PC
   8554     REFRESH_IBASE
   8555     dla     ra, artMterpAsmInstructionStart
   8556     dla     t9, MterpCheckBefore
   8557     move    a0, rSELF
   8558     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8559     daddu   ra, ra, (61 * 128)            # Addr of primary handler.
   8560     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8561 
   8562 /* ------------------------------ */
   8563     .balign 128
   8564 .L_ALT_op_unused_3e: /* 0x3e */
   8565 /* File: mips64/alt_stub.S */
   8566 /*
   8567  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8568  * any interesting requests and then jump to the real instruction
   8569  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8570  */
   8571     .extern MterpCheckBefore
   8572     EXPORT_PC
   8573     REFRESH_IBASE
   8574     dla     ra, artMterpAsmInstructionStart
   8575     dla     t9, MterpCheckBefore
   8576     move    a0, rSELF
   8577     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8578     daddu   ra, ra, (62 * 128)            # Addr of primary handler.
   8579     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8580 
   8581 /* ------------------------------ */
   8582     .balign 128
   8583 .L_ALT_op_unused_3f: /* 0x3f */
   8584 /* File: mips64/alt_stub.S */
   8585 /*
   8586  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8587  * any interesting requests and then jump to the real instruction
   8588  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8589  */
   8590     .extern MterpCheckBefore
   8591     EXPORT_PC
   8592     REFRESH_IBASE
   8593     dla     ra, artMterpAsmInstructionStart
   8594     dla     t9, MterpCheckBefore
   8595     move    a0, rSELF
   8596     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8597     daddu   ra, ra, (63 * 128)            # Addr of primary handler.
   8598     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8599 
   8600 /* ------------------------------ */
   8601     .balign 128
   8602 .L_ALT_op_unused_40: /* 0x40 */
   8603 /* File: mips64/alt_stub.S */
   8604 /*
   8605  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8606  * any interesting requests and then jump to the real instruction
   8607  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8608  */
   8609     .extern MterpCheckBefore
   8610     EXPORT_PC
   8611     REFRESH_IBASE
   8612     dla     ra, artMterpAsmInstructionStart
   8613     dla     t9, MterpCheckBefore
   8614     move    a0, rSELF
   8615     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8616     daddu   ra, ra, (64 * 128)            # Addr of primary handler.
   8617     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8618 
   8619 /* ------------------------------ */
   8620     .balign 128
   8621 .L_ALT_op_unused_41: /* 0x41 */
   8622 /* File: mips64/alt_stub.S */
   8623 /*
   8624  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8625  * any interesting requests and then jump to the real instruction
   8626  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8627  */
   8628     .extern MterpCheckBefore
   8629     EXPORT_PC
   8630     REFRESH_IBASE
   8631     dla     ra, artMterpAsmInstructionStart
   8632     dla     t9, MterpCheckBefore
   8633     move    a0, rSELF
   8634     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8635     daddu   ra, ra, (65 * 128)            # Addr of primary handler.
   8636     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8637 
   8638 /* ------------------------------ */
   8639     .balign 128
   8640 .L_ALT_op_unused_42: /* 0x42 */
   8641 /* File: mips64/alt_stub.S */
   8642 /*
   8643  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8644  * any interesting requests and then jump to the real instruction
   8645  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8646  */
   8647     .extern MterpCheckBefore
   8648     EXPORT_PC
   8649     REFRESH_IBASE
   8650     dla     ra, artMterpAsmInstructionStart
   8651     dla     t9, MterpCheckBefore
   8652     move    a0, rSELF
   8653     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8654     daddu   ra, ra, (66 * 128)            # Addr of primary handler.
   8655     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8656 
   8657 /* ------------------------------ */
   8658     .balign 128
   8659 .L_ALT_op_unused_43: /* 0x43 */
   8660 /* File: mips64/alt_stub.S */
   8661 /*
   8662  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8663  * any interesting requests and then jump to the real instruction
   8664  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8665  */
   8666     .extern MterpCheckBefore
   8667     EXPORT_PC
   8668     REFRESH_IBASE
   8669     dla     ra, artMterpAsmInstructionStart
   8670     dla     t9, MterpCheckBefore
   8671     move    a0, rSELF
   8672     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8673     daddu   ra, ra, (67 * 128)            # Addr of primary handler.
   8674     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8675 
   8676 /* ------------------------------ */
   8677     .balign 128
   8678 .L_ALT_op_aget: /* 0x44 */
   8679 /* File: mips64/alt_stub.S */
   8680 /*
   8681  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8682  * any interesting requests and then jump to the real instruction
   8683  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8684  */
   8685     .extern MterpCheckBefore
   8686     EXPORT_PC
   8687     REFRESH_IBASE
   8688     dla     ra, artMterpAsmInstructionStart
   8689     dla     t9, MterpCheckBefore
   8690     move    a0, rSELF
   8691     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8692     daddu   ra, ra, (68 * 128)            # Addr of primary handler.
   8693     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8694 
   8695 /* ------------------------------ */
   8696     .balign 128
   8697 .L_ALT_op_aget_wide: /* 0x45 */
   8698 /* File: mips64/alt_stub.S */
   8699 /*
   8700  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8701  * any interesting requests and then jump to the real instruction
   8702  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8703  */
   8704     .extern MterpCheckBefore
   8705     EXPORT_PC
   8706     REFRESH_IBASE
   8707     dla     ra, artMterpAsmInstructionStart
   8708     dla     t9, MterpCheckBefore
   8709     move    a0, rSELF
   8710     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8711     daddu   ra, ra, (69 * 128)            # Addr of primary handler.
   8712     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8713 
   8714 /* ------------------------------ */
   8715     .balign 128
   8716 .L_ALT_op_aget_object: /* 0x46 */
   8717 /* File: mips64/alt_stub.S */
   8718 /*
   8719  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8720  * any interesting requests and then jump to the real instruction
   8721  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8722  */
   8723     .extern MterpCheckBefore
   8724     EXPORT_PC
   8725     REFRESH_IBASE
   8726     dla     ra, artMterpAsmInstructionStart
   8727     dla     t9, MterpCheckBefore
   8728     move    a0, rSELF
   8729     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8730     daddu   ra, ra, (70 * 128)            # Addr of primary handler.
   8731     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8732 
   8733 /* ------------------------------ */
   8734     .balign 128
   8735 .L_ALT_op_aget_boolean: /* 0x47 */
   8736 /* File: mips64/alt_stub.S */
   8737 /*
   8738  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8739  * any interesting requests and then jump to the real instruction
   8740  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8741  */
   8742     .extern MterpCheckBefore
   8743     EXPORT_PC
   8744     REFRESH_IBASE
   8745     dla     ra, artMterpAsmInstructionStart
   8746     dla     t9, MterpCheckBefore
   8747     move    a0, rSELF
   8748     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8749     daddu   ra, ra, (71 * 128)            # Addr of primary handler.
   8750     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8751 
   8752 /* ------------------------------ */
   8753     .balign 128
   8754 .L_ALT_op_aget_byte: /* 0x48 */
   8755 /* File: mips64/alt_stub.S */
   8756 /*
   8757  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8758  * any interesting requests and then jump to the real instruction
   8759  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8760  */
   8761     .extern MterpCheckBefore
   8762     EXPORT_PC
   8763     REFRESH_IBASE
   8764     dla     ra, artMterpAsmInstructionStart
   8765     dla     t9, MterpCheckBefore
   8766     move    a0, rSELF
   8767     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8768     daddu   ra, ra, (72 * 128)            # Addr of primary handler.
   8769     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8770 
   8771 /* ------------------------------ */
   8772     .balign 128
   8773 .L_ALT_op_aget_char: /* 0x49 */
   8774 /* File: mips64/alt_stub.S */
   8775 /*
   8776  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8777  * any interesting requests and then jump to the real instruction
   8778  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8779  */
   8780     .extern MterpCheckBefore
   8781     EXPORT_PC
   8782     REFRESH_IBASE
   8783     dla     ra, artMterpAsmInstructionStart
   8784     dla     t9, MterpCheckBefore
   8785     move    a0, rSELF
   8786     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8787     daddu   ra, ra, (73 * 128)            # Addr of primary handler.
   8788     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8789 
   8790 /* ------------------------------ */
   8791     .balign 128
   8792 .L_ALT_op_aget_short: /* 0x4a */
   8793 /* File: mips64/alt_stub.S */
   8794 /*
   8795  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8796  * any interesting requests and then jump to the real instruction
   8797  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8798  */
   8799     .extern MterpCheckBefore
   8800     EXPORT_PC
   8801     REFRESH_IBASE
   8802     dla     ra, artMterpAsmInstructionStart
   8803     dla     t9, MterpCheckBefore
   8804     move    a0, rSELF
   8805     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8806     daddu   ra, ra, (74 * 128)            # Addr of primary handler.
   8807     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8808 
   8809 /* ------------------------------ */
   8810     .balign 128
   8811 .L_ALT_op_aput: /* 0x4b */
   8812 /* File: mips64/alt_stub.S */
   8813 /*
   8814  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8815  * any interesting requests and then jump to the real instruction
   8816  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8817  */
   8818     .extern MterpCheckBefore
   8819     EXPORT_PC
   8820     REFRESH_IBASE
   8821     dla     ra, artMterpAsmInstructionStart
   8822     dla     t9, MterpCheckBefore
   8823     move    a0, rSELF
   8824     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8825     daddu   ra, ra, (75 * 128)            # Addr of primary handler.
   8826     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8827 
   8828 /* ------------------------------ */
   8829     .balign 128
   8830 .L_ALT_op_aput_wide: /* 0x4c */
   8831 /* File: mips64/alt_stub.S */
   8832 /*
   8833  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8834  * any interesting requests and then jump to the real instruction
   8835  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8836  */
   8837     .extern MterpCheckBefore
   8838     EXPORT_PC
   8839     REFRESH_IBASE
   8840     dla     ra, artMterpAsmInstructionStart
   8841     dla     t9, MterpCheckBefore
   8842     move    a0, rSELF
   8843     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8844     daddu   ra, ra, (76 * 128)            # Addr of primary handler.
   8845     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8846 
   8847 /* ------------------------------ */
   8848     .balign 128
   8849 .L_ALT_op_aput_object: /* 0x4d */
   8850 /* File: mips64/alt_stub.S */
   8851 /*
   8852  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8853  * any interesting requests and then jump to the real instruction
   8854  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8855  */
   8856     .extern MterpCheckBefore
   8857     EXPORT_PC
   8858     REFRESH_IBASE
   8859     dla     ra, artMterpAsmInstructionStart
   8860     dla     t9, MterpCheckBefore
   8861     move    a0, rSELF
   8862     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8863     daddu   ra, ra, (77 * 128)            # Addr of primary handler.
   8864     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8865 
   8866 /* ------------------------------ */
   8867     .balign 128
   8868 .L_ALT_op_aput_boolean: /* 0x4e */
   8869 /* File: mips64/alt_stub.S */
   8870 /*
   8871  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8872  * any interesting requests and then jump to the real instruction
   8873  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8874  */
   8875     .extern MterpCheckBefore
   8876     EXPORT_PC
   8877     REFRESH_IBASE
   8878     dla     ra, artMterpAsmInstructionStart
   8879     dla     t9, MterpCheckBefore
   8880     move    a0, rSELF
   8881     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8882     daddu   ra, ra, (78 * 128)            # Addr of primary handler.
   8883     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8884 
   8885 /* ------------------------------ */
   8886     .balign 128
   8887 .L_ALT_op_aput_byte: /* 0x4f */
   8888 /* File: mips64/alt_stub.S */
   8889 /*
   8890  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8891  * any interesting requests and then jump to the real instruction
   8892  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8893  */
   8894     .extern MterpCheckBefore
   8895     EXPORT_PC
   8896     REFRESH_IBASE
   8897     dla     ra, artMterpAsmInstructionStart
   8898     dla     t9, MterpCheckBefore
   8899     move    a0, rSELF
   8900     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8901     daddu   ra, ra, (79 * 128)            # Addr of primary handler.
   8902     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8903 
   8904 /* ------------------------------ */
   8905     .balign 128
   8906 .L_ALT_op_aput_char: /* 0x50 */
   8907 /* File: mips64/alt_stub.S */
   8908 /*
   8909  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8910  * any interesting requests and then jump to the real instruction
   8911  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8912  */
   8913     .extern MterpCheckBefore
   8914     EXPORT_PC
   8915     REFRESH_IBASE
   8916     dla     ra, artMterpAsmInstructionStart
   8917     dla     t9, MterpCheckBefore
   8918     move    a0, rSELF
   8919     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8920     daddu   ra, ra, (80 * 128)            # Addr of primary handler.
   8921     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8922 
   8923 /* ------------------------------ */
   8924     .balign 128
   8925 .L_ALT_op_aput_short: /* 0x51 */
   8926 /* File: mips64/alt_stub.S */
   8927 /*
   8928  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8929  * any interesting requests and then jump to the real instruction
   8930  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8931  */
   8932     .extern MterpCheckBefore
   8933     EXPORT_PC
   8934     REFRESH_IBASE
   8935     dla     ra, artMterpAsmInstructionStart
   8936     dla     t9, MterpCheckBefore
   8937     move    a0, rSELF
   8938     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8939     daddu   ra, ra, (81 * 128)            # Addr of primary handler.
   8940     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8941 
   8942 /* ------------------------------ */
   8943     .balign 128
   8944 .L_ALT_op_iget: /* 0x52 */
   8945 /* File: mips64/alt_stub.S */
   8946 /*
   8947  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8948  * any interesting requests and then jump to the real instruction
   8949  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8950  */
   8951     .extern MterpCheckBefore
   8952     EXPORT_PC
   8953     REFRESH_IBASE
   8954     dla     ra, artMterpAsmInstructionStart
   8955     dla     t9, MterpCheckBefore
   8956     move    a0, rSELF
   8957     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8958     daddu   ra, ra, (82 * 128)            # Addr of primary handler.
   8959     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8960 
   8961 /* ------------------------------ */
   8962     .balign 128
   8963 .L_ALT_op_iget_wide: /* 0x53 */
   8964 /* File: mips64/alt_stub.S */
   8965 /*
   8966  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8967  * any interesting requests and then jump to the real instruction
   8968  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8969  */
   8970     .extern MterpCheckBefore
   8971     EXPORT_PC
   8972     REFRESH_IBASE
   8973     dla     ra, artMterpAsmInstructionStart
   8974     dla     t9, MterpCheckBefore
   8975     move    a0, rSELF
   8976     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8977     daddu   ra, ra, (83 * 128)            # Addr of primary handler.
   8978     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8979 
   8980 /* ------------------------------ */
   8981     .balign 128
   8982 .L_ALT_op_iget_object: /* 0x54 */
   8983 /* File: mips64/alt_stub.S */
   8984 /*
   8985  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   8986  * any interesting requests and then jump to the real instruction
   8987  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   8988  */
   8989     .extern MterpCheckBefore
   8990     EXPORT_PC
   8991     REFRESH_IBASE
   8992     dla     ra, artMterpAsmInstructionStart
   8993     dla     t9, MterpCheckBefore
   8994     move    a0, rSELF
   8995     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   8996     daddu   ra, ra, (84 * 128)            # Addr of primary handler.
   8997     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   8998 
   8999 /* ------------------------------ */
   9000     .balign 128
   9001 .L_ALT_op_iget_boolean: /* 0x55 */
   9002 /* File: mips64/alt_stub.S */
   9003 /*
   9004  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9005  * any interesting requests and then jump to the real instruction
   9006  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9007  */
   9008     .extern MterpCheckBefore
   9009     EXPORT_PC
   9010     REFRESH_IBASE
   9011     dla     ra, artMterpAsmInstructionStart
   9012     dla     t9, MterpCheckBefore
   9013     move    a0, rSELF
   9014     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9015     daddu   ra, ra, (85 * 128)            # Addr of primary handler.
   9016     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9017 
   9018 /* ------------------------------ */
   9019     .balign 128
   9020 .L_ALT_op_iget_byte: /* 0x56 */
   9021 /* File: mips64/alt_stub.S */
   9022 /*
   9023  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9024  * any interesting requests and then jump to the real instruction
   9025  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9026  */
   9027     .extern MterpCheckBefore
   9028     EXPORT_PC
   9029     REFRESH_IBASE
   9030     dla     ra, artMterpAsmInstructionStart
   9031     dla     t9, MterpCheckBefore
   9032     move    a0, rSELF
   9033     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9034     daddu   ra, ra, (86 * 128)            # Addr of primary handler.
   9035     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9036 
   9037 /* ------------------------------ */
   9038     .balign 128
   9039 .L_ALT_op_iget_char: /* 0x57 */
   9040 /* File: mips64/alt_stub.S */
   9041 /*
   9042  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9043  * any interesting requests and then jump to the real instruction
   9044  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9045  */
   9046     .extern MterpCheckBefore
   9047     EXPORT_PC
   9048     REFRESH_IBASE
   9049     dla     ra, artMterpAsmInstructionStart
   9050     dla     t9, MterpCheckBefore
   9051     move    a0, rSELF
   9052     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9053     daddu   ra, ra, (87 * 128)            # Addr of primary handler.
   9054     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9055 
   9056 /* ------------------------------ */
   9057     .balign 128
   9058 .L_ALT_op_iget_short: /* 0x58 */
   9059 /* File: mips64/alt_stub.S */
   9060 /*
   9061  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9062  * any interesting requests and then jump to the real instruction
   9063  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9064  */
   9065     .extern MterpCheckBefore
   9066     EXPORT_PC
   9067     REFRESH_IBASE
   9068     dla     ra, artMterpAsmInstructionStart
   9069     dla     t9, MterpCheckBefore
   9070     move    a0, rSELF
   9071     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9072     daddu   ra, ra, (88 * 128)            # Addr of primary handler.
   9073     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9074 
   9075 /* ------------------------------ */
   9076     .balign 128
   9077 .L_ALT_op_iput: /* 0x59 */
   9078 /* File: mips64/alt_stub.S */
   9079 /*
   9080  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9081  * any interesting requests and then jump to the real instruction
   9082  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9083  */
   9084     .extern MterpCheckBefore
   9085     EXPORT_PC
   9086     REFRESH_IBASE
   9087     dla     ra, artMterpAsmInstructionStart
   9088     dla     t9, MterpCheckBefore
   9089     move    a0, rSELF
   9090     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9091     daddu   ra, ra, (89 * 128)            # Addr of primary handler.
   9092     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9093 
   9094 /* ------------------------------ */
   9095     .balign 128
   9096 .L_ALT_op_iput_wide: /* 0x5a */
   9097 /* File: mips64/alt_stub.S */
   9098 /*
   9099  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9100  * any interesting requests and then jump to the real instruction
   9101  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9102  */
   9103     .extern MterpCheckBefore
   9104     EXPORT_PC
   9105     REFRESH_IBASE
   9106     dla     ra, artMterpAsmInstructionStart
   9107     dla     t9, MterpCheckBefore
   9108     move    a0, rSELF
   9109     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9110     daddu   ra, ra, (90 * 128)            # Addr of primary handler.
   9111     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9112 
   9113 /* ------------------------------ */
   9114     .balign 128
   9115 .L_ALT_op_iput_object: /* 0x5b */
   9116 /* File: mips64/alt_stub.S */
   9117 /*
   9118  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9119  * any interesting requests and then jump to the real instruction
   9120  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9121  */
   9122     .extern MterpCheckBefore
   9123     EXPORT_PC
   9124     REFRESH_IBASE
   9125     dla     ra, artMterpAsmInstructionStart
   9126     dla     t9, MterpCheckBefore
   9127     move    a0, rSELF
   9128     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9129     daddu   ra, ra, (91 * 128)            # Addr of primary handler.
   9130     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9131 
   9132 /* ------------------------------ */
   9133     .balign 128
   9134 .L_ALT_op_iput_boolean: /* 0x5c */
   9135 /* File: mips64/alt_stub.S */
   9136 /*
   9137  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9138  * any interesting requests and then jump to the real instruction
   9139  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9140  */
   9141     .extern MterpCheckBefore
   9142     EXPORT_PC
   9143     REFRESH_IBASE
   9144     dla     ra, artMterpAsmInstructionStart
   9145     dla     t9, MterpCheckBefore
   9146     move    a0, rSELF
   9147     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9148     daddu   ra, ra, (92 * 128)            # Addr of primary handler.
   9149     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9150 
   9151 /* ------------------------------ */
   9152     .balign 128
   9153 .L_ALT_op_iput_byte: /* 0x5d */
   9154 /* File: mips64/alt_stub.S */
   9155 /*
   9156  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9157  * any interesting requests and then jump to the real instruction
   9158  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9159  */
   9160     .extern MterpCheckBefore
   9161     EXPORT_PC
   9162     REFRESH_IBASE
   9163     dla     ra, artMterpAsmInstructionStart
   9164     dla     t9, MterpCheckBefore
   9165     move    a0, rSELF
   9166     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9167     daddu   ra, ra, (93 * 128)            # Addr of primary handler.
   9168     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9169 
   9170 /* ------------------------------ */
   9171     .balign 128
   9172 .L_ALT_op_iput_char: /* 0x5e */
   9173 /* File: mips64/alt_stub.S */
   9174 /*
   9175  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9176  * any interesting requests and then jump to the real instruction
   9177  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9178  */
   9179     .extern MterpCheckBefore
   9180     EXPORT_PC
   9181     REFRESH_IBASE
   9182     dla     ra, artMterpAsmInstructionStart
   9183     dla     t9, MterpCheckBefore
   9184     move    a0, rSELF
   9185     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9186     daddu   ra, ra, (94 * 128)            # Addr of primary handler.
   9187     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9188 
   9189 /* ------------------------------ */
   9190     .balign 128
   9191 .L_ALT_op_iput_short: /* 0x5f */
   9192 /* File: mips64/alt_stub.S */
   9193 /*
   9194  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9195  * any interesting requests and then jump to the real instruction
   9196  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9197  */
   9198     .extern MterpCheckBefore
   9199     EXPORT_PC
   9200     REFRESH_IBASE
   9201     dla     ra, artMterpAsmInstructionStart
   9202     dla     t9, MterpCheckBefore
   9203     move    a0, rSELF
   9204     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9205     daddu   ra, ra, (95 * 128)            # Addr of primary handler.
   9206     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9207 
   9208 /* ------------------------------ */
   9209     .balign 128
   9210 .L_ALT_op_sget: /* 0x60 */
   9211 /* File: mips64/alt_stub.S */
   9212 /*
   9213  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9214  * any interesting requests and then jump to the real instruction
   9215  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9216  */
   9217     .extern MterpCheckBefore
   9218     EXPORT_PC
   9219     REFRESH_IBASE
   9220     dla     ra, artMterpAsmInstructionStart
   9221     dla     t9, MterpCheckBefore
   9222     move    a0, rSELF
   9223     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9224     daddu   ra, ra, (96 * 128)            # Addr of primary handler.
   9225     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9226 
   9227 /* ------------------------------ */
   9228     .balign 128
   9229 .L_ALT_op_sget_wide: /* 0x61 */
   9230 /* File: mips64/alt_stub.S */
   9231 /*
   9232  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9233  * any interesting requests and then jump to the real instruction
   9234  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9235  */
   9236     .extern MterpCheckBefore
   9237     EXPORT_PC
   9238     REFRESH_IBASE
   9239     dla     ra, artMterpAsmInstructionStart
   9240     dla     t9, MterpCheckBefore
   9241     move    a0, rSELF
   9242     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9243     daddu   ra, ra, (97 * 128)            # Addr of primary handler.
   9244     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9245 
   9246 /* ------------------------------ */
   9247     .balign 128
   9248 .L_ALT_op_sget_object: /* 0x62 */
   9249 /* File: mips64/alt_stub.S */
   9250 /*
   9251  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9252  * any interesting requests and then jump to the real instruction
   9253  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9254  */
   9255     .extern MterpCheckBefore
   9256     EXPORT_PC
   9257     REFRESH_IBASE
   9258     dla     ra, artMterpAsmInstructionStart
   9259     dla     t9, MterpCheckBefore
   9260     move    a0, rSELF
   9261     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9262     daddu   ra, ra, (98 * 128)            # Addr of primary handler.
   9263     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9264 
   9265 /* ------------------------------ */
   9266     .balign 128
   9267 .L_ALT_op_sget_boolean: /* 0x63 */
   9268 /* File: mips64/alt_stub.S */
   9269 /*
   9270  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9271  * any interesting requests and then jump to the real instruction
   9272  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9273  */
   9274     .extern MterpCheckBefore
   9275     EXPORT_PC
   9276     REFRESH_IBASE
   9277     dla     ra, artMterpAsmInstructionStart
   9278     dla     t9, MterpCheckBefore
   9279     move    a0, rSELF
   9280     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9281     daddu   ra, ra, (99 * 128)            # Addr of primary handler.
   9282     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9283 
   9284 /* ------------------------------ */
   9285     .balign 128
   9286 .L_ALT_op_sget_byte: /* 0x64 */
   9287 /* File: mips64/alt_stub.S */
   9288 /*
   9289  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9290  * any interesting requests and then jump to the real instruction
   9291  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9292  */
   9293     .extern MterpCheckBefore
   9294     EXPORT_PC
   9295     REFRESH_IBASE
   9296     dla     ra, artMterpAsmInstructionStart
   9297     dla     t9, MterpCheckBefore
   9298     move    a0, rSELF
   9299     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9300     daddu   ra, ra, (100 * 128)            # Addr of primary handler.
   9301     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9302 
   9303 /* ------------------------------ */
   9304     .balign 128
   9305 .L_ALT_op_sget_char: /* 0x65 */
   9306 /* File: mips64/alt_stub.S */
   9307 /*
   9308  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9309  * any interesting requests and then jump to the real instruction
   9310  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9311  */
   9312     .extern MterpCheckBefore
   9313     EXPORT_PC
   9314     REFRESH_IBASE
   9315     dla     ra, artMterpAsmInstructionStart
   9316     dla     t9, MterpCheckBefore
   9317     move    a0, rSELF
   9318     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9319     daddu   ra, ra, (101 * 128)            # Addr of primary handler.
   9320     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9321 
   9322 /* ------------------------------ */
   9323     .balign 128
   9324 .L_ALT_op_sget_short: /* 0x66 */
   9325 /* File: mips64/alt_stub.S */
   9326 /*
   9327  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9328  * any interesting requests and then jump to the real instruction
   9329  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9330  */
   9331     .extern MterpCheckBefore
   9332     EXPORT_PC
   9333     REFRESH_IBASE
   9334     dla     ra, artMterpAsmInstructionStart
   9335     dla     t9, MterpCheckBefore
   9336     move    a0, rSELF
   9337     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9338     daddu   ra, ra, (102 * 128)            # Addr of primary handler.
   9339     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9340 
   9341 /* ------------------------------ */
   9342     .balign 128
   9343 .L_ALT_op_sput: /* 0x67 */
   9344 /* File: mips64/alt_stub.S */
   9345 /*
   9346  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9347  * any interesting requests and then jump to the real instruction
   9348  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9349  */
   9350     .extern MterpCheckBefore
   9351     EXPORT_PC
   9352     REFRESH_IBASE
   9353     dla     ra, artMterpAsmInstructionStart
   9354     dla     t9, MterpCheckBefore
   9355     move    a0, rSELF
   9356     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9357     daddu   ra, ra, (103 * 128)            # Addr of primary handler.
   9358     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9359 
   9360 /* ------------------------------ */
   9361     .balign 128
   9362 .L_ALT_op_sput_wide: /* 0x68 */
   9363 /* File: mips64/alt_stub.S */
   9364 /*
   9365  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9366  * any interesting requests and then jump to the real instruction
   9367  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9368  */
   9369     .extern MterpCheckBefore
   9370     EXPORT_PC
   9371     REFRESH_IBASE
   9372     dla     ra, artMterpAsmInstructionStart
   9373     dla     t9, MterpCheckBefore
   9374     move    a0, rSELF
   9375     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9376     daddu   ra, ra, (104 * 128)            # Addr of primary handler.
   9377     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9378 
   9379 /* ------------------------------ */
   9380     .balign 128
   9381 .L_ALT_op_sput_object: /* 0x69 */
   9382 /* File: mips64/alt_stub.S */
   9383 /*
   9384  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9385  * any interesting requests and then jump to the real instruction
   9386  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9387  */
   9388     .extern MterpCheckBefore
   9389     EXPORT_PC
   9390     REFRESH_IBASE
   9391     dla     ra, artMterpAsmInstructionStart
   9392     dla     t9, MterpCheckBefore
   9393     move    a0, rSELF
   9394     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9395     daddu   ra, ra, (105 * 128)            # Addr of primary handler.
   9396     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9397 
   9398 /* ------------------------------ */
   9399     .balign 128
   9400 .L_ALT_op_sput_boolean: /* 0x6a */
   9401 /* File: mips64/alt_stub.S */
   9402 /*
   9403  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9404  * any interesting requests and then jump to the real instruction
   9405  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9406  */
   9407     .extern MterpCheckBefore
   9408     EXPORT_PC
   9409     REFRESH_IBASE
   9410     dla     ra, artMterpAsmInstructionStart
   9411     dla     t9, MterpCheckBefore
   9412     move    a0, rSELF
   9413     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9414     daddu   ra, ra, (106 * 128)            # Addr of primary handler.
   9415     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9416 
   9417 /* ------------------------------ */
   9418     .balign 128
   9419 .L_ALT_op_sput_byte: /* 0x6b */
   9420 /* File: mips64/alt_stub.S */
   9421 /*
   9422  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9423  * any interesting requests and then jump to the real instruction
   9424  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9425  */
   9426     .extern MterpCheckBefore
   9427     EXPORT_PC
   9428     REFRESH_IBASE
   9429     dla     ra, artMterpAsmInstructionStart
   9430     dla     t9, MterpCheckBefore
   9431     move    a0, rSELF
   9432     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9433     daddu   ra, ra, (107 * 128)            # Addr of primary handler.
   9434     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9435 
   9436 /* ------------------------------ */
   9437     .balign 128
   9438 .L_ALT_op_sput_char: /* 0x6c */
   9439 /* File: mips64/alt_stub.S */
   9440 /*
   9441  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9442  * any interesting requests and then jump to the real instruction
   9443  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9444  */
   9445     .extern MterpCheckBefore
   9446     EXPORT_PC
   9447     REFRESH_IBASE
   9448     dla     ra, artMterpAsmInstructionStart
   9449     dla     t9, MterpCheckBefore
   9450     move    a0, rSELF
   9451     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9452     daddu   ra, ra, (108 * 128)            # Addr of primary handler.
   9453     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9454 
   9455 /* ------------------------------ */
   9456     .balign 128
   9457 .L_ALT_op_sput_short: /* 0x6d */
   9458 /* File: mips64/alt_stub.S */
   9459 /*
   9460  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9461  * any interesting requests and then jump to the real instruction
   9462  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9463  */
   9464     .extern MterpCheckBefore
   9465     EXPORT_PC
   9466     REFRESH_IBASE
   9467     dla     ra, artMterpAsmInstructionStart
   9468     dla     t9, MterpCheckBefore
   9469     move    a0, rSELF
   9470     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9471     daddu   ra, ra, (109 * 128)            # Addr of primary handler.
   9472     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9473 
   9474 /* ------------------------------ */
   9475     .balign 128
   9476 .L_ALT_op_invoke_virtual: /* 0x6e */
   9477 /* File: mips64/alt_stub.S */
   9478 /*
   9479  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9480  * any interesting requests and then jump to the real instruction
   9481  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9482  */
   9483     .extern MterpCheckBefore
   9484     EXPORT_PC
   9485     REFRESH_IBASE
   9486     dla     ra, artMterpAsmInstructionStart
   9487     dla     t9, MterpCheckBefore
   9488     move    a0, rSELF
   9489     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9490     daddu   ra, ra, (110 * 128)            # Addr of primary handler.
   9491     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9492 
   9493 /* ------------------------------ */
   9494     .balign 128
   9495 .L_ALT_op_invoke_super: /* 0x6f */
   9496 /* File: mips64/alt_stub.S */
   9497 /*
   9498  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9499  * any interesting requests and then jump to the real instruction
   9500  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9501  */
   9502     .extern MterpCheckBefore
   9503     EXPORT_PC
   9504     REFRESH_IBASE
   9505     dla     ra, artMterpAsmInstructionStart
   9506     dla     t9, MterpCheckBefore
   9507     move    a0, rSELF
   9508     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9509     daddu   ra, ra, (111 * 128)            # Addr of primary handler.
   9510     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9511 
   9512 /* ------------------------------ */
   9513     .balign 128
   9514 .L_ALT_op_invoke_direct: /* 0x70 */
   9515 /* File: mips64/alt_stub.S */
   9516 /*
   9517  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9518  * any interesting requests and then jump to the real instruction
   9519  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9520  */
   9521     .extern MterpCheckBefore
   9522     EXPORT_PC
   9523     REFRESH_IBASE
   9524     dla     ra, artMterpAsmInstructionStart
   9525     dla     t9, MterpCheckBefore
   9526     move    a0, rSELF
   9527     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9528     daddu   ra, ra, (112 * 128)            # Addr of primary handler.
   9529     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9530 
   9531 /* ------------------------------ */
   9532     .balign 128
   9533 .L_ALT_op_invoke_static: /* 0x71 */
   9534 /* File: mips64/alt_stub.S */
   9535 /*
   9536  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9537  * any interesting requests and then jump to the real instruction
   9538  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9539  */
   9540     .extern MterpCheckBefore
   9541     EXPORT_PC
   9542     REFRESH_IBASE
   9543     dla     ra, artMterpAsmInstructionStart
   9544     dla     t9, MterpCheckBefore
   9545     move    a0, rSELF
   9546     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9547     daddu   ra, ra, (113 * 128)            # Addr of primary handler.
   9548     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9549 
   9550 /* ------------------------------ */
   9551     .balign 128
   9552 .L_ALT_op_invoke_interface: /* 0x72 */
   9553 /* File: mips64/alt_stub.S */
   9554 /*
   9555  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9556  * any interesting requests and then jump to the real instruction
   9557  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9558  */
   9559     .extern MterpCheckBefore
   9560     EXPORT_PC
   9561     REFRESH_IBASE
   9562     dla     ra, artMterpAsmInstructionStart
   9563     dla     t9, MterpCheckBefore
   9564     move    a0, rSELF
   9565     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9566     daddu   ra, ra, (114 * 128)            # Addr of primary handler.
   9567     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9568 
   9569 /* ------------------------------ */
   9570     .balign 128
   9571 .L_ALT_op_return_void_no_barrier: /* 0x73 */
   9572 /* File: mips64/alt_stub.S */
   9573 /*
   9574  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9575  * any interesting requests and then jump to the real instruction
   9576  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9577  */
   9578     .extern MterpCheckBefore
   9579     EXPORT_PC
   9580     REFRESH_IBASE
   9581     dla     ra, artMterpAsmInstructionStart
   9582     dla     t9, MterpCheckBefore
   9583     move    a0, rSELF
   9584     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9585     daddu   ra, ra, (115 * 128)            # Addr of primary handler.
   9586     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9587 
   9588 /* ------------------------------ */
   9589     .balign 128
   9590 .L_ALT_op_invoke_virtual_range: /* 0x74 */
   9591 /* File: mips64/alt_stub.S */
   9592 /*
   9593  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9594  * any interesting requests and then jump to the real instruction
   9595  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9596  */
   9597     .extern MterpCheckBefore
   9598     EXPORT_PC
   9599     REFRESH_IBASE
   9600     dla     ra, artMterpAsmInstructionStart
   9601     dla     t9, MterpCheckBefore
   9602     move    a0, rSELF
   9603     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9604     daddu   ra, ra, (116 * 128)            # Addr of primary handler.
   9605     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9606 
   9607 /* ------------------------------ */
   9608     .balign 128
   9609 .L_ALT_op_invoke_super_range: /* 0x75 */
   9610 /* File: mips64/alt_stub.S */
   9611 /*
   9612  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9613  * any interesting requests and then jump to the real instruction
   9614  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9615  */
   9616     .extern MterpCheckBefore
   9617     EXPORT_PC
   9618     REFRESH_IBASE
   9619     dla     ra, artMterpAsmInstructionStart
   9620     dla     t9, MterpCheckBefore
   9621     move    a0, rSELF
   9622     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9623     daddu   ra, ra, (117 * 128)            # Addr of primary handler.
   9624     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9625 
   9626 /* ------------------------------ */
   9627     .balign 128
   9628 .L_ALT_op_invoke_direct_range: /* 0x76 */
   9629 /* File: mips64/alt_stub.S */
   9630 /*
   9631  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9632  * any interesting requests and then jump to the real instruction
   9633  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9634  */
   9635     .extern MterpCheckBefore
   9636     EXPORT_PC
   9637     REFRESH_IBASE
   9638     dla     ra, artMterpAsmInstructionStart
   9639     dla     t9, MterpCheckBefore
   9640     move    a0, rSELF
   9641     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9642     daddu   ra, ra, (118 * 128)            # Addr of primary handler.
   9643     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9644 
   9645 /* ------------------------------ */
   9646     .balign 128
   9647 .L_ALT_op_invoke_static_range: /* 0x77 */
   9648 /* File: mips64/alt_stub.S */
   9649 /*
   9650  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9651  * any interesting requests and then jump to the real instruction
   9652  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9653  */
   9654     .extern MterpCheckBefore
   9655     EXPORT_PC
   9656     REFRESH_IBASE
   9657     dla     ra, artMterpAsmInstructionStart
   9658     dla     t9, MterpCheckBefore
   9659     move    a0, rSELF
   9660     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9661     daddu   ra, ra, (119 * 128)            # Addr of primary handler.
   9662     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9663 
   9664 /* ------------------------------ */
   9665     .balign 128
   9666 .L_ALT_op_invoke_interface_range: /* 0x78 */
   9667 /* File: mips64/alt_stub.S */
   9668 /*
   9669  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9670  * any interesting requests and then jump to the real instruction
   9671  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9672  */
   9673     .extern MterpCheckBefore
   9674     EXPORT_PC
   9675     REFRESH_IBASE
   9676     dla     ra, artMterpAsmInstructionStart
   9677     dla     t9, MterpCheckBefore
   9678     move    a0, rSELF
   9679     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9680     daddu   ra, ra, (120 * 128)            # Addr of primary handler.
   9681     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9682 
   9683 /* ------------------------------ */
   9684     .balign 128
   9685 .L_ALT_op_unused_79: /* 0x79 */
   9686 /* File: mips64/alt_stub.S */
   9687 /*
   9688  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9689  * any interesting requests and then jump to the real instruction
   9690  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9691  */
   9692     .extern MterpCheckBefore
   9693     EXPORT_PC
   9694     REFRESH_IBASE
   9695     dla     ra, artMterpAsmInstructionStart
   9696     dla     t9, MterpCheckBefore
   9697     move    a0, rSELF
   9698     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9699     daddu   ra, ra, (121 * 128)            # Addr of primary handler.
   9700     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9701 
   9702 /* ------------------------------ */
   9703     .balign 128
   9704 .L_ALT_op_unused_7a: /* 0x7a */
   9705 /* File: mips64/alt_stub.S */
   9706 /*
   9707  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9708  * any interesting requests and then jump to the real instruction
   9709  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9710  */
   9711     .extern MterpCheckBefore
   9712     EXPORT_PC
   9713     REFRESH_IBASE
   9714     dla     ra, artMterpAsmInstructionStart
   9715     dla     t9, MterpCheckBefore
   9716     move    a0, rSELF
   9717     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9718     daddu   ra, ra, (122 * 128)            # Addr of primary handler.
   9719     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9720 
   9721 /* ------------------------------ */
   9722     .balign 128
   9723 .L_ALT_op_neg_int: /* 0x7b */
   9724 /* File: mips64/alt_stub.S */
   9725 /*
   9726  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9727  * any interesting requests and then jump to the real instruction
   9728  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9729  */
   9730     .extern MterpCheckBefore
   9731     EXPORT_PC
   9732     REFRESH_IBASE
   9733     dla     ra, artMterpAsmInstructionStart
   9734     dla     t9, MterpCheckBefore
   9735     move    a0, rSELF
   9736     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9737     daddu   ra, ra, (123 * 128)            # Addr of primary handler.
   9738     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9739 
   9740 /* ------------------------------ */
   9741     .balign 128
   9742 .L_ALT_op_not_int: /* 0x7c */
   9743 /* File: mips64/alt_stub.S */
   9744 /*
   9745  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9746  * any interesting requests and then jump to the real instruction
   9747  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9748  */
   9749     .extern MterpCheckBefore
   9750     EXPORT_PC
   9751     REFRESH_IBASE
   9752     dla     ra, artMterpAsmInstructionStart
   9753     dla     t9, MterpCheckBefore
   9754     move    a0, rSELF
   9755     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9756     daddu   ra, ra, (124 * 128)            # Addr of primary handler.
   9757     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9758 
   9759 /* ------------------------------ */
   9760     .balign 128
   9761 .L_ALT_op_neg_long: /* 0x7d */
   9762 /* File: mips64/alt_stub.S */
   9763 /*
   9764  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9765  * any interesting requests and then jump to the real instruction
   9766  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9767  */
   9768     .extern MterpCheckBefore
   9769     EXPORT_PC
   9770     REFRESH_IBASE
   9771     dla     ra, artMterpAsmInstructionStart
   9772     dla     t9, MterpCheckBefore
   9773     move    a0, rSELF
   9774     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9775     daddu   ra, ra, (125 * 128)            # Addr of primary handler.
   9776     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9777 
   9778 /* ------------------------------ */
   9779     .balign 128
   9780 .L_ALT_op_not_long: /* 0x7e */
   9781 /* File: mips64/alt_stub.S */
   9782 /*
   9783  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9784  * any interesting requests and then jump to the real instruction
   9785  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9786  */
   9787     .extern MterpCheckBefore
   9788     EXPORT_PC
   9789     REFRESH_IBASE
   9790     dla     ra, artMterpAsmInstructionStart
   9791     dla     t9, MterpCheckBefore
   9792     move    a0, rSELF
   9793     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9794     daddu   ra, ra, (126 * 128)            # Addr of primary handler.
   9795     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9796 
   9797 /* ------------------------------ */
   9798     .balign 128
   9799 .L_ALT_op_neg_float: /* 0x7f */
   9800 /* File: mips64/alt_stub.S */
   9801 /*
   9802  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9803  * any interesting requests and then jump to the real instruction
   9804  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9805  */
   9806     .extern MterpCheckBefore
   9807     EXPORT_PC
   9808     REFRESH_IBASE
   9809     dla     ra, artMterpAsmInstructionStart
   9810     dla     t9, MterpCheckBefore
   9811     move    a0, rSELF
   9812     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9813     daddu   ra, ra, (127 * 128)            # Addr of primary handler.
   9814     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9815 
   9816 /* ------------------------------ */
   9817     .balign 128
   9818 .L_ALT_op_neg_double: /* 0x80 */
   9819 /* File: mips64/alt_stub.S */
   9820 /*
   9821  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9822  * any interesting requests and then jump to the real instruction
   9823  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9824  */
   9825     .extern MterpCheckBefore
   9826     EXPORT_PC
   9827     REFRESH_IBASE
   9828     dla     ra, artMterpAsmInstructionStart
   9829     dla     t9, MterpCheckBefore
   9830     move    a0, rSELF
   9831     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9832     daddu   ra, ra, (128 * 128)            # Addr of primary handler.
   9833     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9834 
   9835 /* ------------------------------ */
   9836     .balign 128
   9837 .L_ALT_op_int_to_long: /* 0x81 */
   9838 /* File: mips64/alt_stub.S */
   9839 /*
   9840  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9841  * any interesting requests and then jump to the real instruction
   9842  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9843  */
   9844     .extern MterpCheckBefore
   9845     EXPORT_PC
   9846     REFRESH_IBASE
   9847     dla     ra, artMterpAsmInstructionStart
   9848     dla     t9, MterpCheckBefore
   9849     move    a0, rSELF
   9850     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9851     daddu   ra, ra, (129 * 128)            # Addr of primary handler.
   9852     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9853 
   9854 /* ------------------------------ */
   9855     .balign 128
   9856 .L_ALT_op_int_to_float: /* 0x82 */
   9857 /* File: mips64/alt_stub.S */
   9858 /*
   9859  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9860  * any interesting requests and then jump to the real instruction
   9861  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9862  */
   9863     .extern MterpCheckBefore
   9864     EXPORT_PC
   9865     REFRESH_IBASE
   9866     dla     ra, artMterpAsmInstructionStart
   9867     dla     t9, MterpCheckBefore
   9868     move    a0, rSELF
   9869     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9870     daddu   ra, ra, (130 * 128)            # Addr of primary handler.
   9871     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9872 
   9873 /* ------------------------------ */
   9874     .balign 128
   9875 .L_ALT_op_int_to_double: /* 0x83 */
   9876 /* File: mips64/alt_stub.S */
   9877 /*
   9878  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9879  * any interesting requests and then jump to the real instruction
   9880  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9881  */
   9882     .extern MterpCheckBefore
   9883     EXPORT_PC
   9884     REFRESH_IBASE
   9885     dla     ra, artMterpAsmInstructionStart
   9886     dla     t9, MterpCheckBefore
   9887     move    a0, rSELF
   9888     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9889     daddu   ra, ra, (131 * 128)            # Addr of primary handler.
   9890     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9891 
   9892 /* ------------------------------ */
   9893     .balign 128
   9894 .L_ALT_op_long_to_int: /* 0x84 */
   9895 /* File: mips64/alt_stub.S */
   9896 /*
   9897  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9898  * any interesting requests and then jump to the real instruction
   9899  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9900  */
   9901     .extern MterpCheckBefore
   9902     EXPORT_PC
   9903     REFRESH_IBASE
   9904     dla     ra, artMterpAsmInstructionStart
   9905     dla     t9, MterpCheckBefore
   9906     move    a0, rSELF
   9907     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9908     daddu   ra, ra, (132 * 128)            # Addr of primary handler.
   9909     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9910 
   9911 /* ------------------------------ */
   9912     .balign 128
   9913 .L_ALT_op_long_to_float: /* 0x85 */
   9914 /* File: mips64/alt_stub.S */
   9915 /*
   9916  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9917  * any interesting requests and then jump to the real instruction
   9918  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9919  */
   9920     .extern MterpCheckBefore
   9921     EXPORT_PC
   9922     REFRESH_IBASE
   9923     dla     ra, artMterpAsmInstructionStart
   9924     dla     t9, MterpCheckBefore
   9925     move    a0, rSELF
   9926     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9927     daddu   ra, ra, (133 * 128)            # Addr of primary handler.
   9928     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9929 
   9930 /* ------------------------------ */
   9931     .balign 128
   9932 .L_ALT_op_long_to_double: /* 0x86 */
   9933 /* File: mips64/alt_stub.S */
   9934 /*
   9935  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9936  * any interesting requests and then jump to the real instruction
   9937  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9938  */
   9939     .extern MterpCheckBefore
   9940     EXPORT_PC
   9941     REFRESH_IBASE
   9942     dla     ra, artMterpAsmInstructionStart
   9943     dla     t9, MterpCheckBefore
   9944     move    a0, rSELF
   9945     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9946     daddu   ra, ra, (134 * 128)            # Addr of primary handler.
   9947     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9948 
   9949 /* ------------------------------ */
   9950     .balign 128
   9951 .L_ALT_op_float_to_int: /* 0x87 */
   9952 /* File: mips64/alt_stub.S */
   9953 /*
   9954  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9955  * any interesting requests and then jump to the real instruction
   9956  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9957  */
   9958     .extern MterpCheckBefore
   9959     EXPORT_PC
   9960     REFRESH_IBASE
   9961     dla     ra, artMterpAsmInstructionStart
   9962     dla     t9, MterpCheckBefore
   9963     move    a0, rSELF
   9964     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9965     daddu   ra, ra, (135 * 128)            # Addr of primary handler.
   9966     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9967 
   9968 /* ------------------------------ */
   9969     .balign 128
   9970 .L_ALT_op_float_to_long: /* 0x88 */
   9971 /* File: mips64/alt_stub.S */
   9972 /*
   9973  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9974  * any interesting requests and then jump to the real instruction
   9975  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9976  */
   9977     .extern MterpCheckBefore
   9978     EXPORT_PC
   9979     REFRESH_IBASE
   9980     dla     ra, artMterpAsmInstructionStart
   9981     dla     t9, MterpCheckBefore
   9982     move    a0, rSELF
   9983     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   9984     daddu   ra, ra, (136 * 128)            # Addr of primary handler.
   9985     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   9986 
   9987 /* ------------------------------ */
   9988     .balign 128
   9989 .L_ALT_op_float_to_double: /* 0x89 */
   9990 /* File: mips64/alt_stub.S */
   9991 /*
   9992  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   9993  * any interesting requests and then jump to the real instruction
   9994  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   9995  */
   9996     .extern MterpCheckBefore
   9997     EXPORT_PC
   9998     REFRESH_IBASE
   9999     dla     ra, artMterpAsmInstructionStart
   10000     dla     t9, MterpCheckBefore
   10001     move    a0, rSELF
   10002     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10003     daddu   ra, ra, (137 * 128)            # Addr of primary handler.
   10004     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10005 
   10006 /* ------------------------------ */
   10007     .balign 128
   10008 .L_ALT_op_double_to_int: /* 0x8a */
   10009 /* File: mips64/alt_stub.S */
   10010 /*
   10011  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10012  * any interesting requests and then jump to the real instruction
   10013  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10014  */
   10015     .extern MterpCheckBefore
   10016     EXPORT_PC
   10017     REFRESH_IBASE
   10018     dla     ra, artMterpAsmInstructionStart
   10019     dla     t9, MterpCheckBefore
   10020     move    a0, rSELF
   10021     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10022     daddu   ra, ra, (138 * 128)            # Addr of primary handler.
   10023     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10024 
   10025 /* ------------------------------ */
   10026     .balign 128
   10027 .L_ALT_op_double_to_long: /* 0x8b */
   10028 /* File: mips64/alt_stub.S */
   10029 /*
   10030  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10031  * any interesting requests and then jump to the real instruction
   10032  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10033  */
   10034     .extern MterpCheckBefore
   10035     EXPORT_PC
   10036     REFRESH_IBASE
   10037     dla     ra, artMterpAsmInstructionStart
   10038     dla     t9, MterpCheckBefore
   10039     move    a0, rSELF
   10040     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10041     daddu   ra, ra, (139 * 128)            # Addr of primary handler.
   10042     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10043 
   10044 /* ------------------------------ */
   10045     .balign 128
   10046 .L_ALT_op_double_to_float: /* 0x8c */
   10047 /* File: mips64/alt_stub.S */
   10048 /*
   10049  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10050  * any interesting requests and then jump to the real instruction
   10051  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10052  */
   10053     .extern MterpCheckBefore
   10054     EXPORT_PC
   10055     REFRESH_IBASE
   10056     dla     ra, artMterpAsmInstructionStart
   10057     dla     t9, MterpCheckBefore
   10058     move    a0, rSELF
   10059     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10060     daddu   ra, ra, (140 * 128)            # Addr of primary handler.
   10061     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10062 
   10063 /* ------------------------------ */
   10064     .balign 128
   10065 .L_ALT_op_int_to_byte: /* 0x8d */
   10066 /* File: mips64/alt_stub.S */
   10067 /*
   10068  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10069  * any interesting requests and then jump to the real instruction
   10070  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10071  */
   10072     .extern MterpCheckBefore
   10073     EXPORT_PC
   10074     REFRESH_IBASE
   10075     dla     ra, artMterpAsmInstructionStart
   10076     dla     t9, MterpCheckBefore
   10077     move    a0, rSELF
   10078     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10079     daddu   ra, ra, (141 * 128)            # Addr of primary handler.
   10080     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10081 
   10082 /* ------------------------------ */
   10083     .balign 128
   10084 .L_ALT_op_int_to_char: /* 0x8e */
   10085 /* File: mips64/alt_stub.S */
   10086 /*
   10087  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10088  * any interesting requests and then jump to the real instruction
   10089  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10090  */
   10091     .extern MterpCheckBefore
   10092     EXPORT_PC
   10093     REFRESH_IBASE
   10094     dla     ra, artMterpAsmInstructionStart
   10095     dla     t9, MterpCheckBefore
   10096     move    a0, rSELF
   10097     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10098     daddu   ra, ra, (142 * 128)            # Addr of primary handler.
   10099     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10100 
   10101 /* ------------------------------ */
   10102     .balign 128
   10103 .L_ALT_op_int_to_short: /* 0x8f */
   10104 /* File: mips64/alt_stub.S */
   10105 /*
   10106  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10107  * any interesting requests and then jump to the real instruction
   10108  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10109  */
   10110     .extern MterpCheckBefore
   10111     EXPORT_PC
   10112     REFRESH_IBASE
   10113     dla     ra, artMterpAsmInstructionStart
   10114     dla     t9, MterpCheckBefore
   10115     move    a0, rSELF
   10116     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10117     daddu   ra, ra, (143 * 128)            # Addr of primary handler.
   10118     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10119 
   10120 /* ------------------------------ */
   10121     .balign 128
   10122 .L_ALT_op_add_int: /* 0x90 */
   10123 /* File: mips64/alt_stub.S */
   10124 /*
   10125  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10126  * any interesting requests and then jump to the real instruction
   10127  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10128  */
   10129     .extern MterpCheckBefore
   10130     EXPORT_PC
   10131     REFRESH_IBASE
   10132     dla     ra, artMterpAsmInstructionStart
   10133     dla     t9, MterpCheckBefore
   10134     move    a0, rSELF
   10135     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10136     daddu   ra, ra, (144 * 128)            # Addr of primary handler.
   10137     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10138 
   10139 /* ------------------------------ */
   10140     .balign 128
   10141 .L_ALT_op_sub_int: /* 0x91 */
   10142 /* File: mips64/alt_stub.S */
   10143 /*
   10144  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10145  * any interesting requests and then jump to the real instruction
   10146  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10147  */
   10148     .extern MterpCheckBefore
   10149     EXPORT_PC
   10150     REFRESH_IBASE
   10151     dla     ra, artMterpAsmInstructionStart
   10152     dla     t9, MterpCheckBefore
   10153     move    a0, rSELF
   10154     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10155     daddu   ra, ra, (145 * 128)            # Addr of primary handler.
   10156     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10157 
   10158 /* ------------------------------ */
   10159     .balign 128
   10160 .L_ALT_op_mul_int: /* 0x92 */
   10161 /* File: mips64/alt_stub.S */
   10162 /*
   10163  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10164  * any interesting requests and then jump to the real instruction
   10165  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10166  */
   10167     .extern MterpCheckBefore
   10168     EXPORT_PC
   10169     REFRESH_IBASE
   10170     dla     ra, artMterpAsmInstructionStart
   10171     dla     t9, MterpCheckBefore
   10172     move    a0, rSELF
   10173     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10174     daddu   ra, ra, (146 * 128)            # Addr of primary handler.
   10175     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10176 
   10177 /* ------------------------------ */
   10178     .balign 128
   10179 .L_ALT_op_div_int: /* 0x93 */
   10180 /* File: mips64/alt_stub.S */
   10181 /*
   10182  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10183  * any interesting requests and then jump to the real instruction
   10184  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10185  */
   10186     .extern MterpCheckBefore
   10187     EXPORT_PC
   10188     REFRESH_IBASE
   10189     dla     ra, artMterpAsmInstructionStart
   10190     dla     t9, MterpCheckBefore
   10191     move    a0, rSELF
   10192     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10193     daddu   ra, ra, (147 * 128)            # Addr of primary handler.
   10194     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10195 
   10196 /* ------------------------------ */
   10197     .balign 128
   10198 .L_ALT_op_rem_int: /* 0x94 */
   10199 /* File: mips64/alt_stub.S */
   10200 /*
   10201  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10202  * any interesting requests and then jump to the real instruction
   10203  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10204  */
   10205     .extern MterpCheckBefore
   10206     EXPORT_PC
   10207     REFRESH_IBASE
   10208     dla     ra, artMterpAsmInstructionStart
   10209     dla     t9, MterpCheckBefore
   10210     move    a0, rSELF
   10211     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10212     daddu   ra, ra, (148 * 128)            # Addr of primary handler.
   10213     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10214 
   10215 /* ------------------------------ */
   10216     .balign 128
   10217 .L_ALT_op_and_int: /* 0x95 */
   10218 /* File: mips64/alt_stub.S */
   10219 /*
   10220  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10221  * any interesting requests and then jump to the real instruction
   10222  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10223  */
   10224     .extern MterpCheckBefore
   10225     EXPORT_PC
   10226     REFRESH_IBASE
   10227     dla     ra, artMterpAsmInstructionStart
   10228     dla     t9, MterpCheckBefore
   10229     move    a0, rSELF
   10230     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10231     daddu   ra, ra, (149 * 128)            # Addr of primary handler.
   10232     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10233 
   10234 /* ------------------------------ */
   10235     .balign 128
   10236 .L_ALT_op_or_int: /* 0x96 */
   10237 /* File: mips64/alt_stub.S */
   10238 /*
   10239  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10240  * any interesting requests and then jump to the real instruction
   10241  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10242  */
   10243     .extern MterpCheckBefore
   10244     EXPORT_PC
   10245     REFRESH_IBASE
   10246     dla     ra, artMterpAsmInstructionStart
   10247     dla     t9, MterpCheckBefore
   10248     move    a0, rSELF
   10249     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10250     daddu   ra, ra, (150 * 128)            # Addr of primary handler.
   10251     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10252 
   10253 /* ------------------------------ */
   10254     .balign 128
   10255 .L_ALT_op_xor_int: /* 0x97 */
   10256 /* File: mips64/alt_stub.S */
   10257 /*
   10258  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10259  * any interesting requests and then jump to the real instruction
   10260  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10261  */
   10262     .extern MterpCheckBefore
   10263     EXPORT_PC
   10264     REFRESH_IBASE
   10265     dla     ra, artMterpAsmInstructionStart
   10266     dla     t9, MterpCheckBefore
   10267     move    a0, rSELF
   10268     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10269     daddu   ra, ra, (151 * 128)            # Addr of primary handler.
   10270     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10271 
   10272 /* ------------------------------ */
   10273     .balign 128
   10274 .L_ALT_op_shl_int: /* 0x98 */
   10275 /* File: mips64/alt_stub.S */
   10276 /*
   10277  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10278  * any interesting requests and then jump to the real instruction
   10279  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10280  */
   10281     .extern MterpCheckBefore
   10282     EXPORT_PC
   10283     REFRESH_IBASE
   10284     dla     ra, artMterpAsmInstructionStart
   10285     dla     t9, MterpCheckBefore
   10286     move    a0, rSELF
   10287     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10288     daddu   ra, ra, (152 * 128)            # Addr of primary handler.
   10289     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10290 
   10291 /* ------------------------------ */
   10292     .balign 128
   10293 .L_ALT_op_shr_int: /* 0x99 */
   10294 /* File: mips64/alt_stub.S */
   10295 /*
   10296  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10297  * any interesting requests and then jump to the real instruction
   10298  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10299  */
   10300     .extern MterpCheckBefore
   10301     EXPORT_PC
   10302     REFRESH_IBASE
   10303     dla     ra, artMterpAsmInstructionStart
   10304     dla     t9, MterpCheckBefore
   10305     move    a0, rSELF
   10306     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10307     daddu   ra, ra, (153 * 128)            # Addr of primary handler.
   10308     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10309 
   10310 /* ------------------------------ */
   10311     .balign 128
   10312 .L_ALT_op_ushr_int: /* 0x9a */
   10313 /* File: mips64/alt_stub.S */
   10314 /*
   10315  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10316  * any interesting requests and then jump to the real instruction
   10317  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10318  */
   10319     .extern MterpCheckBefore
   10320     EXPORT_PC
   10321     REFRESH_IBASE
   10322     dla     ra, artMterpAsmInstructionStart
   10323     dla     t9, MterpCheckBefore
   10324     move    a0, rSELF
   10325     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10326     daddu   ra, ra, (154 * 128)            # Addr of primary handler.
   10327     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10328 
   10329 /* ------------------------------ */
   10330     .balign 128
   10331 .L_ALT_op_add_long: /* 0x9b */
   10332 /* File: mips64/alt_stub.S */
   10333 /*
   10334  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10335  * any interesting requests and then jump to the real instruction
   10336  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10337  */
   10338     .extern MterpCheckBefore
   10339     EXPORT_PC
   10340     REFRESH_IBASE
   10341     dla     ra, artMterpAsmInstructionStart
   10342     dla     t9, MterpCheckBefore
   10343     move    a0, rSELF
   10344     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10345     daddu   ra, ra, (155 * 128)            # Addr of primary handler.
   10346     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10347 
   10348 /* ------------------------------ */
   10349     .balign 128
   10350 .L_ALT_op_sub_long: /* 0x9c */
   10351 /* File: mips64/alt_stub.S */
   10352 /*
   10353  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10354  * any interesting requests and then jump to the real instruction
   10355  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10356  */
   10357     .extern MterpCheckBefore
   10358     EXPORT_PC
   10359     REFRESH_IBASE
   10360     dla     ra, artMterpAsmInstructionStart
   10361     dla     t9, MterpCheckBefore
   10362     move    a0, rSELF
   10363     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10364     daddu   ra, ra, (156 * 128)            # Addr of primary handler.
   10365     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10366 
   10367 /* ------------------------------ */
   10368     .balign 128
   10369 .L_ALT_op_mul_long: /* 0x9d */
   10370 /* File: mips64/alt_stub.S */
   10371 /*
   10372  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10373  * any interesting requests and then jump to the real instruction
   10374  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10375  */
   10376     .extern MterpCheckBefore
   10377     EXPORT_PC
   10378     REFRESH_IBASE
   10379     dla     ra, artMterpAsmInstructionStart
   10380     dla     t9, MterpCheckBefore
   10381     move    a0, rSELF
   10382     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10383     daddu   ra, ra, (157 * 128)            # Addr of primary handler.
   10384     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10385 
   10386 /* ------------------------------ */
   10387     .balign 128
   10388 .L_ALT_op_div_long: /* 0x9e */
   10389 /* File: mips64/alt_stub.S */
   10390 /*
   10391  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10392  * any interesting requests and then jump to the real instruction
   10393  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10394  */
   10395     .extern MterpCheckBefore
   10396     EXPORT_PC
   10397     REFRESH_IBASE
   10398     dla     ra, artMterpAsmInstructionStart
   10399     dla     t9, MterpCheckBefore
   10400     move    a0, rSELF
   10401     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10402     daddu   ra, ra, (158 * 128)            # Addr of primary handler.
   10403     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10404 
   10405 /* ------------------------------ */
   10406     .balign 128
   10407 .L_ALT_op_rem_long: /* 0x9f */
   10408 /* File: mips64/alt_stub.S */
   10409 /*
   10410  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10411  * any interesting requests and then jump to the real instruction
   10412  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10413  */
   10414     .extern MterpCheckBefore
   10415     EXPORT_PC
   10416     REFRESH_IBASE
   10417     dla     ra, artMterpAsmInstructionStart
   10418     dla     t9, MterpCheckBefore
   10419     move    a0, rSELF
   10420     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10421     daddu   ra, ra, (159 * 128)            # Addr of primary handler.
   10422     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10423 
   10424 /* ------------------------------ */
   10425     .balign 128
   10426 .L_ALT_op_and_long: /* 0xa0 */
   10427 /* File: mips64/alt_stub.S */
   10428 /*
   10429  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10430  * any interesting requests and then jump to the real instruction
   10431  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10432  */
   10433     .extern MterpCheckBefore
   10434     EXPORT_PC
   10435     REFRESH_IBASE
   10436     dla     ra, artMterpAsmInstructionStart
   10437     dla     t9, MterpCheckBefore
   10438     move    a0, rSELF
   10439     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10440     daddu   ra, ra, (160 * 128)            # Addr of primary handler.
   10441     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10442 
   10443 /* ------------------------------ */
   10444     .balign 128
   10445 .L_ALT_op_or_long: /* 0xa1 */
   10446 /* File: mips64/alt_stub.S */
   10447 /*
   10448  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10449  * any interesting requests and then jump to the real instruction
   10450  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10451  */
   10452     .extern MterpCheckBefore
   10453     EXPORT_PC
   10454     REFRESH_IBASE
   10455     dla     ra, artMterpAsmInstructionStart
   10456     dla     t9, MterpCheckBefore
   10457     move    a0, rSELF
   10458     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10459     daddu   ra, ra, (161 * 128)            # Addr of primary handler.
   10460     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10461 
   10462 /* ------------------------------ */
   10463     .balign 128
   10464 .L_ALT_op_xor_long: /* 0xa2 */
   10465 /* File: mips64/alt_stub.S */
   10466 /*
   10467  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10468  * any interesting requests and then jump to the real instruction
   10469  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10470  */
   10471     .extern MterpCheckBefore
   10472     EXPORT_PC
   10473     REFRESH_IBASE
   10474     dla     ra, artMterpAsmInstructionStart
   10475     dla     t9, MterpCheckBefore
   10476     move    a0, rSELF
   10477     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10478     daddu   ra, ra, (162 * 128)            # Addr of primary handler.
   10479     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10480 
   10481 /* ------------------------------ */
   10482     .balign 128
   10483 .L_ALT_op_shl_long: /* 0xa3 */
   10484 /* File: mips64/alt_stub.S */
   10485 /*
   10486  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10487  * any interesting requests and then jump to the real instruction
   10488  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10489  */
   10490     .extern MterpCheckBefore
   10491     EXPORT_PC
   10492     REFRESH_IBASE
   10493     dla     ra, artMterpAsmInstructionStart
   10494     dla     t9, MterpCheckBefore
   10495     move    a0, rSELF
   10496     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10497     daddu   ra, ra, (163 * 128)            # Addr of primary handler.
   10498     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10499 
   10500 /* ------------------------------ */
   10501     .balign 128
   10502 .L_ALT_op_shr_long: /* 0xa4 */
   10503 /* File: mips64/alt_stub.S */
   10504 /*
   10505  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10506  * any interesting requests and then jump to the real instruction
   10507  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10508  */
   10509     .extern MterpCheckBefore
   10510     EXPORT_PC
   10511     REFRESH_IBASE
   10512     dla     ra, artMterpAsmInstructionStart
   10513     dla     t9, MterpCheckBefore
   10514     move    a0, rSELF
   10515     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10516     daddu   ra, ra, (164 * 128)            # Addr of primary handler.
   10517     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10518 
   10519 /* ------------------------------ */
   10520     .balign 128
   10521 .L_ALT_op_ushr_long: /* 0xa5 */
   10522 /* File: mips64/alt_stub.S */
   10523 /*
   10524  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10525  * any interesting requests and then jump to the real instruction
   10526  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10527  */
   10528     .extern MterpCheckBefore
   10529     EXPORT_PC
   10530     REFRESH_IBASE
   10531     dla     ra, artMterpAsmInstructionStart
   10532     dla     t9, MterpCheckBefore
   10533     move    a0, rSELF
   10534     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10535     daddu   ra, ra, (165 * 128)            # Addr of primary handler.
   10536     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10537 
   10538 /* ------------------------------ */
   10539     .balign 128
   10540 .L_ALT_op_add_float: /* 0xa6 */
   10541 /* File: mips64/alt_stub.S */
   10542 /*
   10543  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10544  * any interesting requests and then jump to the real instruction
   10545  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10546  */
   10547     .extern MterpCheckBefore
   10548     EXPORT_PC
   10549     REFRESH_IBASE
   10550     dla     ra, artMterpAsmInstructionStart
   10551     dla     t9, MterpCheckBefore
   10552     move    a0, rSELF
   10553     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10554     daddu   ra, ra, (166 * 128)            # Addr of primary handler.
   10555     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10556 
   10557 /* ------------------------------ */
   10558     .balign 128
   10559 .L_ALT_op_sub_float: /* 0xa7 */
   10560 /* File: mips64/alt_stub.S */
   10561 /*
   10562  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10563  * any interesting requests and then jump to the real instruction
   10564  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10565  */
   10566     .extern MterpCheckBefore
   10567     EXPORT_PC
   10568     REFRESH_IBASE
   10569     dla     ra, artMterpAsmInstructionStart
   10570     dla     t9, MterpCheckBefore
   10571     move    a0, rSELF
   10572     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10573     daddu   ra, ra, (167 * 128)            # Addr of primary handler.
   10574     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10575 
   10576 /* ------------------------------ */
   10577     .balign 128
   10578 .L_ALT_op_mul_float: /* 0xa8 */
   10579 /* File: mips64/alt_stub.S */
   10580 /*
   10581  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10582  * any interesting requests and then jump to the real instruction
   10583  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10584  */
   10585     .extern MterpCheckBefore
   10586     EXPORT_PC
   10587     REFRESH_IBASE
   10588     dla     ra, artMterpAsmInstructionStart
   10589     dla     t9, MterpCheckBefore
   10590     move    a0, rSELF
   10591     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10592     daddu   ra, ra, (168 * 128)            # Addr of primary handler.
   10593     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10594 
   10595 /* ------------------------------ */
   10596     .balign 128
   10597 .L_ALT_op_div_float: /* 0xa9 */
   10598 /* File: mips64/alt_stub.S */
   10599 /*
   10600  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10601  * any interesting requests and then jump to the real instruction
   10602  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10603  */
   10604     .extern MterpCheckBefore
   10605     EXPORT_PC
   10606     REFRESH_IBASE
   10607     dla     ra, artMterpAsmInstructionStart
   10608     dla     t9, MterpCheckBefore
   10609     move    a0, rSELF
   10610     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10611     daddu   ra, ra, (169 * 128)            # Addr of primary handler.
   10612     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10613 
   10614 /* ------------------------------ */
   10615     .balign 128
   10616 .L_ALT_op_rem_float: /* 0xaa */
   10617 /* File: mips64/alt_stub.S */
   10618 /*
   10619  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10620  * any interesting requests and then jump to the real instruction
   10621  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10622  */
   10623     .extern MterpCheckBefore
   10624     EXPORT_PC
   10625     REFRESH_IBASE
   10626     dla     ra, artMterpAsmInstructionStart
   10627     dla     t9, MterpCheckBefore
   10628     move    a0, rSELF
   10629     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10630     daddu   ra, ra, (170 * 128)            # Addr of primary handler.
   10631     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10632 
   10633 /* ------------------------------ */
   10634     .balign 128
   10635 .L_ALT_op_add_double: /* 0xab */
   10636 /* File: mips64/alt_stub.S */
   10637 /*
   10638  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10639  * any interesting requests and then jump to the real instruction
   10640  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10641  */
   10642     .extern MterpCheckBefore
   10643     EXPORT_PC
   10644     REFRESH_IBASE
   10645     dla     ra, artMterpAsmInstructionStart
   10646     dla     t9, MterpCheckBefore
   10647     move    a0, rSELF
   10648     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10649     daddu   ra, ra, (171 * 128)            # Addr of primary handler.
   10650     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10651 
   10652 /* ------------------------------ */
   10653     .balign 128
   10654 .L_ALT_op_sub_double: /* 0xac */
   10655 /* File: mips64/alt_stub.S */
   10656 /*
   10657  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10658  * any interesting requests and then jump to the real instruction
   10659  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10660  */
   10661     .extern MterpCheckBefore
   10662     EXPORT_PC
   10663     REFRESH_IBASE
   10664     dla     ra, artMterpAsmInstructionStart
   10665     dla     t9, MterpCheckBefore
   10666     move    a0, rSELF
   10667     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10668     daddu   ra, ra, (172 * 128)            # Addr of primary handler.
   10669     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10670 
   10671 /* ------------------------------ */
   10672     .balign 128
   10673 .L_ALT_op_mul_double: /* 0xad */
   10674 /* File: mips64/alt_stub.S */
   10675 /*
   10676  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10677  * any interesting requests and then jump to the real instruction
   10678  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10679  */
   10680     .extern MterpCheckBefore
   10681     EXPORT_PC
   10682     REFRESH_IBASE
   10683     dla     ra, artMterpAsmInstructionStart
   10684     dla     t9, MterpCheckBefore
   10685     move    a0, rSELF
   10686     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10687     daddu   ra, ra, (173 * 128)            # Addr of primary handler.
   10688     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10689 
   10690 /* ------------------------------ */
   10691     .balign 128
   10692 .L_ALT_op_div_double: /* 0xae */
   10693 /* File: mips64/alt_stub.S */
   10694 /*
   10695  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10696  * any interesting requests and then jump to the real instruction
   10697  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10698  */
   10699     .extern MterpCheckBefore
   10700     EXPORT_PC
   10701     REFRESH_IBASE
   10702     dla     ra, artMterpAsmInstructionStart
   10703     dla     t9, MterpCheckBefore
   10704     move    a0, rSELF
   10705     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10706     daddu   ra, ra, (174 * 128)            # Addr of primary handler.
   10707     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10708 
   10709 /* ------------------------------ */
   10710     .balign 128
   10711 .L_ALT_op_rem_double: /* 0xaf */
   10712 /* File: mips64/alt_stub.S */
   10713 /*
   10714  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10715  * any interesting requests and then jump to the real instruction
   10716  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10717  */
   10718     .extern MterpCheckBefore
   10719     EXPORT_PC
   10720     REFRESH_IBASE
   10721     dla     ra, artMterpAsmInstructionStart
   10722     dla     t9, MterpCheckBefore
   10723     move    a0, rSELF
   10724     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10725     daddu   ra, ra, (175 * 128)            # Addr of primary handler.
   10726     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10727 
   10728 /* ------------------------------ */
   10729     .balign 128
   10730 .L_ALT_op_add_int_2addr: /* 0xb0 */
   10731 /* File: mips64/alt_stub.S */
   10732 /*
   10733  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10734  * any interesting requests and then jump to the real instruction
   10735  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10736  */
   10737     .extern MterpCheckBefore
   10738     EXPORT_PC
   10739     REFRESH_IBASE
   10740     dla     ra, artMterpAsmInstructionStart
   10741     dla     t9, MterpCheckBefore
   10742     move    a0, rSELF
   10743     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10744     daddu   ra, ra, (176 * 128)            # Addr of primary handler.
   10745     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10746 
   10747 /* ------------------------------ */
   10748     .balign 128
   10749 .L_ALT_op_sub_int_2addr: /* 0xb1 */
   10750 /* File: mips64/alt_stub.S */
   10751 /*
   10752  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10753  * any interesting requests and then jump to the real instruction
   10754  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10755  */
   10756     .extern MterpCheckBefore
   10757     EXPORT_PC
   10758     REFRESH_IBASE
   10759     dla     ra, artMterpAsmInstructionStart
   10760     dla     t9, MterpCheckBefore
   10761     move    a0, rSELF
   10762     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10763     daddu   ra, ra, (177 * 128)            # Addr of primary handler.
   10764     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10765 
   10766 /* ------------------------------ */
   10767     .balign 128
   10768 .L_ALT_op_mul_int_2addr: /* 0xb2 */
   10769 /* File: mips64/alt_stub.S */
   10770 /*
   10771  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10772  * any interesting requests and then jump to the real instruction
   10773  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10774  */
   10775     .extern MterpCheckBefore
   10776     EXPORT_PC
   10777     REFRESH_IBASE
   10778     dla     ra, artMterpAsmInstructionStart
   10779     dla     t9, MterpCheckBefore
   10780     move    a0, rSELF
   10781     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10782     daddu   ra, ra, (178 * 128)            # Addr of primary handler.
   10783     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10784 
   10785 /* ------------------------------ */
   10786     .balign 128
   10787 .L_ALT_op_div_int_2addr: /* 0xb3 */
   10788 /* File: mips64/alt_stub.S */
   10789 /*
   10790  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10791  * any interesting requests and then jump to the real instruction
   10792  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10793  */
   10794     .extern MterpCheckBefore
   10795     EXPORT_PC
   10796     REFRESH_IBASE
   10797     dla     ra, artMterpAsmInstructionStart
   10798     dla     t9, MterpCheckBefore
   10799     move    a0, rSELF
   10800     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10801     daddu   ra, ra, (179 * 128)            # Addr of primary handler.
   10802     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10803 
   10804 /* ------------------------------ */
   10805     .balign 128
   10806 .L_ALT_op_rem_int_2addr: /* 0xb4 */
   10807 /* File: mips64/alt_stub.S */
   10808 /*
   10809  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10810  * any interesting requests and then jump to the real instruction
   10811  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10812  */
   10813     .extern MterpCheckBefore
   10814     EXPORT_PC
   10815     REFRESH_IBASE
   10816     dla     ra, artMterpAsmInstructionStart
   10817     dla     t9, MterpCheckBefore
   10818     move    a0, rSELF
   10819     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10820     daddu   ra, ra, (180 * 128)            # Addr of primary handler.
   10821     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10822 
   10823 /* ------------------------------ */
   10824     .balign 128
   10825 .L_ALT_op_and_int_2addr: /* 0xb5 */
   10826 /* File: mips64/alt_stub.S */
   10827 /*
   10828  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10829  * any interesting requests and then jump to the real instruction
   10830  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10831  */
   10832     .extern MterpCheckBefore
   10833     EXPORT_PC
   10834     REFRESH_IBASE
   10835     dla     ra, artMterpAsmInstructionStart
   10836     dla     t9, MterpCheckBefore
   10837     move    a0, rSELF
   10838     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10839     daddu   ra, ra, (181 * 128)            # Addr of primary handler.
   10840     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10841 
   10842 /* ------------------------------ */
   10843     .balign 128
   10844 .L_ALT_op_or_int_2addr: /* 0xb6 */
   10845 /* File: mips64/alt_stub.S */
   10846 /*
   10847  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10848  * any interesting requests and then jump to the real instruction
   10849  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10850  */
   10851     .extern MterpCheckBefore
   10852     EXPORT_PC
   10853     REFRESH_IBASE
   10854     dla     ra, artMterpAsmInstructionStart
   10855     dla     t9, MterpCheckBefore
   10856     move    a0, rSELF
   10857     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10858     daddu   ra, ra, (182 * 128)            # Addr of primary handler.
   10859     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10860 
   10861 /* ------------------------------ */
   10862     .balign 128
   10863 .L_ALT_op_xor_int_2addr: /* 0xb7 */
   10864 /* File: mips64/alt_stub.S */
   10865 /*
   10866  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10867  * any interesting requests and then jump to the real instruction
   10868  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10869  */
   10870     .extern MterpCheckBefore
   10871     EXPORT_PC
   10872     REFRESH_IBASE
   10873     dla     ra, artMterpAsmInstructionStart
   10874     dla     t9, MterpCheckBefore
   10875     move    a0, rSELF
   10876     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10877     daddu   ra, ra, (183 * 128)            # Addr of primary handler.
   10878     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10879 
   10880 /* ------------------------------ */
   10881     .balign 128
   10882 .L_ALT_op_shl_int_2addr: /* 0xb8 */
   10883 /* File: mips64/alt_stub.S */
   10884 /*
   10885  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10886  * any interesting requests and then jump to the real instruction
   10887  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10888  */
   10889     .extern MterpCheckBefore
   10890     EXPORT_PC
   10891     REFRESH_IBASE
   10892     dla     ra, artMterpAsmInstructionStart
   10893     dla     t9, MterpCheckBefore
   10894     move    a0, rSELF
   10895     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10896     daddu   ra, ra, (184 * 128)            # Addr of primary handler.
   10897     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10898 
   10899 /* ------------------------------ */
   10900     .balign 128
   10901 .L_ALT_op_shr_int_2addr: /* 0xb9 */
   10902 /* File: mips64/alt_stub.S */
   10903 /*
   10904  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10905  * any interesting requests and then jump to the real instruction
   10906  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10907  */
   10908     .extern MterpCheckBefore
   10909     EXPORT_PC
   10910     REFRESH_IBASE
   10911     dla     ra, artMterpAsmInstructionStart
   10912     dla     t9, MterpCheckBefore
   10913     move    a0, rSELF
   10914     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10915     daddu   ra, ra, (185 * 128)            # Addr of primary handler.
   10916     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10917 
   10918 /* ------------------------------ */
   10919     .balign 128
   10920 .L_ALT_op_ushr_int_2addr: /* 0xba */
   10921 /* File: mips64/alt_stub.S */
   10922 /*
   10923  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10924  * any interesting requests and then jump to the real instruction
   10925  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10926  */
   10927     .extern MterpCheckBefore
   10928     EXPORT_PC
   10929     REFRESH_IBASE
   10930     dla     ra, artMterpAsmInstructionStart
   10931     dla     t9, MterpCheckBefore
   10932     move    a0, rSELF
   10933     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10934     daddu   ra, ra, (186 * 128)            # Addr of primary handler.
   10935     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10936 
   10937 /* ------------------------------ */
   10938     .balign 128
   10939 .L_ALT_op_add_long_2addr: /* 0xbb */
   10940 /* File: mips64/alt_stub.S */
   10941 /*
   10942  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10943  * any interesting requests and then jump to the real instruction
   10944  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10945  */
   10946     .extern MterpCheckBefore
   10947     EXPORT_PC
   10948     REFRESH_IBASE
   10949     dla     ra, artMterpAsmInstructionStart
   10950     dla     t9, MterpCheckBefore
   10951     move    a0, rSELF
   10952     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10953     daddu   ra, ra, (187 * 128)            # Addr of primary handler.
   10954     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10955 
   10956 /* ------------------------------ */
   10957     .balign 128
   10958 .L_ALT_op_sub_long_2addr: /* 0xbc */
   10959 /* File: mips64/alt_stub.S */
   10960 /*
   10961  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10962  * any interesting requests and then jump to the real instruction
   10963  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10964  */
   10965     .extern MterpCheckBefore
   10966     EXPORT_PC
   10967     REFRESH_IBASE
   10968     dla     ra, artMterpAsmInstructionStart
   10969     dla     t9, MterpCheckBefore
   10970     move    a0, rSELF
   10971     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10972     daddu   ra, ra, (188 * 128)            # Addr of primary handler.
   10973     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10974 
   10975 /* ------------------------------ */
   10976     .balign 128
   10977 .L_ALT_op_mul_long_2addr: /* 0xbd */
   10978 /* File: mips64/alt_stub.S */
   10979 /*
   10980  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   10981  * any interesting requests and then jump to the real instruction
   10982  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   10983  */
   10984     .extern MterpCheckBefore
   10985     EXPORT_PC
   10986     REFRESH_IBASE
   10987     dla     ra, artMterpAsmInstructionStart
   10988     dla     t9, MterpCheckBefore
   10989     move    a0, rSELF
   10990     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   10991     daddu   ra, ra, (189 * 128)            # Addr of primary handler.
   10992     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   10993 
   10994 /* ------------------------------ */
   10995     .balign 128
   10996 .L_ALT_op_div_long_2addr: /* 0xbe */
   10997 /* File: mips64/alt_stub.S */
   10998 /*
   10999  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11000  * any interesting requests and then jump to the real instruction
   11001  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11002  */
   11003     .extern MterpCheckBefore
   11004     EXPORT_PC
   11005     REFRESH_IBASE
   11006     dla     ra, artMterpAsmInstructionStart
   11007     dla     t9, MterpCheckBefore
   11008     move    a0, rSELF
   11009     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11010     daddu   ra, ra, (190 * 128)            # Addr of primary handler.
   11011     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11012 
   11013 /* ------------------------------ */
   11014     .balign 128
   11015 .L_ALT_op_rem_long_2addr: /* 0xbf */
   11016 /* File: mips64/alt_stub.S */
   11017 /*
   11018  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11019  * any interesting requests and then jump to the real instruction
   11020  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11021  */
   11022     .extern MterpCheckBefore
   11023     EXPORT_PC
   11024     REFRESH_IBASE
   11025     dla     ra, artMterpAsmInstructionStart
   11026     dla     t9, MterpCheckBefore
   11027     move    a0, rSELF
   11028     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11029     daddu   ra, ra, (191 * 128)            # Addr of primary handler.
   11030     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11031 
   11032 /* ------------------------------ */
   11033     .balign 128
   11034 .L_ALT_op_and_long_2addr: /* 0xc0 */
   11035 /* File: mips64/alt_stub.S */
   11036 /*
   11037  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11038  * any interesting requests and then jump to the real instruction
   11039  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11040  */
   11041     .extern MterpCheckBefore
   11042     EXPORT_PC
   11043     REFRESH_IBASE
   11044     dla     ra, artMterpAsmInstructionStart
   11045     dla     t9, MterpCheckBefore
   11046     move    a0, rSELF
   11047     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11048     daddu   ra, ra, (192 * 128)            # Addr of primary handler.
   11049     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11050 
   11051 /* ------------------------------ */
   11052     .balign 128
   11053 .L_ALT_op_or_long_2addr: /* 0xc1 */
   11054 /* File: mips64/alt_stub.S */
   11055 /*
   11056  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11057  * any interesting requests and then jump to the real instruction
   11058  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11059  */
   11060     .extern MterpCheckBefore
   11061     EXPORT_PC
   11062     REFRESH_IBASE
   11063     dla     ra, artMterpAsmInstructionStart
   11064     dla     t9, MterpCheckBefore
   11065     move    a0, rSELF
   11066     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11067     daddu   ra, ra, (193 * 128)            # Addr of primary handler.
   11068     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11069 
   11070 /* ------------------------------ */
   11071     .balign 128
   11072 .L_ALT_op_xor_long_2addr: /* 0xc2 */
   11073 /* File: mips64/alt_stub.S */
   11074 /*
   11075  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11076  * any interesting requests and then jump to the real instruction
   11077  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11078  */
   11079     .extern MterpCheckBefore
   11080     EXPORT_PC
   11081     REFRESH_IBASE
   11082     dla     ra, artMterpAsmInstructionStart
   11083     dla     t9, MterpCheckBefore
   11084     move    a0, rSELF
   11085     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11086     daddu   ra, ra, (194 * 128)            # Addr of primary handler.
   11087     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11088 
   11089 /* ------------------------------ */
   11090     .balign 128
   11091 .L_ALT_op_shl_long_2addr: /* 0xc3 */
   11092 /* File: mips64/alt_stub.S */
   11093 /*
   11094  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11095  * any interesting requests and then jump to the real instruction
   11096  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11097  */
   11098     .extern MterpCheckBefore
   11099     EXPORT_PC
   11100     REFRESH_IBASE
   11101     dla     ra, artMterpAsmInstructionStart
   11102     dla     t9, MterpCheckBefore
   11103     move    a0, rSELF
   11104     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11105     daddu   ra, ra, (195 * 128)            # Addr of primary handler.
   11106     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11107 
   11108 /* ------------------------------ */
   11109     .balign 128
   11110 .L_ALT_op_shr_long_2addr: /* 0xc4 */
   11111 /* File: mips64/alt_stub.S */
   11112 /*
   11113  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11114  * any interesting requests and then jump to the real instruction
   11115  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11116  */
   11117     .extern MterpCheckBefore
   11118     EXPORT_PC
   11119     REFRESH_IBASE
   11120     dla     ra, artMterpAsmInstructionStart
   11121     dla     t9, MterpCheckBefore
   11122     move    a0, rSELF
   11123     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11124     daddu   ra, ra, (196 * 128)            # Addr of primary handler.
   11125     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11126 
   11127 /* ------------------------------ */
   11128     .balign 128
   11129 .L_ALT_op_ushr_long_2addr: /* 0xc5 */
   11130 /* File: mips64/alt_stub.S */
   11131 /*
   11132  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11133  * any interesting requests and then jump to the real instruction
   11134  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11135  */
   11136     .extern MterpCheckBefore
   11137     EXPORT_PC
   11138     REFRESH_IBASE
   11139     dla     ra, artMterpAsmInstructionStart
   11140     dla     t9, MterpCheckBefore
   11141     move    a0, rSELF
   11142     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11143     daddu   ra, ra, (197 * 128)            # Addr of primary handler.
   11144     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11145 
   11146 /* ------------------------------ */
   11147     .balign 128
   11148 .L_ALT_op_add_float_2addr: /* 0xc6 */
   11149 /* File: mips64/alt_stub.S */
   11150 /*
   11151  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11152  * any interesting requests and then jump to the real instruction
   11153  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11154  */
   11155     .extern MterpCheckBefore
   11156     EXPORT_PC
   11157     REFRESH_IBASE
   11158     dla     ra, artMterpAsmInstructionStart
   11159     dla     t9, MterpCheckBefore
   11160     move    a0, rSELF
   11161     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11162     daddu   ra, ra, (198 * 128)            # Addr of primary handler.
   11163     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11164 
   11165 /* ------------------------------ */
   11166     .balign 128
   11167 .L_ALT_op_sub_float_2addr: /* 0xc7 */
   11168 /* File: mips64/alt_stub.S */
   11169 /*
   11170  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11171  * any interesting requests and then jump to the real instruction
   11172  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11173  */
   11174     .extern MterpCheckBefore
   11175     EXPORT_PC
   11176     REFRESH_IBASE
   11177     dla     ra, artMterpAsmInstructionStart
   11178     dla     t9, MterpCheckBefore
   11179     move    a0, rSELF
   11180     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11181     daddu   ra, ra, (199 * 128)            # Addr of primary handler.
   11182     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11183 
   11184 /* ------------------------------ */
   11185     .balign 128
   11186 .L_ALT_op_mul_float_2addr: /* 0xc8 */
   11187 /* File: mips64/alt_stub.S */
   11188 /*
   11189  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11190  * any interesting requests and then jump to the real instruction
   11191  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11192  */
   11193     .extern MterpCheckBefore
   11194     EXPORT_PC
   11195     REFRESH_IBASE
   11196     dla     ra, artMterpAsmInstructionStart
   11197     dla     t9, MterpCheckBefore
   11198     move    a0, rSELF
   11199     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11200     daddu   ra, ra, (200 * 128)            # Addr of primary handler.
   11201     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11202 
   11203 /* ------------------------------ */
   11204     .balign 128
   11205 .L_ALT_op_div_float_2addr: /* 0xc9 */
   11206 /* File: mips64/alt_stub.S */
   11207 /*
   11208  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11209  * any interesting requests and then jump to the real instruction
   11210  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11211  */
   11212     .extern MterpCheckBefore
   11213     EXPORT_PC
   11214     REFRESH_IBASE
   11215     dla     ra, artMterpAsmInstructionStart
   11216     dla     t9, MterpCheckBefore
   11217     move    a0, rSELF
   11218     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11219     daddu   ra, ra, (201 * 128)            # Addr of primary handler.
   11220     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11221 
   11222 /* ------------------------------ */
   11223     .balign 128
   11224 .L_ALT_op_rem_float_2addr: /* 0xca */
   11225 /* File: mips64/alt_stub.S */
   11226 /*
   11227  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11228  * any interesting requests and then jump to the real instruction
   11229  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11230  */
   11231     .extern MterpCheckBefore
   11232     EXPORT_PC
   11233     REFRESH_IBASE
   11234     dla     ra, artMterpAsmInstructionStart
   11235     dla     t9, MterpCheckBefore
   11236     move    a0, rSELF
   11237     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11238     daddu   ra, ra, (202 * 128)            # Addr of primary handler.
   11239     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11240 
   11241 /* ------------------------------ */
   11242     .balign 128
   11243 .L_ALT_op_add_double_2addr: /* 0xcb */
   11244 /* File: mips64/alt_stub.S */
   11245 /*
   11246  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11247  * any interesting requests and then jump to the real instruction
   11248  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11249  */
   11250     .extern MterpCheckBefore
   11251     EXPORT_PC
   11252     REFRESH_IBASE
   11253     dla     ra, artMterpAsmInstructionStart
   11254     dla     t9, MterpCheckBefore
   11255     move    a0, rSELF
   11256     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11257     daddu   ra, ra, (203 * 128)            # Addr of primary handler.
   11258     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11259 
   11260 /* ------------------------------ */
   11261     .balign 128
   11262 .L_ALT_op_sub_double_2addr: /* 0xcc */
   11263 /* File: mips64/alt_stub.S */
   11264 /*
   11265  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11266  * any interesting requests and then jump to the real instruction
   11267  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11268  */
   11269     .extern MterpCheckBefore
   11270     EXPORT_PC
   11271     REFRESH_IBASE
   11272     dla     ra, artMterpAsmInstructionStart
   11273     dla     t9, MterpCheckBefore
   11274     move    a0, rSELF
   11275     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11276     daddu   ra, ra, (204 * 128)            # Addr of primary handler.
   11277     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11278 
   11279 /* ------------------------------ */
   11280     .balign 128
   11281 .L_ALT_op_mul_double_2addr: /* 0xcd */
   11282 /* File: mips64/alt_stub.S */
   11283 /*
   11284  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11285  * any interesting requests and then jump to the real instruction
   11286  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11287  */
   11288     .extern MterpCheckBefore
   11289     EXPORT_PC
   11290     REFRESH_IBASE
   11291     dla     ra, artMterpAsmInstructionStart
   11292     dla     t9, MterpCheckBefore
   11293     move    a0, rSELF
   11294     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11295     daddu   ra, ra, (205 * 128)            # Addr of primary handler.
   11296     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11297 
   11298 /* ------------------------------ */
   11299     .balign 128
   11300 .L_ALT_op_div_double_2addr: /* 0xce */
   11301 /* File: mips64/alt_stub.S */
   11302 /*
   11303  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11304  * any interesting requests and then jump to the real instruction
   11305  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11306  */
   11307     .extern MterpCheckBefore
   11308     EXPORT_PC
   11309     REFRESH_IBASE
   11310     dla     ra, artMterpAsmInstructionStart
   11311     dla     t9, MterpCheckBefore
   11312     move    a0, rSELF
   11313     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11314     daddu   ra, ra, (206 * 128)            # Addr of primary handler.
   11315     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11316 
   11317 /* ------------------------------ */
   11318     .balign 128
   11319 .L_ALT_op_rem_double_2addr: /* 0xcf */
   11320 /* File: mips64/alt_stub.S */
   11321 /*
   11322  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11323  * any interesting requests and then jump to the real instruction
   11324  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11325  */
   11326     .extern MterpCheckBefore
   11327     EXPORT_PC
   11328     REFRESH_IBASE
   11329     dla     ra, artMterpAsmInstructionStart
   11330     dla     t9, MterpCheckBefore
   11331     move    a0, rSELF
   11332     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11333     daddu   ra, ra, (207 * 128)            # Addr of primary handler.
   11334     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11335 
   11336 /* ------------------------------ */
   11337     .balign 128
   11338 .L_ALT_op_add_int_lit16: /* 0xd0 */
   11339 /* File: mips64/alt_stub.S */
   11340 /*
   11341  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11342  * any interesting requests and then jump to the real instruction
   11343  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11344  */
   11345     .extern MterpCheckBefore
   11346     EXPORT_PC
   11347     REFRESH_IBASE
   11348     dla     ra, artMterpAsmInstructionStart
   11349     dla     t9, MterpCheckBefore
   11350     move    a0, rSELF
   11351     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11352     daddu   ra, ra, (208 * 128)            # Addr of primary handler.
   11353     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11354 
   11355 /* ------------------------------ */
   11356     .balign 128
   11357 .L_ALT_op_rsub_int: /* 0xd1 */
   11358 /* File: mips64/alt_stub.S */
   11359 /*
   11360  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11361  * any interesting requests and then jump to the real instruction
   11362  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11363  */
   11364     .extern MterpCheckBefore
   11365     EXPORT_PC
   11366     REFRESH_IBASE
   11367     dla     ra, artMterpAsmInstructionStart
   11368     dla     t9, MterpCheckBefore
   11369     move    a0, rSELF
   11370     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11371     daddu   ra, ra, (209 * 128)            # Addr of primary handler.
   11372     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11373 
   11374 /* ------------------------------ */
   11375     .balign 128
   11376 .L_ALT_op_mul_int_lit16: /* 0xd2 */
   11377 /* File: mips64/alt_stub.S */
   11378 /*
   11379  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11380  * any interesting requests and then jump to the real instruction
   11381  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11382  */
   11383     .extern MterpCheckBefore
   11384     EXPORT_PC
   11385     REFRESH_IBASE
   11386     dla     ra, artMterpAsmInstructionStart
   11387     dla     t9, MterpCheckBefore
   11388     move    a0, rSELF
   11389     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11390     daddu   ra, ra, (210 * 128)            # Addr of primary handler.
   11391     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11392 
   11393 /* ------------------------------ */
   11394     .balign 128
   11395 .L_ALT_op_div_int_lit16: /* 0xd3 */
   11396 /* File: mips64/alt_stub.S */
   11397 /*
   11398  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11399  * any interesting requests and then jump to the real instruction
   11400  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11401  */
   11402     .extern MterpCheckBefore
   11403     EXPORT_PC
   11404     REFRESH_IBASE
   11405     dla     ra, artMterpAsmInstructionStart
   11406     dla     t9, MterpCheckBefore
   11407     move    a0, rSELF
   11408     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11409     daddu   ra, ra, (211 * 128)            # Addr of primary handler.
   11410     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11411 
   11412 /* ------------------------------ */
   11413     .balign 128
   11414 .L_ALT_op_rem_int_lit16: /* 0xd4 */
   11415 /* File: mips64/alt_stub.S */
   11416 /*
   11417  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11418  * any interesting requests and then jump to the real instruction
   11419  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11420  */
   11421     .extern MterpCheckBefore
   11422     EXPORT_PC
   11423     REFRESH_IBASE
   11424     dla     ra, artMterpAsmInstructionStart
   11425     dla     t9, MterpCheckBefore
   11426     move    a0, rSELF
   11427     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11428     daddu   ra, ra, (212 * 128)            # Addr of primary handler.
   11429     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11430 
   11431 /* ------------------------------ */
   11432     .balign 128
   11433 .L_ALT_op_and_int_lit16: /* 0xd5 */
   11434 /* File: mips64/alt_stub.S */
   11435 /*
   11436  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11437  * any interesting requests and then jump to the real instruction
   11438  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11439  */
   11440     .extern MterpCheckBefore
   11441     EXPORT_PC
   11442     REFRESH_IBASE
   11443     dla     ra, artMterpAsmInstructionStart
   11444     dla     t9, MterpCheckBefore
   11445     move    a0, rSELF
   11446     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11447     daddu   ra, ra, (213 * 128)            # Addr of primary handler.
   11448     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11449 
   11450 /* ------------------------------ */
   11451     .balign 128
   11452 .L_ALT_op_or_int_lit16: /* 0xd6 */
   11453 /* File: mips64/alt_stub.S */
   11454 /*
   11455  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11456  * any interesting requests and then jump to the real instruction
   11457  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11458  */
   11459     .extern MterpCheckBefore
   11460     EXPORT_PC
   11461     REFRESH_IBASE
   11462     dla     ra, artMterpAsmInstructionStart
   11463     dla     t9, MterpCheckBefore
   11464     move    a0, rSELF
   11465     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11466     daddu   ra, ra, (214 * 128)            # Addr of primary handler.
   11467     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11468 
   11469 /* ------------------------------ */
   11470     .balign 128
   11471 .L_ALT_op_xor_int_lit16: /* 0xd7 */
   11472 /* File: mips64/alt_stub.S */
   11473 /*
   11474  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11475  * any interesting requests and then jump to the real instruction
   11476  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11477  */
   11478     .extern MterpCheckBefore
   11479     EXPORT_PC
   11480     REFRESH_IBASE
   11481     dla     ra, artMterpAsmInstructionStart
   11482     dla     t9, MterpCheckBefore
   11483     move    a0, rSELF
   11484     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11485     daddu   ra, ra, (215 * 128)            # Addr of primary handler.
   11486     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11487 
   11488 /* ------------------------------ */
   11489     .balign 128
   11490 .L_ALT_op_add_int_lit8: /* 0xd8 */
   11491 /* File: mips64/alt_stub.S */
   11492 /*
   11493  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11494  * any interesting requests and then jump to the real instruction
   11495  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11496  */
   11497     .extern MterpCheckBefore
   11498     EXPORT_PC
   11499     REFRESH_IBASE
   11500     dla     ra, artMterpAsmInstructionStart
   11501     dla     t9, MterpCheckBefore
   11502     move    a0, rSELF
   11503     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11504     daddu   ra, ra, (216 * 128)            # Addr of primary handler.
   11505     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11506 
   11507 /* ------------------------------ */
   11508     .balign 128
   11509 .L_ALT_op_rsub_int_lit8: /* 0xd9 */
   11510 /* File: mips64/alt_stub.S */
   11511 /*
   11512  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11513  * any interesting requests and then jump to the real instruction
   11514  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11515  */
   11516     .extern MterpCheckBefore
   11517     EXPORT_PC
   11518     REFRESH_IBASE
   11519     dla     ra, artMterpAsmInstructionStart
   11520     dla     t9, MterpCheckBefore
   11521     move    a0, rSELF
   11522     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11523     daddu   ra, ra, (217 * 128)            # Addr of primary handler.
   11524     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11525 
   11526 /* ------------------------------ */
   11527     .balign 128
   11528 .L_ALT_op_mul_int_lit8: /* 0xda */
   11529 /* File: mips64/alt_stub.S */
   11530 /*
   11531  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11532  * any interesting requests and then jump to the real instruction
   11533  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11534  */
   11535     .extern MterpCheckBefore
   11536     EXPORT_PC
   11537     REFRESH_IBASE
   11538     dla     ra, artMterpAsmInstructionStart
   11539     dla     t9, MterpCheckBefore
   11540     move    a0, rSELF
   11541     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11542     daddu   ra, ra, (218 * 128)            # Addr of primary handler.
   11543     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11544 
   11545 /* ------------------------------ */
   11546     .balign 128
   11547 .L_ALT_op_div_int_lit8: /* 0xdb */
   11548 /* File: mips64/alt_stub.S */
   11549 /*
   11550  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11551  * any interesting requests and then jump to the real instruction
   11552  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11553  */
   11554     .extern MterpCheckBefore
   11555     EXPORT_PC
   11556     REFRESH_IBASE
   11557     dla     ra, artMterpAsmInstructionStart
   11558     dla     t9, MterpCheckBefore
   11559     move    a0, rSELF
   11560     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11561     daddu   ra, ra, (219 * 128)            # Addr of primary handler.
   11562     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11563 
   11564 /* ------------------------------ */
   11565     .balign 128
   11566 .L_ALT_op_rem_int_lit8: /* 0xdc */
   11567 /* File: mips64/alt_stub.S */
   11568 /*
   11569  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11570  * any interesting requests and then jump to the real instruction
   11571  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11572  */
   11573     .extern MterpCheckBefore
   11574     EXPORT_PC
   11575     REFRESH_IBASE
   11576     dla     ra, artMterpAsmInstructionStart
   11577     dla     t9, MterpCheckBefore
   11578     move    a0, rSELF
   11579     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11580     daddu   ra, ra, (220 * 128)            # Addr of primary handler.
   11581     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11582 
   11583 /* ------------------------------ */
   11584     .balign 128
   11585 .L_ALT_op_and_int_lit8: /* 0xdd */
   11586 /* File: mips64/alt_stub.S */
   11587 /*
   11588  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11589  * any interesting requests and then jump to the real instruction
   11590  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11591  */
   11592     .extern MterpCheckBefore
   11593     EXPORT_PC
   11594     REFRESH_IBASE
   11595     dla     ra, artMterpAsmInstructionStart
   11596     dla     t9, MterpCheckBefore
   11597     move    a0, rSELF
   11598     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11599     daddu   ra, ra, (221 * 128)            # Addr of primary handler.
   11600     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11601 
   11602 /* ------------------------------ */
   11603     .balign 128
   11604 .L_ALT_op_or_int_lit8: /* 0xde */
   11605 /* File: mips64/alt_stub.S */
   11606 /*
   11607  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11608  * any interesting requests and then jump to the real instruction
   11609  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11610  */
   11611     .extern MterpCheckBefore
   11612     EXPORT_PC
   11613     REFRESH_IBASE
   11614     dla     ra, artMterpAsmInstructionStart
   11615     dla     t9, MterpCheckBefore
   11616     move    a0, rSELF
   11617     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11618     daddu   ra, ra, (222 * 128)            # Addr of primary handler.
   11619     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11620 
   11621 /* ------------------------------ */
   11622     .balign 128
   11623 .L_ALT_op_xor_int_lit8: /* 0xdf */
   11624 /* File: mips64/alt_stub.S */
   11625 /*
   11626  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11627  * any interesting requests and then jump to the real instruction
   11628  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11629  */
   11630     .extern MterpCheckBefore
   11631     EXPORT_PC
   11632     REFRESH_IBASE
   11633     dla     ra, artMterpAsmInstructionStart
   11634     dla     t9, MterpCheckBefore
   11635     move    a0, rSELF
   11636     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11637     daddu   ra, ra, (223 * 128)            # Addr of primary handler.
   11638     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11639 
   11640 /* ------------------------------ */
   11641     .balign 128
   11642 .L_ALT_op_shl_int_lit8: /* 0xe0 */
   11643 /* File: mips64/alt_stub.S */
   11644 /*
   11645  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11646  * any interesting requests and then jump to the real instruction
   11647  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11648  */
   11649     .extern MterpCheckBefore
   11650     EXPORT_PC
   11651     REFRESH_IBASE
   11652     dla     ra, artMterpAsmInstructionStart
   11653     dla     t9, MterpCheckBefore
   11654     move    a0, rSELF
   11655     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11656     daddu   ra, ra, (224 * 128)            # Addr of primary handler.
   11657     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11658 
   11659 /* ------------------------------ */
   11660     .balign 128
   11661 .L_ALT_op_shr_int_lit8: /* 0xe1 */
   11662 /* File: mips64/alt_stub.S */
   11663 /*
   11664  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11665  * any interesting requests and then jump to the real instruction
   11666  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11667  */
   11668     .extern MterpCheckBefore
   11669     EXPORT_PC
   11670     REFRESH_IBASE
   11671     dla     ra, artMterpAsmInstructionStart
   11672     dla     t9, MterpCheckBefore
   11673     move    a0, rSELF
   11674     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11675     daddu   ra, ra, (225 * 128)            # Addr of primary handler.
   11676     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11677 
   11678 /* ------------------------------ */
   11679     .balign 128
   11680 .L_ALT_op_ushr_int_lit8: /* 0xe2 */
   11681 /* File: mips64/alt_stub.S */
   11682 /*
   11683  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11684  * any interesting requests and then jump to the real instruction
   11685  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11686  */
   11687     .extern MterpCheckBefore
   11688     EXPORT_PC
   11689     REFRESH_IBASE
   11690     dla     ra, artMterpAsmInstructionStart
   11691     dla     t9, MterpCheckBefore
   11692     move    a0, rSELF
   11693     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11694     daddu   ra, ra, (226 * 128)            # Addr of primary handler.
   11695     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11696 
   11697 /* ------------------------------ */
   11698     .balign 128
   11699 .L_ALT_op_iget_quick: /* 0xe3 */
   11700 /* File: mips64/alt_stub.S */
   11701 /*
   11702  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11703  * any interesting requests and then jump to the real instruction
   11704  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11705  */
   11706     .extern MterpCheckBefore
   11707     EXPORT_PC
   11708     REFRESH_IBASE
   11709     dla     ra, artMterpAsmInstructionStart
   11710     dla     t9, MterpCheckBefore
   11711     move    a0, rSELF
   11712     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11713     daddu   ra, ra, (227 * 128)            # Addr of primary handler.
   11714     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11715 
   11716 /* ------------------------------ */
   11717     .balign 128
   11718 .L_ALT_op_iget_wide_quick: /* 0xe4 */
   11719 /* File: mips64/alt_stub.S */
   11720 /*
   11721  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11722  * any interesting requests and then jump to the real instruction
   11723  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11724  */
   11725     .extern MterpCheckBefore
   11726     EXPORT_PC
   11727     REFRESH_IBASE
   11728     dla     ra, artMterpAsmInstructionStart
   11729     dla     t9, MterpCheckBefore
   11730     move    a0, rSELF
   11731     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11732     daddu   ra, ra, (228 * 128)            # Addr of primary handler.
   11733     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11734 
   11735 /* ------------------------------ */
   11736     .balign 128
   11737 .L_ALT_op_iget_object_quick: /* 0xe5 */
   11738 /* File: mips64/alt_stub.S */
   11739 /*
   11740  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11741  * any interesting requests and then jump to the real instruction
   11742  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11743  */
   11744     .extern MterpCheckBefore
   11745     EXPORT_PC
   11746     REFRESH_IBASE
   11747     dla     ra, artMterpAsmInstructionStart
   11748     dla     t9, MterpCheckBefore
   11749     move    a0, rSELF
   11750     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11751     daddu   ra, ra, (229 * 128)            # Addr of primary handler.
   11752     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11753 
   11754 /* ------------------------------ */
   11755     .balign 128
   11756 .L_ALT_op_iput_quick: /* 0xe6 */
   11757 /* File: mips64/alt_stub.S */
   11758 /*
   11759  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11760  * any interesting requests and then jump to the real instruction
   11761  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11762  */
   11763     .extern MterpCheckBefore
   11764     EXPORT_PC
   11765     REFRESH_IBASE
   11766     dla     ra, artMterpAsmInstructionStart
   11767     dla     t9, MterpCheckBefore
   11768     move    a0, rSELF
   11769     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11770     daddu   ra, ra, (230 * 128)            # Addr of primary handler.
   11771     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11772 
   11773 /* ------------------------------ */
   11774     .balign 128
   11775 .L_ALT_op_iput_wide_quick: /* 0xe7 */
   11776 /* File: mips64/alt_stub.S */
   11777 /*
   11778  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11779  * any interesting requests and then jump to the real instruction
   11780  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11781  */
   11782     .extern MterpCheckBefore
   11783     EXPORT_PC
   11784     REFRESH_IBASE
   11785     dla     ra, artMterpAsmInstructionStart
   11786     dla     t9, MterpCheckBefore
   11787     move    a0, rSELF
   11788     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11789     daddu   ra, ra, (231 * 128)            # Addr of primary handler.
   11790     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11791 
   11792 /* ------------------------------ */
   11793     .balign 128
   11794 .L_ALT_op_iput_object_quick: /* 0xe8 */
   11795 /* File: mips64/alt_stub.S */
   11796 /*
   11797  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11798  * any interesting requests and then jump to the real instruction
   11799  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11800  */
   11801     .extern MterpCheckBefore
   11802     EXPORT_PC
   11803     REFRESH_IBASE
   11804     dla     ra, artMterpAsmInstructionStart
   11805     dla     t9, MterpCheckBefore
   11806     move    a0, rSELF
   11807     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11808     daddu   ra, ra, (232 * 128)            # Addr of primary handler.
   11809     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11810 
   11811 /* ------------------------------ */
   11812     .balign 128
   11813 .L_ALT_op_invoke_virtual_quick: /* 0xe9 */
   11814 /* File: mips64/alt_stub.S */
   11815 /*
   11816  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11817  * any interesting requests and then jump to the real instruction
   11818  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11819  */
   11820     .extern MterpCheckBefore
   11821     EXPORT_PC
   11822     REFRESH_IBASE
   11823     dla     ra, artMterpAsmInstructionStart
   11824     dla     t9, MterpCheckBefore
   11825     move    a0, rSELF
   11826     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11827     daddu   ra, ra, (233 * 128)            # Addr of primary handler.
   11828     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11829 
   11830 /* ------------------------------ */
   11831     .balign 128
   11832 .L_ALT_op_invoke_virtual_range_quick: /* 0xea */
   11833 /* File: mips64/alt_stub.S */
   11834 /*
   11835  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11836  * any interesting requests and then jump to the real instruction
   11837  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11838  */
   11839     .extern MterpCheckBefore
   11840     EXPORT_PC
   11841     REFRESH_IBASE
   11842     dla     ra, artMterpAsmInstructionStart
   11843     dla     t9, MterpCheckBefore
   11844     move    a0, rSELF
   11845     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11846     daddu   ra, ra, (234 * 128)            # Addr of primary handler.
   11847     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11848 
   11849 /* ------------------------------ */
   11850     .balign 128
   11851 .L_ALT_op_iput_boolean_quick: /* 0xeb */
   11852 /* File: mips64/alt_stub.S */
   11853 /*
   11854  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11855  * any interesting requests and then jump to the real instruction
   11856  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11857  */
   11858     .extern MterpCheckBefore
   11859     EXPORT_PC
   11860     REFRESH_IBASE
   11861     dla     ra, artMterpAsmInstructionStart
   11862     dla     t9, MterpCheckBefore
   11863     move    a0, rSELF
   11864     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11865     daddu   ra, ra, (235 * 128)            # Addr of primary handler.
   11866     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11867 
   11868 /* ------------------------------ */
   11869     .balign 128
   11870 .L_ALT_op_iput_byte_quick: /* 0xec */
   11871 /* File: mips64/alt_stub.S */
   11872 /*
   11873  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11874  * any interesting requests and then jump to the real instruction
   11875  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11876  */
   11877     .extern MterpCheckBefore
   11878     EXPORT_PC
   11879     REFRESH_IBASE
   11880     dla     ra, artMterpAsmInstructionStart
   11881     dla     t9, MterpCheckBefore
   11882     move    a0, rSELF
   11883     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11884     daddu   ra, ra, (236 * 128)            # Addr of primary handler.
   11885     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11886 
   11887 /* ------------------------------ */
   11888     .balign 128
   11889 .L_ALT_op_iput_char_quick: /* 0xed */
   11890 /* File: mips64/alt_stub.S */
   11891 /*
   11892  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11893  * any interesting requests and then jump to the real instruction
   11894  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11895  */
   11896     .extern MterpCheckBefore
   11897     EXPORT_PC
   11898     REFRESH_IBASE
   11899     dla     ra, artMterpAsmInstructionStart
   11900     dla     t9, MterpCheckBefore
   11901     move    a0, rSELF
   11902     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11903     daddu   ra, ra, (237 * 128)            # Addr of primary handler.
   11904     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11905 
   11906 /* ------------------------------ */
   11907     .balign 128
   11908 .L_ALT_op_iput_short_quick: /* 0xee */
   11909 /* File: mips64/alt_stub.S */
   11910 /*
   11911  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11912  * any interesting requests and then jump to the real instruction
   11913  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11914  */
   11915     .extern MterpCheckBefore
   11916     EXPORT_PC
   11917     REFRESH_IBASE
   11918     dla     ra, artMterpAsmInstructionStart
   11919     dla     t9, MterpCheckBefore
   11920     move    a0, rSELF
   11921     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11922     daddu   ra, ra, (238 * 128)            # Addr of primary handler.
   11923     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11924 
   11925 /* ------------------------------ */
   11926     .balign 128
   11927 .L_ALT_op_iget_boolean_quick: /* 0xef */
   11928 /* File: mips64/alt_stub.S */
   11929 /*
   11930  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11931  * any interesting requests and then jump to the real instruction
   11932  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11933  */
   11934     .extern MterpCheckBefore
   11935     EXPORT_PC
   11936     REFRESH_IBASE
   11937     dla     ra, artMterpAsmInstructionStart
   11938     dla     t9, MterpCheckBefore
   11939     move    a0, rSELF
   11940     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11941     daddu   ra, ra, (239 * 128)            # Addr of primary handler.
   11942     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11943 
   11944 /* ------------------------------ */
   11945     .balign 128
   11946 .L_ALT_op_iget_byte_quick: /* 0xf0 */
   11947 /* File: mips64/alt_stub.S */
   11948 /*
   11949  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11950  * any interesting requests and then jump to the real instruction
   11951  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11952  */
   11953     .extern MterpCheckBefore
   11954     EXPORT_PC
   11955     REFRESH_IBASE
   11956     dla     ra, artMterpAsmInstructionStart
   11957     dla     t9, MterpCheckBefore
   11958     move    a0, rSELF
   11959     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11960     daddu   ra, ra, (240 * 128)            # Addr of primary handler.
   11961     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11962 
   11963 /* ------------------------------ */
   11964     .balign 128
   11965 .L_ALT_op_iget_char_quick: /* 0xf1 */
   11966 /* File: mips64/alt_stub.S */
   11967 /*
   11968  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11969  * any interesting requests and then jump to the real instruction
   11970  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11971  */
   11972     .extern MterpCheckBefore
   11973     EXPORT_PC
   11974     REFRESH_IBASE
   11975     dla     ra, artMterpAsmInstructionStart
   11976     dla     t9, MterpCheckBefore
   11977     move    a0, rSELF
   11978     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11979     daddu   ra, ra, (241 * 128)            # Addr of primary handler.
   11980     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   11981 
   11982 /* ------------------------------ */
   11983     .balign 128
   11984 .L_ALT_op_iget_short_quick: /* 0xf2 */
   11985 /* File: mips64/alt_stub.S */
   11986 /*
   11987  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   11988  * any interesting requests and then jump to the real instruction
   11989  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   11990  */
   11991     .extern MterpCheckBefore
   11992     EXPORT_PC
   11993     REFRESH_IBASE
   11994     dla     ra, artMterpAsmInstructionStart
   11995     dla     t9, MterpCheckBefore
   11996     move    a0, rSELF
   11997     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   11998     daddu   ra, ra, (242 * 128)            # Addr of primary handler.
   11999     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12000 
   12001 /* ------------------------------ */
   12002     .balign 128
   12003 .L_ALT_op_invoke_lambda: /* 0xf3 */
   12004 /* File: mips64/alt_stub.S */
   12005 /*
   12006  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12007  * any interesting requests and then jump to the real instruction
   12008  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12009  */
   12010     .extern MterpCheckBefore
   12011     EXPORT_PC
   12012     REFRESH_IBASE
   12013     dla     ra, artMterpAsmInstructionStart
   12014     dla     t9, MterpCheckBefore
   12015     move    a0, rSELF
   12016     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12017     daddu   ra, ra, (243 * 128)            # Addr of primary handler.
   12018     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12019 
   12020 /* ------------------------------ */
   12021     .balign 128
   12022 .L_ALT_op_unused_f4: /* 0xf4 */
   12023 /* File: mips64/alt_stub.S */
   12024 /*
   12025  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12026  * any interesting requests and then jump to the real instruction
   12027  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12028  */
   12029     .extern MterpCheckBefore
   12030     EXPORT_PC
   12031     REFRESH_IBASE
   12032     dla     ra, artMterpAsmInstructionStart
   12033     dla     t9, MterpCheckBefore
   12034     move    a0, rSELF
   12035     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12036     daddu   ra, ra, (244 * 128)            # Addr of primary handler.
   12037     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12038 
   12039 /* ------------------------------ */
   12040     .balign 128
   12041 .L_ALT_op_capture_variable: /* 0xf5 */
   12042 /* File: mips64/alt_stub.S */
   12043 /*
   12044  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12045  * any interesting requests and then jump to the real instruction
   12046  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12047  */
   12048     .extern MterpCheckBefore
   12049     EXPORT_PC
   12050     REFRESH_IBASE
   12051     dla     ra, artMterpAsmInstructionStart
   12052     dla     t9, MterpCheckBefore
   12053     move    a0, rSELF
   12054     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12055     daddu   ra, ra, (245 * 128)            # Addr of primary handler.
   12056     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12057 
   12058 /* ------------------------------ */
   12059     .balign 128
   12060 .L_ALT_op_create_lambda: /* 0xf6 */
   12061 /* File: mips64/alt_stub.S */
   12062 /*
   12063  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12064  * any interesting requests and then jump to the real instruction
   12065  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12066  */
   12067     .extern MterpCheckBefore
   12068     EXPORT_PC
   12069     REFRESH_IBASE
   12070     dla     ra, artMterpAsmInstructionStart
   12071     dla     t9, MterpCheckBefore
   12072     move    a0, rSELF
   12073     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12074     daddu   ra, ra, (246 * 128)            # Addr of primary handler.
   12075     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12076 
   12077 /* ------------------------------ */
   12078     .balign 128
   12079 .L_ALT_op_liberate_variable: /* 0xf7 */
   12080 /* File: mips64/alt_stub.S */
   12081 /*
   12082  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12083  * any interesting requests and then jump to the real instruction
   12084  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12085  */
   12086     .extern MterpCheckBefore
   12087     EXPORT_PC
   12088     REFRESH_IBASE
   12089     dla     ra, artMterpAsmInstructionStart
   12090     dla     t9, MterpCheckBefore
   12091     move    a0, rSELF
   12092     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12093     daddu   ra, ra, (247 * 128)            # Addr of primary handler.
   12094     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12095 
   12096 /* ------------------------------ */
   12097     .balign 128
   12098 .L_ALT_op_box_lambda: /* 0xf8 */
   12099 /* File: mips64/alt_stub.S */
   12100 /*
   12101  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12102  * any interesting requests and then jump to the real instruction
   12103  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12104  */
   12105     .extern MterpCheckBefore
   12106     EXPORT_PC
   12107     REFRESH_IBASE
   12108     dla     ra, artMterpAsmInstructionStart
   12109     dla     t9, MterpCheckBefore
   12110     move    a0, rSELF
   12111     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12112     daddu   ra, ra, (248 * 128)            # Addr of primary handler.
   12113     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12114 
   12115 /* ------------------------------ */
   12116     .balign 128
   12117 .L_ALT_op_unbox_lambda: /* 0xf9 */
   12118 /* File: mips64/alt_stub.S */
   12119 /*
   12120  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12121  * any interesting requests and then jump to the real instruction
   12122  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12123  */
   12124     .extern MterpCheckBefore
   12125     EXPORT_PC
   12126     REFRESH_IBASE
   12127     dla     ra, artMterpAsmInstructionStart
   12128     dla     t9, MterpCheckBefore
   12129     move    a0, rSELF
   12130     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12131     daddu   ra, ra, (249 * 128)            # Addr of primary handler.
   12132     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12133 
   12134 /* ------------------------------ */
   12135     .balign 128
   12136 .L_ALT_op_unused_fa: /* 0xfa */
   12137 /* File: mips64/alt_stub.S */
   12138 /*
   12139  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12140  * any interesting requests and then jump to the real instruction
   12141  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12142  */
   12143     .extern MterpCheckBefore
   12144     EXPORT_PC
   12145     REFRESH_IBASE
   12146     dla     ra, artMterpAsmInstructionStart
   12147     dla     t9, MterpCheckBefore
   12148     move    a0, rSELF
   12149     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12150     daddu   ra, ra, (250 * 128)            # Addr of primary handler.
   12151     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12152 
   12153 /* ------------------------------ */
   12154     .balign 128
   12155 .L_ALT_op_unused_fb: /* 0xfb */
   12156 /* File: mips64/alt_stub.S */
   12157 /*
   12158  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12159  * any interesting requests and then jump to the real instruction
   12160  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12161  */
   12162     .extern MterpCheckBefore
   12163     EXPORT_PC
   12164     REFRESH_IBASE
   12165     dla     ra, artMterpAsmInstructionStart
   12166     dla     t9, MterpCheckBefore
   12167     move    a0, rSELF
   12168     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12169     daddu   ra, ra, (251 * 128)            # Addr of primary handler.
   12170     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12171 
   12172 /* ------------------------------ */
   12173     .balign 128
   12174 .L_ALT_op_unused_fc: /* 0xfc */
   12175 /* File: mips64/alt_stub.S */
   12176 /*
   12177  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12178  * any interesting requests and then jump to the real instruction
   12179  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12180  */
   12181     .extern MterpCheckBefore
   12182     EXPORT_PC
   12183     REFRESH_IBASE
   12184     dla     ra, artMterpAsmInstructionStart
   12185     dla     t9, MterpCheckBefore
   12186     move    a0, rSELF
   12187     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12188     daddu   ra, ra, (252 * 128)            # Addr of primary handler.
   12189     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12190 
   12191 /* ------------------------------ */
   12192     .balign 128
   12193 .L_ALT_op_unused_fd: /* 0xfd */
   12194 /* File: mips64/alt_stub.S */
   12195 /*
   12196  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12197  * any interesting requests and then jump to the real instruction
   12198  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12199  */
   12200     .extern MterpCheckBefore
   12201     EXPORT_PC
   12202     REFRESH_IBASE
   12203     dla     ra, artMterpAsmInstructionStart
   12204     dla     t9, MterpCheckBefore
   12205     move    a0, rSELF
   12206     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12207     daddu   ra, ra, (253 * 128)            # Addr of primary handler.
   12208     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12209 
   12210 /* ------------------------------ */
   12211     .balign 128
   12212 .L_ALT_op_unused_fe: /* 0xfe */
   12213 /* File: mips64/alt_stub.S */
   12214 /*
   12215  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12216  * any interesting requests and then jump to the real instruction
   12217  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12218  */
   12219     .extern MterpCheckBefore
   12220     EXPORT_PC
   12221     REFRESH_IBASE
   12222     dla     ra, artMterpAsmInstructionStart
   12223     dla     t9, MterpCheckBefore
   12224     move    a0, rSELF
   12225     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12226     daddu   ra, ra, (254 * 128)            # Addr of primary handler.
   12227     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12228 
   12229 /* ------------------------------ */
   12230     .balign 128
   12231 .L_ALT_op_unused_ff: /* 0xff */
   12232 /* File: mips64/alt_stub.S */
   12233 /*
   12234  * Inter-instruction transfer stub.  Call out to MterpCheckBefore to handle
   12235  * any interesting requests and then jump to the real instruction
   12236  * handler.  Note that the call to MterpCheckBefore is done as a tail call.
   12237  */
   12238     .extern MterpCheckBefore
   12239     EXPORT_PC
   12240     REFRESH_IBASE
   12241     dla     ra, artMterpAsmInstructionStart
   12242     dla     t9, MterpCheckBefore
   12243     move    a0, rSELF
   12244     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12245     daddu   ra, ra, (255 * 128)            # Addr of primary handler.
   12246     jalr    zero, t9                            # (self, shadow_frame) Note: tail call.
   12247 
   12248     .balign 128
   12249     .size   artMterpAsmAltInstructionStart, .-artMterpAsmAltInstructionStart
   12250     .global artMterpAsmAltInstructionEnd
   12251 artMterpAsmAltInstructionEnd:
   12252 /* File: mips64/footer.S */
   12253 /*
   12254  * We've detected a condition that will result in an exception, but the exception
   12255  * has not yet been thrown.  Just bail out to the reference interpreter to deal with it.
   12256  * TUNING: for consistency, we may want to just go ahead and handle these here.
   12257  */
   12258 
   12259     .extern MterpLogDivideByZeroException
   12260 common_errDivideByZero:
   12261     EXPORT_PC
   12262 #if MTERP_LOGGING
   12263     move    a0, rSELF
   12264     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12265     jal     MterpLogDivideByZeroException
   12266 #endif
   12267     b       MterpCommonFallback
   12268 
   12269     .extern MterpLogArrayIndexException
   12270 common_errArrayIndex:
   12271     EXPORT_PC
   12272 #if MTERP_LOGGING
   12273     move    a0, rSELF
   12274     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12275     jal     MterpLogArrayIndexException
   12276 #endif
   12277     b       MterpCommonFallback
   12278 
   12279     .extern MterpLogNullObjectException
   12280 common_errNullObject:
   12281     EXPORT_PC
   12282 #if MTERP_LOGGING
   12283     move    a0, rSELF
   12284     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12285     jal     MterpLogNullObjectException
   12286 #endif
   12287     b       MterpCommonFallback
   12288 
   12289 /*
   12290  * If we're here, something is out of the ordinary.  If there is a pending
   12291  * exception, handle it.  Otherwise, roll back and retry with the reference
   12292  * interpreter.
   12293  */
   12294 MterpPossibleException:
   12295     ld      a0, THREAD_EXCEPTION_OFFSET(rSELF)
   12296     beqzc   a0, MterpFallback                       # If not, fall back to reference interpreter.
   12297     /* intentional fallthrough - handle pending exception. */
   12298 /*
   12299  * On return from a runtime helper routine, we've found a pending exception.
   12300  * Can we handle it here - or need to bail out to caller?
   12301  *
   12302  */
   12303     .extern MterpHandleException
   12304     .extern MterpShouldSwitchInterpreters
   12305 MterpException:
   12306     move    a0, rSELF
   12307     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12308     jal     MterpHandleException                    # (self, shadow_frame)
   12309     beqzc   v0, MterpExceptionReturn                # no local catch, back to caller.
   12310     ld      a0, OFF_FP_CODE_ITEM(rFP)
   12311     lwu     a1, OFF_FP_DEX_PC(rFP)
   12312     REFRESH_IBASE
   12313     daddu   rPC, a0, CODEITEM_INSNS_OFFSET
   12314     dlsa    rPC, a1, rPC, 1                         # generate new dex_pc_ptr
   12315     /* Do we need to switch interpreters? */
   12316     jal     MterpShouldSwitchInterpreters
   12317     bnezc   v0, MterpFallback
   12318     /* resume execution at catch block */
   12319     EXPORT_PC
   12320     FETCH_INST
   12321     GET_INST_OPCODE v0
   12322     GOTO_OPCODE v0
   12323     /* NOTE: no fallthrough */
   12324 
   12325 /*
   12326  * Check for suspend check request.  Assumes rINST already loaded, rPC advanced and
   12327  * still needs to get the opcode and branch to it, and flags are in ra.
   12328  */
   12329     .extern MterpSuspendCheck
   12330 MterpCheckSuspendAndContinue:
   12331     REFRESH_IBASE
   12332     and     ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST)
   12333     bnez    ra, check1
   12334     GET_INST_OPCODE v0                              # extract opcode from rINST
   12335     GOTO_OPCODE v0                                  # jump to next instruction
   12336 check1:
   12337     EXPORT_PC
   12338     move    a0, rSELF
   12339     jal     MterpSuspendCheck                       # (self)
   12340     bnezc   v0, MterpFallback                       # Something in the environment changed, switch interpreters
   12341     GET_INST_OPCODE v0                              # extract opcode from rINST
   12342     GOTO_OPCODE v0                                  # jump to next instruction
   12343 
   12344 /*
   12345  * On-stack replacement has happened, and now we've returned from the compiled method.
   12346  */
   12347 MterpOnStackReplacement:
   12348 #if MTERP_LOGGING
   12349     move    a0, rSELF
   12350     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12351     move    a2, rINST                               # rINST contains offset
   12352     jal     MterpLogOSR
   12353 #endif
   12354     li      v0, 1                                   # Signal normal return
   12355     b       MterpDone
   12356 
   12357 /*
   12358  * Bail out to reference interpreter.
   12359  */
   12360     .extern MterpLogFallback
   12361 MterpFallback:
   12362     EXPORT_PC
   12363 #if MTERP_LOGGING
   12364     move    a0, rSELF
   12365     daddu   a1, rFP, OFF_FP_SHADOWFRAME
   12366     jal     MterpLogFallback
   12367 #endif
   12368 MterpCommonFallback:
   12369     li      v0, 0                                   # signal retry with reference interpreter.
   12370     b       MterpDone
   12371 
   12372 /*
   12373  * We pushed some registers on the stack in ExecuteMterpImpl, then saved
   12374  * SP and RA.  Here we restore SP, restore the registers, and then restore
   12375  * RA to PC.
   12376  *
   12377  * On entry:
   12378  *  uint32_t* rFP  (should still be live, pointer to base of vregs)
   12379  */
   12380 MterpExceptionReturn:
   12381     li      v0, 1                                   # signal return to caller.
   12382     b       MterpDone
   12383 /*
   12384  * Returned value is expected in a0 and if it's not 64-bit, the 32 most
   12385  * significant bits of a0 must be 0.
   12386  */
   12387 MterpReturn:
   12388     ld      a2, OFF_FP_RESULT_REGISTER(rFP)
   12389     lw      ra, THREAD_FLAGS_OFFSET(rSELF)
   12390     sd      a0, 0(a2)
   12391     move    a0, rSELF
   12392     and     ra, ra, (THREAD_SUSPEND_REQUEST | THREAD_CHECKPOINT_REQUEST)
   12393     beqzc   ra, check2
   12394     jal     MterpSuspendCheck                       # (self)
   12395 check2:
   12396     li      v0, 1                                   # signal return to caller.
   12397 MterpDone:
   12398     ld      s5, STACK_OFFSET_S5(sp)
   12399     .cfi_restore 21
   12400     ld      s4, STACK_OFFSET_S4(sp)
   12401     .cfi_restore 20
   12402     ld      s3, STACK_OFFSET_S3(sp)
   12403     .cfi_restore 19
   12404     ld      s2, STACK_OFFSET_S2(sp)
   12405     .cfi_restore 18
   12406     ld      s1, STACK_OFFSET_S1(sp)
   12407     .cfi_restore 17
   12408     ld      s0, STACK_OFFSET_S0(sp)
   12409     .cfi_restore 16
   12410 
   12411     ld      ra, STACK_OFFSET_RA(sp)
   12412     .cfi_restore 31
   12413 
   12414     ld      t8, STACK_OFFSET_GP(sp)
   12415     .cpreturn
   12416     .cfi_restore 28
   12417 
   12418     .set    noreorder
   12419     jr      ra
   12420     daddu   sp, sp, STACK_SIZE
   12421     .cfi_adjust_cfa_offset -STACK_SIZE
   12422 
   12423     .cfi_endproc
   12424     .size ExecuteMterpImpl, .-ExecuteMterpImpl
   12425 
   12426