1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed"
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "forward, backward, self"
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unconditional branch, 32-bit offset.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The branch distance is a signed code-unit offset, which we need to
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * double to get a byte offset.
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Unlike most opcodes, this one is allowed to branch to itself, so
109a3147c7412f4794434b4c2604aa2ba784867774buzbee     * our "backward branch" test must be "<=0" instead of "<0".  Because
119a3147c7412f4794434b4c2604aa2ba784867774buzbee     * we need the V bit set, we'll use an adds to convert from Dalvik
129a3147c7412f4794434b4c2604aa2ba784867774buzbee     * offset to byte offset.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /* goto/32 +AAAAAAAA */
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r0, 1)                        @ r0<- aaaa (lo)
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    FETCH(r1, 2)                        @ r1<- AAAA (hi)
179a3147c7412f4794434b4c2604aa2ba784867774buzbee    orr     r0, r0, r1, lsl #16         @ r0<- AAAAaaaa
189a3147c7412f4794434b4c2604aa2ba784867774buzbee    adds    r1, r0, r0                  @ r1<- byte offset
19ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#if defined(WITH_JIT)
209a3147c7412f4794434b4c2604aa2ba784867774buzbee    ldr     r0, [rSELF, #offThread_pJitProfTable]
219a3147c7412f4794434b4c2604aa2ba784867774buzbee    ldrle   rIBASE, [rSELF, #offThread_curHandlerTable] @ refresh handler base
229a3147c7412f4794434b4c2604aa2ba784867774buzbee    FETCH_ADVANCE_INST_RB(r1)           @ update rPC, load rINST
239a3147c7412f4794434b4c2604aa2ba784867774buzbee    ble     common_testUpdateProfile    @ (r0) hot trace head?
24ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng#else
259a3147c7412f4794434b4c2604aa2ba784867774buzbee    FETCH_ADVANCE_INST_RB(r1)           @ update rPC, load rINST
269a3147c7412f4794434b4c2604aa2ba784867774buzbee    ldrle   rIBASE, [rSELF, #offThread_curHandlerTable] @ refresh handler base
279a3147c7412f4794434b4c2604aa2ba784867774buzbee#endif
28ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GET_INST_OPCODE(ip)                 @ extract opcode from rINST
29ba4fc8bfc1bccae048403bd1cea3b869dca61dd7Ben Cheng    GOTO_OPCODE(ip)                     @ jump to next instruction
30