<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>if-test</title> <link rel=stylesheet href="opcode.css"> </head> <body> <h1>if-test</h1> <h2>Purpose</h2> <p> Branch to the given destination if the given two registers' values compare as specified. </p> <p> Note: The branch offset may not be 0. (A spin loop may be legally constructed either by branching around a backward goto or by including a nop as a target before the branch.) </p> <h2>Details</h2> <table class="instruc"> <thead> <tr> <th>Op & Format</th> <th>Mnemonic / Syntax</th> <th>Arguments</th> </tr> </thead> <tbody> <tr> <td>32..37 22t</td> <td>if-<i>test</i> vA, vB, +CCCC<br/> 32: if-eq<br/> 33: if-ne<br/> 34: if-lt<br/> 35: if-ge<br/> 36: if-gt<br/> 37: if-le<br/> </td> <td><code>A:</code> first register to test (4 bits)<br/> <code>B:</code> second register to test (4 bits)<br/> <code>C:</code> signed branch offset (16 bits)</td> </tr> </tbody> </table> <h2>Constraints</h2> <ul> <li> A and B must be valid register indices for the current stack frame. </li> <li> Registers vA and vB must not contain a reference value. </li> <li> Registers vA and vB must not be part of a register pair. </li> <li> Registers vA and vB must not contain a floating point value (???). </li> C must of a signed offset that, when added to the PC of the instruction, points to a valid bytecode instruction inside the same method. </li> </ul> <h2>Behavior</h2> <ul> <li> The values of registers vA and vB are compared according to the <test> condition. Two results are possible: <ul> <li> The condition holds. The value of C is used as a signed offset to the address of the if-<test> instruction. Execution continues at the resulting address. </li> <li> The condition does not hold. Execution continues at the instruction following the if-<test> instruction. </li> </ul> </li> </ul> <h2>Exceptions</h2> <p> None. </p> </body> </html>