Merge "Docs: Add bytecodes and formats for invoke-polymorphic"
diff --git a/src/devices/tech/dalvik/dalvik-bytecode.jd b/src/devices/tech/dalvik/dalvik-bytecode.jd
index 01196f2..5e32680 100644
--- a/src/devices/tech/dalvik/dalvik-bytecode.jd
+++ b/src/devices/tech/dalvik/dalvik-bytecode.jd
@@ -1013,7 +1013,54 @@
</td>
</tr>
<tr>
- <td>e3..ff 10x</td>
+ <td>e3..f9 10x</td>
+ <td><i>(unused)</i></td>
+ <td> </td>
+ <td><i>(unused)</i></td>
+</tr>
+<tr>
+ <td>fa 45cc</td>
+ <td>invoke-polymorphic {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH</td>
+ <td>
+ <code>A:</code> argument word count (4 bits) </br>
+ <code>B:</code> method reference index (16 bits) </br>
+ <code>C:</code> method handle reference to invoke (16 bits) </br>
+ <code>D..G:</code> argument registers (4 bits each) </br>
+ <code>H:</code> prototype reference index (16 bits) </br>
+ </td>
+ <td>
+ Invoke the indicated method handle. The result (if any) may be stored
+ with an appropriate <code>move-result*</code> variant as the immediately
+ subsequent instruction.
+ <p> The method reference must be to <code>java.lang.invoke.MethodHandle.invoke</code>
+ or <code>java.lang.invoke.MethodHandle.invokeExact</code>.
+ <p> The prototype reference describes the argument types provided
+ and the expected return type.
+ <p> The <code>invoke-polymorphic</code> bytecode may raise exceptions when it
+ executes. The exceptions are described in the API documentation
+ for <code>java.lang.invoke.MethodHandle.invoke</code> and
+ <code>java.lang.invoke.MethodHandle.invokeExact</code>.
+ <p> Present in Dex files from version <code>038</code> onwards.
+ </td>
+</tr>
+<tr>
+ <td>fb 4rcc</td>
+ <td>invoke-polymorphic/range {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH</td>
+ <td>
+ <code>A:</code> argument word count (8 bits) </br>
+ <code>B:</code> method reference index (16 bits) </br>
+ <code>C:</code> method handle reference to invoke (16 bits) </br>
+ <code>H:</code> prototype reference index (16 bits) </br>
+ <code>N = A + C - 1</code>
+ </td>
+ <td>
+ Invoke the indicated method handle. See the <code>invoke-polymorphic</code>
+ description above for details.
+ <p> Present in Dex files from version <code>038</code> onwards.
+ </td>
+</tr>
+<tr>
+ <td>fc..ff 10x</td>
<td><i>(unused)</i></td>
<td> </td>
<td><i>(unused)</i></td>
diff --git a/src/devices/tech/dalvik/instruction-formats.jd b/src/devices/tech/dalvik/instruction-formats.jd
index 69b0924..d82f54c 100644
--- a/src/devices/tech/dalvik/instruction-formats.jd
+++ b/src/devices/tech/dalvik/instruction-formats.jd
@@ -461,6 +461,31 @@
</td>
</tr>
<tr>
+ <td>AG|<i>op</i> BBBB F|E|D|C HHHH
+ <td>45cc</td>
+ <td>
+ <i>[<code>A=5</code>] <code>op</code></i> {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH<br>
+ <i>[<code>A=4</code>] <code>op</code></i> {vC, vD, vE, vF}, meth@BBBB, proto@HHHH<br>
+ <i>[<code>A=3</code>] <code>op</code></i> {vC, vD, vE}, meth@BBBB, proto@HHHH<br>
+ <i>[<code>A=2</code>] <code>op</code></i> {vC, vD}, meth@BBBB, proto@HHHH<br>
+ <i>[<code>A=1</code>] <code>op</code></i> {vC}, meth@BBBB, proto@HHHH
+ </td>
+ <td>invoke-polymorphic
+ </td>
+</tr>
+<tr>
+ <td>AA|<i>op</i> BBBB CCCC HHHH
+ <td>4rcc</td>
+ <td>
+ <code>op></code> {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH
+ <p><i>wheere <code>NNNN = CCCC+AA-1</code>, that is <code>A</code>
+ determines the count <code>0..255</code>, and <code>C</code>
+ determines the first register</i></p>
+ </td>
+ <td>invoke-polymorphic/range
+ </td>
+</tr>
+<tr>
<td>AA|<i>op</i> BBBB<sub>lo</sub> BBBB BBBB BBBB<sub>hi</sub></td>
<td>51l</td>
<td><i><code>op</code></i> vAA, #+BBBBBBBBBBBBBBBB</td>