op_goto_16.S revision 00b53b7f3f9ce5996b767b52c28dd846f47a723c
1 /* 2 * Unconditional branch, 16-bit offset. 3 * 4 * The branch distance is a signed code-unit offset, which we need to 5 * double to get a byte offset. 6 */ 7 /* goto/16 +AAAA */ 8 lh a0, 2(rPC) # a0 <- sign-extended AAAA 9 dlsa rPC, a0, rPC, 1 # rPC <- rPC + AAAA * 2 10 FETCH_INST # load rINST 11 12#if MTERP_SUSPEND 13 bgez a0, 1f # AA * 2 >= 0 => no suspend check 14 REFRESH_IBASE 151: 16#else 17 lw ra, THREAD_FLAGS_OFFSET(rSELF) # Preload flags for MterpCheckSuspendAndContinue 18 bltz a0, MterpCheckSuspendAndContinue 19#endif 20 21 GET_INST_OPCODE v0 # extract opcode from rINST 22 GOTO_OPCODE v0 # jump to next instruction 23