blob: 48f6e5afd74ca7c9caf6960f6721512939d3df0a [file] [log] [blame]
/*
* Unconditional branch, 32-bit offset.
*
* The branch distance is a signed code-unit offset, which we need to
* double to get a byte offset.
*
* Unlike most opcodes, this one is allowed to branch to itself, so
* our "backward branch" test must be "<=0" instead of "<0". Because
* we need the V bit set, we'll use an adds to convert from Dalvik
* offset to byte offset.
*/
/* goto/32 +AAAAAAAA */
movl 2(rPC), %eax # eax <- AAAAAAAA
addl %eax, %eax # eax <- AA * 2
leal (rPC, %eax), rPC
FETCH_INST
jg 1f # AA * 2 > 0 => no suspend check
#if MTERP_SUSPEND
REFRESH_IBASE
#else
jmp MterpCheckSuspendAndContinue
#endif
1:
GOTO_NEXT