1 %verify "executed" 2 %verify "forward and backward" 3 /* 4 * Unconditional branch, 16-bit offset. 5 * 6 * The branch distance is a signed code-unit offset, which we need to 7 * double to get a byte offset. 8 */ 9 /* goto/16 +AAAA */ 10 FETCH_S(r0, 1) @ r0<- ssssAAAA (sign-extended) 11 movs r9, r0, asl #1 @ r9<- byte offset, check sign 12 bmi common_backwardBranch @ backward branch, do periodic checks 13 #if defined(WITH_JIT) 14 GET_JIT_PROF_TABLE(r0) 15 FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 16 cmp r0,#0 17 bne common_updateProfile 18 GET_INST_OPCODE(ip) @ extract opcode from rINST 19 GOTO_OPCODE(ip) @ jump to next instruction 20 #else 21 FETCH_ADVANCE_INST_RB(r9) @ update rPC, load rINST 22 GET_INST_OPCODE(ip) @ extract opcode from rINST 23 GOTO_OPCODE(ip) @ jump to next instruction 24 #endif 25 26