Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 1 | page.title=Dalvik VM Instruction Formats |
| 2 | @jd:body |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 3 | |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 4 | <!-- |
Clay Murphy | 768b82a | 2013-11-12 11:32:41 -0800 | [diff] [blame] | 5 | Copyright 2013 The Android Open Source Project |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 6 | |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 7 | Licensed under the Apache License, Version 2.0 (the "License"); |
| 8 | you may not use this file except in compliance with the License. |
| 9 | You may obtain a copy of the License at |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 10 | |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 11 | http://www.apache.org/licenses/LICENSE-2.0 |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 12 | |
Robert Ly | 35f2fda | 2013-01-29 16:27:05 -0800 | [diff] [blame] | 13 | Unless required by applicable law or agreed to in writing, software |
| 14 | distributed under the License is distributed on an "AS IS" BASIS, |
| 15 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 16 | See the License for the specific language governing permissions and |
| 17 | limitations under the License. |
| 18 | --> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 19 | <h2>Introduction and Overview</h2> |
| 20 | |
| 21 | <p>This document lists the instruction formats used by Dalvik bytecode |
| 22 | and is meant to be used in conjunction with the |
| 23 | <a href="dalvik-bytecode.html">bytecode reference document</a>.</p> |
| 24 | |
| 25 | <h3>Bitwise descriptions</h3> |
| 26 | |
| 27 | <p>The first column in the format table lists the bitwise layout of |
| 28 | the format. It consists of one or more space-separated "words" each of |
| 29 | which describes a 16-bit code unit. Each character in a word |
| 30 | represents four bits, read from high bits to low, with vertical bars |
| 31 | ("<code>|</code>") interspersed to aid in reading. Uppercase letters |
| 32 | in sequence from "<code>A</code>" are used to indicate fields within |
| 33 | the format (which then get defined further by the syntax column). The term |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 34 | "<code>op</code>" is used to indicate the position of an eight-bit |
| 35 | opcode within the format. A slashed zero |
| 36 | ("<code>Ø</code>") is used to indicate that all bits must be |
| 37 | zero in the indicated position.</p> |
| 38 | |
| 39 | <p>For the most part, lettering proceeds from earlier code units to |
| 40 | later code units, and low-order to high-order within a code unit. |
| 41 | However, there are a few exceptions to this general rule, which are |
| 42 | done in order to make the naming of similar-meaning parts be the same |
| 43 | across different instruction formats. These cases are noted explicitly |
| 44 | in the format descriptions.</p> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 45 | |
| 46 | <p>For example, the format "<code>B|A|<i>op</i> CCCC</code>" indicates |
| 47 | that the format consists of two 16-bit code units. The first word |
| 48 | consists of the opcode in the low eight bits and a pair of four-bit |
| 49 | values in the high eight bits; and the second word consists of a single |
| 50 | 16-bit value.</p> |
| 51 | |
| 52 | <h3>Format IDs</h3> |
| 53 | |
| 54 | <p>The second column in the format table indicates the short identifier |
| 55 | for the format, which is used in other documents and in code to identify |
| 56 | the format.</p> |
| 57 | |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 58 | <p>Most format IDs consist of three characters, two digits followed by a |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 59 | letter. The first digit indicates the number of 16-bit code units in the |
| 60 | format. The second digit indicates the maximum number of registers that the |
| 61 | format contains (maximum, since some formats can accomodate a variable |
| 62 | number of registers), with the special designation "<code>r</code>" indicating |
| 63 | that a range of registers is encoded. The final letter semi-mnemonically |
| 64 | indicates the type of any extra data encoded by the format. For example, |
| 65 | format "<code>21t</code>" is of length two, contains one register reference, |
| 66 | and additionally contains a branch target.</p> |
| 67 | |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 68 | <p>Suggested static linking formats have an additional |
| 69 | "<code>s</code>" suffix, making them four characters total. Similarly, |
| 70 | suggested "inline" linking formats have an additional "<code>i</code>" |
| 71 | suffix. (In this context, inline linking is like static linking, |
| 72 | except with more direct ties into a virtual machine's implementation.) |
| 73 | Finally, a couple oddball suggested formats (e.g., |
| 74 | "<code>20bc</code>") include two pieces of data which are both |
| 75 | represented in its format ID.</p> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 76 | |
| 77 | <p>The full list of typecode letters are as follows. Note that some |
| 78 | forms have different sizes, depending on the format:</p> |
| 79 | |
| 80 | <table class="letters"> |
| 81 | <thead> |
| 82 | <tr> |
| 83 | <th>Mnemonic</th> |
| 84 | <th>Bit Sizes</th> |
| 85 | <th>Meaning</th> |
| 86 | </tr> |
| 87 | </thead> |
| 88 | <tbody> |
| 89 | <tr> |
| 90 | <td>b</td> |
| 91 | <td>8</td> |
| 92 | <td>immediate signed <b>b</b>yte</td> |
| 93 | </tr> |
| 94 | <tr> |
| 95 | <td>c</td> |
| 96 | <td>16, 32</td> |
| 97 | <td><b>c</b>onstant pool index</td> |
| 98 | </tr> |
| 99 | <tr> |
| 100 | <td>f</td> |
| 101 | <td>16</td> |
| 102 | <td>inter<b>f</b>ace constants (only used in statically linked formats) |
| 103 | </td> |
| 104 | </tr> |
| 105 | <tr> |
| 106 | <td>h</td> |
| 107 | <td>16</td> |
| 108 | <td>immediate signed <b>h</b>at (high-order bits of a 32- or 64-bit |
| 109 | value; low-order bits are all <code>0</code>) |
| 110 | </td> |
| 111 | </tr> |
| 112 | <tr> |
| 113 | <td>i</td> |
| 114 | <td>32</td> |
| 115 | <td>immediate signed <b>i</b>nt, or 32-bit float</td> |
| 116 | </tr> |
| 117 | <tr> |
| 118 | <td>l</td> |
| 119 | <td>64</td> |
| 120 | <td>immediate signed <b>l</b>ong, or 64-bit double</td> |
| 121 | </tr> |
| 122 | <tr> |
| 123 | <td>m</td> |
| 124 | <td>16</td> |
| 125 | <td><b>m</b>ethod constants (only used in statically linked formats)</td> |
| 126 | </tr> |
| 127 | <tr> |
| 128 | <td>n</td> |
| 129 | <td>4</td> |
| 130 | <td>immediate signed <b>n</b>ibble</td> |
| 131 | </tr> |
| 132 | <tr> |
| 133 | <td>s</td> |
| 134 | <td>16</td> |
| 135 | <td>immediate signed <b>s</b>hort</td> |
| 136 | </tr> |
| 137 | <tr> |
| 138 | <td>t</td> |
| 139 | <td>8, 16, 32</td> |
| 140 | <td>branch <b>t</b>arget</td> |
| 141 | </tr> |
| 142 | <tr> |
| 143 | <td>x</td> |
| 144 | <td>0</td> |
| 145 | <td>no additional data</td> |
| 146 | </tr> |
| 147 | </tbody> |
| 148 | </table> |
| 149 | |
| 150 | <h3>Syntax</h3> |
| 151 | |
| 152 | <p>The third column of the format table indicates the human-oriented |
| 153 | syntax for instructions which use the indicated format. Each instruction |
| 154 | starts with the named opcode and is optionally followed by one or |
| 155 | more arguments, themselves separated with commas.</p> |
| 156 | |
| 157 | <p>Wherever an argument refers to a field from the first column, the |
| 158 | letter for that field is indicated in the syntax, repeated once for |
| 159 | each four bits of the field. For example, an eight-bit field labeled |
| 160 | "<code>BB</code>" in the first column would also be labeled |
| 161 | "<code>BB</code>" in the syntax column.</p> |
| 162 | |
| 163 | <p>Arguments which name a register have the form "<code>v<i>X</i></code>". |
| 164 | The prefix "<code>v</code>" was chosen instead of the more common |
| 165 | "<code>r</code>" exactly to avoid conflicting with (non-virtual) architectures |
| 166 | on which a Dalvik virtual machine might be implemented which themselves |
| 167 | use the prefix "<code>r</code>" for their registers. (That is, this |
| 168 | decision makes it possible to talk about both virtual and real registers |
| 169 | together without the need for circumlocution.)</p> |
| 170 | |
| 171 | <p>Arguments which indicate a literal value have the form |
| 172 | "<code>#+<i>X</i></code>". Some formats indicate literals that only |
| 173 | have non-zero bits in their high-order bits; for these, the zeroes |
| 174 | are represented explicitly in the syntax, even though they do not |
| 175 | appear in the bitwise representation.</p> |
| 176 | |
| 177 | <p>Arguments which indicate a relative instruction address offset have the |
| 178 | form "<code>+<i>X</i></code>".</p> |
| 179 | |
| 180 | <p>Arguments which indicate a literal constant pool index have the form |
| 181 | "<code><i>kind</i>@<i>X</i></code>", where "<code><i>kind</i></code>" |
| 182 | indicates which constant pool is being referred to. Each opcode that |
| 183 | uses such a format explicitly allows only one kind of constant; see |
| 184 | the opcode reference to figure out the correspondence. The four |
| 185 | kinds of constant pool are "<code>string</code>" (string pool index), |
| 186 | "<code>type</code>" (type pool index), "<code>field</code>" (field |
| 187 | pool index), and "<code>meth</code>" (method pool index).</p> |
| 188 | |
| 189 | <p>Similar to the representation of constant pool indices, there are |
| 190 | also suggested (optional) forms that indicate prelinked offsets or |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 191 | indices. There are two types of suggested prelinked value: vtable offsets |
| 192 | (indicated as "<code>vtaboff</code>") and field offsets (indicated as |
| 193 | "<code>fieldoff</code>").</p> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 194 | |
| 195 | <p>In the cases where a format value isn't explictly part of the syntax |
| 196 | but instead picks a variant, each variant is listed with the prefix |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 197 | "<code>[<i>X</i>=<i>N</i>]</code>" (e.g., "<code>[A=2]</code>") to indicate |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 198 | the correspondence.</p> |
| 199 | |
| 200 | <h2>The Formats</h2> |
| 201 | |
| 202 | <table class="format"> |
| 203 | <thead> |
| 204 | <tr> |
| 205 | <th>Format</th> |
| 206 | <th>ID</th> |
| 207 | <th>Syntax</th> |
| 208 | <th>Notable Opcodes Covered</th> |
| 209 | </tr> |
| 210 | </thead> |
| 211 | <tbody> |
| 212 | <tr> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 213 | <td><i>N/A</i></td> |
| 214 | <td>00x</td> |
| 215 | <td><i><code>N/A</code></i></td> |
| 216 | <td><i>pseudo-format used for unused opcodes; suggested for use as the |
| 217 | nominal format for a breakpoint opcode</i></td> |
| 218 | </tr> |
| 219 | <tr> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 220 | <td>ØØ|<i>op</i></td> |
| 221 | <td>10x</td> |
| 222 | <td><i><code>op</code></i></td> |
| 223 | <td> </td> |
| 224 | </tr> |
| 225 | <tr> |
| 226 | <td rowspan="2">B|A|<i>op</i></td> |
| 227 | <td>12x</td> |
| 228 | <td><i><code>op</code></i> vA, vB</td> |
| 229 | <td> </td> |
| 230 | </tr> |
| 231 | <tr> |
| 232 | <td>11n</td> |
| 233 | <td><i><code>op</code></i> vA, #+B</td> |
| 234 | <td> </td> |
| 235 | </tr> |
| 236 | <tr> |
| 237 | <td rowspan="2">AA|<i>op</i></td> |
| 238 | <td>11x</td> |
| 239 | <td><i><code>op</code></i> vAA</td> |
| 240 | <td> </td> |
| 241 | </tr> |
| 242 | <tr> |
| 243 | <td>10t</td> |
| 244 | <td><i><code>op</code></i> +AA</td> |
| 245 | <td>goto</td> |
| 246 | </tr> |
| 247 | <tr> |
| 248 | <td>ØØ|<i>op</i> AAAA</td></td> |
| 249 | <td>20t</td> |
| 250 | <td><i><code>op</code></i> +AAAA</td> |
| 251 | <td>goto/16</td> |
| 252 | </tr> |
| 253 | <tr> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 254 | <td>AA|<i>op</i> BBBB</td></td> |
| 255 | <td>20bc</td> |
| 256 | <td><i><code>op</code></i> AA, kind@BBBB</td> |
| 257 | <td><i>suggested format for statically determined verification errors; |
| 258 | A is the type of error and B is an index into a type-appropriate |
| 259 | table (e.g. method references for a no-such-method error)</i></td> |
| 260 | </tr> |
| 261 | <tr> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 262 | <td rowspan="5">AA|<i>op</i> BBBB</td> |
| 263 | <td>22x</td> |
| 264 | <td><i><code>op</code></i> vAA, vBBBB</td> |
| 265 | <td> </td> |
| 266 | </tr> |
| 267 | <tr> |
| 268 | <td>21t</td> |
| 269 | <td><i><code>op</code></i> vAA, +BBBB</td> |
| 270 | <td> </td> |
| 271 | </tr> |
| 272 | <tr> |
| 273 | <td>21s</td> |
| 274 | <td><i><code>op</code></i> vAA, #+BBBB</td> |
| 275 | <td> </td> |
| 276 | </tr> |
| 277 | <tr> |
| 278 | <td>21h</td> |
| 279 | <td><i><code>op</code></i> vAA, #+BBBB0000<br/> |
| 280 | <i><code>op</code></i> vAA, #+BBBB000000000000 |
| 281 | </td> |
| 282 | <td> </td> |
| 283 | </tr> |
| 284 | <tr> |
| 285 | <td>21c</td> |
| 286 | <td><i><code>op</code></i> vAA, type@BBBB<br/> |
| 287 | <i><code>op</code></i> vAA, field@BBBB<br/> |
| 288 | <i><code>op</code></i> vAA, string@BBBB |
| 289 | </td> |
| 290 | <td>check-cast<br/> |
| 291 | const-class<br/> |
| 292 | const-string |
| 293 | </td> |
| 294 | </tr> |
| 295 | <tr> |
| 296 | <td rowspan="2">AA|<i>op</i> CC|BB</td> |
| 297 | <td>23x</td> |
| 298 | <td><i><code>op</code></i> vAA, vBB, vCC</td> |
| 299 | <td> </td> |
| 300 | </tr> |
| 301 | <tr> |
| 302 | <td>22b</td> |
| 303 | <td><i><code>op</code></i> vAA, vBB, #+CC</td> |
| 304 | <td> </td> |
| 305 | </tr> |
| 306 | <tr> |
| 307 | <td rowspan="4">B|A|<i>op</i> CCCC</td> |
| 308 | <td>22t</td> |
| 309 | <td><i><code>op</code></i> vA, vB, +CCCC</td> |
| 310 | <td> </td> |
| 311 | </tr> |
| 312 | <tr> |
| 313 | <td>22s</td> |
| 314 | <td><i><code>op</code></i> vA, vB, #+CCCC</td> |
| 315 | <td> </td> |
| 316 | </tr> |
| 317 | <tr> |
| 318 | <td>22c</td> |
| 319 | <td><i><code>op</code></i> vA, vB, type@CCCC<br/> |
| 320 | <i><code>op</code></i> vA, vB, field@CCCC |
| 321 | </td> |
| 322 | <td>instance-of</td> |
| 323 | </tr> |
| 324 | <tr> |
| 325 | <td>22cs</td> |
| 326 | <td><i><code>op</code></i> vA, vB, fieldoff@CCCC</td> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 327 | <td><i>suggested format for statically linked field access instructions of |
| 328 | format 22c</i> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 329 | </td> |
| 330 | </tr> |
| 331 | <tr> |
| 332 | <td>ØØ|<i>op</i> AAAA<sub>lo</sub> AAAA<sub>hi</sub></td></td> |
| 333 | <td>30t</td> |
| 334 | <td><i><code>op</code></i> +AAAAAAAA</td> |
| 335 | <td>goto/32</td> |
| 336 | </tr> |
| 337 | <tr> |
| 338 | <td>ØØ|<i>op</i> AAAA BBBB</td> |
| 339 | <td>32x</td> |
| 340 | <td><i><code>op</code></i> vAAAA, vBBBB</td> |
| 341 | <td> </td> |
| 342 | </tr> |
| 343 | <tr> |
| 344 | <td rowspan="3">AA|<i>op</i> BBBB<sub>lo</sub> BBBB<sub>hi</sub></td> |
| 345 | <td>31i</td> |
| 346 | <td><i><code>op</code></i> vAA, #+BBBBBBBB</td> |
| 347 | <td> </td> |
| 348 | </tr> |
| 349 | <tr> |
| 350 | <td>31t</td> |
| 351 | <td><i><code>op</code></i> vAA, +BBBBBBBB</td> |
| 352 | <td> </td> |
| 353 | </tr> |
| 354 | <tr> |
| 355 | <td>31c</td> |
| 356 | <td><i><code>op</code></i> vAA, string@BBBBBBBB</td> |
| 357 | <td>const-string/jumbo</td> |
| 358 | </tr> |
| 359 | <tr> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 360 | <td rowspan="3">A|G|<i>op</i> BBBB F|E|D|C</td> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 361 | <td>35c</td> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 362 | <td><i>[<code>A=5</code>] <code>op</code></i> {vC, vD, vE, vF, vG}, |
| 363 | meth@BBBB<br/> |
| 364 | <i>[<code>A=5</code>] <code>op</code></i> {vC, vD, vE, vF, vG}, |
| 365 | type@BBBB<br/> |
| 366 | <i>[<code>A=4</code>] <code>op</code></i> {vC, vD, vE, vF}, |
| 367 | <i><code>kind</code></i>@BBBB<br/> |
| 368 | <i>[<code>A=3</code>] <code>op</code></i> {vC, vD, vE}, |
| 369 | <i><code>kind</code></i>@BBBB<br/> |
| 370 | <i>[<code>A=2</code>] <code>op</code></i> {vC, vD}, |
| 371 | <i><code>kind</code></i>@BBBB<br/> |
| 372 | <i>[<code>A=1</code>] <code>op</code></i> {vC}, |
| 373 | <i><code>kind</code></i>@BBBB<br/> |
| 374 | <i>[<code>A=0</code>] <code>op</code></i> {}, |
| 375 | <i><code>kind</code></i>@BBBB<br/> |
| 376 | <p><i>The unusual choice in lettering here reflects a desire to make |
| 377 | the count and the reference index have the same label as in format |
| 378 | 3rc.</i></p> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 379 | </td> |
| 380 | <td> </td> |
| 381 | </tr> |
| 382 | <tr> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 383 | <td>35ms</td> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 384 | <td><i>[<code>A=5</code>] <code>op</code></i> {vC, vD, vE, vF, vG}, |
| 385 | vtaboff@BBBB<br/> |
| 386 | <i>[<code>A=4</code>] <code>op</code></i> {vC, vD, vE, vF}, |
| 387 | vtaboff@BBBB<br/> |
| 388 | <i>[<code>A=3</code>] <code>op</code></i> {vC, vD, vE}, |
| 389 | vtaboff@BBBB<br/> |
| 390 | <i>[<code>A=2</code>] <code>op</code></i> {vC, vD}, |
| 391 | vtaboff@BBBB<br/> |
| 392 | <i>[<code>A=1</code>] <code>op</code></i> {vC}, |
| 393 | vtaboff@BBBB<br/> |
| 394 | <p><i>The unusual choice in lettering here reflects a desire to make |
| 395 | the count and the reference index have the same label as in format |
| 396 | 3rms.</i></p> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 397 | </td> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 398 | <td><i>suggested format for statically linked <code>invoke-virtual</code> |
| 399 | and <code>invoke-super</code> instructions of format 35c</i> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 400 | </td> |
| 401 | </tr> |
| 402 | <tr> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 403 | <td>35mi</td> |
| 404 | <td><i>[<code>A=5</code>] <code>op</code></i> {vC, vD, vE, vF, vG}, |
| 405 | inline@BBBB<br/> |
| 406 | <i>[<code>A=4</code>] <code>op</code></i> {vC, vD, vE, vF}, |
| 407 | inline@BBBB<br/> |
| 408 | <i>[<code>A=3</code>] <code>op</code></i> {vC, vD, vE}, |
| 409 | inline@BBBB<br/> |
| 410 | <i>[<code>A=2</code>] <code>op</code></i> {vC, vD}, |
| 411 | inline@BBBB<br/> |
| 412 | <i>[<code>A=1</code>] <code>op</code></i> {vC}, |
| 413 | inline@BBBB<br/> |
| 414 | <p><i>The unusual choice in lettering here reflects a desire to make |
| 415 | the count and the reference index have the same label as in format |
| 416 | 3rmi.</i></p> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 417 | </td> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 418 | <td><i>suggested format for inline linked <code>invoke-static</code> |
| 419 | and <code>invoke-virtual</code> instructions of format 35c</i> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 420 | </td> |
| 421 | </tr> |
| 422 | <tr> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 423 | <td rowspan="3">AA|<i>op</i> BBBB CCCC</td> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 424 | <td>3rc</td> |
| 425 | <td><i><code>op</code></i> {vCCCC .. vNNNN}, meth@BBBB<br/> |
| 426 | <i><code>op</code></i> {vCCCC .. vNNNN}, type@BBBB<br/> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 427 | <p><i>where <code>NNNN = CCCC+AA-1</code>, that is <code>A</code> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 428 | determines the count <code>0..255</code>, and <code>C</code> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 429 | determines the first register</i></p> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 430 | </td> |
| 431 | <td> </td> |
| 432 | </tr> |
| 433 | <tr> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 434 | <td>3rms</td> |
| 435 | <td><i><code>op</code></i> {vCCCC .. vNNNN}, vtaboff@BBBB<br/> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 436 | <p><i>where <code>NNNN = CCCC+AA-1</code>, that is <code>A</code> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 437 | determines the count <code>0..255</code>, and <code>C</code> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 438 | determines the first register</i></p> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 439 | </td> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 440 | <td><i>suggested format for statically linked <code>invoke-virtual</code> |
| 441 | and <code>invoke-super</code> instructions of format <code>3rc</code></i> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 442 | </td> |
| 443 | </tr> |
| 444 | <tr> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 445 | <td>3rmi</td> |
| 446 | <td><i><code>op</code></i> {vCCCC .. vNNNN}, inline@BBBB<br/> |
| 447 | <p><i>where <code>NNNN = CCCC+AA-1</code>, that is <code>A</code> |
| 448 | determines the count <code>0..255</code>, and <code>C</code> |
| 449 | determines the first register</i></p> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 450 | </td> |
Elliott Hughes | 8d77794 | 2012-01-05 17:27:02 -0800 | [diff] [blame] | 451 | <td><i>suggested format for inline linked <code>invoke-static</code> |
| 452 | and <code>invoke-virtual</code> instructions of format 3rc</i> |
Dan Bornstein | 25705bc | 2011-04-12 16:23:13 -0700 | [diff] [blame] | 453 | </td> |
| 454 | </tr> |
| 455 | <tr> |
| 456 | <td>AA|<i>op</i> BBBB<sub>lo</sub> BBBB BBBB BBBB<sub>hi</sub></td> |
| 457 | <td>51l</td> |
| 458 | <td><i><code>op</code></i> vAA, #+BBBBBBBBBBBBBBBB</td> |
| 459 | <td>const-wide</td> |
| 460 | </tr> |
| 461 | </tbody> |
Clay Murphy | 768b82a | 2013-11-12 11:32:41 -0800 | [diff] [blame] | 462 | </table> |