xref: /aosp_15_r20/dalvik/opcode-gen/bytecode.txt (revision 055d459012065f78d96b68be8421640240ddf631)
1*055d4590SKeyi Gui# Copyright (C) 2007 The Android Open Source Project
2*055d4590SKeyi Gui#
3*055d4590SKeyi Gui# Licensed under the Apache License, Version 2.0 (the "License");
4*055d4590SKeyi Gui# you may not use this file except in compliance with the License.
5*055d4590SKeyi Gui# You may obtain a copy of the License at
6*055d4590SKeyi Gui#
7*055d4590SKeyi Gui#      http://www.apache.org/licenses/LICENSE-2.0
8*055d4590SKeyi Gui#
9*055d4590SKeyi Gui# Unless required by applicable law or agreed to in writing, software
10*055d4590SKeyi Gui# distributed under the License is distributed on an "AS IS" BASIS,
11*055d4590SKeyi Gui# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*055d4590SKeyi Gui# See the License for the specific language governing permissions and
13*055d4590SKeyi Gui# limitations under the License.
14*055d4590SKeyi Gui
15*055d4590SKeyi Gui#
16*055d4590SKeyi Gui# Bytecode definition file
17*055d4590SKeyi Gui#
18*055d4590SKeyi Gui
19*055d4590SKeyi Gui# One line per instruction format family. Each line consists of a
20*055d4590SKeyi Gui# series of instruction formats that all take (potentially) compatible
21*055d4590SKeyi Gui# arguments. The order is the preferred order (most to least
22*055d4590SKeyi Gui# preferable) of formats, when more than one opcode could be used for
23*055d4590SKeyi Gui# a given instruction's arguments.
24*055d4590SKeyi Gui#
25*055d4590SKeyi Gui# Note: The family that starts with 12x has a mix of both two- and
26*055d4590SKeyi Gui# three- register formats. This is because some of the two-register
27*055d4590SKeyi Gui# opcodes effectively take three, with a destination and two sources
28*055d4590SKeyi Gui# where the destination and one of the sources have to be the same.
29*055d4590SKeyi Gui
30*055d4590SKeyi Gui# Regular formats
31*055d4590SKeyi Guiformat 10t 20t 30t
32*055d4590SKeyi Guiformat 10x
33*055d4590SKeyi Guiformat 11n 21s 21h 31i 51l
34*055d4590SKeyi Guiformat 11x
35*055d4590SKeyi Guiformat 12x 22x 23x 32x  # See note, above.
36*055d4590SKeyi Guiformat 21c 31c
37*055d4590SKeyi Guiformat 21t 31t
38*055d4590SKeyi Guiformat 22b 22s
39*055d4590SKeyi Guiformat 22c
40*055d4590SKeyi Guiformat 22t
41*055d4590SKeyi Guiformat 35c 3rc
42*055d4590SKeyi Guiformat 45cc 4rcc
43*055d4590SKeyi Gui
44*055d4590SKeyi Gui# Optimized formats
45*055d4590SKeyi Guiformat 00x
46*055d4590SKeyi Guiformat 20bc
47*055d4590SKeyi Guiformat 22cs
48*055d4590SKeyi Guiformat 35mi
49*055d4590SKeyi Guiformat 35ms
50*055d4590SKeyi Guiformat 3rmi
51*055d4590SKeyi Guiformat 3rms
52*055d4590SKeyi Gui
53*055d4590SKeyi Gui# One line per opcode. Columns are:
54*055d4590SKeyi Gui#   hex for opcode
55*055d4590SKeyi Gui#   opcode name
56*055d4590SKeyi Gui#   format
57*055d4590SKeyi Gui#   has result register; one of:
58*055d4590SKeyi Gui#     y
59*055d4590SKeyi Gui#     n
60*055d4590SKeyi Gui#   index type; one of:
61*055d4590SKeyi Gui#     unknown -- used for undefined opcodes and breakpoint
62*055d4590SKeyi Gui#     none
63*055d4590SKeyi Gui#     varies
64*055d4590SKeyi Gui#     type-ref
65*055d4590SKeyi Gui#     string-ref
66*055d4590SKeyi Gui#     method-ref
67*055d4590SKeyi Gui#     field-ref
68*055d4590SKeyi Gui#     inline-method
69*055d4590SKeyi Gui#     vtable-offset
70*055d4590SKeyi Gui#     field-offset
71*055d4590SKeyi Gui#     method-and-proto-ref
72*055d4590SKeyi Gui#     call-site-ref
73*055d4590SKeyi Gui#     method-handle-ref
74*055d4590SKeyi Gui#     proto-ref
75*055d4590SKeyi Gui#   flags; pipe-combined combo of one or more of:
76*055d4590SKeyi Gui#     optimized     -- optimized; not to be included in unoptimized dex files
77*055d4590SKeyi Gui#     branch        -- might branch to an address
78*055d4590SKeyi Gui#     continue      -- might continue to the next address in sequence
79*055d4590SKeyi Gui#     switch        -- is a switch
80*055d4590SKeyi Gui#     throw         -- might throw an exception
81*055d4590SKeyi Gui#     return        -- is a return from method
82*055d4590SKeyi Gui#     invoke        -- is a method invoke; this is only used for true
83*055d4590SKeyi Gui#                      method invokes and notably *not* vm-implemented
84*055d4590SKeyi Gui#                      execute-inline nor the nop-equivalent
85*055d4590SKeyi Gui#                      invoke-direct-empty
86*055d4590SKeyi Gui
87*055d4590SKeyi Gui#
88*055d4590SKeyi Gui# Regular opcodes (with a couple holes)
89*055d4590SKeyi Gui#
90*055d4590SKeyi Gui
91*055d4590SKeyi Guiop   00 nop                         10x  n none          continue
92*055d4590SKeyi Guiop   01 move                        12x  y none          continue
93*055d4590SKeyi Guiop   02 move/from16                 22x  y none          continue
94*055d4590SKeyi Guiop   03 move/16                     32x  y none          continue
95*055d4590SKeyi Guiop   04 move-wide                   12x  y none          continue
96*055d4590SKeyi Guiop   05 move-wide/from16            22x  y none          continue
97*055d4590SKeyi Guiop   06 move-wide/16                32x  y none          continue
98*055d4590SKeyi Guiop   07 move-object                 12x  y none          continue
99*055d4590SKeyi Guiop   08 move-object/from16          22x  y none          continue
100*055d4590SKeyi Guiop   09 move-object/16              32x  y none          continue
101*055d4590SKeyi Guiop   0a move-result                 11x  y none          continue
102*055d4590SKeyi Guiop   0b move-result-wide            11x  y none          continue
103*055d4590SKeyi Guiop   0c move-result-object          11x  y none          continue
104*055d4590SKeyi Guiop   0d move-exception              11x  y none          continue
105*055d4590SKeyi Guiop   0e return-void                 10x  n none          return
106*055d4590SKeyi Guiop   0f return                      11x  n none          return
107*055d4590SKeyi Guiop   10 return-wide                 11x  n none          return
108*055d4590SKeyi Guiop   11 return-object               11x  n none          return
109*055d4590SKeyi Guiop   12 const/4                     11n  y none          continue
110*055d4590SKeyi Guiop   13 const/16                    21s  y none          continue
111*055d4590SKeyi Guiop   14 const                       31i  y none          continue
112*055d4590SKeyi Guiop   15 const/high16                21h  y none          continue
113*055d4590SKeyi Guiop   16 const-wide/16               21s  y none          continue
114*055d4590SKeyi Guiop   17 const-wide/32               31i  y none          continue
115*055d4590SKeyi Guiop   18 const-wide                  51l  y none          continue
116*055d4590SKeyi Guiop   19 const-wide/high16           21h  y none          continue
117*055d4590SKeyi Guiop   1a const-string                21c  y string-ref    continue|throw
118*055d4590SKeyi Guiop   1b const-string/jumbo          31c  y string-ref    continue|throw
119*055d4590SKeyi Guiop   1c const-class                 21c  y type-ref      continue|throw
120*055d4590SKeyi Guiop   1d monitor-enter               11x  n none          continue|throw
121*055d4590SKeyi Guiop   1e monitor-exit                11x  n none          continue|throw
122*055d4590SKeyi Guiop   1f check-cast                  21c  y type-ref      continue|throw
123*055d4590SKeyi Guiop   20 instance-of                 22c  y type-ref      continue|throw
124*055d4590SKeyi Guiop   21 array-length                12x  y none          continue|throw
125*055d4590SKeyi Guiop   22 new-instance                21c  y type-ref      continue|throw
126*055d4590SKeyi Guiop   23 new-array                   22c  y type-ref      continue|throw
127*055d4590SKeyi Guiop   24 filled-new-array            35c  n type-ref      continue|throw
128*055d4590SKeyi Guiop   25 filled-new-array/range      3rc  n type-ref      continue|throw
129*055d4590SKeyi Guiop   26 fill-array-data             31t  n none          continue
130*055d4590SKeyi Guiop   27 throw                       11x  n none          throw
131*055d4590SKeyi Guiop   28 goto                        10t  n none          branch
132*055d4590SKeyi Guiop   29 goto/16                     20t  n none          branch
133*055d4590SKeyi Guiop   2a goto/32                     30t  n none          branch
134*055d4590SKeyi Guiop   2b packed-switch               31t  n none          continue|switch
135*055d4590SKeyi Guiop   2c sparse-switch               31t  n none          continue|switch
136*055d4590SKeyi Guiop   2d cmpl-float                  23x  y none          continue
137*055d4590SKeyi Guiop   2e cmpg-float                  23x  y none          continue
138*055d4590SKeyi Guiop   2f cmpl-double                 23x  y none          continue
139*055d4590SKeyi Guiop   30 cmpg-double                 23x  y none          continue
140*055d4590SKeyi Guiop   31 cmp-long                    23x  y none          continue
141*055d4590SKeyi Guiop   32 if-eq                       22t  n none          continue|branch
142*055d4590SKeyi Guiop   33 if-ne                       22t  n none          continue|branch
143*055d4590SKeyi Guiop   34 if-lt                       22t  n none          continue|branch
144*055d4590SKeyi Guiop   35 if-ge                       22t  n none          continue|branch
145*055d4590SKeyi Guiop   36 if-gt                       22t  n none          continue|branch
146*055d4590SKeyi Guiop   37 if-le                       22t  n none          continue|branch
147*055d4590SKeyi Guiop   38 if-eqz                      21t  n none          continue|branch
148*055d4590SKeyi Guiop   39 if-nez                      21t  n none          continue|branch
149*055d4590SKeyi Guiop   3a if-ltz                      21t  n none          continue|branch
150*055d4590SKeyi Guiop   3b if-gez                      21t  n none          continue|branch
151*055d4590SKeyi Guiop   3c if-gtz                      21t  n none          continue|branch
152*055d4590SKeyi Guiop   3d if-lez                      21t  n none          continue|branch
153*055d4590SKeyi Gui# unused: op 3e..43
154*055d4590SKeyi Guiop   44 aget                        23x  y none          continue|throw
155*055d4590SKeyi Guiop   45 aget-wide                   23x  y none          continue|throw
156*055d4590SKeyi Guiop   46 aget-object                 23x  y none          continue|throw
157*055d4590SKeyi Guiop   47 aget-boolean                23x  y none          continue|throw
158*055d4590SKeyi Guiop   48 aget-byte                   23x  y none          continue|throw
159*055d4590SKeyi Guiop   49 aget-char                   23x  y none          continue|throw
160*055d4590SKeyi Guiop   4a aget-short                  23x  y none          continue|throw
161*055d4590SKeyi Guiop   4b aput                        23x  n none          continue|throw
162*055d4590SKeyi Guiop   4c aput-wide                   23x  n none          continue|throw
163*055d4590SKeyi Guiop   4d aput-object                 23x  n none          continue|throw
164*055d4590SKeyi Guiop   4e aput-boolean                23x  n none          continue|throw
165*055d4590SKeyi Guiop   4f aput-byte                   23x  n none          continue|throw
166*055d4590SKeyi Guiop   50 aput-char                   23x  n none          continue|throw
167*055d4590SKeyi Guiop   51 aput-short                  23x  n none          continue|throw
168*055d4590SKeyi Guiop   52 iget                        22c  y field-ref     continue|throw
169*055d4590SKeyi Guiop   53 iget-wide                   22c  y field-ref     continue|throw
170*055d4590SKeyi Guiop   54 iget-object                 22c  y field-ref     continue|throw
171*055d4590SKeyi Guiop   55 iget-boolean                22c  y field-ref     continue|throw
172*055d4590SKeyi Guiop   56 iget-byte                   22c  y field-ref     continue|throw
173*055d4590SKeyi Guiop   57 iget-char                   22c  y field-ref     continue|throw
174*055d4590SKeyi Guiop   58 iget-short                  22c  y field-ref     continue|throw
175*055d4590SKeyi Guiop   59 iput                        22c  n field-ref     continue|throw
176*055d4590SKeyi Guiop   5a iput-wide                   22c  n field-ref     continue|throw
177*055d4590SKeyi Guiop   5b iput-object                 22c  n field-ref     continue|throw
178*055d4590SKeyi Guiop   5c iput-boolean                22c  n field-ref     continue|throw
179*055d4590SKeyi Guiop   5d iput-byte                   22c  n field-ref     continue|throw
180*055d4590SKeyi Guiop   5e iput-char                   22c  n field-ref     continue|throw
181*055d4590SKeyi Guiop   5f iput-short                  22c  n field-ref     continue|throw
182*055d4590SKeyi Guiop   60 sget                        21c  y field-ref     continue|throw
183*055d4590SKeyi Guiop   61 sget-wide                   21c  y field-ref     continue|throw
184*055d4590SKeyi Guiop   62 sget-object                 21c  y field-ref     continue|throw
185*055d4590SKeyi Guiop   63 sget-boolean                21c  y field-ref     continue|throw
186*055d4590SKeyi Guiop   64 sget-byte                   21c  y field-ref     continue|throw
187*055d4590SKeyi Guiop   65 sget-char                   21c  y field-ref     continue|throw
188*055d4590SKeyi Guiop   66 sget-short                  21c  y field-ref     continue|throw
189*055d4590SKeyi Guiop   67 sput                        21c  n field-ref     continue|throw
190*055d4590SKeyi Guiop   68 sput-wide                   21c  n field-ref     continue|throw
191*055d4590SKeyi Guiop   69 sput-object                 21c  n field-ref     continue|throw
192*055d4590SKeyi Guiop   6a sput-boolean                21c  n field-ref     continue|throw
193*055d4590SKeyi Guiop   6b sput-byte                   21c  n field-ref     continue|throw
194*055d4590SKeyi Guiop   6c sput-char                   21c  n field-ref     continue|throw
195*055d4590SKeyi Guiop   6d sput-short                  21c  n field-ref     continue|throw
196*055d4590SKeyi Guiop   6e invoke-virtual              35c  n method-ref    continue|throw|invoke
197*055d4590SKeyi Guiop   6f invoke-super                35c  n method-ref    continue|throw|invoke
198*055d4590SKeyi Guiop   70 invoke-direct               35c  n method-ref    continue|throw|invoke
199*055d4590SKeyi Guiop   71 invoke-static               35c  n method-ref    continue|throw|invoke
200*055d4590SKeyi Guiop   72 invoke-interface            35c  n method-ref    continue|throw|invoke
201*055d4590SKeyi Gui# unused: op 73
202*055d4590SKeyi Guiop   74 invoke-virtual/range        3rc  n method-ref    continue|throw|invoke
203*055d4590SKeyi Guiop   75 invoke-super/range          3rc  n method-ref    continue|throw|invoke
204*055d4590SKeyi Guiop   76 invoke-direct/range         3rc  n method-ref    continue|throw|invoke
205*055d4590SKeyi Guiop   77 invoke-static/range         3rc  n method-ref    continue|throw|invoke
206*055d4590SKeyi Guiop   78 invoke-interface/range      3rc  n method-ref    continue|throw|invoke
207*055d4590SKeyi Gui# unused: op 79..7a
208*055d4590SKeyi Guiop   7b neg-int                     12x  y none          continue
209*055d4590SKeyi Guiop   7c not-int                     12x  y none          continue
210*055d4590SKeyi Guiop   7d neg-long                    12x  y none          continue
211*055d4590SKeyi Guiop   7e not-long                    12x  y none          continue
212*055d4590SKeyi Guiop   7f neg-float                   12x  y none          continue
213*055d4590SKeyi Guiop   80 neg-double                  12x  y none          continue
214*055d4590SKeyi Guiop   81 int-to-long                 12x  y none          continue
215*055d4590SKeyi Guiop   82 int-to-float                12x  y none          continue
216*055d4590SKeyi Guiop   83 int-to-double               12x  y none          continue
217*055d4590SKeyi Guiop   84 long-to-int                 12x  y none          continue
218*055d4590SKeyi Guiop   85 long-to-float               12x  y none          continue
219*055d4590SKeyi Guiop   86 long-to-double              12x  y none          continue
220*055d4590SKeyi Guiop   87 float-to-int                12x  y none          continue
221*055d4590SKeyi Guiop   88 float-to-long               12x  y none          continue
222*055d4590SKeyi Guiop   89 float-to-double             12x  y none          continue
223*055d4590SKeyi Guiop   8a double-to-int               12x  y none          continue
224*055d4590SKeyi Guiop   8b double-to-long              12x  y none          continue
225*055d4590SKeyi Guiop   8c double-to-float             12x  y none          continue
226*055d4590SKeyi Guiop   8d int-to-byte                 12x  y none          continue
227*055d4590SKeyi Guiop   8e int-to-char                 12x  y none          continue
228*055d4590SKeyi Guiop   8f int-to-short                12x  y none          continue
229*055d4590SKeyi Guiop   90 add-int                     23x  y none          continue
230*055d4590SKeyi Guiop   91 sub-int                     23x  y none          continue
231*055d4590SKeyi Guiop   92 mul-int                     23x  y none          continue
232*055d4590SKeyi Guiop   93 div-int                     23x  y none          continue|throw
233*055d4590SKeyi Guiop   94 rem-int                     23x  y none          continue|throw
234*055d4590SKeyi Guiop   95 and-int                     23x  y none          continue
235*055d4590SKeyi Guiop   96 or-int                      23x  y none          continue
236*055d4590SKeyi Guiop   97 xor-int                     23x  y none          continue
237*055d4590SKeyi Guiop   98 shl-int                     23x  y none          continue
238*055d4590SKeyi Guiop   99 shr-int                     23x  y none          continue
239*055d4590SKeyi Guiop   9a ushr-int                    23x  y none          continue
240*055d4590SKeyi Guiop   9b add-long                    23x  y none          continue
241*055d4590SKeyi Guiop   9c sub-long                    23x  y none          continue
242*055d4590SKeyi Guiop   9d mul-long                    23x  y none          continue
243*055d4590SKeyi Guiop   9e div-long                    23x  y none          continue|throw
244*055d4590SKeyi Guiop   9f rem-long                    23x  y none          continue|throw
245*055d4590SKeyi Guiop   a0 and-long                    23x  y none          continue
246*055d4590SKeyi Guiop   a1 or-long                     23x  y none          continue
247*055d4590SKeyi Guiop   a2 xor-long                    23x  y none          continue
248*055d4590SKeyi Guiop   a3 shl-long                    23x  y none          continue
249*055d4590SKeyi Guiop   a4 shr-long                    23x  y none          continue
250*055d4590SKeyi Guiop   a5 ushr-long                   23x  y none          continue
251*055d4590SKeyi Guiop   a6 add-float                   23x  y none          continue
252*055d4590SKeyi Guiop   a7 sub-float                   23x  y none          continue
253*055d4590SKeyi Guiop   a8 mul-float                   23x  y none          continue
254*055d4590SKeyi Guiop   a9 div-float                   23x  y none          continue
255*055d4590SKeyi Guiop   aa rem-float                   23x  y none          continue
256*055d4590SKeyi Guiop   ab add-double                  23x  y none          continue
257*055d4590SKeyi Guiop   ac sub-double                  23x  y none          continue
258*055d4590SKeyi Guiop   ad mul-double                  23x  y none          continue
259*055d4590SKeyi Guiop   ae div-double                  23x  y none          continue
260*055d4590SKeyi Guiop   af rem-double                  23x  y none          continue
261*055d4590SKeyi Guiop   b0 add-int/2addr               12x  y none          continue
262*055d4590SKeyi Guiop   b1 sub-int/2addr               12x  y none          continue
263*055d4590SKeyi Guiop   b2 mul-int/2addr               12x  y none          continue
264*055d4590SKeyi Guiop   b3 div-int/2addr               12x  y none          continue|throw
265*055d4590SKeyi Guiop   b4 rem-int/2addr               12x  y none          continue|throw
266*055d4590SKeyi Guiop   b5 and-int/2addr               12x  y none          continue
267*055d4590SKeyi Guiop   b6 or-int/2addr                12x  y none          continue
268*055d4590SKeyi Guiop   b7 xor-int/2addr               12x  y none          continue
269*055d4590SKeyi Guiop   b8 shl-int/2addr               12x  y none          continue
270*055d4590SKeyi Guiop   b9 shr-int/2addr               12x  y none          continue
271*055d4590SKeyi Guiop   ba ushr-int/2addr              12x  y none          continue
272*055d4590SKeyi Guiop   bb add-long/2addr              12x  y none          continue
273*055d4590SKeyi Guiop   bc sub-long/2addr              12x  y none          continue
274*055d4590SKeyi Guiop   bd mul-long/2addr              12x  y none          continue
275*055d4590SKeyi Guiop   be div-long/2addr              12x  y none          continue|throw
276*055d4590SKeyi Guiop   bf rem-long/2addr              12x  y none          continue|throw
277*055d4590SKeyi Guiop   c0 and-long/2addr              12x  y none          continue
278*055d4590SKeyi Guiop   c1 or-long/2addr               12x  y none          continue
279*055d4590SKeyi Guiop   c2 xor-long/2addr              12x  y none          continue
280*055d4590SKeyi Guiop   c3 shl-long/2addr              12x  y none          continue
281*055d4590SKeyi Guiop   c4 shr-long/2addr              12x  y none          continue
282*055d4590SKeyi Guiop   c5 ushr-long/2addr             12x  y none          continue
283*055d4590SKeyi Guiop   c6 add-float/2addr             12x  y none          continue
284*055d4590SKeyi Guiop   c7 sub-float/2addr             12x  y none          continue
285*055d4590SKeyi Guiop   c8 mul-float/2addr             12x  y none          continue
286*055d4590SKeyi Guiop   c9 div-float/2addr             12x  y none          continue
287*055d4590SKeyi Guiop   ca rem-float/2addr             12x  y none          continue
288*055d4590SKeyi Guiop   cb add-double/2addr            12x  y none          continue
289*055d4590SKeyi Guiop   cc sub-double/2addr            12x  y none          continue
290*055d4590SKeyi Guiop   cd mul-double/2addr            12x  y none          continue
291*055d4590SKeyi Guiop   ce div-double/2addr            12x  y none          continue
292*055d4590SKeyi Guiop   cf rem-double/2addr            12x  y none          continue
293*055d4590SKeyi Guiop   d0 add-int/lit16               22s  y none          continue
294*055d4590SKeyi Guiop   d1 rsub-int                    22s  y none          continue
295*055d4590SKeyi Guiop   d2 mul-int/lit16               22s  y none          continue
296*055d4590SKeyi Guiop   d3 div-int/lit16               22s  y none          continue|throw
297*055d4590SKeyi Guiop   d4 rem-int/lit16               22s  y none          continue|throw
298*055d4590SKeyi Guiop   d5 and-int/lit16               22s  y none          continue
299*055d4590SKeyi Guiop   d6 or-int/lit16                22s  y none          continue
300*055d4590SKeyi Guiop   d7 xor-int/lit16               22s  y none          continue
301*055d4590SKeyi Guiop   d8 add-int/lit8                22b  y none          continue
302*055d4590SKeyi Guiop   d9 rsub-int/lit8               22b  y none          continue
303*055d4590SKeyi Guiop   da mul-int/lit8                22b  y none          continue
304*055d4590SKeyi Guiop   db div-int/lit8                22b  y none          continue|throw
305*055d4590SKeyi Guiop   dc rem-int/lit8                22b  y none          continue|throw
306*055d4590SKeyi Guiop   dd and-int/lit8                22b  y none          continue
307*055d4590SKeyi Guiop   de or-int/lit8                 22b  y none          continue
308*055d4590SKeyi Guiop   df xor-int/lit8                22b  y none          continue
309*055d4590SKeyi Guiop   e0 shl-int/lit8                22b  y none          continue
310*055d4590SKeyi Guiop   e1 shr-int/lit8                22b  y none          continue
311*055d4590SKeyi Guiop   e2 ushr-int/lit8               22b  y none          continue
312*055d4590SKeyi Gui
313*055d4590SKeyi Gui#
314*055d4590SKeyi Gui# Optimized opcodes (not valid in an unoptimized dex file)
315*055d4590SKeyi Gui#
316*055d4590SKeyi Gui
317*055d4590SKeyi Guiop   e3 +iget-volatile              22c  y field-ref     optimized|continue|throw
318*055d4590SKeyi Guiop   e4 +iput-volatile              22c  n field-ref     optimized|continue|throw
319*055d4590SKeyi Guiop   e5 +sget-volatile              21c  y field-ref     optimized|continue|throw
320*055d4590SKeyi Guiop   e6 +sput-volatile              21c  n field-ref     optimized|continue|throw
321*055d4590SKeyi Guiop   e7 +iget-object-volatile       22c  y field-ref     optimized|continue|throw
322*055d4590SKeyi Guiop   e8 +iget-wide-volatile         22c  y field-ref     optimized|continue|throw
323*055d4590SKeyi Guiop   e9 +iput-wide-volatile         22c  n field-ref     optimized|continue|throw
324*055d4590SKeyi Guiop   ea +sget-wide-volatile         21c  y field-ref     optimized|continue|throw
325*055d4590SKeyi Guiop   eb +sput-wide-volatile         21c  n field-ref     optimized|continue|throw
326*055d4590SKeyi Gui
327*055d4590SKeyi Gui# Technically "breakpoint" isn't really an optimized opcode, but it
328*055d4590SKeyi Gui# fits the label in terms of not being valid in regular dex files.
329*055d4590SKeyi Guiop   ec ^breakpoint                 00x  n unknown       optimized
330*055d4590SKeyi Gui
331*055d4590SKeyi Guiop   ed ^throw-verification-error   20bc n varies        optimized|throw
332*055d4590SKeyi Guiop   ee +execute-inline             35mi n inline-method optimized|continue|throw
333*055d4590SKeyi Guiop   ef +execute-inline/range       3rmi n inline-method optimized|continue|throw
334*055d4590SKeyi Gui
335*055d4590SKeyi Guiop   f0 +invoke-object-init/range   35c  n method-ref    optimized|continue|throw|invoke
336*055d4590SKeyi Guiop   f1 +return-void-barrier        10x  n none          optimized|return
337*055d4590SKeyi Guiop   f2 +iget-quick                 22cs y field-offset  optimized|continue|throw
338*055d4590SKeyi Gui
339*055d4590SKeyi Gui# unused: op f3..f9
340*055d4590SKeyi Gui
341*055d4590SKeyi Gui#
342*055d4590SKeyi Gui# Bytecodes relating to method handles API.
343*055d4590SKeyi Gui#
344*055d4590SKeyi Gui
345*055d4590SKeyi Gui# Invoke-polymorphic
346*055d4590SKeyi Guiop   fa invoke-polymorphic          45cc n method-and-proto-ref continue|throw|invoke
347*055d4590SKeyi Guiop   fb invoke-polymorphic/range    4rcc n method-and-proto-ref continue|throw|invoke
348*055d4590SKeyi Guiop   fc invoke-custom               35c  n call-site-ref continue|throw|invoke
349*055d4590SKeyi Guiop   fd invoke-custom/range         3rc  n call-site-ref continue|throw|invoke
350*055d4590SKeyi Gui
351*055d4590SKeyi Gui# Constant loading for method handles and method types. NB these may throw OOME
352*055d4590SKeyi Guiop   fe const-method-handle         21c y method-handle-ref continue|throw
353*055d4590SKeyi Guiop   ff const-method-type           21c y proto-ref         continue|throw
354*055d4590SKeyi Gui
355