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>&nbsp;</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>&nbsp;</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>