1a5a4af3bSchristos /* Opcode table header for Visium. 2a5a4af3bSchristos 3*8b657b07Schristos Copyright (C) 2003-2022 Free Software Foundation, Inc. 4a5a4af3bSchristos 5a5a4af3bSchristos This file is part of GDB, GAS, and GNU binutils. 6a5a4af3bSchristos 7a5a4af3bSchristos GDB, GAS and the GNU binutils are free software; you can redistribute 8a5a4af3bSchristos them and/or modify them under the terms of the GNU General Public 9a5a4af3bSchristos License as published by the Free Software Foundation; either version 3, 10a5a4af3bSchristos or (at your option) any later version. 11a5a4af3bSchristos 12a5a4af3bSchristos GDB, GAS, and the GNU binutils are distributed in the hope that they 13a5a4af3bSchristos will be useful, but WITHOUT ANY WARRANTY; without even the implied 14a5a4af3bSchristos warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 15a5a4af3bSchristos the GNU General Public License for more details. 16a5a4af3bSchristos 17a5a4af3bSchristos You should have received a copy of the GNU General Public License 18a5a4af3bSchristos along with this file; see the file COPYING3. If not, write to the Free 19a5a4af3bSchristos Software Foundation, 51 Franklin Street - Fifth Floor, Boston, 20a5a4af3bSchristos MA 02110-1301, USA. */ 21a5a4af3bSchristos 22a5a4af3bSchristos enum visium_opcode_arch_val 23a5a4af3bSchristos { 24a5a4af3bSchristos VISIUM_OPCODE_ARCH_DEF = 0, 25a5a4af3bSchristos VISIUM_OPCODE_ARCH_GR5, 26a5a4af3bSchristos VISIUM_OPCODE_ARCH_GR6, 27a5a4af3bSchristos VISIUM_OPCODE_ARCH_BAD 28a5a4af3bSchristos }; 29a5a4af3bSchristos 30a5a4af3bSchristos /* The highest architecture in the table. */ 31a5a4af3bSchristos #define VISIUM_OPCODE_ARCH_MAX (VISIUM_OPCODE_ARCH_BAD - 1) 32a5a4af3bSchristos 33a5a4af3bSchristos /* Given an enum visium_opcode_arch_val, return the bitmask to use in 34a5a4af3bSchristos insn encoding/decoding. */ 35a5a4af3bSchristos #define VISIUM_OPCODE_ARCH_MASK(arch) (1 << (arch)) 36a5a4af3bSchristos 37a5a4af3bSchristos /* Some defines to make life easy. */ 38a5a4af3bSchristos #define MASK_DEF VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_DEF) 39a5a4af3bSchristos #define MASK_GR5 VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_GR5) 40a5a4af3bSchristos #define MASK_GR6 VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_GR6) 41a5a4af3bSchristos 42a5a4af3bSchristos /* Bit masks of architectures supporting the insn. */ 43a5a4af3bSchristos #define def (MASK_DEF | MASK_GR5 | MASK_GR6) 44a5a4af3bSchristos #define gr5 (MASK_GR5 | MASK_GR6) 45a5a4af3bSchristos #define gr6 (MASK_GR6) 46a5a4af3bSchristos 47a5a4af3bSchristos /* The condition code field is not used (zero) for most instructions. 48a5a4af3bSchristos BRR and BRA make normal use of it. Floating point instructions use 49a5a4af3bSchristos it as a sub-opcode. */ 50a5a4af3bSchristos #define CC_MASK (0xf << 27) 51a5a4af3bSchristos 52a5a4af3bSchristos /* It seems a shame not to use these bits in a class 0 instruction, 53a5a4af3bSchristos since they could be used to extend the range of the branch. */ 54a5a4af3bSchristos #define CLASS0_UNUSED_MASK (0x1f << 16) 55a5a4af3bSchristos 56a5a4af3bSchristos /* For class 1 instructions the following bit is unused. */ 57a5a4af3bSchristos #define CLASS1_UNUSED_MASK (1 << 9) 58a5a4af3bSchristos 59a5a4af3bSchristos /* For class 1 instructions this field gives the index for a write 60a5a4af3bSchristos instruction, the specific operation for an EAM instruction, or 61a5a4af3bSchristos the floating point destination register for a floating point 62a5a4af3bSchristos instruction. */ 63a5a4af3bSchristos #define CLASS1_INDEX_MASK (0x1f << 10) 64a5a4af3bSchristos 65a5a4af3bSchristos /* For class 3 instructions the following field gives the destination 66a5a4af3bSchristos general register. */ 67a5a4af3bSchristos #define CLASS3_DEST_MASK (0x1f << 10) 68a5a4af3bSchristos 69a5a4af3bSchristos /* For class 1 and class 3 instructions the following bit selects an 70a5a4af3bSchristos EAM write/read rather than a memory write/read. */ 71a5a4af3bSchristos #define EAM_SELECT_MASK (1 << 15) 72a5a4af3bSchristos 73a5a4af3bSchristos /* Floating point instructions are distinguished from general EAM 74a5a4af3bSchristos instructions by the following bit. */ 75a5a4af3bSchristos #define FP_SELECT_MASK (1 << 3) 76a5a4af3bSchristos 77a5a4af3bSchristos /* For both class 1 and class 3 the following fields give, where 78a5a4af3bSchristos appropriate the srcA and srcB registers whether floating point 79a5a4af3bSchristos or general. */ 80a5a4af3bSchristos #define SRCA_MASK (0x1f << 16) 81a5a4af3bSchristos #define SRCB_MASK (0x1f << 4) 82a5a4af3bSchristos 83a5a4af3bSchristos /* The class 3 interrupt bit. It turns a BRA into a SYS1, and an 84a5a4af3bSchristos RFLAG into a SYS2. This bit should not be set in the user's 85a5a4af3bSchristos class 3 instructions. This bit is also used in class 3 86a5a4af3bSchristos to distinguish between floating point and other EAM operations. 87a5a4af3bSchristos (see FP_SELECT_MASK). */ 88a5a4af3bSchristos #define CLASS3_INT (1 << 3) 89a5a4af3bSchristos 90a5a4af3bSchristos /* Class 3 shift instructions use this bit to indicate that the 91a5a4af3bSchristos srcB field is a 5 bit immediate shift count rather than a 92a5a4af3bSchristos register number. */ 93a5a4af3bSchristos #define CLASS3_SOURCEB_IMMED (1 << 9) 94a5a4af3bSchristos 95a5a4af3bSchristos #define BMD 0x02630004 96a5a4af3bSchristos #define BMI 0x82230004 97a5a4af3bSchristos #define DSI 0x82800004 98a5a4af3bSchristos #define ENI 0x02a00004 99a5a4af3bSchristos #define RFI 0x82fe01d4 100a5a4af3bSchristos 101a5a4af3bSchristos struct reg_entry 102a5a4af3bSchristos { 103e5cb852cSchristos const char *name; 104a5a4af3bSchristos unsigned char code; 105a5a4af3bSchristos }; 106a5a4af3bSchristos 107e5cb852cSchristos static const struct reg_entry gen_reg_table[] ATTRIBUTE_UNUSED = 108a5a4af3bSchristos { 109a5a4af3bSchristos {"fp", 0x16}, 110a5a4af3bSchristos {"r0", 0x0}, 111a5a4af3bSchristos {"r1", 0x1}, 112a5a4af3bSchristos {"r10", 0xA}, 113a5a4af3bSchristos {"r11", 0xB}, 114a5a4af3bSchristos {"r12", 0xC}, 115a5a4af3bSchristos {"r13", 0xD}, 116a5a4af3bSchristos {"r14", 0xE}, 117a5a4af3bSchristos {"r15", 0xF}, 118a5a4af3bSchristos {"r16", 0x10}, 119a5a4af3bSchristos {"r17", 0x11}, 120a5a4af3bSchristos {"r18", 0x12}, 121a5a4af3bSchristos {"r19", 0x13}, 122a5a4af3bSchristos {"r2", 0x2}, 123a5a4af3bSchristos {"r20", 0x14}, 124a5a4af3bSchristos {"r21", 0x15}, 125a5a4af3bSchristos {"r22", 0x16}, 126a5a4af3bSchristos {"r23", 0x17}, 127a5a4af3bSchristos {"r24", 0x18}, 128a5a4af3bSchristos {"r25", 0x19}, 129a5a4af3bSchristos {"r26", 0x1a}, 130a5a4af3bSchristos {"r27", 0x1b}, 131a5a4af3bSchristos {"r28", 0x1c}, 132a5a4af3bSchristos {"r29", 0x1d}, 133a5a4af3bSchristos {"r3", 0x3}, 134a5a4af3bSchristos {"r30", 0x1e}, 135a5a4af3bSchristos {"r31", 0x1f}, 136a5a4af3bSchristos {"r4", 0x4}, 137a5a4af3bSchristos {"r5", 0x5}, 138a5a4af3bSchristos {"r6", 0x6}, 139a5a4af3bSchristos {"r7", 0x7}, 140a5a4af3bSchristos {"r8", 0x8}, 141a5a4af3bSchristos {"r9", 0x9}, 142a5a4af3bSchristos {"sp", 0x17}, 143a5a4af3bSchristos }; 144a5a4af3bSchristos 145e5cb852cSchristos static const struct reg_entry fp_reg_table[] ATTRIBUTE_UNUSED = 146a5a4af3bSchristos { 147a5a4af3bSchristos {"f0", 0x0}, 148a5a4af3bSchristos {"f1", 0x1}, 149a5a4af3bSchristos {"f10", 0xa}, 150a5a4af3bSchristos {"f11", 0xb}, 151a5a4af3bSchristos {"f12", 0xc}, 152a5a4af3bSchristos {"f13", 0xd}, 153a5a4af3bSchristos {"f14", 0xe}, 154a5a4af3bSchristos {"f15", 0xf}, 155a5a4af3bSchristos {"f2", 0x2}, 156a5a4af3bSchristos {"f3", 0x3}, 157a5a4af3bSchristos {"f4", 0x4}, 158a5a4af3bSchristos {"f5", 0x5}, 159a5a4af3bSchristos {"f6", 0x6}, 160a5a4af3bSchristos {"f7", 0x7}, 161a5a4af3bSchristos {"f8", 0x8}, 162a5a4af3bSchristos {"f9", 0x9}, 163a5a4af3bSchristos }; 164a5a4af3bSchristos 165e5cb852cSchristos static const struct cc_entry 166a5a4af3bSchristos { 167e5cb852cSchristos const char *name; 168a5a4af3bSchristos int code; 169e5cb852cSchristos } cc_table [] ATTRIBUTE_UNUSED = 170a5a4af3bSchristos { 171a5a4af3bSchristos {"cc", 6}, 172a5a4af3bSchristos {"cs", 2}, 173a5a4af3bSchristos {"eq", 1}, 174a5a4af3bSchristos {"fa", 0}, 175a5a4af3bSchristos {"ge", 9}, 176a5a4af3bSchristos {"gt", 10}, 177a5a4af3bSchristos {"hi", 11}, 178a5a4af3bSchristos {"le", 12}, 179a5a4af3bSchristos {"ls", 13}, 180a5a4af3bSchristos {"lt", 14}, 181a5a4af3bSchristos {"nc", 8}, 182a5a4af3bSchristos {"ne", 5}, 183a5a4af3bSchristos {"ns", 4}, 184a5a4af3bSchristos {"oc", 7}, 185a5a4af3bSchristos {"os", 3}, 186a5a4af3bSchristos {"tr", 15}, 187a5a4af3bSchristos }; 188a5a4af3bSchristos 189a5a4af3bSchristos enum addressing_mode 190a5a4af3bSchristos { 191a5a4af3bSchristos mode_d, /* register := */ 192a5a4af3bSchristos mode_a, /* op= register */ 193a5a4af3bSchristos mode_da, /* register := register */ 194a5a4af3bSchristos mode_ab, /* register * register */ 195a5a4af3bSchristos mode_dab, /* register := register * register */ 196a5a4af3bSchristos mode_iab, /* 5-bit immediate * register * register */ 197a5a4af3bSchristos mode_0ab, /* zero * register * register */ 198a5a4af3bSchristos mode_da0, /* register := register * zero */ 199a5a4af3bSchristos mode_cad, /* condition * register * register */ 200a5a4af3bSchristos mode_das, /* register := register * 5-bit immed/register shift count */ 201a5a4af3bSchristos mode_di, /* register := 5-bit immediate */ 202a5a4af3bSchristos mode_ir, /* 5-bit immediate * register */ 203a5a4af3bSchristos mode_ai, /* register 16-bit unsigned immediate */ 204a5a4af3bSchristos mode_i, /* 16-bit unsigned immediate */ 205a5a4af3bSchristos mode_bax, /* register * register * 5-bit immediate */ 206a5a4af3bSchristos mode_dax, /* register := register * 5-bit immediate */ 207a5a4af3bSchristos mode_s, /* special mode */ 208a5a4af3bSchristos mode_sr, /* special mode with register */ 209a5a4af3bSchristos mode_ci, /* condition * 16-bit signed word displacement */ 210a5a4af3bSchristos mode_fdab, /* float := float * float */ 211a5a4af3bSchristos mode_ifdab, /* fpinst: 4-bit immediate * float * float * float */ 212a5a4af3bSchristos mode_idfab, /* fpuread: 4-bit immediate * register * float * float */ 213a5a4af3bSchristos mode_fda, /* float := float */ 214a5a4af3bSchristos mode_fdra, /* float := register */ 215a5a4af3bSchristos mode_rdfab, /* register := float * float */ 216a5a4af3bSchristos mode_rdfa, /* register := float */ 217a5a4af3bSchristos mode_rrr, /* 3 register sources and destinations (block move) */ 218a5a4af3bSchristos }; 219a5a4af3bSchristos 220a5a4af3bSchristos #define class0 (0<<25) 221a5a4af3bSchristos #define class1 (1<<25) 222a5a4af3bSchristos #define class2 (2<<25) 223a5a4af3bSchristos #define class3 (3<<25) 224a5a4af3bSchristos 225a5a4af3bSchristos static const struct opcode_entry 226a5a4af3bSchristos { 227e5cb852cSchristos const char *mnem; 228a5a4af3bSchristos enum addressing_mode mode; 229a5a4af3bSchristos unsigned code; 230a5a4af3bSchristos char flags; 231a5a4af3bSchristos } 232e5cb852cSchristos opcode_table[] ATTRIBUTE_UNUSED = 233a5a4af3bSchristos { 234a5a4af3bSchristos { "adc.b", mode_dab, class3|(1<<21)|(1), def }, 235a5a4af3bSchristos { "adc.l", mode_dab, class3|(1<<21)|(4), def }, 236a5a4af3bSchristos { "adc.w", mode_dab, class3|(1<<21)|(2), def }, 237a5a4af3bSchristos { "add.b", mode_dab, class3|(0<<21)|(1), def }, 238a5a4af3bSchristos { "add.l", mode_dab, class3|(0<<21)|(4), def }, 239a5a4af3bSchristos { "add.w", mode_dab, class3|(0<<21)|(2), def }, 240a5a4af3bSchristos { "addi", mode_ai, class2, def }, 241a5a4af3bSchristos { "and.b", mode_dab, class3|(10<<21)|(1), def}, 242a5a4af3bSchristos { "and.l", mode_dab, class3|(10<<21)|(4), def }, 243a5a4af3bSchristos { "and.w", mode_dab, class3|(10<<21)|(2), def }, 244a5a4af3bSchristos { "asl.b", mode_das, class3|(7<<21)|(1), def }, 245a5a4af3bSchristos { "asl.l", mode_das, class3|(7<<21)|(4), def }, 246a5a4af3bSchristos { "asl.w", mode_das, class3|(7<<21)|(2), def }, 247a5a4af3bSchristos { "asld", mode_a, class1|(15<<21)|(1<<15)|(11<<10)|(4), def }, 248a5a4af3bSchristos { "asr.b", mode_das, class3|(5<<21)|(1), def }, 249a5a4af3bSchristos { "asr.l", mode_das, class3|(5<<21)|(4), def }, 250a5a4af3bSchristos { "asr.w", mode_das, class3|(5<<21)|(2), def }, 251a5a4af3bSchristos { "asrd", mode_a, class1|(15<<21)|(1<<15)|(9<<10)|(4), def }, 252a5a4af3bSchristos { "bmd", mode_rrr, class1|(3<<21)|(3<<16)|(4), gr6 }, 253a5a4af3bSchristos { "bmi", mode_rrr, class1|(1<<21)|(3<<16)|(4), gr6 }, 254a5a4af3bSchristos { "bra", mode_cad, class3|(12<<21)|(4), def }, 255a5a4af3bSchristos { "brr", mode_ci, class0, def }, 256a5a4af3bSchristos { "cmp.b", mode_0ab, class3|(2<<21)|(1), def }, 257a5a4af3bSchristos { "cmp.l", mode_0ab, class3|(2<<21)|(4), def }, 258a5a4af3bSchristos { "cmp.w", mode_0ab, class3|(2<<21)|(2), def }, 259a5a4af3bSchristos { "cmpc.b", mode_0ab, class3|(3<<21)|(1), def }, 260a5a4af3bSchristos { "cmpc.l", mode_0ab, class3|(3<<21)|(4), def }, 261a5a4af3bSchristos { "cmpc.w", mode_0ab, class3|(3<<21)|(2), def }, 262a5a4af3bSchristos { "divds", mode_a, class1|(15<<21)|(1<<15)|(6<<10)|(4), def }, 263a5a4af3bSchristos { "divdu", mode_a, class1|(15<<21)|(1<<15)|(7<<10)|(4), def }, 264a5a4af3bSchristos { "divs", mode_a, class1|(15<<21)|(1<<15)|(2<<10)|(4), def }, 265a5a4af3bSchristos { "divu", mode_a, class1|(15<<21)|(1<<15)|(3<<10)|(4), def }, 266a5a4af3bSchristos { "dsi", mode_s, class1|(4<<21)|(4), def }, 267a5a4af3bSchristos { "eamread", mode_di, class3|(15<<21)|(1<<15)|(1<<9)|(4), def }, 268a5a4af3bSchristos { "eamwrite", mode_iab, class1|(15<<21)|(1<<15)|(4), def }, 269a5a4af3bSchristos { "eni", mode_s, class1|(5<<21)|(4), def }, 270a5a4af3bSchristos { "extb.b", mode_da, class3|(14<<21)|(1), def }, 271a5a4af3bSchristos { "extb.l", mode_da, class3|(14<<21)|(4), def }, 272a5a4af3bSchristos { "extb.w", mode_da, class3|(14<<21)|(2), def }, 273a5a4af3bSchristos { "extw.l", mode_da, class3|(4<<21)|(4), def }, 274a5a4af3bSchristos { "extw.w", mode_da, class3|(4<<21)|(2), def }, 275a5a4af3bSchristos { "fabs", mode_fda, class1|(7<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 276a5a4af3bSchristos { "fadd", mode_fdab, class1|(1<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 277a5a4af3bSchristos { "fcmp", mode_rdfab,class3|(10<<27)|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 }, 278a5a4af3bSchristos { "fcmpe", mode_rdfab,class3|(11<<27)|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 }, 279a5a4af3bSchristos { "fdiv", mode_fdab, class1|(4<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 280a5a4af3bSchristos { "fload", mode_fdra, class1|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 281a5a4af3bSchristos { "fmove", mode_fda, class1|(12<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5}, 282a5a4af3bSchristos { "fmult", mode_fdab, class1|(3<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 283a5a4af3bSchristos { "fneg", mode_fda, class1|(6<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 284a5a4af3bSchristos { "fpinst", mode_ifdab,class1|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 285a5a4af3bSchristos { "fpuread", mode_idfab,class3|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 }, 286a5a4af3bSchristos { "fsqrt", mode_fda, class1|(5<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 287a5a4af3bSchristos { "fstore", mode_rdfa, class3|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 }, 288a5a4af3bSchristos { "fsub", mode_fdab, class1|(2<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 289a5a4af3bSchristos { "ftoi", mode_fda, class1|(8<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 290a5a4af3bSchristos { "itof", mode_fda, class1|(9<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 }, 291a5a4af3bSchristos { "lsr.b", mode_das, class3|(6<<21)|(1), def }, 292a5a4af3bSchristos { "lsr.l", mode_das, class3|(6<<21)|(4), def }, 293a5a4af3bSchristos { "lsr.w", mode_das, class3|(6<<21)|(2), def }, 294a5a4af3bSchristos { "lsrd", mode_a, class1|(15<<21)|(1<<15)|(10<<10)|(4), def }, 295a5a4af3bSchristos { "move.b", mode_da0, class3|(9<<21)|(1), def }, 296a5a4af3bSchristos { "move.l", mode_da0, class3|(9<<21)|(4), def }, 297a5a4af3bSchristos { "move.w", mode_da0, class3|(9<<21)|(2), def }, 298a5a4af3bSchristos { "movil", mode_ai, class2|(4<<21), def }, 299a5a4af3bSchristos { "moviq", mode_ai, class2|(6<<21), def }, 300a5a4af3bSchristos { "moviu", mode_ai, class2|(5<<21), def }, 301a5a4af3bSchristos { "mults", mode_ab, class1|(15<<21)|(1<<15)|(0<<10)|(4), def }, 302a5a4af3bSchristos { "multu", mode_ab, class1|(15<<21)|(1<<15)|(1<<10)|(4), def }, 303a5a4af3bSchristos { "nop", mode_s, class0, def }, 304a5a4af3bSchristos { "not.b", mode_da, class3|(11<<21)|(1), def }, 305a5a4af3bSchristos { "not.l", mode_da, class3|(11<<21)|(4), def }, 306a5a4af3bSchristos { "not.w", mode_da, class3|(11<<21)|(2), def }, 307a5a4af3bSchristos { "or.b", mode_dab, class3|(9<<21)|(1), def }, 308a5a4af3bSchristos { "or.l", mode_dab, class3|(9<<21)|(4), def }, 309a5a4af3bSchristos { "or.w", mode_dab, class3|(9<<21)|(2), def }, 310a5a4af3bSchristos { "read.b", mode_dax, class3|(15<<21)|(1<<9)|(1), def }, 311a5a4af3bSchristos { "read.l", mode_dax, class3|(15<<21)|(1<<9)|(4), def }, 312a5a4af3bSchristos { "read.w", mode_dax, class3|(15<<21)|(1<<9)|(2), def }, 313a5a4af3bSchristos { "readmda", mode_d, class3|(15<<21)|(1<<15)|(1<<9)|(4), def }, 314a5a4af3bSchristos { "readmdb", mode_d, class3|(15<<21)|(1<<15)|(1<<9)|(1<<4)|(4), def }, 315a5a4af3bSchristos { "readmdc", mode_d, class3|(15<<21)|(1<<15)|(1<<9)|(2<<4)|(4), def }, 316a5a4af3bSchristos { "rfi", mode_s, class1|(7<<21)|(30<<16)|(29<<4)|(4), def }, 317a5a4af3bSchristos { "rflag", mode_d, class3|(13<<21)|(4), def }, 318a5a4af3bSchristos { "stop", mode_ir, class1|(0<<21)|(4), def }, 319a5a4af3bSchristos { "sub.b", mode_dab, class3|(2<<21)|(1), def }, 320a5a4af3bSchristos { "sub.l", mode_dab, class3|(2<<21)|(4), def }, 321a5a4af3bSchristos { "sub.w", mode_dab, class3|(2<<21)|(2), def }, 322a5a4af3bSchristos { "subc.b", mode_dab, class3|(3<<21)|(1), def }, 323a5a4af3bSchristos { "subc.l", mode_dab, class3|(3<<21)|(4), def }, 324a5a4af3bSchristos { "subc.w", mode_dab, class3|(3<<21)|(2), def }, 325a5a4af3bSchristos { "subi", mode_ai, class2|(2<<21), def }, 326a5a4af3bSchristos { "trace", mode_ir, class1|(13<<21), def }, 327a5a4af3bSchristos { "write.b", mode_bax, class1|(15<<21)|(1), def }, 328a5a4af3bSchristos { "write.l", mode_bax, class1|(15<<21)|(4), def }, 329a5a4af3bSchristos { "write.w", mode_bax, class1|(15<<21)|(2), def }, 330a5a4af3bSchristos { "writemd", mode_ab, class1|(15<<21)|(1<<15)|(4<<10)|(4), def }, 331a5a4af3bSchristos { "writemdc", mode_a, class1|(15<<21)|(1<<15)|(5<<10)|(4), def }, 332a5a4af3bSchristos { "wrtl", mode_i, class2|(8<<21), gr6 }, 333a5a4af3bSchristos { "wrtu", mode_i, class2|(9<<21), gr6 }, 334a5a4af3bSchristos { "xor.b", mode_dab, class3|(8<<21)|(1), def }, 335a5a4af3bSchristos { "xor.l", mode_dab, class3|(8<<21)|(4), def }, 336a5a4af3bSchristos { "xor.w", mode_dab, class3|(8<<21)|(2), def }, 337a5a4af3bSchristos }; 338e5cb852cSchristos 339