<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html>

<head>
<title>const-string</title>
<link rel=stylesheet href="opcode.css">
</head>

<body>

<h1>const-string</h1>

<h2>Purpose</h2>

<p>
Move a reference to the string specified by the given index into the specified
register. 
</p>

<h2>Details</h2>

<table class="instruc">
<thead>
<tr>
  <th>Op &amp; Format</th>
  <th>Mnemonic / Syntax</th>
  <th>Arguments</th>
</tr>
</thead>
<tbody>
<tr>
  <td>1a 21c</td>
  <td>const-string vAA, string@BBBB</td>
  <td><code>A:</code> destination register (8 bits)<br/>
    <code>B:</code> string index</td>
</tr>
<tr>
  <td>1b 31c</td>
  <td>const-string/jumbo vAA, string@BBBBBBBB</td>
  <td><code>A:</code> destination register (8 bits)<br/>
    <code>B:</code> string index</td>
</tr>
</tbody>
</table>

<h2>Constraints</h2>

<ul>
  <li>
    A must be a valid register index in the current stack frame.
  </li>
  <li>
    B must be a valid index into the string constant pool.
  </li>     
</ul>

<h2>Behavior</h2>

<ul>
  <li>
    A new java.lang.String object S is allocated on the heap and filled with the
    contents of string pool entry B.
  </li>
  <li>
    A reference to an internalized version of the new object is moved into
    register vA, that is, the instruction behaves as if vA' = S.intern() was
    called.
  </li>
  <li>
    If v(A-1) is the lower half of a register pair, v(A-1)' becomes undefined.
  </li>
  <li>
    If v(A+1) is the upper half of a register pair, v(A+1)' becomes undefined.
  </li> 
</ul>

<h2>Exceptions</h2>

<p>
None.
</p>

</body>
</html>
