| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
| |
| <html> |
| |
| <head> |
| <title>binop</title> |
| <link rel=stylesheet href="opcode.css"> |
| </head> |
| |
| <body> |
| |
| <h1>binop</h1> |
| |
| <h2>Purpose</h2> |
| |
| <p> |
| Perform the identified binary operation on the two source registers, storing |
| the result in the first source register. |
| </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>90..af 23x</td> |
| <td><i>binop</i> vAA, vBB, vCC<br/> |
| 90: add-int<br/> |
| 91: sub-int<br/> |
| 92: mul-int<br/> |
| 93: div-int<br/> |
| 94: rem-int<br/> |
| 95: and-int<br/> |
| 96: or-int<br/> |
| 97: xor-int<br/> |
| 98: shl-int<br/> |
| 99: shr-int<br/> |
| 9a: ushr-int<br/> |
| 9b: add-long<br/> |
| 9c: sub-long<br/> |
| 9d: mul-long<br/> |
| 9e: div-long<br/> |
| 9f: rem-long<br/> |
| a0: and-long<br/> |
| a1: or-long<br/> |
| a2: xor-long<br/> |
| a3: shl-long<br/> |
| a4: shr-long<br/> |
| a5: ushr-long<br/> |
| a6: add-float<br/> |
| a7: sub-float<br/> |
| a8: mul-float<br/> |
| a9: div-float<br/> |
| aa: rem-float<br/> |
| ab: add-double<br/> |
| ac: sub-double<br/> |
| ad: mul-double<br/> |
| ae: div-double<br/> |
| af: rem-double |
| </td> |
| <td><code>A:</code> destination register or pair (8 bits)<br/> |
| <code>B:</code> first source register or pair (8 bits)<br/> |
| <code>C:</code> second source register or pair (8 bits)</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <h2>Constraints</h2> |
| |
| <ul> |
| <li> |
| All A, B and C must be valid register indices in the current stackframe. |
| </li> |
| <li> |
| For the -long and -double variants, also A+1, B+1 and C+1 must be valid |
| register indices. |
| </li> |
| <li> |
| Registers vB and vC must be defined. They must both contain values that |
| match the variant of the instruction (it's probably better to split this up |
| into multiple pages again). |
| </li> |
| </ul> |
| |
| <h2>Behavior</h2> |
| |
| <ul> |
| <li> |
| The given operation <binop> is performed according to the semantics |
| specified in table XXX. |
| </li> |
| <li> |
| The result is stored in register vA, that is, vA'=<biop> vB. |
| </li> |
| <li> |
| For the -double and -long variants, (vA+1) is also affected. |
| </li> |
| <li> |
| As usual, neighboring registers might get undefined, if vA (and vA+1) were |
| part of a register pair originally. |
| </li> |
| </ul> |
| |
| <h2>Exceptions</h2> |
| |
| <ul> |
| <li> |
| ArithmeticException if an error occurs during the instruction. |
| </li> |
| </ul> |
| |
| </body> |
| </html> |