Home | History | Annotate | Download | only in opcodes
      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      2 
      3 <html>
      4 
      5 <head>
      6 <title>return</title>
      7 <link rel=stylesheet href="opcode.css">
      8 </head>
      9 
     10 <body>
     11 
     12 <h1>return</h1>
     13 
     14 <h2>Purpose</h2>
     15 
     16 <p>
     17 Return from a single-width (32-bit) non-object value-returning method.
     18 </p>
     19 
     20 <h2>Details</h2>
     21 
     22 <table class="instruc">
     23 <thead>
     24 <tr>
     25   <th>Op &amp; Format</th>
     26   <th>Mnemonic / Syntax</th>
     27   <th>Arguments</th>
     28 </tr>
     29 </thead>
     30 <tbody>
     31 <tr>
     32   <td>0f 11x</td>
     33   <td>return vAA</td>
     34   <td><code>A:</code> return value register (8 bits)</td>
     35 </tr>
     36 </tbody>
     37 </table>
     38 
     39 <h2>Constraints</h2>
     40 
     41 <ul>
     42   <li>
     43     The return type of the current method must not be double, long, or a
     44     reference.
     45   </li>
     46   <li>
     47     A must be a valid register index in the current stack frame.
     48   </li>
     49   <li>
     50     Register vA must not be part of a register pair.
     51   </li>
     52   <li>
     53     The type of vA must match the return type of the method.
     54   </li>
     55 </ul> 
     56     
     57 <h2>Behavior</h2>
     58 
     59 <ul>
     60   <li>
     61     If the method is synchronized, the object's monitor is released in a way
     62     similar to the monitor-exit instruction.
     63   </li>
     64   <li>
     65     The stack frame of the current method invocation is removed from the stack.
     66     This includes all its registers becoming invalid.
     67   </li>
     68   <li>
     69     If the stack is now empty, the current thread terminates.
     70   </li>
     71   <li>
     72     Otherwise, the following happens:
     73     <ul>
     74       <li>
     75         The stack frame that caused this method invocation becomes valid. This
     76         includes all its registers and their old values.
     77       </li>
     78       <li>
     79         Execution continues at the bytecode instruction immediately following
     80         the invoke-kind or invoke-kind/range instruction that caused this
     81         method invocation.
     82       </li>
     83       <li>
     84         The return value can be consumed by (exactly) the first instruction
     85         following the invoke-kind or invoke-kind/range instruction that caused
     86         this method invocation, and this instructions needs to be a move-result
     87         instruction.
     88       </li>
     89     </ul>
     90   </li>
     91 </ul>
     92  
     93 <h2>Exceptions</h2>
     94 
     95 <p>
     96 None.
     97 </p>
     98 
     99 </body>
    100 </html>
    101