qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

tricore-opcodes.h (68169B)


      1 /*
      2  *  Copyright (c) 2012-2014 Bastian Koppelmann C-Lab/University Paderborn
      3  *
      4  * This library is free software; you can redistribute it and/or
      5  * modify it under the terms of the GNU Lesser General Public
      6  * License as published by the Free Software Foundation; either
      7  * version 2.1 of the License, or (at your option) any later version.
      8  *
      9  * This library is distributed in the hope that it will be useful,
     10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12  * Lesser General Public License for more details.
     13  *
     14  * You should have received a copy of the GNU Lesser General Public
     15  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
     16  */
     17 
     18 #ifndef TARGET_TRICORE_TRICORE_OPCODES_H
     19 #define TARGET_TRICORE_TRICORE_OPCODES_H
     20 
     21 /*
     22  * Opcode Masks for Tricore
     23  * Format MASK_OP_InstrFormatName_Field
     24  */
     25 
     26 /* This creates a mask with bits start .. end set to 1 and applies it to op */
     27 #define MASK_BITS_SHIFT(op, start, end) (extract32(op, (start), \
     28                                         (end) - (start) + 1))
     29 #define MASK_BITS_SHIFT_SEXT(op, start, end) (sextract32(op, (start),\
     30                                              (end) - (start) + 1))
     31 
     32 /* new opcode masks */
     33 
     34 #define MASK_OP_MAJOR(op)      MASK_BITS_SHIFT(op, 0, 7)
     35 
     36 /* 16-Bit Formats */
     37 #define MASK_OP_SB_DISP8(op)   MASK_BITS_SHIFT(op, 8, 15)
     38 #define MASK_OP_SB_DISP8_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 8, 15)
     39 
     40 #define MASK_OP_SBC_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
     41 #define MASK_OP_SBC_CONST4_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 15)
     42 #define MASK_OP_SBC_DISP4(op)  MASK_BITS_SHIFT(op, 8, 11)
     43 
     44 #define MASK_OP_SBR_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
     45 #define MASK_OP_SBR_DISP4(op)  MASK_BITS_SHIFT(op, 8, 11)
     46 
     47 #define MASK_OP_SBRN_N(op)     MASK_BITS_SHIFT(op, 12, 15)
     48 #define MASK_OP_SBRN_DISP4(op) MASK_BITS_SHIFT(op, 8, 11)
     49 
     50 #define MASK_OP_SC_CONST8(op)  MASK_BITS_SHIFT(op, 8, 15)
     51 
     52 #define MASK_OP_SLR_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
     53 #define MASK_OP_SLR_D(op)      MASK_BITS_SHIFT(op, 8, 11)
     54 
     55 #define MASK_OP_SLRO_OFF4(op)  MASK_BITS_SHIFT(op, 12, 15)
     56 #define MASK_OP_SLRO_D(op)     MASK_BITS_SHIFT(op, 8, 11)
     57 
     58 #define MASK_OP_SR_OP2(op)     MASK_BITS_SHIFT(op, 12, 15)
     59 #define MASK_OP_SR_S1D(op)     MASK_BITS_SHIFT(op, 8, 11)
     60 
     61 #define MASK_OP_SRC_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
     62 #define MASK_OP_SRC_CONST4_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 15)
     63 #define MASK_OP_SRC_S1D(op)    MASK_BITS_SHIFT(op, 8, 11)
     64 
     65 #define MASK_OP_SRO_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
     66 #define MASK_OP_SRO_OFF4(op)   MASK_BITS_SHIFT(op, 8, 11)
     67 
     68 #define MASK_OP_SRR_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
     69 #define MASK_OP_SRR_S1D(op)    MASK_BITS_SHIFT(op, 8, 11)
     70 
     71 #define MASK_OP_SRRS_S2(op)    MASK_BITS_SHIFT(op, 12, 15)
     72 #define MASK_OP_SRRS_S1D(op)   MASK_BITS_SHIFT(op, 8, 11)
     73 #define MASK_OP_SRRS_N(op)     MASK_BITS_SHIFT(op, 6, 7)
     74 
     75 #define MASK_OP_SSR_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
     76 #define MASK_OP_SSR_S1(op)     MASK_BITS_SHIFT(op, 8, 11)
     77 
     78 #define MASK_OP_SSRO_OFF4(op)  MASK_BITS_SHIFT(op, 12, 15)
     79 #define MASK_OP_SSRO_S1(op)    MASK_BITS_SHIFT(op, 8, 11)
     80 
     81 /* 32-Bit Formats */
     82 
     83 /* ABS Format */
     84 #define MASK_OP_ABS_OFF18(op)  (MASK_BITS_SHIFT(op, 16, 21) +       \
     85                                (MASK_BITS_SHIFT(op, 28, 31) << 6) + \
     86                                (MASK_BITS_SHIFT(op, 22, 25) << 10) +\
     87                                (MASK_BITS_SHIFT(op, 12, 15) << 14))
     88 #define MASK_OP_ABS_OP2(op)    MASK_BITS_SHIFT(op, 26, 27)
     89 #define MASK_OP_ABS_S1D(op)    MASK_BITS_SHIFT(op, 8, 11)
     90 
     91 /* ABSB Format */
     92 #define MASK_OP_ABSB_OFF18(op) MASK_OP_ABS_OFF18(op)
     93 #define MASK_OP_ABSB_OP2(op)   MASK_BITS_SHIFT(op, 26, 27)
     94 #define MASK_OP_ABSB_B(op)     MASK_BITS_SHIFT(op, 11, 11)
     95 #define MASK_OP_ABSB_BPOS(op)  MASK_BITS_SHIFT(op, 8, 10)
     96 
     97 /* B Format   */
     98 #define MASK_OP_B_DISP24(op)   (MASK_BITS_SHIFT(op, 16, 31) + \
     99                                (MASK_BITS_SHIFT(op, 8, 15) << 16))
    100 #define MASK_OP_B_DISP24_SEXT(op)   (MASK_BITS_SHIFT(op, 16, 31) + \
    101                                     (MASK_BITS_SHIFT_SEXT(op, 8, 15) << 16))
    102 /* BIT Format */
    103 #define MASK_OP_BIT_D(op)      MASK_BITS_SHIFT(op, 28, 31)
    104 #define MASK_OP_BIT_POS2(op)   MASK_BITS_SHIFT(op, 23, 27)
    105 #define MASK_OP_BIT_OP2(op)    MASK_BITS_SHIFT(op, 21, 22)
    106 #define MASK_OP_BIT_POS1(op)   MASK_BITS_SHIFT(op, 16, 20)
    107 #define MASK_OP_BIT_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
    108 #define MASK_OP_BIT_S1(op)     MASK_BITS_SHIFT(op, 8, 11)
    109 
    110 /* BO Format */
    111 #define MASK_OP_BO_OFF10(op)   (MASK_BITS_SHIFT(op, 16, 21) + \
    112                                (MASK_BITS_SHIFT(op, 28, 31) << 6))
    113 #define MASK_OP_BO_OFF10_SEXT(op)   (MASK_BITS_SHIFT(op, 16, 21) + \
    114                                     (MASK_BITS_SHIFT_SEXT(op, 28, 31) << 6))
    115 #define MASK_OP_BO_OP2(op)     MASK_BITS_SHIFT(op, 22, 27)
    116 #define MASK_OP_BO_S2(op)      MASK_BITS_SHIFT(op, 12, 15)
    117 #define MASK_OP_BO_S1D(op)     MASK_BITS_SHIFT(op, 8, 11)
    118 
    119 /* BOL Format */
    120 #define MASK_OP_BOL_OFF16(op)  ((MASK_BITS_SHIFT(op, 16, 21) +        \
    121                                (MASK_BITS_SHIFT(op, 28, 31) << 6)) + \
    122                                (MASK_BITS_SHIFT(op, 22, 27) << 10))
    123 #define MASK_OP_BOL_OFF16_SEXT(op)  ((MASK_BITS_SHIFT(op, 16, 21) +        \
    124                                     (MASK_BITS_SHIFT(op, 28, 31) << 6)) + \
    125                                     (MASK_BITS_SHIFT_SEXT(op, 22, 27) << 10))
    126 #define MASK_OP_BOL_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
    127 #define MASK_OP_BOL_S1D(op)    MASK_BITS_SHIFT(op, 8, 11)
    128 
    129 /* BRC Format */
    130 #define MASK_OP_BRC_OP2(op)    MASK_BITS_SHIFT(op, 31, 31)
    131 #define MASK_OP_BRC_DISP15(op) MASK_BITS_SHIFT(op, 16, 30)
    132 #define MASK_OP_BRC_DISP15_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 16, 30)
    133 #define MASK_OP_BRC_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
    134 #define MASK_OP_BRC_CONST4_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 15)
    135 #define MASK_OP_BRC_S1(op)     MASK_BITS_SHIFT(op, 8, 11)
    136 
    137 /* BRN Format */
    138 #define MASK_OP_BRN_OP2(op)    MASK_BITS_SHIFT(op, 31, 31)
    139 #define MASK_OP_BRN_DISP15(op) MASK_BITS_SHIFT(op, 16, 30)
    140 #define MASK_OP_BRN_DISP15_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 16, 30)
    141 #define MASK_OP_BRN_N(op)      (MASK_BITS_SHIFT(op, 12, 15) + \
    142                                (MASK_BITS_SHIFT(op, 7, 7) << 4))
    143 #define MASK_OP_BRN_S1(op)     MASK_BITS_SHIFT(op, 8, 11)
    144 /* BRR Format */
    145 #define MASK_OP_BRR_OP2(op)    MASK_BITS_SHIFT(op, 31, 31)
    146 #define MASK_OP_BRR_DISP15(op) MASK_BITS_SHIFT(op, 16, 30)
    147 #define MASK_OP_BRR_DISP15_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 16, 30)
    148 #define MASK_OP_BRR_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
    149 #define MASK_OP_BRR_S1(op)     MASK_BITS_SHIFT(op, 8, 11)
    150 
    151 /* META MASK for similar instr Formats */
    152 #define MASK_OP_META_D(op)     MASK_BITS_SHIFT(op, 28, 31)
    153 #define MASK_OP_META_S1(op)    MASK_BITS_SHIFT(op, 8, 11)
    154 
    155 /* RC Format */
    156 #define MASK_OP_RC_D(op)       MASK_OP_META_D(op)
    157 #define MASK_OP_RC_OP2(op)     MASK_BITS_SHIFT(op, 21, 27)
    158 #define MASK_OP_RC_CONST9(op)  MASK_BITS_SHIFT(op, 12, 20)
    159 #define MASK_OP_RC_CONST9_SEXT(op)  MASK_BITS_SHIFT_SEXT(op, 12, 20)
    160 #define MASK_OP_RC_S1(op)      MASK_OP_META_S1(op)
    161 
    162 /* RCPW Format */
    163 
    164 #define MASK_OP_RCPW_D(op)      MASK_OP_META_D(op)
    165 #define MASK_OP_RCPW_POS(op)    MASK_BITS_SHIFT(op, 23, 27)
    166 #define MASK_OP_RCPW_OP2(op)    MASK_BITS_SHIFT(op, 21, 22)
    167 #define MASK_OP_RCPW_WIDTH(op)  MASK_BITS_SHIFT(op, 16, 20)
    168 #define MASK_OP_RCPW_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
    169 #define MASK_OP_RCPW_S1(op)     MASK_OP_META_S1(op)
    170 
    171 /* RCR Format */
    172 
    173 #define MASK_OP_RCR_D(op)      MASK_OP_META_D(op)
    174 #define MASK_OP_RCR_S3(op)     MASK_BITS_SHIFT(op, 24, 27)
    175 #define MASK_OP_RCR_OP2(op)    MASK_BITS_SHIFT(op, 21, 23)
    176 #define MASK_OP_RCR_CONST9(op) MASK_BITS_SHIFT(op, 12, 20)
    177 #define MASK_OP_RCR_CONST9_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 20)
    178 #define MASK_OP_RCR_S1(op)     MASK_OP_META_S1(op)
    179 
    180 /* RCRR Format */
    181 
    182 #define MASK_OP_RCRR_D(op)      MASK_OP_META_D(op)
    183 #define MASK_OP_RCRR_S3(op)     MASK_BITS_SHIFT(op, 24, 27)
    184 #define MASK_OP_RCRR_OP2(op)    MASK_BITS_SHIFT(op, 21, 23)
    185 #define MASK_OP_RCRR_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
    186 #define MASK_OP_RCRR_S1(op)     MASK_OP_META_S1(op)
    187 
    188 /* RCRW Format */
    189 
    190 #define MASK_OP_RCRW_D(op)      MASK_OP_META_D(op)
    191 #define MASK_OP_RCRW_S3(op)     MASK_BITS_SHIFT(op, 24, 27)
    192 #define MASK_OP_RCRW_OP2(op)    MASK_BITS_SHIFT(op, 21, 23)
    193 #define MASK_OP_RCRW_WIDTH(op)  MASK_BITS_SHIFT(op, 16, 20)
    194 #define MASK_OP_RCRW_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
    195 #define MASK_OP_RCRW_S1(op)     MASK_OP_META_S1(op)
    196 
    197 /* RLC Format */
    198 
    199 #define MASK_OP_RLC_D(op)       MASK_OP_META_D(op)
    200 #define MASK_OP_RLC_CONST16(op) MASK_BITS_SHIFT(op, 12, 27)
    201 #define MASK_OP_RLC_CONST16_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 27)
    202 #define MASK_OP_RLC_S1(op)      MASK_OP_META_S1(op)
    203 
    204 /* RR  Format */
    205 #define MASK_OP_RR_D(op)        MASK_OP_META_D(op)
    206 #define MASK_OP_RR_OP2(op)      MASK_BITS_SHIFT(op, 20, 27)
    207 #define MASK_OP_RR_N(op)        MASK_BITS_SHIFT(op, 16, 17)
    208 #define MASK_OP_RR_S2(op)       MASK_BITS_SHIFT(op, 12, 15)
    209 #define MASK_OP_RR_S1(op)       MASK_OP_META_S1(op)
    210 
    211 /* RR1  Format */
    212 #define MASK_OP_RR1_D(op)       MASK_OP_META_D(op)
    213 #define MASK_OP_RR1_OP2(op)     MASK_BITS_SHIFT(op, 18, 27)
    214 #define MASK_OP_RR1_N(op)       MASK_BITS_SHIFT(op, 16, 17)
    215 #define MASK_OP_RR1_S2(op)      MASK_BITS_SHIFT(op, 12, 15)
    216 #define MASK_OP_RR1_S1(op)      MASK_OP_META_S1(op)
    217 
    218 /* RR2  Format */
    219 #define MASK_OP_RR2_D(op)       MASK_OP_META_D(op)
    220 #define MASK_OP_RR2_OP2(op)     MASK_BITS_SHIFT(op, 16, 27)
    221 #define MASK_OP_RR2_S2(op)      MASK_BITS_SHIFT(op, 12, 15)
    222 #define MASK_OP_RR2_S1(op)      MASK_OP_META_S1(op)
    223 
    224 /* RRPW  Format */
    225 #define MASK_OP_RRPW_D(op)      MASK_OP_META_D(op)
    226 #define MASK_OP_RRPW_POS(op)    MASK_BITS_SHIFT(op, 23, 27)
    227 #define MASK_OP_RRPW_OP2(op)    MASK_BITS_SHIFT(op, 21, 22)
    228 #define MASK_OP_RRPW_WIDTH(op)  MASK_BITS_SHIFT(op, 16, 20)
    229 #define MASK_OP_RRPW_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
    230 #define MASK_OP_RRPW_S1(op)     MASK_OP_META_S1(op)
    231 
    232 /* RRR  Format */
    233 #define MASK_OP_RRR_D(op)       MASK_OP_META_D(op)
    234 #define MASK_OP_RRR_S3(op)      MASK_BITS_SHIFT(op, 24, 27)
    235 #define MASK_OP_RRR_OP2(op)     MASK_BITS_SHIFT(op, 20, 23)
    236 #define MASK_OP_RRR_N(op)       MASK_BITS_SHIFT(op, 16, 17)
    237 #define MASK_OP_RRR_S2(op)      MASK_BITS_SHIFT(op, 12, 15)
    238 #define MASK_OP_RRR_S1(op)      MASK_OP_META_S1(op)
    239 
    240 /* RRR1  Format */
    241 #define MASK_OP_RRR1_D(op)      MASK_OP_META_D(op)
    242 #define MASK_OP_RRR1_S3(op)     MASK_BITS_SHIFT(op, 24, 27)
    243 #define MASK_OP_RRR1_OP2(op)    MASK_BITS_SHIFT(op, 18, 23)
    244 #define MASK_OP_RRR1_N(op)      MASK_BITS_SHIFT(op, 16, 17)
    245 #define MASK_OP_RRR1_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
    246 #define MASK_OP_RRR1_S1(op)     MASK_OP_META_S1(op)
    247 
    248 /* RRR2  Format */
    249 #define MASK_OP_RRR2_D(op)      MASK_OP_META_D(op)
    250 #define MASK_OP_RRR2_S3(op)     MASK_BITS_SHIFT(op, 24, 27)
    251 #define MASK_OP_RRR2_OP2(op)    MASK_BITS_SHIFT(op, 16, 23)
    252 #define MASK_OP_RRR2_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
    253 #define MASK_OP_RRR2_S1(op)     MASK_OP_META_S1(op)
    254 
    255 /* RRRR  Format */
    256 #define MASK_OP_RRRR_D(op)      MASK_OP_META_D(op)
    257 #define MASK_OP_RRRR_S3(op)     MASK_BITS_SHIFT(op, 24, 27)
    258 #define MASK_OP_RRRR_OP2(op)    MASK_BITS_SHIFT(op, 21, 23)
    259 #define MASK_OP_RRRR_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
    260 #define MASK_OP_RRRR_S1(op)     MASK_OP_META_S1(op)
    261 
    262 /* RRRW  Format */
    263 #define MASK_OP_RRRW_D(op)      MASK_OP_META_D(op)
    264 #define MASK_OP_RRRW_S3(op)     MASK_BITS_SHIFT(op, 24, 27)
    265 #define MASK_OP_RRRW_OP2(op)    MASK_BITS_SHIFT(op, 21, 23)
    266 #define MASK_OP_RRRW_WIDTH(op)  MASK_BITS_SHIFT(op, 16, 20)
    267 #define MASK_OP_RRRW_S2(op)     MASK_BITS_SHIFT(op, 12, 15)
    268 #define MASK_OP_RRRW_S1(op)     MASK_OP_META_S1(op)
    269 
    270 /* SYS Format */
    271 #define MASK_OP_SYS_OP2(op)     MASK_BITS_SHIFT(op, 22, 27)
    272 #define MASK_OP_SYS_S1D(op)     MASK_OP_META_S1(op)
    273 
    274 
    275 
    276 /*
    277  * Tricore Opcodes Enums
    278  *
    279  * Format: OPC(1|2|M)_InstrLen_Name
    280  * OPC1 = only op1 field is used
    281  * OPC2 = op1 and op2 field used part of OPCM
    282  * OPCM = op1 field used to group Instr
    283  * InstrLen = 16|32
    284  * Name = Name of Instr
    285  */
    286 
    287 /* 16-Bit */
    288 enum {
    289 
    290     OPCM_16_SR_SYSTEM                                = 0x00,
    291     OPCM_16_SR_ACCU                                  = 0x32,
    292 
    293     OPC1_16_SRC_ADD                                  = 0xc2,
    294     OPC1_16_SRC_ADD_A15                              = 0x92,
    295     OPC1_16_SRC_ADD_15A                              = 0x9a,
    296     OPC1_16_SRR_ADD                                  = 0x42,
    297     OPC1_16_SRR_ADD_A15                              = 0x12,
    298     OPC1_16_SRR_ADD_15A                              = 0x1a,
    299     OPC1_16_SRC_ADD_A                                = 0xb0,
    300     OPC1_16_SRR_ADD_A                                = 0x30,
    301     OPC1_16_SRR_ADDS                                 = 0x22,
    302     OPC1_16_SRRS_ADDSC_A                             = 0x10,
    303     OPC1_16_SC_AND                                   = 0x16,
    304     OPC1_16_SRR_AND                                  = 0x26,
    305     OPC1_16_SC_BISR                                  = 0xe0,
    306     OPC1_16_SRC_CADD                                 = 0x8a,
    307     OPC1_16_SRC_CADDN                                = 0xca,
    308     OPC1_16_SB_CALL                                  = 0x5c,
    309     OPC1_16_SRC_CMOV                                 = 0xaa,
    310     OPC1_16_SRR_CMOV                                 = 0x2a,
    311     OPC1_16_SRC_CMOVN                                = 0xea,
    312     OPC1_16_SRR_CMOVN                                = 0x6a,
    313     OPC1_16_SRC_EQ                                   = 0xba,
    314     OPC1_16_SRR_EQ                                   = 0x3a,
    315     OPC1_16_SB_J                                     = 0x3c,
    316     OPC1_16_SBC_JEQ                                  = 0x1e,
    317     OPC1_16_SBC_JEQ2                                 = 0x9e,
    318     OPC1_16_SBR_JEQ                                  = 0x3e,
    319     OPC1_16_SBR_JEQ2                                 = 0xbe,
    320     OPC1_16_SBR_JGEZ                                 = 0xce,
    321     OPC1_16_SBR_JGTZ                                 = 0x4e,
    322     OPC1_16_SR_JI                                    = 0xdc,
    323     OPC1_16_SBR_JLEZ                                 = 0x8e,
    324     OPC1_16_SBR_JLTZ                                 = 0x0e,
    325     OPC1_16_SBC_JNE                                  = 0x5e,
    326     OPC1_16_SBC_JNE2                                 = 0xde,
    327     OPC1_16_SBR_JNE                                  = 0x7e,
    328     OPC1_16_SBR_JNE2                                 = 0xfe,
    329     OPC1_16_SB_JNZ                                   = 0xee,
    330     OPC1_16_SBR_JNZ                                  = 0xf6,
    331     OPC1_16_SBR_JNZ_A                                = 0x7c,
    332     OPC1_16_SBRN_JNZ_T                               = 0xae,
    333     OPC1_16_SB_JZ                                    = 0x6e,
    334     OPC1_16_SBR_JZ                                   = 0x76,
    335     OPC1_16_SBR_JZ_A                                 = 0xbc,
    336     OPC1_16_SBRN_JZ_T                                = 0x2e,
    337     OPC1_16_SC_LD_A                                  = 0xd8,
    338     OPC1_16_SLR_LD_A                                 = 0xd4,
    339     OPC1_16_SLR_LD_A_POSTINC                         = 0xc4,
    340     OPC1_16_SLRO_LD_A                                = 0xc8,
    341     OPC1_16_SRO_LD_A                                 = 0xcc,
    342     OPC1_16_SLR_LD_BU                                = 0x14,
    343     OPC1_16_SLR_LD_BU_POSTINC                        = 0x04,
    344     OPC1_16_SLRO_LD_BU                               = 0x08,
    345     OPC1_16_SRO_LD_BU                                = 0x0c,
    346     OPC1_16_SLR_LD_H                                 = 0x94,
    347     OPC1_16_SLR_LD_H_POSTINC                         = 0x84,
    348     OPC1_16_SLRO_LD_H                                = 0x88,
    349     OPC1_16_SRO_LD_H                                 = 0x8c,
    350     OPC1_16_SC_LD_W                                  = 0x58,
    351     OPC1_16_SLR_LD_W                                 = 0x54,
    352     OPC1_16_SLR_LD_W_POSTINC                         = 0x44,
    353     OPC1_16_SLRO_LD_W                                = 0x48,
    354     OPC1_16_SRO_LD_W                                 = 0x4c,
    355     OPC1_16_SBR_LOOP                                 = 0xfc,
    356     OPC1_16_SRC_LT                                   = 0xfa,
    357     OPC1_16_SRR_LT                                   = 0x7a,
    358     OPC1_16_SC_MOV                                   = 0xda,
    359     OPC1_16_SRC_MOV                                  = 0x82,
    360     OPC1_16_SRR_MOV                                  = 0x02,
    361     OPC1_16_SRC_MOV_E                                = 0xd2,/* 1.6 only */
    362     OPC1_16_SRC_MOV_A                                = 0xa0,
    363     OPC1_16_SRR_MOV_A                                = 0x60,
    364     OPC1_16_SRR_MOV_AA                               = 0x40,
    365     OPC1_16_SRR_MOV_D                                = 0x80,
    366     OPC1_16_SRR_MUL                                  = 0xe2,
    367     OPC1_16_SR_NOT                                   = 0x46,
    368     OPC1_16_SC_OR                                    = 0x96,
    369     OPC1_16_SRR_OR                                   = 0xa6,
    370     OPC1_16_SRC_SH                                   = 0x06,
    371     OPC1_16_SRC_SHA                                  = 0x86,
    372     OPC1_16_SC_ST_A                                  = 0xf8,
    373     OPC1_16_SRO_ST_A                                 = 0xec,
    374     OPC1_16_SSR_ST_A                                 = 0xf4,
    375     OPC1_16_SSR_ST_A_POSTINC                         = 0xe4,
    376     OPC1_16_SSRO_ST_A                                = 0xe8,
    377     OPC1_16_SRO_ST_B                                 = 0x2c,
    378     OPC1_16_SSR_ST_B                                 = 0x34,
    379     OPC1_16_SSR_ST_B_POSTINC                         = 0x24,
    380     OPC1_16_SSRO_ST_B                                = 0x28,
    381     OPC1_16_SRO_ST_H                                 = 0xac,
    382     OPC1_16_SSR_ST_H                                 = 0xb4,
    383     OPC1_16_SSR_ST_H_POSTINC                         = 0xa4,
    384     OPC1_16_SSRO_ST_H                                = 0xa8,
    385     OPC1_16_SC_ST_W                                  = 0x78,
    386     OPC1_16_SRO_ST_W                                 = 0x6c,
    387     OPC1_16_SSR_ST_W                                 = 0x74,
    388     OPC1_16_SSR_ST_W_POSTINC                         = 0x64,
    389     OPC1_16_SSRO_ST_W                                = 0x68,
    390     OPC1_16_SRR_SUB                                  = 0xa2,
    391     OPC1_16_SRR_SUB_A15B                             = 0x52,
    392     OPC1_16_SRR_SUB_15AB                             = 0x5a,
    393     OPC1_16_SC_SUB_A                                 = 0x20,
    394     OPC1_16_SRR_SUBS                                 = 0x62,
    395     OPC1_16_SRR_XOR                                  = 0xc6,
    396 
    397 };
    398 
    399 /*
    400  * SR Format
    401  */
    402 /* OPCM_16_SR_SYSTEM                                 */
    403 enum {
    404 
    405     OPC2_16_SR_NOP                                   = 0x00,
    406     OPC2_16_SR_RET                                   = 0x09,
    407     OPC2_16_SR_RFE                                   = 0x08,
    408     OPC2_16_SR_DEBUG                                 = 0x0a,
    409     OPC2_16_SR_FRET                                  = 0x07,
    410 };
    411 /* OPCM_16_SR_ACCU                                   */
    412 enum {
    413     OPC2_16_SR_RSUB                                  = 0x05,
    414     OPC2_16_SR_SAT_B                                 = 0x00,
    415     OPC2_16_SR_SAT_BU                                = 0x01,
    416     OPC2_16_SR_SAT_H                                 = 0x02,
    417     OPC2_16_SR_SAT_HU                                = 0x03,
    418 
    419 };
    420 
    421 /* 32-Bit */
    422 
    423 enum {
    424 /* ABS Format 1, M */
    425     OPCM_32_ABS_LDW                                  = 0x85,
    426     OPCM_32_ABS_LDB                                  = 0x05,
    427     OPCM_32_ABS_LDMST_SWAP                           = 0xe5,
    428     OPCM_32_ABS_LDST_CONTEXT                         = 0x15,
    429     OPCM_32_ABS_STORE                                = 0xa5,
    430     OPCM_32_ABS_STOREB_H                             = 0x25,
    431     OPC1_32_ABS_STOREQ                               = 0x65,
    432     OPC1_32_ABS_LD_Q                                 = 0x45,
    433     OPC1_32_ABS_LEA                                  = 0xc5,
    434 /* ABSB Format */
    435     OPC1_32_ABSB_ST_T                                = 0xd5,
    436 /* B Format */
    437     OPC1_32_B_CALL                                   = 0x6d,
    438     OPC1_32_B_CALLA                                  = 0xed,
    439     OPC1_32_B_FCALL                                  = 0x61,
    440     OPC1_32_B_FCALLA                                 = 0xe1,
    441     OPC1_32_B_J                                      = 0x1d,
    442     OPC1_32_B_JA                                     = 0x9d,
    443     OPC1_32_B_JL                                     = 0x5d,
    444     OPC1_32_B_JLA                                    = 0xdd,
    445 /* Bit Format */
    446     OPCM_32_BIT_ANDACC                               = 0x47,
    447     OPCM_32_BIT_LOGICAL_T1                           = 0x87,
    448     OPCM_32_BIT_INSERT                               = 0x67,
    449     OPCM_32_BIT_LOGICAL_T2                           = 0x07,
    450     OPCM_32_BIT_ORAND                                = 0xc7,
    451     OPCM_32_BIT_SH_LOGIC1                            = 0x27,
    452     OPCM_32_BIT_SH_LOGIC2                            = 0xa7,
    453 /* BO Format */
    454     OPCM_32_BO_ADDRMODE_POST_PRE_BASE                = 0x89,
    455     OPCM_32_BO_ADDRMODE_BITREVERSE_CIRCULAR          = 0xa9,
    456     OPCM_32_BO_ADDRMODE_LD_POST_PRE_BASE             = 0x09,
    457     OPCM_32_BO_ADDRMODE_LD_BITREVERSE_CIRCULAR       = 0x29,
    458     OPCM_32_BO_ADDRMODE_STCTX_POST_PRE_BASE          = 0x49,
    459     OPCM_32_BO_ADDRMODE_LDMST_BITREVERSE_CIRCULAR    = 0x69,
    460 /* BOL Format */
    461     OPC1_32_BOL_LD_A_LONGOFF                         = 0x99,
    462     OPC1_32_BOL_LD_W_LONGOFF                         = 0x19,
    463     OPC1_32_BOL_LEA_LONGOFF                          = 0xd9,
    464     OPC1_32_BOL_ST_W_LONGOFF                         = 0x59,
    465     OPC1_32_BOL_ST_A_LONGOFF                         = 0xb5, /* 1.6 only */
    466     OPC1_32_BOL_LD_B_LONGOFF                         = 0x79, /* 1.6 only */
    467     OPC1_32_BOL_LD_BU_LONGOFF                        = 0x39, /* 1.6 only */
    468     OPC1_32_BOL_LD_H_LONGOFF                         = 0xc9, /* 1.6 only */
    469     OPC1_32_BOL_LD_HU_LONGOFF                        = 0xb9, /* 1.6 only */
    470     OPC1_32_BOL_ST_B_LONGOFF                         = 0xe9, /* 1.6 only */
    471     OPC1_32_BOL_ST_H_LONGOFF                         = 0xf9, /* 1.6 only */
    472 /* BRC Format */
    473     OPCM_32_BRC_EQ_NEQ                               = 0xdf,
    474     OPCM_32_BRC_GE                                   = 0xff,
    475     OPCM_32_BRC_JLT                                  = 0xbf,
    476     OPCM_32_BRC_JNE                                  = 0x9f,
    477 /* BRN Format */
    478     OPCM_32_BRN_JTT                                  = 0x6f,
    479 /* BRR Format */
    480     OPCM_32_BRR_EQ_NEQ                               = 0x5f,
    481     OPCM_32_BRR_ADDR_EQ_NEQ                          = 0x7d,
    482     OPCM_32_BRR_GE                                   = 0x7f,
    483     OPCM_32_BRR_JLT                                  = 0x3f,
    484     OPCM_32_BRR_JNE                                  = 0x1f,
    485     OPCM_32_BRR_JNZ                                  = 0xbd,
    486     OPCM_32_BRR_LOOP                                 = 0xfd,
    487 /* RC Format */
    488     OPCM_32_RC_LOGICAL_SHIFT                         = 0x8f,
    489     OPCM_32_RC_ACCUMULATOR                           = 0x8b,
    490     OPCM_32_RC_SERVICEROUTINE                        = 0xad,
    491     OPCM_32_RC_MUL                                   = 0x53,
    492 /* RCPW Format */
    493     OPCM_32_RCPW_MASK_INSERT                         = 0xb7,
    494 /* RCR Format */
    495     OPCM_32_RCR_COND_SELECT                          = 0xab,
    496     OPCM_32_RCR_MADD                                 = 0x13,
    497     OPCM_32_RCR_MSUB                                 = 0x33,
    498 /* RCRR Format */
    499     OPC1_32_RCRR_INSERT                              = 0x97,
    500 /* RCRW Format */
    501     OPCM_32_RCRW_MASK_INSERT                         = 0xd7,
    502 /* RLC Format */
    503     OPC1_32_RLC_ADDI                                 = 0x1b,
    504     OPC1_32_RLC_ADDIH                                = 0x9b,
    505     OPC1_32_RLC_ADDIH_A                              = 0x11,
    506     OPC1_32_RLC_MFCR                                 = 0x4d,
    507     OPC1_32_RLC_MOV                                  = 0x3b,
    508     OPC1_32_RLC_MOV_64                               = 0xfb, /* 1.6 only */
    509     OPC1_32_RLC_MOV_U                                = 0xbb,
    510     OPC1_32_RLC_MOV_H                                = 0x7b,
    511     OPC1_32_RLC_MOVH_A                               = 0x91,
    512     OPC1_32_RLC_MTCR                                 = 0xcd,
    513 /* RR Format */
    514     OPCM_32_RR_LOGICAL_SHIFT                         = 0x0f,
    515     OPCM_32_RR_ACCUMULATOR                           = 0x0b,
    516     OPCM_32_RR_ADDRESS                               = 0x01,
    517     OPCM_32_RR_DIVIDE                                = 0x4b,
    518     OPCM_32_RR_IDIRECT                               = 0x2d,
    519 /* RR1 Format */
    520     OPCM_32_RR1_MUL                                  = 0xb3,
    521     OPCM_32_RR1_MULQ                                 = 0x93,
    522 /* RR2 Format */
    523     OPCM_32_RR2_MUL                                  = 0x73,
    524 /* RRPW Format */
    525     OPCM_32_RRPW_EXTRACT_INSERT                      = 0x37,
    526     OPC1_32_RRPW_DEXTR                               = 0x77,
    527 /* RRR Format */
    528     OPCM_32_RRR_COND_SELECT                          = 0x2b,
    529     OPCM_32_RRR_DIVIDE                               = 0x6b,
    530 /* RRR1 Format */
    531     OPCM_32_RRR1_MADD                                = 0x83,
    532     OPCM_32_RRR1_MADDQ_H                             = 0x43,
    533     OPCM_32_RRR1_MADDSU_H                            = 0xc3,
    534     OPCM_32_RRR1_MSUB_H                              = 0xa3,
    535     OPCM_32_RRR1_MSUB_Q                              = 0x63,
    536     OPCM_32_RRR1_MSUBAD_H                            = 0xe3,
    537 /* RRR2 Format */
    538     OPCM_32_RRR2_MADD                                = 0x03,
    539     OPCM_32_RRR2_MSUB                                = 0x23,
    540 /* RRRR Format */
    541     OPCM_32_RRRR_EXTRACT_INSERT                      = 0x17,
    542 /* RRRW Format */
    543     OPCM_32_RRRW_EXTRACT_INSERT                      = 0x57,
    544 /* SYS Format */
    545     OPCM_32_SYS_INTERRUPTS                           = 0x0d,
    546     OPC1_32_SYS_RSTV                                 = 0x2f,
    547 };
    548 
    549 
    550 
    551 /*
    552  * ABS Format
    553  */
    554 
    555 /* OPCM_32_ABS_LDW  */
    556 enum {
    557 
    558     OPC2_32_ABS_LD_A                             = 0x02,
    559     OPC2_32_ABS_LD_D                             = 0x01,
    560     OPC2_32_ABS_LD_DA                            = 0x03,
    561     OPC2_32_ABS_LD_W                             = 0x00,
    562 };
    563 
    564 /* OPCM_32_ABS_LDB */
    565 enum {
    566     OPC2_32_ABS_LD_B                             = 0x00,
    567     OPC2_32_ABS_LD_BU                            = 0x01,
    568     OPC2_32_ABS_LD_H                             = 0x02,
    569     OPC2_32_ABS_LD_HU                            = 0x03,
    570 };
    571 /* OPCM_32_ABS_LDMST_SWAP       */
    572 enum {
    573     OPC2_32_ABS_LDMST                            = 0x01,
    574     OPC2_32_ABS_SWAP_W                           = 0x00,
    575 };
    576 /* OPCM_32_ABS_LDST_CONTEXT     */
    577 enum {
    578     OPC2_32_ABS_LDLCX                            = 0x02,
    579     OPC2_32_ABS_LDUCX                            = 0x03,
    580     OPC2_32_ABS_STLCX                            = 0x00,
    581     OPC2_32_ABS_STUCX                            = 0x01,
    582 };
    583 /* OPCM_32_ABS_STORE            */
    584 enum {
    585     OPC2_32_ABS_ST_A                             = 0x02,
    586     OPC2_32_ABS_ST_D                             = 0x01,
    587     OPC2_32_ABS_ST_DA                            = 0x03,
    588     OPC2_32_ABS_ST_W                             = 0x00,
    589 };
    590 /* OPCM_32_ABS_STOREB_H */
    591 enum {
    592     OPC2_32_ABS_ST_B                             = 0x00,
    593     OPC2_32_ABS_ST_H                             = 0x02,
    594 };
    595 /*
    596  * Bit Format
    597  */
    598 /* OPCM_32_BIT_ANDACC              */
    599 enum {
    600     OPC2_32_BIT_AND_AND_T                        = 0x00,
    601     OPC2_32_BIT_AND_ANDN_T                       = 0x03,
    602     OPC2_32_BIT_AND_NOR_T                        = 0x02,
    603     OPC2_32_BIT_AND_OR_T                         = 0x01,
    604 };
    605 /* OPCM_32_BIT_LOGICAL_T                       */
    606 enum {
    607     OPC2_32_BIT_AND_T                            = 0x00,
    608     OPC2_32_BIT_ANDN_T                           = 0x03,
    609     OPC2_32_BIT_NOR_T                            = 0x02,
    610     OPC2_32_BIT_OR_T                             = 0x01,
    611 };
    612 /* OPCM_32_BIT_INSERT                   */
    613 enum {
    614     OPC2_32_BIT_INS_T                            = 0x00,
    615     OPC2_32_BIT_INSN_T                           = 0x01,
    616 };
    617 /* OPCM_32_BIT_LOGICAL_T2              */
    618 enum {
    619     OPC2_32_BIT_NAND_T                           = 0x00,
    620     OPC2_32_BIT_ORN_T                            = 0x01,
    621     OPC2_32_BIT_XNOR_T                           = 0x02,
    622     OPC2_32_BIT_XOR_T                            = 0x03,
    623 };
    624 /* OPCM_32_BIT_ORAND                    */
    625 enum {
    626     OPC2_32_BIT_OR_AND_T                         = 0x00,
    627     OPC2_32_BIT_OR_ANDN_T                        = 0x03,
    628     OPC2_32_BIT_OR_NOR_T                         = 0x02,
    629     OPC2_32_BIT_OR_OR_T                          = 0x01,
    630 };
    631 /*OPCM_32_BIT_SH_LOGIC1                 */
    632 enum {
    633     OPC2_32_BIT_SH_AND_T                         = 0x00,
    634     OPC2_32_BIT_SH_ANDN_T                        = 0x03,
    635     OPC2_32_BIT_SH_NOR_T                         = 0x02,
    636     OPC2_32_BIT_SH_OR_T                          = 0x01,
    637 };
    638 /* OPCM_32_BIT_SH_LOGIC2              */
    639 enum {
    640     OPC2_32_BIT_SH_NAND_T                        = 0x00,
    641     OPC2_32_BIT_SH_ORN_T                         = 0x01,
    642     OPC2_32_BIT_SH_XNOR_T                        = 0x02,
    643     OPC2_32_BIT_SH_XOR_T                         = 0x03,
    644 };
    645 /*
    646  * BO Format
    647  */
    648 /* OPCM_32_BO_ADDRMODE_POST_PRE_BASE     */
    649 enum {
    650     OPC2_32_BO_CACHEA_I_SHORTOFF                 = 0x2e,
    651     OPC2_32_BO_CACHEA_I_POSTINC                  = 0x0e,
    652     OPC2_32_BO_CACHEA_I_PREINC                   = 0x1e,
    653     OPC2_32_BO_CACHEA_W_SHORTOFF                 = 0x2c,
    654     OPC2_32_BO_CACHEA_W_POSTINC                  = 0x0c,
    655     OPC2_32_BO_CACHEA_W_PREINC                   = 0x1c,
    656     OPC2_32_BO_CACHEA_WI_SHORTOFF                = 0x2d,
    657     OPC2_32_BO_CACHEA_WI_POSTINC                 = 0x0d,
    658     OPC2_32_BO_CACHEA_WI_PREINC                  = 0x1d,
    659     /* 1.3.1 only */
    660     OPC2_32_BO_CACHEI_W_SHORTOFF                 = 0x2b,
    661     OPC2_32_BO_CACHEI_W_POSTINC                  = 0x0b,
    662     OPC2_32_BO_CACHEI_W_PREINC                   = 0x1b,
    663     OPC2_32_BO_CACHEI_WI_SHORTOFF                = 0x2f,
    664     OPC2_32_BO_CACHEI_WI_POSTINC                 = 0x0f,
    665     OPC2_32_BO_CACHEI_WI_PREINC                  = 0x1f,
    666     /* end 1.3.1 only */
    667     OPC2_32_BO_ST_A_SHORTOFF                     = 0x26,
    668     OPC2_32_BO_ST_A_POSTINC                      = 0x06,
    669     OPC2_32_BO_ST_A_PREINC                       = 0x16,
    670     OPC2_32_BO_ST_B_SHORTOFF                     = 0x20,
    671     OPC2_32_BO_ST_B_POSTINC                      = 0x00,
    672     OPC2_32_BO_ST_B_PREINC                       = 0x10,
    673     OPC2_32_BO_ST_D_SHORTOFF                     = 0x25,
    674     OPC2_32_BO_ST_D_POSTINC                      = 0x05,
    675     OPC2_32_BO_ST_D_PREINC                       = 0x15,
    676     OPC2_32_BO_ST_DA_SHORTOFF                    = 0x27,
    677     OPC2_32_BO_ST_DA_POSTINC                     = 0x07,
    678     OPC2_32_BO_ST_DA_PREINC                      = 0x17,
    679     OPC2_32_BO_ST_H_SHORTOFF                     = 0x22,
    680     OPC2_32_BO_ST_H_POSTINC                      = 0x02,
    681     OPC2_32_BO_ST_H_PREINC                       = 0x12,
    682     OPC2_32_BO_ST_Q_SHORTOFF                     = 0x28,
    683     OPC2_32_BO_ST_Q_POSTINC                      = 0x08,
    684     OPC2_32_BO_ST_Q_PREINC                       = 0x18,
    685     OPC2_32_BO_ST_W_SHORTOFF                     = 0x24,
    686     OPC2_32_BO_ST_W_POSTINC                      = 0x04,
    687     OPC2_32_BO_ST_W_PREINC                       = 0x14,
    688 };
    689 /* OPCM_32_BO_ADDRMODE_BITREVERSE_CIRCULAR   */
    690 enum {
    691     OPC2_32_BO_CACHEA_I_BR                       = 0x0e,
    692     OPC2_32_BO_CACHEA_I_CIRC                     = 0x1e,
    693     OPC2_32_BO_CACHEA_W_BR                       = 0x0c,
    694     OPC2_32_BO_CACHEA_W_CIRC                     = 0x1c,
    695     OPC2_32_BO_CACHEA_WI_BR                      = 0x0d,
    696     OPC2_32_BO_CACHEA_WI_CIRC                    = 0x1d,
    697     OPC2_32_BO_ST_A_BR                           = 0x06,
    698     OPC2_32_BO_ST_A_CIRC                         = 0x16,
    699     OPC2_32_BO_ST_B_BR                           = 0x00,
    700     OPC2_32_BO_ST_B_CIRC                         = 0x10,
    701     OPC2_32_BO_ST_D_BR                           = 0x05,
    702     OPC2_32_BO_ST_D_CIRC                         = 0x15,
    703     OPC2_32_BO_ST_DA_BR                          = 0x07,
    704     OPC2_32_BO_ST_DA_CIRC                        = 0x17,
    705     OPC2_32_BO_ST_H_BR                           = 0x02,
    706     OPC2_32_BO_ST_H_CIRC                         = 0x12,
    707     OPC2_32_BO_ST_Q_BR                           = 0x08,
    708     OPC2_32_BO_ST_Q_CIRC                         = 0x18,
    709     OPC2_32_BO_ST_W_BR                           = 0x04,
    710     OPC2_32_BO_ST_W_CIRC                         = 0x14,
    711 };
    712 /*    OPCM_32_BO_ADDRMODE_LD_POST_PRE_BASE   */
    713 enum {
    714     OPC2_32_BO_LD_A_SHORTOFF                     = 0x26,
    715     OPC2_32_BO_LD_A_POSTINC                      = 0x06,
    716     OPC2_32_BO_LD_A_PREINC                       = 0x16,
    717     OPC2_32_BO_LD_B_SHORTOFF                     = 0x20,
    718     OPC2_32_BO_LD_B_POSTINC                      = 0x00,
    719     OPC2_32_BO_LD_B_PREINC                       = 0x10,
    720     OPC2_32_BO_LD_BU_SHORTOFF                    = 0x21,
    721     OPC2_32_BO_LD_BU_POSTINC                     = 0x01,
    722     OPC2_32_BO_LD_BU_PREINC                      = 0x11,
    723     OPC2_32_BO_LD_D_SHORTOFF                     = 0x25,
    724     OPC2_32_BO_LD_D_POSTINC                      = 0x05,
    725     OPC2_32_BO_LD_D_PREINC                       = 0x15,
    726     OPC2_32_BO_LD_DA_SHORTOFF                    = 0x27,
    727     OPC2_32_BO_LD_DA_POSTINC                     = 0x07,
    728     OPC2_32_BO_LD_DA_PREINC                      = 0x17,
    729     OPC2_32_BO_LD_H_SHORTOFF                     = 0x22,
    730     OPC2_32_BO_LD_H_POSTINC                      = 0x02,
    731     OPC2_32_BO_LD_H_PREINC                       = 0x12,
    732     OPC2_32_BO_LD_HU_SHORTOFF                    = 0x23,
    733     OPC2_32_BO_LD_HU_POSTINC                     = 0x03,
    734     OPC2_32_BO_LD_HU_PREINC                      = 0x13,
    735     OPC2_32_BO_LD_Q_SHORTOFF                     = 0x28,
    736     OPC2_32_BO_LD_Q_POSTINC                      = 0x08,
    737     OPC2_32_BO_LD_Q_PREINC                       = 0x18,
    738     OPC2_32_BO_LD_W_SHORTOFF                     = 0x24,
    739     OPC2_32_BO_LD_W_POSTINC                      = 0x04,
    740     OPC2_32_BO_LD_W_PREINC                       = 0x14,
    741 };
    742 /* OPCM_32_BO_ADDRMODE_LD_BITREVERSE_CIRCULAR  */
    743 enum {
    744     OPC2_32_BO_LD_A_BR                           = 0x06,
    745     OPC2_32_BO_LD_A_CIRC                         = 0x16,
    746     OPC2_32_BO_LD_B_BR                           = 0x00,
    747     OPC2_32_BO_LD_B_CIRC                         = 0x10,
    748     OPC2_32_BO_LD_BU_BR                          = 0x01,
    749     OPC2_32_BO_LD_BU_CIRC                        = 0x11,
    750     OPC2_32_BO_LD_D_BR                           = 0x05,
    751     OPC2_32_BO_LD_D_CIRC                         = 0x15,
    752     OPC2_32_BO_LD_DA_BR                          = 0x07,
    753     OPC2_32_BO_LD_DA_CIRC                        = 0x17,
    754     OPC2_32_BO_LD_H_BR                           = 0x02,
    755     OPC2_32_BO_LD_H_CIRC                         = 0x12,
    756     OPC2_32_BO_LD_HU_BR                          = 0x03,
    757     OPC2_32_BO_LD_HU_CIRC                        = 0x13,
    758     OPC2_32_BO_LD_Q_BR                           = 0x08,
    759     OPC2_32_BO_LD_Q_CIRC                         = 0x18,
    760     OPC2_32_BO_LD_W_BR                           = 0x04,
    761     OPC2_32_BO_LD_W_CIRC                         = 0x14,
    762 };
    763 /* OPCM_32_BO_ADDRMODE_STCTX_POST_PRE_BASE    */
    764 enum {
    765     OPC2_32_BO_LDLCX_SHORTOFF                    = 0x24,
    766     OPC2_32_BO_LDMST_SHORTOFF                    = 0x21,
    767     OPC2_32_BO_LDMST_POSTINC                     = 0x01,
    768     OPC2_32_BO_LDMST_PREINC                      = 0x11,
    769     OPC2_32_BO_LDUCX_SHORTOFF                    = 0x25,
    770     OPC2_32_BO_LEA_SHORTOFF                      = 0x28,
    771     OPC2_32_BO_STLCX_SHORTOFF                    = 0x26,
    772     OPC2_32_BO_STUCX_SHORTOFF                    = 0x27,
    773     OPC2_32_BO_SWAP_W_SHORTOFF                   = 0x20,
    774     OPC2_32_BO_SWAP_W_POSTINC                    = 0x00,
    775     OPC2_32_BO_SWAP_W_PREINC                     = 0x10,
    776     OPC2_32_BO_CMPSWAP_W_SHORTOFF                = 0x23,
    777     OPC2_32_BO_CMPSWAP_W_POSTINC                 = 0x03,
    778     OPC2_32_BO_CMPSWAP_W_PREINC                  = 0x13,
    779     OPC2_32_BO_SWAPMSK_W_SHORTOFF                = 0x22,
    780     OPC2_32_BO_SWAPMSK_W_POSTINC                 = 0x02,
    781     OPC2_32_BO_SWAPMSK_W_PREINC                  = 0x12,
    782 };
    783 /*OPCM_32_BO_ADDRMODE_LDMST_BITREVERSE_CIRCULAR  */
    784 enum {
    785     OPC2_32_BO_LDMST_BR                          = 0x01,
    786     OPC2_32_BO_LDMST_CIRC                        = 0x11,
    787     OPC2_32_BO_SWAP_W_BR                         = 0x00,
    788     OPC2_32_BO_SWAP_W_CIRC                       = 0x10,
    789     OPC2_32_BO_CMPSWAP_W_BR                      = 0x03,
    790     OPC2_32_BO_CMPSWAP_W_CIRC                    = 0x13,
    791     OPC2_32_BO_SWAPMSK_W_BR                      = 0x02,
    792     OPC2_32_BO_SWAPMSK_W_CIRC                    = 0x12,
    793 };
    794 /*
    795  * BRC Format
    796  */
    797 /*OPCM_32_BRC_EQ_NEQ                             */
    798 enum {
    799     OPC2_32_BRC_JEQ                              = 0x00,
    800     OPC2_32_BRC_JNE                              = 0x01,
    801 };
    802 /* OPCM_32_BRC_GE                                   */
    803 enum {
    804     OP2_32_BRC_JGE                               = 0x00,
    805     OPC_32_BRC_JGE_U                             = 0x01,
    806 };
    807 /* OPCM_32_BRC_JLT                                  */
    808 enum {
    809     OPC2_32_BRC_JLT                              = 0x00,
    810     OPC2_32_BRC_JLT_U                            = 0x01,
    811 };
    812 /* OPCM_32_BRC_JNE                                  */
    813 enum {
    814     OPC2_32_BRC_JNED                             = 0x01,
    815     OPC2_32_BRC_JNEI                             = 0x00,
    816 };
    817 /*
    818  * BRN Format
    819  */
    820 /* OPCM_32_BRN_JTT                                  */
    821 enum {
    822     OPC2_32_BRN_JNZ_T                            = 0x01,
    823     OPC2_32_BRN_JZ_T                             = 0x00,
    824 };
    825 /*
    826  * BRR Format
    827  */
    828 /* OPCM_32_BRR_EQ_NEQ                               */
    829 enum {
    830     OPC2_32_BRR_JEQ                              = 0x00,
    831     OPC2_32_BRR_JNE                              = 0x01,
    832 };
    833 /* OPCM_32_BRR_ADDR_EQ_NEQ                        */
    834 enum {
    835     OPC2_32_BRR_JEQ_A                            = 0x00,
    836     OPC2_32_BRR_JNE_A                            = 0x01,
    837 };
    838 /*OPCM_32_BRR_GE                                   */
    839 enum {
    840     OPC2_32_BRR_JGE                              = 0x00,
    841     OPC2_32_BRR_JGE_U                            = 0x01,
    842 };
    843 /* OPCM_32_BRR_JLT                                  */
    844 enum {
    845     OPC2_32_BRR_JLT                              = 0x00,
    846     OPC2_32_BRR_JLT_U                            = 0x01,
    847 };
    848 /* OPCM_32_BRR_JNE                                  */
    849 enum {
    850     OPC2_32_BRR_JNED                             = 0x01,
    851     OPC2_32_BRR_JNEI                             = 0x00,
    852 };
    853 /* OPCM_32_BRR_JNZ                                  */
    854 enum {
    855     OPC2_32_BRR_JNZ_A                            = 0x01,
    856     OPC2_32_BRR_JZ_A                             = 0x00,
    857 };
    858 /* OPCM_32_BRR_LOOP                                 */
    859 enum {
    860     OPC2_32_BRR_LOOP                             = 0x00,
    861     OPC2_32_BRR_LOOPU                            = 0x01,
    862 };
    863 /*
    864  * RC Format
    865  */
    866 /* OPCM_32_RC_LOGICAL_SHIFT                         */
    867 enum {
    868     OPC2_32_RC_AND                               = 0x08,
    869     OPC2_32_RC_ANDN                              = 0x0e,
    870     OPC2_32_RC_NAND                              = 0x09,
    871     OPC2_32_RC_NOR                               = 0x0b,
    872     OPC2_32_RC_OR                                = 0x0a,
    873     OPC2_32_RC_ORN                               = 0x0f,
    874     OPC2_32_RC_SH                                = 0x00,
    875     OPC2_32_RC_SH_H                              = 0x40,
    876     OPC2_32_RC_SHA                               = 0x01,
    877     OPC2_32_RC_SHA_H                             = 0x41,
    878     OPC2_32_RC_SHAS                              = 0x02,
    879     OPC2_32_RC_XNOR                              = 0x0d,
    880     OPC2_32_RC_XOR                               = 0x0c,
    881 };
    882 /* OPCM_32_RC_ACCUMULATOR                           */
    883 enum {
    884     OPC2_32_RC_ABSDIF                            = 0x0e,
    885     OPC2_32_RC_ABSDIFS                           = 0x0f,
    886     OPC2_32_RC_ADD                               = 0x00,
    887     OPC2_32_RC_ADDC                              = 0x05,
    888     OPC2_32_RC_ADDS                              = 0x02,
    889     OPC2_32_RC_ADDS_U                            = 0x03,
    890     OPC2_32_RC_ADDX                              = 0x04,
    891     OPC2_32_RC_AND_EQ                            = 0x20,
    892     OPC2_32_RC_AND_GE                            = 0x24,
    893     OPC2_32_RC_AND_GE_U                          = 0x25,
    894     OPC2_32_RC_AND_LT                            = 0x22,
    895     OPC2_32_RC_AND_LT_U                          = 0x23,
    896     OPC2_32_RC_AND_NE                            = 0x21,
    897     OPC2_32_RC_EQ                                = 0x10,
    898     OPC2_32_RC_EQANY_B                           = 0x56,
    899     OPC2_32_RC_EQANY_H                           = 0x76,
    900     OPC2_32_RC_GE                                = 0x14,
    901     OPC2_32_RC_GE_U                              = 0x15,
    902     OPC2_32_RC_LT                                = 0x12,
    903     OPC2_32_RC_LT_U                              = 0x13,
    904     OPC2_32_RC_MAX                               = 0x1a,
    905     OPC2_32_RC_MAX_U                             = 0x1b,
    906     OPC2_32_RC_MIN                               = 0x18,
    907     OPC2_32_RC_MIN_U                             = 0x19,
    908     OPC2_32_RC_NE                                = 0x11,
    909     OPC2_32_RC_OR_EQ                             = 0x27,
    910     OPC2_32_RC_OR_GE                             = 0x2b,
    911     OPC2_32_RC_OR_GE_U                           = 0x2c,
    912     OPC2_32_RC_OR_LT                             = 0x29,
    913     OPC2_32_RC_OR_LT_U                           = 0x2a,
    914     OPC2_32_RC_OR_NE                             = 0x28,
    915     OPC2_32_RC_RSUB                              = 0x08,
    916     OPC2_32_RC_RSUBS                             = 0x0a,
    917     OPC2_32_RC_RSUBS_U                           = 0x0b,
    918     OPC2_32_RC_SH_EQ                             = 0x37,
    919     OPC2_32_RC_SH_GE                             = 0x3b,
    920     OPC2_32_RC_SH_GE_U                           = 0x3c,
    921     OPC2_32_RC_SH_LT                             = 0x39,
    922     OPC2_32_RC_SH_LT_U                           = 0x3a,
    923     OPC2_32_RC_SH_NE                             = 0x38,
    924     OPC2_32_RC_XOR_EQ                            = 0x2f,
    925     OPC2_32_RC_XOR_GE                            = 0x33,
    926     OPC2_32_RC_XOR_GE_U                          = 0x34,
    927     OPC2_32_RC_XOR_LT                            = 0x31,
    928     OPC2_32_RC_XOR_LT_U                          = 0x32,
    929     OPC2_32_RC_XOR_NE                            = 0x30,
    930 };
    931 /* OPCM_32_RC_SERVICEROUTINE                        */
    932 enum {
    933     OPC2_32_RC_BISR                              = 0x00,
    934     OPC2_32_RC_SYSCALL                           = 0x04,
    935 };
    936 /* OPCM_32_RC_MUL                                   */
    937 enum {
    938     OPC2_32_RC_MUL_32                            = 0x01,
    939     OPC2_32_RC_MUL_64                            = 0x03,
    940     OPC2_32_RC_MULS_32                           = 0x05,
    941     OPC2_32_RC_MUL_U_64                          = 0x02,
    942     OPC2_32_RC_MULS_U_32                         = 0x04,
    943 };
    944 /*
    945  * RCPW Format
    946  */
    947 /* OPCM_32_RCPW_MASK_INSERT                         */
    948 enum {
    949     OPC2_32_RCPW_IMASK                           = 0x01,
    950     OPC2_32_RCPW_INSERT                          = 0x00,
    951 };
    952 /*
    953  * RCR Format
    954  */
    955 /* OPCM_32_RCR_COND_SELECT                          */
    956 enum {
    957     OPC2_32_RCR_CADD                             = 0x00,
    958     OPC2_32_RCR_CADDN                            = 0x01,
    959     OPC2_32_RCR_SEL                              = 0x04,
    960     OPC2_32_RCR_SELN                             = 0x05,
    961 };
    962 /* OPCM_32_RCR_MADD                                 */
    963 enum {
    964     OPC2_32_RCR_MADD_32                          = 0x01,
    965     OPC2_32_RCR_MADD_64                          = 0x03,
    966     OPC2_32_RCR_MADDS_32                         = 0x05,
    967     OPC2_32_RCR_MADDS_64                         = 0x07,
    968     OPC2_32_RCR_MADD_U_64                        = 0x02,
    969     OPC2_32_RCR_MADDS_U_32                       = 0x04,
    970     OPC2_32_RCR_MADDS_U_64                       = 0x06,
    971 };
    972 /* OPCM_32_RCR_MSUB                                 */
    973 enum {
    974     OPC2_32_RCR_MSUB_32                          = 0x01,
    975     OPC2_32_RCR_MSUB_64                          = 0x03,
    976     OPC2_32_RCR_MSUBS_32                         = 0x05,
    977     OPC2_32_RCR_MSUBS_64                         = 0x07,
    978     OPC2_32_RCR_MSUB_U_64                        = 0x02,
    979     OPC2_32_RCR_MSUBS_U_32                       = 0x04,
    980     OPC2_32_RCR_MSUBS_U_64                       = 0x06,
    981 };
    982 /*
    983  * RCRW Format
    984  */
    985 /* OPCM_32_RCRW_MASK_INSERT                         */
    986 enum {
    987     OPC2_32_RCRW_IMASK                           = 0x01,
    988     OPC2_32_RCRW_INSERT                          = 0x00,
    989 };
    990 
    991 /*
    992  * RR Format
    993  */
    994 /* OPCM_32_RR_LOGICAL_SHIFT                         */
    995 enum {
    996     OPC2_32_RR_AND                               = 0x08,
    997     OPC2_32_RR_ANDN                              = 0x0e,
    998     OPC2_32_RR_CLO                               = 0x1c,
    999     OPC2_32_RR_CLO_H                             = 0x7d,
   1000     OPC2_32_RR_CLS                               = 0x1d,
   1001     OPC2_32_RR_CLS_H                             = 0x7e,
   1002     OPC2_32_RR_CLZ                               = 0x1b,
   1003     OPC2_32_RR_CLZ_H                             = 0x7c,
   1004     OPC2_32_RR_NAND                              = 0x09,
   1005     OPC2_32_RR_NOR                               = 0x0b,
   1006     OPC2_32_RR_OR                                = 0x0a,
   1007     OPC2_32_RR_ORN                               = 0x0f,
   1008     OPC2_32_RR_SH                                = 0x00,
   1009     OPC2_32_RR_SH_H                              = 0x40,
   1010     OPC2_32_RR_SHA                               = 0x01,
   1011     OPC2_32_RR_SHA_H                             = 0x41,
   1012     OPC2_32_RR_SHAS                              = 0x02,
   1013     OPC2_32_RR_XNOR                              = 0x0d,
   1014     OPC2_32_RR_XOR                               = 0x0c,
   1015 };
   1016 /* OPCM_32_RR_ACCUMULATOR                           */
   1017 enum {
   1018     OPC2_32_RR_ABS                               = 0x1c,
   1019     OPC2_32_RR_ABS_B                             = 0x5c,
   1020     OPC2_32_RR_ABS_H                             = 0x7c,
   1021     OPC2_32_RR_ABSDIF                            = 0x0e,
   1022     OPC2_32_RR_ABSDIF_B                          = 0x4e,
   1023     OPC2_32_RR_ABSDIF_H                          = 0x6e,
   1024     OPC2_32_RR_ABSDIFS                           = 0x0f,
   1025     OPC2_32_RR_ABSDIFS_H                         = 0x6f,
   1026     OPC2_32_RR_ABSS                              = 0x1d,
   1027     OPC2_32_RR_ABSS_H                            = 0x7d,
   1028     OPC2_32_RR_ADD                               = 0x00,
   1029     OPC2_32_RR_ADD_B                             = 0x40,
   1030     OPC2_32_RR_ADD_H                             = 0x60,
   1031     OPC2_32_RR_ADDC                              = 0x05,
   1032     OPC2_32_RR_ADDS                              = 0x02,
   1033     OPC2_32_RR_ADDS_H                            = 0x62,
   1034     OPC2_32_RR_ADDS_HU                           = 0x63,
   1035     OPC2_32_RR_ADDS_U                            = 0x03,
   1036     OPC2_32_RR_ADDX                              = 0x04,
   1037     OPC2_32_RR_AND_EQ                            = 0x20,
   1038     OPC2_32_RR_AND_GE                            = 0x24,
   1039     OPC2_32_RR_AND_GE_U                          = 0x25,
   1040     OPC2_32_RR_AND_LT                            = 0x22,
   1041     OPC2_32_RR_AND_LT_U                          = 0x23,
   1042     OPC2_32_RR_AND_NE                            = 0x21,
   1043     OPC2_32_RR_EQ                                = 0x10,
   1044     OPC2_32_RR_EQ_B                              = 0x50,
   1045     OPC2_32_RR_EQ_H                              = 0x70,
   1046     OPC2_32_RR_EQ_W                              = 0x90,
   1047     OPC2_32_RR_EQANY_B                           = 0x56,
   1048     OPC2_32_RR_EQANY_H                           = 0x76,
   1049     OPC2_32_RR_GE                                = 0x14,
   1050     OPC2_32_RR_GE_U                              = 0x15,
   1051     OPC2_32_RR_LT                                = 0x12,
   1052     OPC2_32_RR_LT_U                              = 0x13,
   1053     OPC2_32_RR_LT_B                              = 0x52,
   1054     OPC2_32_RR_LT_BU                             = 0x53,
   1055     OPC2_32_RR_LT_H                              = 0x72,
   1056     OPC2_32_RR_LT_HU                             = 0x73,
   1057     OPC2_32_RR_LT_W                              = 0x92,
   1058     OPC2_32_RR_LT_WU                             = 0x93,
   1059     OPC2_32_RR_MAX                               = 0x1a,
   1060     OPC2_32_RR_MAX_U                             = 0x1b,
   1061     OPC2_32_RR_MAX_B                             = 0x5a,
   1062     OPC2_32_RR_MAX_BU                            = 0x5b,
   1063     OPC2_32_RR_MAX_H                             = 0x7a,
   1064     OPC2_32_RR_MAX_HU                            = 0x7b,
   1065     OPC2_32_RR_MIN                               = 0x18,
   1066     OPC2_32_RR_MIN_U                             = 0x19,
   1067     OPC2_32_RR_MIN_B                             = 0x58,
   1068     OPC2_32_RR_MIN_BU                            = 0x59,
   1069     OPC2_32_RR_MIN_H                             = 0x78,
   1070     OPC2_32_RR_MIN_HU                            = 0x79,
   1071     OPC2_32_RR_MOV                               = 0x1f,
   1072     OPC2_32_RR_MOVS_64                           = 0x80,
   1073     OPC2_32_RR_MOV_64                            = 0x81,
   1074     OPC2_32_RR_NE                                = 0x11,
   1075     OPC2_32_RR_OR_EQ                             = 0x27,
   1076     OPC2_32_RR_OR_GE                             = 0x2b,
   1077     OPC2_32_RR_OR_GE_U                           = 0x2c,
   1078     OPC2_32_RR_OR_LT                             = 0x29,
   1079     OPC2_32_RR_OR_LT_U                           = 0x2a,
   1080     OPC2_32_RR_OR_NE                             = 0x28,
   1081     OPC2_32_RR_SAT_B                             = 0x5e,
   1082     OPC2_32_RR_SAT_BU                            = 0x5f,
   1083     OPC2_32_RR_SAT_H                             = 0x7e,
   1084     OPC2_32_RR_SAT_HU                            = 0x7f,
   1085     OPC2_32_RR_SH_EQ                             = 0x37,
   1086     OPC2_32_RR_SH_GE                             = 0x3b,
   1087     OPC2_32_RR_SH_GE_U                           = 0x3c,
   1088     OPC2_32_RR_SH_LT                             = 0x39,
   1089     OPC2_32_RR_SH_LT_U                           = 0x3a,
   1090     OPC2_32_RR_SH_NE                             = 0x38,
   1091     OPC2_32_RR_SUB                               = 0x08,
   1092     OPC2_32_RR_SUB_B                             = 0x48,
   1093     OPC2_32_RR_SUB_H                             = 0x68,
   1094     OPC2_32_RR_SUBC                              = 0x0d,
   1095     OPC2_32_RR_SUBS                              = 0x0a,
   1096     OPC2_32_RR_SUBS_U                            = 0x0b,
   1097     OPC2_32_RR_SUBS_H                            = 0x6a,
   1098     OPC2_32_RR_SUBS_HU                           = 0x6b,
   1099     OPC2_32_RR_SUBX                              = 0x0c,
   1100     OPC2_32_RR_XOR_EQ                            = 0x2f,
   1101     OPC2_32_RR_XOR_GE                            = 0x33,
   1102     OPC2_32_RR_XOR_GE_U                          = 0x34,
   1103     OPC2_32_RR_XOR_LT                            = 0x31,
   1104     OPC2_32_RR_XOR_LT_U                          = 0x32,
   1105     OPC2_32_RR_XOR_NE                            = 0x30,
   1106 };
   1107 /* OPCM_32_RR_ADDRESS                               */
   1108 enum {
   1109     OPC2_32_RR_ADD_A                             = 0x01,
   1110     OPC2_32_RR_ADDSC_A                           = 0x60,
   1111     OPC2_32_RR_ADDSC_AT                          = 0x62,
   1112     OPC2_32_RR_EQ_A                              = 0x40,
   1113     OPC2_32_RR_EQZ                               = 0x48,
   1114     OPC2_32_RR_GE_A                              = 0x43,
   1115     OPC2_32_RR_LT_A                              = 0x42,
   1116     OPC2_32_RR_MOV_A                             = 0x63,
   1117     OPC2_32_RR_MOV_AA                            = 0x00,
   1118     OPC2_32_RR_MOV_D                             = 0x4c,
   1119     OPC2_32_RR_NE_A                              = 0x41,
   1120     OPC2_32_RR_NEZ_A                             = 0x49,
   1121     OPC2_32_RR_SUB_A                             = 0x02,
   1122 };
   1123 /* OPCM_32_RR_FLOAT                                 */
   1124 enum {
   1125     OPC2_32_RR_BMERGE                            = 0x01,
   1126     OPC2_32_RR_BSPLIT                            = 0x09,
   1127     OPC2_32_RR_DVINIT_B                          = 0x5a,
   1128     OPC2_32_RR_DVINIT_BU                         = 0x4a,
   1129     OPC2_32_RR_DVINIT_H                          = 0x3a,
   1130     OPC2_32_RR_DVINIT_HU                         = 0x2a,
   1131     OPC2_32_RR_DVINIT                            = 0x1a,
   1132     OPC2_32_RR_DVINIT_U                          = 0x0a,
   1133     OPC2_32_RR_PARITY                            = 0x02,
   1134     OPC2_32_RR_UNPACK                            = 0x08,
   1135     OPC2_32_RR_CRC32                             = 0x03,
   1136     OPC2_32_RR_DIV                               = 0x20,
   1137     OPC2_32_RR_DIV_U                             = 0x21,
   1138     OPC2_32_RR_MUL_F                             = 0x04,
   1139     OPC2_32_RR_DIV_F                             = 0x05,
   1140     OPC2_32_RR_FTOI                              = 0x10,
   1141     OPC2_32_RR_ITOF                              = 0x14,
   1142     OPC2_32_RR_CMP_F                             = 0x00,
   1143     OPC2_32_RR_FTOIZ                             = 0x13,
   1144     OPC2_32_RR_FTOQ31                            = 0x11,
   1145     OPC2_32_RR_FTOQ31Z                           = 0x18,
   1146     OPC2_32_RR_FTOU                              = 0x12,
   1147     OPC2_32_RR_FTOUZ                             = 0x17,
   1148     OPC2_32_RR_Q31TOF                            = 0x15,
   1149     OPC2_32_RR_QSEED_F                           = 0x19,
   1150     OPC2_32_RR_UPDFL                             = 0x0c,
   1151     OPC2_32_RR_UTOF                              = 0x16,
   1152 };
   1153 /* OPCM_32_RR_IDIRECT                               */
   1154 enum {
   1155     OPC2_32_RR_JI                                = 0x03,
   1156     OPC2_32_RR_JLI                               = 0x02,
   1157     OPC2_32_RR_CALLI                             = 0x00,
   1158     OPC2_32_RR_FCALLI                            = 0x01,
   1159 };
   1160 /*
   1161  * RR1 Format
   1162  */
   1163 /* OPCM_32_RR1_MUL                                  */
   1164 enum {
   1165     OPC2_32_RR1_MUL_H_32_LL                      = 0x1a,
   1166     OPC2_32_RR1_MUL_H_32_LU                      = 0x19,
   1167     OPC2_32_RR1_MUL_H_32_UL                      = 0x18,
   1168     OPC2_32_RR1_MUL_H_32_UU                      = 0x1b,
   1169     OPC2_32_RR1_MULM_H_64_LL                     = 0x1e,
   1170     OPC2_32_RR1_MULM_H_64_LU                     = 0x1d,
   1171     OPC2_32_RR1_MULM_H_64_UL                     = 0x1c,
   1172     OPC2_32_RR1_MULM_H_64_UU                     = 0x1f,
   1173     OPC2_32_RR1_MULR_H_16_LL                     = 0x0e,
   1174     OPC2_32_RR1_MULR_H_16_LU                     = 0x0d,
   1175     OPC2_32_RR1_MULR_H_16_UL                     = 0x0c,
   1176     OPC2_32_RR1_MULR_H_16_UU                     = 0x0f,
   1177 };
   1178 /* OPCM_32_RR1_MULQ                                 */
   1179 enum {
   1180     OPC2_32_RR1_MUL_Q_32                         = 0x02,
   1181     OPC2_32_RR1_MUL_Q_64                         = 0x1b,
   1182     OPC2_32_RR1_MUL_Q_32_L                       = 0x01,
   1183     OPC2_32_RR1_MUL_Q_64_L                       = 0x19,
   1184     OPC2_32_RR1_MUL_Q_32_U                       = 0x00,
   1185     OPC2_32_RR1_MUL_Q_64_U                       = 0x18,
   1186     OPC2_32_RR1_MUL_Q_32_LL                      = 0x05,
   1187     OPC2_32_RR1_MUL_Q_32_UU                      = 0x04,
   1188     OPC2_32_RR1_MULR_Q_32_L                      = 0x07,
   1189     OPC2_32_RR1_MULR_Q_32_U                      = 0x06,
   1190 };
   1191 /*
   1192  * RR2 Format
   1193  */
   1194 /* OPCM_32_RR2_MUL                                  */
   1195 enum {
   1196     OPC2_32_RR2_MUL_32                           = 0x0a,
   1197     OPC2_32_RR2_MUL_64                           = 0x6a,
   1198     OPC2_32_RR2_MULS_32                          = 0x8a,
   1199     OPC2_32_RR2_MUL_U_64                         = 0x68,
   1200     OPC2_32_RR2_MULS_U_32                        = 0x88,
   1201 };
   1202 /*
   1203  * RRPW Format
   1204  */
   1205 /* OPCM_32_RRPW_EXTRACT_INSERT                      */
   1206 enum {
   1207 
   1208     OPC2_32_RRPW_EXTR                            = 0x02,
   1209     OPC2_32_RRPW_EXTR_U                          = 0x03,
   1210     OPC2_32_RRPW_IMASK                           = 0x01,
   1211     OPC2_32_RRPW_INSERT                          = 0x00,
   1212 };
   1213 /*
   1214  * RRR Format
   1215  */
   1216 /* OPCM_32_RRR_COND_SELECT                          */
   1217 enum {
   1218     OPC2_32_RRR_CADD                             = 0x00,
   1219     OPC2_32_RRR_CADDN                            = 0x01,
   1220     OPC2_32_RRR_CSUB                             = 0x02,
   1221     OPC2_32_RRR_CSUBN                            = 0x03,
   1222     OPC2_32_RRR_SEL                              = 0x04,
   1223     OPC2_32_RRR_SELN                             = 0x05,
   1224 };
   1225 /* OPCM_32_RRR_FLOAT                                */
   1226 enum {
   1227     OPC2_32_RRR_DVADJ                            = 0x0d,
   1228     OPC2_32_RRR_DVSTEP                           = 0x0f,
   1229     OPC2_32_RRR_DVSTEP_U                         = 0x0e,
   1230     OPC2_32_RRR_IXMAX                            = 0x0a,
   1231     OPC2_32_RRR_IXMAX_U                          = 0x0b,
   1232     OPC2_32_RRR_IXMIN                            = 0x08,
   1233     OPC2_32_RRR_IXMIN_U                          = 0x09,
   1234     OPC2_32_RRR_PACK                             = 0x00,
   1235     OPC2_32_RRR_ADD_F                            = 0x02,
   1236     OPC2_32_RRR_SUB_F                            = 0x03,
   1237     OPC2_32_RRR_MADD_F                           = 0x06,
   1238     OPC2_32_RRR_MSUB_F                           = 0x07,
   1239 };
   1240 /*
   1241  * RRR1 Format
   1242  */
   1243 /* OPCM_32_RRR1_MADD                                */
   1244 enum {
   1245     OPC2_32_RRR1_MADD_H_LL                       = 0x1a,
   1246     OPC2_32_RRR1_MADD_H_LU                       = 0x19,
   1247     OPC2_32_RRR1_MADD_H_UL                       = 0x18,
   1248     OPC2_32_RRR1_MADD_H_UU                       = 0x1b,
   1249     OPC2_32_RRR1_MADDS_H_LL                      = 0x3a,
   1250     OPC2_32_RRR1_MADDS_H_LU                      = 0x39,
   1251     OPC2_32_RRR1_MADDS_H_UL                      = 0x38,
   1252     OPC2_32_RRR1_MADDS_H_UU                      = 0x3b,
   1253     OPC2_32_RRR1_MADDM_H_LL                      = 0x1e,
   1254     OPC2_32_RRR1_MADDM_H_LU                      = 0x1d,
   1255     OPC2_32_RRR1_MADDM_H_UL                      = 0x1c,
   1256     OPC2_32_RRR1_MADDM_H_UU                      = 0x1f,
   1257     OPC2_32_RRR1_MADDMS_H_LL                     = 0x3e,
   1258     OPC2_32_RRR1_MADDMS_H_LU                     = 0x3d,
   1259     OPC2_32_RRR1_MADDMS_H_UL                     = 0x3c,
   1260     OPC2_32_RRR1_MADDMS_H_UU                     = 0x3f,
   1261     OPC2_32_RRR1_MADDR_H_LL                      = 0x0e,
   1262     OPC2_32_RRR1_MADDR_H_LU                      = 0x0d,
   1263     OPC2_32_RRR1_MADDR_H_UL                      = 0x0c,
   1264     OPC2_32_RRR1_MADDR_H_UU                      = 0x0f,
   1265     OPC2_32_RRR1_MADDRS_H_LL                     = 0x2e,
   1266     OPC2_32_RRR1_MADDRS_H_LU                     = 0x2d,
   1267     OPC2_32_RRR1_MADDRS_H_UL                     = 0x2c,
   1268     OPC2_32_RRR1_MADDRS_H_UU                     = 0x2f,
   1269 };
   1270 /* OPCM_32_RRR1_MADDQ_H                             */
   1271 enum {
   1272     OPC2_32_RRR1_MADD_Q_32                       = 0x02,
   1273     OPC2_32_RRR1_MADD_Q_64                       = 0x1b,
   1274     OPC2_32_RRR1_MADD_Q_32_L                     = 0x01,
   1275     OPC2_32_RRR1_MADD_Q_64_L                     = 0x19,
   1276     OPC2_32_RRR1_MADD_Q_32_U                     = 0x00,
   1277     OPC2_32_RRR1_MADD_Q_64_U                     = 0x18,
   1278     OPC2_32_RRR1_MADD_Q_32_LL                    = 0x05,
   1279     OPC2_32_RRR1_MADD_Q_64_LL                    = 0x1d,
   1280     OPC2_32_RRR1_MADD_Q_32_UU                    = 0x04,
   1281     OPC2_32_RRR1_MADD_Q_64_UU                    = 0x1c,
   1282     OPC2_32_RRR1_MADDS_Q_32                      = 0x22,
   1283     OPC2_32_RRR1_MADDS_Q_64                      = 0x3b,
   1284     OPC2_32_RRR1_MADDS_Q_32_L                    = 0x21,
   1285     OPC2_32_RRR1_MADDS_Q_64_L                    = 0x39,
   1286     OPC2_32_RRR1_MADDS_Q_32_U                    = 0x20,
   1287     OPC2_32_RRR1_MADDS_Q_64_U                    = 0x38,
   1288     OPC2_32_RRR1_MADDS_Q_32_LL                   = 0x25,
   1289     OPC2_32_RRR1_MADDS_Q_64_LL                   = 0x3d,
   1290     OPC2_32_RRR1_MADDS_Q_32_UU                   = 0x24,
   1291     OPC2_32_RRR1_MADDS_Q_64_UU                   = 0x3c,
   1292     OPC2_32_RRR1_MADDR_H_64_UL                   = 0x1e,
   1293     OPC2_32_RRR1_MADDRS_H_64_UL                  = 0x3e,
   1294     OPC2_32_RRR1_MADDR_Q_32_LL                   = 0x07,
   1295     OPC2_32_RRR1_MADDR_Q_32_UU                   = 0x06,
   1296     OPC2_32_RRR1_MADDRS_Q_32_LL                  = 0x27,
   1297     OPC2_32_RRR1_MADDRS_Q_32_UU                  = 0x26,
   1298 };
   1299 /* OPCM_32_RRR1_MADDSU_H                            */
   1300 enum {
   1301     OPC2_32_RRR1_MADDSU_H_32_LL                  = 0x1a,
   1302     OPC2_32_RRR1_MADDSU_H_32_LU                  = 0x19,
   1303     OPC2_32_RRR1_MADDSU_H_32_UL                  = 0x18,
   1304     OPC2_32_RRR1_MADDSU_H_32_UU                  = 0x1b,
   1305     OPC2_32_RRR1_MADDSUS_H_32_LL                 = 0x3a,
   1306     OPC2_32_RRR1_MADDSUS_H_32_LU                 = 0x39,
   1307     OPC2_32_RRR1_MADDSUS_H_32_UL                 = 0x38,
   1308     OPC2_32_RRR1_MADDSUS_H_32_UU                 = 0x3b,
   1309     OPC2_32_RRR1_MADDSUM_H_64_LL                 = 0x1e,
   1310     OPC2_32_RRR1_MADDSUM_H_64_LU                 = 0x1d,
   1311     OPC2_32_RRR1_MADDSUM_H_64_UL                 = 0x1c,
   1312     OPC2_32_RRR1_MADDSUM_H_64_UU                 = 0x1f,
   1313     OPC2_32_RRR1_MADDSUMS_H_64_LL                = 0x3e,
   1314     OPC2_32_RRR1_MADDSUMS_H_64_LU                = 0x3d,
   1315     OPC2_32_RRR1_MADDSUMS_H_64_UL                = 0x3c,
   1316     OPC2_32_RRR1_MADDSUMS_H_64_UU                = 0x3f,
   1317     OPC2_32_RRR1_MADDSUR_H_16_LL                 = 0x0e,
   1318     OPC2_32_RRR1_MADDSUR_H_16_LU                 = 0x0d,
   1319     OPC2_32_RRR1_MADDSUR_H_16_UL                 = 0x0c,
   1320     OPC2_32_RRR1_MADDSUR_H_16_UU                 = 0x0f,
   1321     OPC2_32_RRR1_MADDSURS_H_16_LL                = 0x2e,
   1322     OPC2_32_RRR1_MADDSURS_H_16_LU                = 0x2d,
   1323     OPC2_32_RRR1_MADDSURS_H_16_UL                = 0x2c,
   1324     OPC2_32_RRR1_MADDSURS_H_16_UU                = 0x2f,
   1325 };
   1326 /* OPCM_32_RRR1_MSUB_H                              */
   1327 enum {
   1328     OPC2_32_RRR1_MSUB_H_LL                       = 0x1a,
   1329     OPC2_32_RRR1_MSUB_H_LU                       = 0x19,
   1330     OPC2_32_RRR1_MSUB_H_UL                       = 0x18,
   1331     OPC2_32_RRR1_MSUB_H_UU                       = 0x1b,
   1332     OPC2_32_RRR1_MSUBS_H_LL                      = 0x3a,
   1333     OPC2_32_RRR1_MSUBS_H_LU                      = 0x39,
   1334     OPC2_32_RRR1_MSUBS_H_UL                      = 0x38,
   1335     OPC2_32_RRR1_MSUBS_H_UU                      = 0x3b,
   1336     OPC2_32_RRR1_MSUBM_H_LL                      = 0x1e,
   1337     OPC2_32_RRR1_MSUBM_H_LU                      = 0x1d,
   1338     OPC2_32_RRR1_MSUBM_H_UL                      = 0x1c,
   1339     OPC2_32_RRR1_MSUBM_H_UU                      = 0x1f,
   1340     OPC2_32_RRR1_MSUBMS_H_LL                     = 0x3e,
   1341     OPC2_32_RRR1_MSUBMS_H_LU                     = 0x3d,
   1342     OPC2_32_RRR1_MSUBMS_H_UL                     = 0x3c,
   1343     OPC2_32_RRR1_MSUBMS_H_UU                     = 0x3f,
   1344     OPC2_32_RRR1_MSUBR_H_LL                      = 0x0e,
   1345     OPC2_32_RRR1_MSUBR_H_LU                      = 0x0d,
   1346     OPC2_32_RRR1_MSUBR_H_UL                      = 0x0c,
   1347     OPC2_32_RRR1_MSUBR_H_UU                      = 0x0f,
   1348     OPC2_32_RRR1_MSUBRS_H_LL                     = 0x2e,
   1349     OPC2_32_RRR1_MSUBRS_H_LU                     = 0x2d,
   1350     OPC2_32_RRR1_MSUBRS_H_UL                     = 0x2c,
   1351     OPC2_32_RRR1_MSUBRS_H_UU                     = 0x2f,
   1352 };
   1353 /* OPCM_32_RRR1_MSUB_Q                              */
   1354 enum {
   1355     OPC2_32_RRR1_MSUB_Q_32                       = 0x02,
   1356     OPC2_32_RRR1_MSUB_Q_64                       = 0x1b,
   1357     OPC2_32_RRR1_MSUB_Q_32_L                     = 0x01,
   1358     OPC2_32_RRR1_MSUB_Q_64_L                     = 0x19,
   1359     OPC2_32_RRR1_MSUB_Q_32_U                     = 0x00,
   1360     OPC2_32_RRR1_MSUB_Q_64_U                     = 0x18,
   1361     OPC2_32_RRR1_MSUB_Q_32_LL                    = 0x05,
   1362     OPC2_32_RRR1_MSUB_Q_64_LL                    = 0x1d,
   1363     OPC2_32_RRR1_MSUB_Q_32_UU                    = 0x04,
   1364     OPC2_32_RRR1_MSUB_Q_64_UU                    = 0x1c,
   1365     OPC2_32_RRR1_MSUBS_Q_32                      = 0x22,
   1366     OPC2_32_RRR1_MSUBS_Q_64                      = 0x3b,
   1367     OPC2_32_RRR1_MSUBS_Q_32_L                    = 0x21,
   1368     OPC2_32_RRR1_MSUBS_Q_64_L                    = 0x39,
   1369     OPC2_32_RRR1_MSUBS_Q_32_U                    = 0x20,
   1370     OPC2_32_RRR1_MSUBS_Q_64_U                    = 0x38,
   1371     OPC2_32_RRR1_MSUBS_Q_32_LL                   = 0x25,
   1372     OPC2_32_RRR1_MSUBS_Q_64_LL                   = 0x3d,
   1373     OPC2_32_RRR1_MSUBS_Q_32_UU                   = 0x24,
   1374     OPC2_32_RRR1_MSUBS_Q_64_UU                   = 0x3c,
   1375     OPC2_32_RRR1_MSUBR_H_64_UL                   = 0x1e,
   1376     OPC2_32_RRR1_MSUBRS_H_64_UL                  = 0x3e,
   1377     OPC2_32_RRR1_MSUBR_Q_32_LL                   = 0x07,
   1378     OPC2_32_RRR1_MSUBR_Q_32_UU                   = 0x06,
   1379     OPC2_32_RRR1_MSUBRS_Q_32_LL                  = 0x27,
   1380     OPC2_32_RRR1_MSUBRS_Q_32_UU                  = 0x26,
   1381 };
   1382 /* OPCM_32_RRR1_MSUBADS_H                           */
   1383 enum {
   1384     OPC2_32_RRR1_MSUBAD_H_32_LL                  = 0x1a,
   1385     OPC2_32_RRR1_MSUBAD_H_32_LU                  = 0x19,
   1386     OPC2_32_RRR1_MSUBAD_H_32_UL                  = 0x18,
   1387     OPC2_32_RRR1_MSUBAD_H_32_UU                  = 0x1b,
   1388     OPC2_32_RRR1_MSUBADS_H_32_LL                 = 0x3a,
   1389     OPC2_32_RRR1_MSUBADS_H_32_LU                 = 0x39,
   1390     OPC2_32_RRR1_MSUBADS_H_32_UL                 = 0x38,
   1391     OPC2_32_RRR1_MSUBADS_H_32_UU                 = 0x3b,
   1392     OPC2_32_RRR1_MSUBADM_H_64_LL                 = 0x1e,
   1393     OPC2_32_RRR1_MSUBADM_H_64_LU                 = 0x1d,
   1394     OPC2_32_RRR1_MSUBADM_H_64_UL                 = 0x1c,
   1395     OPC2_32_RRR1_MSUBADM_H_64_UU                 = 0x1f,
   1396     OPC2_32_RRR1_MSUBADMS_H_64_LL                = 0x3e,
   1397     OPC2_32_RRR1_MSUBADMS_H_64_LU                = 0x3d,
   1398     OPC2_32_RRR1_MSUBADMS_H_64_UL                = 0x3c,
   1399     OPC2_32_RRR1_MSUBADMS_H_64_UU                = 0x3f,
   1400     OPC2_32_RRR1_MSUBADR_H_16_LL                 = 0x0e,
   1401     OPC2_32_RRR1_MSUBADR_H_16_LU                 = 0x0d,
   1402     OPC2_32_RRR1_MSUBADR_H_16_UL                 = 0x0c,
   1403     OPC2_32_RRR1_MSUBADR_H_16_UU                 = 0x0f,
   1404     OPC2_32_RRR1_MSUBADRS_H_16_LL                = 0x2e,
   1405     OPC2_32_RRR1_MSUBADRS_H_16_LU                = 0x2d,
   1406     OPC2_32_RRR1_MSUBADRS_H_16_UL                = 0x2c,
   1407     OPC2_32_RRR1_MSUBADRS_H_16_UU                = 0x2f,
   1408 };
   1409 /*
   1410  * RRR2 Format
   1411  */
   1412 /* OPCM_32_RRR2_MADD                                */
   1413 enum {
   1414     OPC2_32_RRR2_MADD_32                         = 0x0a,
   1415     OPC2_32_RRR2_MADD_64                         = 0x6a,
   1416     OPC2_32_RRR2_MADDS_32                        = 0x8a,
   1417     OPC2_32_RRR2_MADDS_64                        = 0xea,
   1418     OPC2_32_RRR2_MADD_U_64                       = 0x68,
   1419     OPC2_32_RRR2_MADDS_U_32                      = 0x88,
   1420     OPC2_32_RRR2_MADDS_U_64                      = 0xe8,
   1421 };
   1422 /* OPCM_32_RRR2_MSUB                                */
   1423 enum {
   1424     OPC2_32_RRR2_MSUB_32                         = 0x0a,
   1425     OPC2_32_RRR2_MSUB_64                         = 0x6a,
   1426     OPC2_32_RRR2_MSUBS_32                        = 0x8a,
   1427     OPC2_32_RRR2_MSUBS_64                        = 0xea,
   1428     OPC2_32_RRR2_MSUB_U_64                       = 0x68,
   1429     OPC2_32_RRR2_MSUBS_U_32                      = 0x88,
   1430     OPC2_32_RRR2_MSUBS_U_64                      = 0xe8,
   1431 };
   1432 /*
   1433  * RRRR Format
   1434  */
   1435 /* OPCM_32_RRRR_EXTRACT_INSERT                      */
   1436 enum {
   1437     OPC2_32_RRRR_DEXTR                           = 0x04,
   1438     OPC2_32_RRRR_EXTR                            = 0x02,
   1439     OPC2_32_RRRR_EXTR_U                          = 0x03,
   1440     OPC2_32_RRRR_INSERT                          = 0x00,
   1441 };
   1442 /*
   1443  * RRRW Format
   1444  */
   1445 /* OPCM_32_RRRW_EXTRACT_INSERT                      */
   1446 enum {
   1447     OPC2_32_RRRW_EXTR                            = 0x02,
   1448     OPC2_32_RRRW_EXTR_U                          = 0x03,
   1449     OPC2_32_RRRW_IMASK                           = 0x01,
   1450     OPC2_32_RRRW_INSERT                          = 0x00,
   1451 };
   1452 /*
   1453  * SYS Format
   1454  */
   1455 /* OPCM_32_SYS_INTERRUPTS                           */
   1456 enum {
   1457     OPC2_32_SYS_DEBUG                            = 0x04,
   1458     OPC2_32_SYS_DISABLE                          = 0x0d,
   1459     OPC2_32_SYS_DSYNC                            = 0x12,
   1460     OPC2_32_SYS_ENABLE                           = 0x0c,
   1461     OPC2_32_SYS_ISYNC                            = 0x13,
   1462     OPC2_32_SYS_NOP                              = 0x00,
   1463     OPC2_32_SYS_RET                              = 0x06,
   1464     OPC2_32_SYS_RFE                              = 0x07,
   1465     OPC2_32_SYS_RFM                              = 0x05,
   1466     OPC2_32_SYS_RSLCX                            = 0x09,
   1467     OPC2_32_SYS_SVLCX                            = 0x08,
   1468     OPC2_32_SYS_TRAPSV                           = 0x15,
   1469     OPC2_32_SYS_TRAPV                            = 0x14,
   1470     OPC2_32_SYS_RESTORE                          = 0x0e,
   1471     OPC2_32_SYS_FRET                             = 0x03,
   1472 };
   1473 
   1474 #endif