if_icmp<cond>
Operation
Branch if int
comparison succeeds
if_icmp<cond>
|
|
branchbyte1
|
|
branchbyte2
|
|
Forms
if_icmpeq = 159 (0x9f)
if_icmpne = 160 (0xa0)
if_icmplt = 161 (0xa1)
if_icmpge = 162 (0xa2)
if_icmpgt = 163 (0xa3)
if_icmple = 164 (0xa4)
Stack
..., value1, value2 ...
Description
Both value1 and value2 must be of type int
. They are both popped from the operand stack and compared. All comparisons are signed. The results of the comparison are as follows:
- eq succeeds if and only if value1 = value2
- ne succeeds if and only if value1 value2
- lt succeeds if and only if value1 < value2
- le succeeds if and only if value1 £ value2
- gt succeeds if and only if value1 > value2
- ge succeeds if and only if value1 value2
If the comparison succeeds, the unsigned branchbyte1 and branchbyte2 are used to construct a signed 16-bit offset, where the offset is calculated to be (branchbyte1 << 8) | branchbyte2. Execution then proceeds at that offset from the address of the opcode of this if_icmp<cond> instruction. The target address must be that of an opcode of an instruction within the method that contains this if_icmp<cond> instruction.
Otherwise, execution proceeds at the address of the instruction following this if_icmp<cond> instruction.