Home | History | Annotate | Download | only in ir
      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 
     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