1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "sea_ir/ir/instruction_tools.h"
18 
19 namespace sea_ir {
20 
IsDefinition(const art::Instruction * const instruction)21 bool InstructionTools::IsDefinition(const art::Instruction* const instruction) {
22   if (0 != (InstructionTools::instruction_attributes_[instruction->Opcode()] & (1 << kDA))) {
23     return true;
24   }
25   return false;
26 }
27 
28 const int InstructionTools::instruction_attributes_[] = {
29   // 00 NOP
30   DF_NOP,
31 
32   // 01 MOVE vA, vB
33   DF_DA | DF_UB | DF_IS_MOVE,
34 
35   // 02 MOVE_FROM16 vAA, vBBBB
36   DF_DA | DF_UB | DF_IS_MOVE,
37 
38   // 03 MOVE_16 vAAAA, vBBBB
39   DF_DA | DF_UB | DF_IS_MOVE,
40 
41   // 04 MOVE_WIDE vA, vB
42   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_IS_MOVE,
43 
44   // 05 MOVE_WIDE_FROM16 vAA, vBBBB
45   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_IS_MOVE,
46 
47   // 06 MOVE_WIDE_16 vAAAA, vBBBB
48   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_IS_MOVE,
49 
50   // 07 MOVE_OBJECT vA, vB
51   DF_DA | DF_UB | DF_NULL_TRANSFER_0 | DF_IS_MOVE | DF_REF_A | DF_REF_B,
52 
53   // 08 MOVE_OBJECT_FROM16 vAA, vBBBB
54   DF_DA | DF_UB | DF_NULL_TRANSFER_0 | DF_IS_MOVE | DF_REF_A | DF_REF_B,
55 
56   // 09 MOVE_OBJECT_16 vAAAA, vBBBB
57   DF_DA | DF_UB | DF_NULL_TRANSFER_0 | DF_IS_MOVE | DF_REF_A | DF_REF_B,
58 
59   // 0A MOVE_RESULT vAA
60   DF_DA,
61 
62   // 0B MOVE_RESULT_WIDE vAA
63   DF_DA | DF_A_WIDE,
64 
65   // 0C MOVE_RESULT_OBJECT vAA
66   DF_DA | DF_REF_A,
67 
68   // 0D MOVE_EXCEPTION vAA
69   DF_DA | DF_REF_A | DF_NON_NULL_DST,
70 
71   // 0E RETURN_VOID
72   DF_NOP,
73 
74   // 0F RETURN vAA
75   DF_UA,
76 
77   // 10 RETURN_WIDE vAA
78   DF_UA | DF_A_WIDE,
79 
80   // 11 RETURN_OBJECT vAA
81   DF_UA | DF_REF_A,
82 
83   // 12 CONST_4 vA, #+B
84   DF_DA | DF_SETS_CONST,
85 
86   // 13 CONST_16 vAA, #+BBBB
87   DF_DA | DF_SETS_CONST,
88 
89   // 14 CONST vAA, #+BBBBBBBB
90   DF_DA | DF_SETS_CONST,
91 
92   // 15 CONST_HIGH16 VAA, #+BBBB0000
93   DF_DA | DF_SETS_CONST,
94 
95   // 16 CONST_WIDE_16 vAA, #+BBBB
96   DF_DA | DF_A_WIDE | DF_SETS_CONST,
97 
98   // 17 CONST_WIDE_32 vAA, #+BBBBBBBB
99   DF_DA | DF_A_WIDE | DF_SETS_CONST,
100 
101   // 18 CONST_WIDE vAA, #+BBBBBBBBBBBBBBBB
102   DF_DA | DF_A_WIDE | DF_SETS_CONST,
103 
104   // 19 CONST_WIDE_HIGH16 vAA, #+BBBB000000000000
105   DF_DA | DF_A_WIDE | DF_SETS_CONST,
106 
107   // 1A CONST_STRING vAA, string@BBBB
108   DF_DA | DF_REF_A | DF_NON_NULL_DST,
109 
110   // 1B CONST_STRING_JUMBO vAA, string@BBBBBBBB
111   DF_DA | DF_REF_A | DF_NON_NULL_DST,
112 
113   // 1C CONST_CLASS vAA, type@BBBB
114   DF_DA | DF_REF_A | DF_NON_NULL_DST,
115 
116   // 1D MONITOR_ENTER vAA
117   DF_UA | DF_NULL_CHK_0 | DF_REF_A,
118 
119   // 1E MONITOR_EXIT vAA
120   DF_UA | DF_NULL_CHK_0 | DF_REF_A,
121 
122   // 1F CHK_CAST vAA, type@BBBB
123   DF_UA | DF_REF_A | DF_UMS,
124 
125   // 20 INSTANCE_OF vA, vB, type@CCCC
126   DF_DA | DF_UB | DF_CORE_A | DF_REF_B | DF_UMS,
127 
128   // 21 ARRAY_LENGTH vA, vB
129   DF_DA | DF_UB | DF_NULL_CHK_0 | DF_CORE_A | DF_REF_B,
130 
131   // 22 NEW_INSTANCE vAA, type@BBBB
132   DF_DA | DF_NON_NULL_DST | DF_REF_A | DF_UMS,
133 
134   // 23 NEW_ARRAY vA, vB, type@CCCC
135   DF_DA | DF_UB | DF_NON_NULL_DST | DF_REF_A | DF_CORE_B | DF_UMS,
136 
137   // 24 FILLED_NEW_ARRAY {vD, vE, vF, vG, vA}
138   DF_FORMAT_35C | DF_NON_NULL_RET | DF_UMS,
139 
140   // 25 FILLED_NEW_ARRAY_RANGE {vCCCC .. vNNNN}, type@BBBB
141   DF_FORMAT_3RC | DF_NON_NULL_RET | DF_UMS,
142 
143   // 26 FILL_ARRAY_DATA vAA, +BBBBBBBB
144   DF_UA | DF_REF_A | DF_UMS,
145 
146   // 27 THROW vAA
147   DF_UA | DF_REF_A | DF_UMS,
148 
149   // 28 GOTO
150   DF_NOP,
151 
152   // 29 GOTO_16
153   DF_NOP,
154 
155   // 2A GOTO_32
156   DF_NOP,
157 
158   // 2B PACKED_SWITCH vAA, +BBBBBBBB
159   DF_UA,
160 
161   // 2C SPARSE_SWITCH vAA, +BBBBBBBB
162   DF_UA,
163 
164   // 2D CMPL_FLOAT vAA, vBB, vCC
165   DF_DA | DF_UB | DF_UC | DF_FP_B | DF_FP_C | DF_CORE_A,
166 
167   // 2E CMPG_FLOAT vAA, vBB, vCC
168   DF_DA | DF_UB | DF_UC | DF_FP_B | DF_FP_C | DF_CORE_A,
169 
170   // 2F CMPL_DOUBLE vAA, vBB, vCC
171   DF_DA | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_FP_B | DF_FP_C | DF_CORE_A,
172 
173   // 30 CMPG_DOUBLE vAA, vBB, vCC
174   DF_DA | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_FP_B | DF_FP_C | DF_CORE_A,
175 
176   // 31 CMP_LONG vAA, vBB, vCC
177   DF_DA | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_CORE_A | DF_CORE_B | DF_CORE_C,
178 
179   // 32 IF_EQ vA, vB, +CCCC
180   DF_UA | DF_UB,
181 
182   // 33 IF_NE vA, vB, +CCCC
183   DF_UA | DF_UB,
184 
185   // 34 IF_LT vA, vB, +CCCC
186   DF_UA | DF_UB,
187 
188   // 35 IF_GE vA, vB, +CCCC
189   DF_UA | DF_UB,
190 
191   // 36 IF_GT vA, vB, +CCCC
192   DF_UA | DF_UB,
193 
194   // 37 IF_LE vA, vB, +CCCC
195   DF_UA | DF_UB,
196 
197   // 38 IF_EQZ vAA, +BBBB
198   DF_UA,
199 
200   // 39 IF_NEZ vAA, +BBBB
201   DF_UA,
202 
203   // 3A IF_LTZ vAA, +BBBB
204   DF_UA,
205 
206   // 3B IF_GEZ vAA, +BBBB
207   DF_UA,
208 
209   // 3C IF_GTZ vAA, +BBBB
210   DF_UA,
211 
212   // 3D IF_LEZ vAA, +BBBB
213   DF_UA,
214 
215   // 3E UNUSED_3E
216   DF_NOP,
217 
218   // 3F UNUSED_3F
219   DF_NOP,
220 
221   // 40 UNUSED_40
222   DF_NOP,
223 
224   // 41 UNUSED_41
225   DF_NOP,
226 
227   // 42 UNUSED_42
228   DF_NOP,
229 
230   // 43 UNUSED_43
231   DF_NOP,
232 
233   // 44 AGET vAA, vBB, vCC
234   DF_DA | DF_UB | DF_UC | DF_NULL_CHK_0 | DF_RANGE_CHK_1 | DF_REF_B | DF_CORE_C,
235 
236   // 45 AGET_WIDE vAA, vBB, vCC
237   DF_DA | DF_A_WIDE | DF_UB | DF_UC | DF_NULL_CHK_0 | DF_RANGE_CHK_1 | DF_REF_B | DF_CORE_C,
238 
239   // 46 AGET_OBJECT vAA, vBB, vCC
240   DF_DA | DF_UB | DF_UC | DF_NULL_CHK_0 | DF_RANGE_CHK_1 | DF_REF_A | DF_REF_B | DF_CORE_C,
241 
242   // 47 AGET_BOOLEAN vAA, vBB, vCC
243   DF_DA | DF_UB | DF_UC | DF_NULL_CHK_0 | DF_RANGE_CHK_1 | DF_REF_B | DF_CORE_C,
244 
245   // 48 AGET_BYTE vAA, vBB, vCC
246   DF_DA | DF_UB | DF_UC | DF_NULL_CHK_0 | DF_RANGE_CHK_1 | DF_REF_B | DF_CORE_C,
247 
248   // 49 AGET_CHAR vAA, vBB, vCC
249   DF_DA | DF_UB | DF_UC | DF_NULL_CHK_0 | DF_RANGE_CHK_1 | DF_REF_B | DF_CORE_C,
250 
251   // 4A AGET_SHORT vAA, vBB, vCC
252   DF_DA | DF_UB | DF_UC | DF_NULL_CHK_0 | DF_RANGE_CHK_1 | DF_REF_B | DF_CORE_C,
253 
254   // 4B APUT vAA, vBB, vCC
255   DF_UA | DF_UB | DF_UC | DF_NULL_CHK_1 | DF_RANGE_CHK_2 | DF_REF_B | DF_CORE_C,
256 
257   // 4C APUT_WIDE vAA, vBB, vCC
258   DF_UA | DF_A_WIDE | DF_UB | DF_UC | DF_NULL_CHK_2 | DF_RANGE_CHK_3 | DF_REF_B | DF_CORE_C,
259 
260   // 4D APUT_OBJECT vAA, vBB, vCC
261   DF_UA | DF_UB | DF_UC | DF_NULL_CHK_1 | DF_RANGE_CHK_2 | DF_REF_A | DF_REF_B | DF_CORE_C,
262 
263   // 4E APUT_BOOLEAN vAA, vBB, vCC
264   DF_UA | DF_UB | DF_UC | DF_NULL_CHK_1 | DF_RANGE_CHK_2 | DF_REF_B | DF_CORE_C,
265 
266   // 4F APUT_BYTE vAA, vBB, vCC
267   DF_UA | DF_UB | DF_UC | DF_NULL_CHK_1 | DF_RANGE_CHK_2 | DF_REF_B | DF_CORE_C,
268 
269   // 50 APUT_CHAR vAA, vBB, vCC
270   DF_UA | DF_UB | DF_UC | DF_NULL_CHK_1 | DF_RANGE_CHK_2 | DF_REF_B | DF_CORE_C,
271 
272   // 51 APUT_SHORT vAA, vBB, vCC
273   DF_UA | DF_UB | DF_UC | DF_NULL_CHK_1 | DF_RANGE_CHK_2 | DF_REF_B | DF_CORE_C,
274 
275   // 52 IGET vA, vB, field@CCCC
276   DF_DA | DF_UB | DF_NULL_CHK_0 | DF_REF_B,
277 
278   // 53 IGET_WIDE vA, vB, field@CCCC
279   DF_DA | DF_A_WIDE | DF_UB | DF_NULL_CHK_0 | DF_REF_B,
280 
281   // 54 IGET_OBJECT vA, vB, field@CCCC
282   DF_DA | DF_UB | DF_NULL_CHK_0 | DF_REF_A | DF_REF_B,
283 
284   // 55 IGET_BOOLEAN vA, vB, field@CCCC
285   DF_DA | DF_UB | DF_NULL_CHK_0 | DF_REF_B,
286 
287   // 56 IGET_BYTE vA, vB, field@CCCC
288   DF_DA | DF_UB | DF_NULL_CHK_0 | DF_REF_B,
289 
290   // 57 IGET_CHAR vA, vB, field@CCCC
291   DF_DA | DF_UB | DF_NULL_CHK_0 | DF_REF_B,
292 
293   // 58 IGET_SHORT vA, vB, field@CCCC
294   DF_DA | DF_UB | DF_NULL_CHK_0 | DF_REF_B,
295 
296   // 59 IPUT vA, vB, field@CCCC
297   DF_UA | DF_UB | DF_NULL_CHK_1 | DF_REF_B,
298 
299   // 5A IPUT_WIDE vA, vB, field@CCCC
300   DF_UA | DF_A_WIDE | DF_UB | DF_NULL_CHK_2 | DF_REF_B,
301 
302   // 5B IPUT_OBJECT vA, vB, field@CCCC
303   DF_UA | DF_UB | DF_NULL_CHK_1 | DF_REF_A | DF_REF_B,
304 
305   // 5C IPUT_BOOLEAN vA, vB, field@CCCC
306   DF_UA | DF_UB | DF_NULL_CHK_1 | DF_REF_B,
307 
308   // 5D IPUT_BYTE vA, vB, field@CCCC
309   DF_UA | DF_UB | DF_NULL_CHK_1 | DF_REF_B,
310 
311   // 5E IPUT_CHAR vA, vB, field@CCCC
312   DF_UA | DF_UB | DF_NULL_CHK_1 | DF_REF_B,
313 
314   // 5F IPUT_SHORT vA, vB, field@CCCC
315   DF_UA | DF_UB | DF_NULL_CHK_1 | DF_REF_B,
316 
317   // 60 SGET vAA, field@BBBB
318   DF_DA | DF_UMS,
319 
320   // 61 SGET_WIDE vAA, field@BBBB
321   DF_DA | DF_A_WIDE | DF_UMS,
322 
323   // 62 SGET_OBJECT vAA, field@BBBB
324   DF_DA | DF_REF_A | DF_UMS,
325 
326   // 63 SGET_BOOLEAN vAA, field@BBBB
327   DF_DA | DF_UMS,
328 
329   // 64 SGET_BYTE vAA, field@BBBB
330   DF_DA | DF_UMS,
331 
332   // 65 SGET_CHAR vAA, field@BBBB
333   DF_DA | DF_UMS,
334 
335   // 66 SGET_SHORT vAA, field@BBBB
336   DF_DA | DF_UMS,
337 
338   // 67 SPUT vAA, field@BBBB
339   DF_UA | DF_UMS,
340 
341   // 68 SPUT_WIDE vAA, field@BBBB
342   DF_UA | DF_A_WIDE | DF_UMS,
343 
344   // 69 SPUT_OBJECT vAA, field@BBBB
345   DF_UA | DF_REF_A | DF_UMS,
346 
347   // 6A SPUT_BOOLEAN vAA, field@BBBB
348   DF_UA | DF_UMS,
349 
350   // 6B SPUT_BYTE vAA, field@BBBB
351   DF_UA | DF_UMS,
352 
353   // 6C SPUT_CHAR vAA, field@BBBB
354   DF_UA | DF_UMS,
355 
356   // 6D SPUT_SHORT vAA, field@BBBB
357   DF_UA | DF_UMS,
358 
359   // 6E INVOKE_VIRTUAL {vD, vE, vF, vG, vA}
360   DF_FORMAT_35C | DF_NULL_CHK_OUT0 | DF_UMS,
361 
362   // 6F INVOKE_SUPER {vD, vE, vF, vG, vA}
363   DF_FORMAT_35C | DF_NULL_CHK_OUT0 | DF_UMS,
364 
365   // 70 INVOKE_DIRECT {vD, vE, vF, vG, vA}
366   DF_FORMAT_35C | DF_NULL_CHK_OUT0 | DF_UMS,
367 
368   // 71 INVOKE_STATIC {vD, vE, vF, vG, vA}
369   DF_FORMAT_35C | DF_UMS,
370 
371   // 72 INVOKE_INTERFACE {vD, vE, vF, vG, vA}
372   DF_FORMAT_35C | DF_NULL_CHK_OUT0 | DF_UMS,
373 
374   // 73 UNUSED_73
375   DF_NOP,
376 
377   // 74 INVOKE_VIRTUAL_RANGE {vCCCC .. vNNNN}
378   DF_FORMAT_3RC | DF_NULL_CHK_OUT0 | DF_UMS,
379 
380   // 75 INVOKE_SUPER_RANGE {vCCCC .. vNNNN}
381   DF_FORMAT_3RC | DF_NULL_CHK_OUT0 | DF_UMS,
382 
383   // 76 INVOKE_DIRECT_RANGE {vCCCC .. vNNNN}
384   DF_FORMAT_3RC | DF_NULL_CHK_OUT0 | DF_UMS,
385 
386   // 77 INVOKE_STATIC_RANGE {vCCCC .. vNNNN}
387   DF_FORMAT_3RC | DF_UMS,
388 
389   // 78 INVOKE_INTERFACE_RANGE {vCCCC .. vNNNN}
390   DF_FORMAT_3RC | DF_NULL_CHK_OUT0 | DF_UMS,
391 
392   // 79 UNUSED_79
393   DF_NOP,
394 
395   // 7A UNUSED_7A
396   DF_NOP,
397 
398   // 7B NEG_INT vA, vB
399   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
400 
401   // 7C NOT_INT vA, vB
402   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
403 
404   // 7D NEG_LONG vA, vB
405   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
406 
407   // 7E NOT_LONG vA, vB
408   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
409 
410   // 7F NEG_FLOAT vA, vB
411   DF_DA | DF_UB | DF_FP_A | DF_FP_B,
412 
413   // 80 NEG_DOUBLE vA, vB
414   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_FP_A | DF_FP_B,
415 
416   // 81 INT_TO_LONG vA, vB
417   DF_DA | DF_A_WIDE | DF_UB | DF_CORE_A | DF_CORE_B,
418 
419   // 82 INT_TO_FLOAT vA, vB
420   DF_DA | DF_UB | DF_FP_A | DF_CORE_B,
421 
422   // 83 INT_TO_DOUBLE vA, vB
423   DF_DA | DF_A_WIDE | DF_UB | DF_FP_A | DF_CORE_B,
424 
425   // 84 LONG_TO_INT vA, vB
426   DF_DA | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
427 
428   // 85 LONG_TO_FLOAT vA, vB
429   DF_DA | DF_UB | DF_B_WIDE | DF_FP_A | DF_CORE_B,
430 
431   // 86 LONG_TO_DOUBLE vA, vB
432   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_FP_A | DF_CORE_B,
433 
434   // 87 FLOAT_TO_INT vA, vB
435   DF_DA | DF_UB | DF_FP_B | DF_CORE_A,
436 
437   // 88 FLOAT_TO_LONG vA, vB
438   DF_DA | DF_A_WIDE | DF_UB | DF_FP_B | DF_CORE_A,
439 
440   // 89 FLOAT_TO_DOUBLE vA, vB
441   DF_DA | DF_A_WIDE | DF_UB | DF_FP_A | DF_FP_B,
442 
443   // 8A DOUBLE_TO_INT vA, vB
444   DF_DA | DF_UB | DF_B_WIDE | DF_FP_B | DF_CORE_A,
445 
446   // 8B DOUBLE_TO_LONG vA, vB
447   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_FP_B | DF_CORE_A,
448 
449   // 8C DOUBLE_TO_FLOAT vA, vB
450   DF_DA | DF_UB | DF_B_WIDE | DF_FP_A | DF_FP_B,
451 
452   // 8D INT_TO_BYTE vA, vB
453   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
454 
455   // 8E INT_TO_CHAR vA, vB
456   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
457 
458   // 8F INT_TO_SHORT vA, vB
459   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
460 
461   // 90 ADD_INT vAA, vBB, vCC
462   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
463 
464   // 91 SUB_INT vAA, vBB, vCC
465   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
466 
467   // 92 MUL_INT vAA, vBB, vCC
468   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
469 
470   // 93 DIV_INT vAA, vBB, vCC
471   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
472 
473   // 94 REM_INT vAA, vBB, vCC
474   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
475 
476   // 95 AND_INT vAA, vBB, vCC
477   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
478 
479   // 96 OR_INT vAA, vBB, vCC
480   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
481 
482   // 97 XOR_INT vAA, vBB, vCC
483   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
484 
485   // 98 SHL_INT vAA, vBB, vCC
486   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
487 
488   // 99 SHR_INT vAA, vBB, vCC
489   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
490 
491   // 9A USHR_INT vAA, vBB, vCC
492   DF_DA | DF_UB | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
493 
494   // 9B ADD_LONG vAA, vBB, vCC
495   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_CORE_A | DF_CORE_B | DF_CORE_C,
496 
497   // 9C SUB_LONG vAA, vBB, vCC
498   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_CORE_A | DF_CORE_B | DF_CORE_C,
499 
500   // 9D MUL_LONG vAA, vBB, vCC
501   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_CORE_A | DF_CORE_B | DF_CORE_C,
502 
503   // 9E DIV_LONG vAA, vBB, vCC
504   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_CORE_A | DF_CORE_B | DF_CORE_C,
505 
506   // 9F REM_LONG vAA, vBB, vCC
507   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_CORE_A | DF_CORE_B | DF_CORE_C,
508 
509   // A0 AND_LONG vAA, vBB, vCC
510   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_CORE_A | DF_CORE_B | DF_CORE_C,
511 
512   // A1 OR_LONG vAA, vBB, vCC
513   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_CORE_A | DF_CORE_B | DF_CORE_C,
514 
515   // A2 XOR_LONG vAA, vBB, vCC
516   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_CORE_A | DF_CORE_B | DF_CORE_C,
517 
518   // A3 SHL_LONG vAA, vBB, vCC
519   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
520 
521   // A4 SHR_LONG vAA, vBB, vCC
522   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
523 
524   // A5 USHR_LONG vAA, vBB, vCC
525   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_CORE_A | DF_CORE_B | DF_CORE_C,
526 
527   // A6 ADD_FLOAT vAA, vBB, vCC
528   DF_DA | DF_UB | DF_UC | DF_FP_A | DF_FP_B | DF_FP_C,
529 
530   // A7 SUB_FLOAT vAA, vBB, vCC
531   DF_DA | DF_UB | DF_UC | DF_FP_A | DF_FP_B | DF_FP_C,
532 
533   // A8 MUL_FLOAT vAA, vBB, vCC
534   DF_DA | DF_UB | DF_UC | DF_FP_A | DF_FP_B | DF_FP_C,
535 
536   // A9 DIV_FLOAT vAA, vBB, vCC
537   DF_DA | DF_UB | DF_UC | DF_FP_A | DF_FP_B | DF_FP_C,
538 
539   // AA REM_FLOAT vAA, vBB, vCC
540   DF_DA | DF_UB | DF_UC | DF_FP_A | DF_FP_B | DF_FP_C,
541 
542   // AB ADD_DOUBLE vAA, vBB, vCC
543   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_FP_A | DF_FP_B | DF_FP_C,
544 
545   // AC SUB_DOUBLE vAA, vBB, vCC
546   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_FP_A | DF_FP_B | DF_FP_C,
547 
548   // AD MUL_DOUBLE vAA, vBB, vCC
549   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_FP_A | DF_FP_B | DF_FP_C,
550 
551   // AE DIV_DOUBLE vAA, vBB, vCC
552   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_FP_A | DF_FP_B | DF_FP_C,
553 
554   // AF REM_DOUBLE vAA, vBB, vCC
555   DF_DA | DF_A_WIDE | DF_UB | DF_B_WIDE | DF_UC | DF_C_WIDE | DF_FP_A | DF_FP_B | DF_FP_C,
556 
557   // B0 ADD_INT_2ADDR vA, vB
558   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
559 
560   // B1 SUB_INT_2ADDR vA, vB
561   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
562 
563   // B2 MUL_INT_2ADDR vA, vB
564   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
565 
566   // B3 DIV_INT_2ADDR vA, vB
567   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
568 
569   // B4 REM_INT_2ADDR vA, vB
570   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
571 
572   // B5 AND_INT_2ADDR vA, vB
573   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
574 
575   // B6 OR_INT_2ADDR vA, vB
576   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
577 
578   // B7 XOR_INT_2ADDR vA, vB
579   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
580 
581   // B8 SHL_INT_2ADDR vA, vB
582   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
583 
584   // B9 SHR_INT_2ADDR vA, vB
585   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
586 
587   // BA USHR_INT_2ADDR vA, vB
588   DF_DA | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
589 
590   // BB ADD_LONG_2ADDR vA, vB
591   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
592 
593   // BC SUB_LONG_2ADDR vA, vB
594   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
595 
596   // BD MUL_LONG_2ADDR vA, vB
597   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
598 
599   // BE DIV_LONG_2ADDR vA, vB
600   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
601 
602   // BF REM_LONG_2ADDR vA, vB
603   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
604 
605   // C0 AND_LONG_2ADDR vA, vB
606   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
607 
608   // C1 OR_LONG_2ADDR vA, vB
609   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
610 
611   // C2 XOR_LONG_2ADDR vA, vB
612   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_CORE_A | DF_CORE_B,
613 
614   // C3 SHL_LONG_2ADDR vA, vB
615   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
616 
617   // C4 SHR_LONG_2ADDR vA, vB
618   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
619 
620   // C5 USHR_LONG_2ADDR vA, vB
621   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_CORE_A | DF_CORE_B,
622 
623   // C6 ADD_FLOAT_2ADDR vA, vB
624   DF_DA | DF_UA | DF_UB | DF_FP_A | DF_FP_B,
625 
626   // C7 SUB_FLOAT_2ADDR vA, vB
627   DF_DA | DF_UA | DF_UB | DF_FP_A | DF_FP_B,
628 
629   // C8 MUL_FLOAT_2ADDR vA, vB
630   DF_DA | DF_UA | DF_UB | DF_FP_A | DF_FP_B,
631 
632   // C9 DIV_FLOAT_2ADDR vA, vB
633   DF_DA | DF_UA | DF_UB | DF_FP_A | DF_FP_B,
634 
635   // CA REM_FLOAT_2ADDR vA, vB
636   DF_DA | DF_UA | DF_UB | DF_FP_A | DF_FP_B,
637 
638   // CB ADD_DOUBLE_2ADDR vA, vB
639   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_FP_A | DF_FP_B,
640 
641   // CC SUB_DOUBLE_2ADDR vA, vB
642   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_FP_A | DF_FP_B,
643 
644   // CD MUL_DOUBLE_2ADDR vA, vB
645   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_FP_A | DF_FP_B,
646 
647   // CE DIV_DOUBLE_2ADDR vA, vB
648   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_FP_A | DF_FP_B,
649 
650   // CF REM_DOUBLE_2ADDR vA, vB
651   DF_DA | DF_A_WIDE | DF_UA | DF_UB | DF_B_WIDE | DF_FP_A | DF_FP_B,
652 
653   // D0 ADD_INT_LIT16 vA, vB, #+CCCC
654   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
655 
656   // D1 RSUB_INT vA, vB, #+CCCC
657   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
658 
659   // D2 MUL_INT_LIT16 vA, vB, #+CCCC
660   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
661 
662   // D3 DIV_INT_LIT16 vA, vB, #+CCCC
663   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
664 
665   // D4 REM_INT_LIT16 vA, vB, #+CCCC
666   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
667 
668   // D5 AND_INT_LIT16 vA, vB, #+CCCC
669   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
670 
671   // D6 OR_INT_LIT16 vA, vB, #+CCCC
672   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
673 
674   // D7 XOR_INT_LIT16 vA, vB, #+CCCC
675   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
676 
677   // D8 ADD_INT_LIT8 vAA, vBB, #+CC
678   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
679 
680   // D9 RSUB_INT_LIT8 vAA, vBB, #+CC
681   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
682 
683   // DA MUL_INT_LIT8 vAA, vBB, #+CC
684   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
685 
686   // DB DIV_INT_LIT8 vAA, vBB, #+CC
687   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
688 
689   // DC REM_INT_LIT8 vAA, vBB, #+CC
690   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
691 
692   // DD AND_INT_LIT8 vAA, vBB, #+CC
693   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
694 
695   // DE OR_INT_LIT8 vAA, vBB, #+CC
696   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
697 
698   // DF XOR_INT_LIT8 vAA, vBB, #+CC
699   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
700 
701   // E0 SHL_INT_LIT8 vAA, vBB, #+CC
702   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
703 
704   // E1 SHR_INT_LIT8 vAA, vBB, #+CC
705   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
706 
707   // E2 USHR_INT_LIT8 vAA, vBB, #+CC
708   DF_DA | DF_UB | DF_CORE_A | DF_CORE_B,
709 
710   // E3 IGET_VOLATILE
711   DF_DA | DF_UB | DF_NULL_CHK_0 | DF_REF_B,
712 
713   // E4 IPUT_VOLATILE
714   DF_UA | DF_UB | DF_NULL_CHK_1 | DF_REF_B,
715 
716   // E5 SGET_VOLATILE
717   DF_DA | DF_UMS,
718 
719   // E6 SPUT_VOLATILE
720   DF_UA | DF_UMS,
721 
722   // E7 IGET_OBJECT_VOLATILE
723   DF_DA | DF_UB | DF_NULL_CHK_0 | DF_REF_A | DF_REF_B,
724 
725   // E8 IGET_WIDE_VOLATILE
726   DF_DA | DF_A_WIDE | DF_UB | DF_NULL_CHK_0 | DF_REF_B,
727 
728   // E9 IPUT_WIDE_VOLATILE
729   DF_UA | DF_A_WIDE | DF_UB | DF_NULL_CHK_2 | DF_REF_B,
730 
731   // EA SGET_WIDE_VOLATILE
732   DF_DA | DF_A_WIDE | DF_UMS,
733 
734   // EB SPUT_WIDE_VOLATILE
735   DF_UA | DF_A_WIDE | DF_UMS,
736 
737   // EC BREAKPOINT
738   DF_NOP,
739 
740   // ED THROW_VERIFICATION_ERROR
741   DF_NOP | DF_UMS,
742 
743   // EE EXECUTE_INLINE
744   DF_FORMAT_35C,
745 
746   // EF EXECUTE_INLINE_RANGE
747   DF_FORMAT_3RC,
748 
749   // F0 INVOKE_OBJECT_INIT_RANGE
750   DF_NOP | DF_NULL_CHK_0,
751 
752   // F1 RETURN_VOID_BARRIER
753   DF_NOP,
754 
755   // F2 IGET_QUICK
756   DF_DA | DF_UB | DF_NULL_CHK_0,
757 
758   // F3 IGET_WIDE_QUICK
759   DF_DA | DF_A_WIDE | DF_UB | DF_NULL_CHK_0,
760 
761   // F4 IGET_OBJECT_QUICK
762   DF_DA | DF_UB | DF_NULL_CHK_0,
763 
764   // F5 IPUT_QUICK
765   DF_UA | DF_UB | DF_NULL_CHK_1,
766 
767   // F6 IPUT_WIDE_QUICK
768   DF_UA | DF_A_WIDE | DF_UB | DF_NULL_CHK_2,
769 
770   // F7 IPUT_OBJECT_QUICK
771   DF_UA | DF_UB | DF_NULL_CHK_1,
772 
773   // F8 INVOKE_VIRTUAL_QUICK
774   DF_FORMAT_35C | DF_NULL_CHK_OUT0 | DF_UMS,
775 
776   // F9 INVOKE_VIRTUAL_QUICK_RANGE
777   DF_FORMAT_3RC | DF_NULL_CHK_OUT0 | DF_UMS,
778 
779   // FA INVOKE_SUPER_QUICK
780   DF_FORMAT_35C | DF_NULL_CHK_OUT0 | DF_UMS,
781 
782   // FB INVOKE_SUPER_QUICK_RANGE
783   DF_FORMAT_3RC | DF_NULL_CHK_OUT0 | DF_UMS,
784 
785   // FC IPUT_OBJECT_VOLATILE
786   DF_UA | DF_UB | DF_NULL_CHK_1 | DF_REF_A | DF_REF_B,
787 
788   // FD SGET_OBJECT_VOLATILE
789   DF_DA | DF_REF_A | DF_UMS,
790 
791   // FE SPUT_OBJECT_VOLATILE
792   DF_UA | DF_REF_A | DF_UMS,
793 
794   // FF UNUSED_FF
795   DF_NOP
796 };
797 }  // namespace sea_ir
798