Home | History | Annotate | Line # | Download | only in opcodes
iq2000-desc.c revision 1.1.1.2
      1      1.1  christos /* CPU data for iq2000.
      2      1.1  christos 
      3      1.1  christos THIS FILE IS MACHINE GENERATED WITH CGEN.
      4      1.1  christos 
      5  1.1.1.2  christos Copyright (C) 1996-2015 Free Software Foundation, Inc.
      6      1.1  christos 
      7      1.1  christos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
      8      1.1  christos 
      9      1.1  christos    This file is free software; you can redistribute it and/or modify
     10      1.1  christos    it under the terms of the GNU General Public License as published by
     11      1.1  christos    the Free Software Foundation; either version 3, or (at your option)
     12      1.1  christos    any later version.
     13      1.1  christos 
     14      1.1  christos    It is distributed in the hope that it will be useful, but WITHOUT
     15      1.1  christos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     16      1.1  christos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     17      1.1  christos    License for more details.
     18      1.1  christos 
     19      1.1  christos    You should have received a copy of the GNU General Public License along
     20      1.1  christos    with this program; if not, write to the Free Software Foundation, Inc.,
     21      1.1  christos    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
     22      1.1  christos 
     23      1.1  christos */
     24      1.1  christos 
     25      1.1  christos #include "sysdep.h"
     26      1.1  christos #include <stdio.h>
     27      1.1  christos #include <stdarg.h>
     28      1.1  christos #include "ansidecl.h"
     29      1.1  christos #include "bfd.h"
     30      1.1  christos #include "symcat.h"
     31      1.1  christos #include "iq2000-desc.h"
     32      1.1  christos #include "iq2000-opc.h"
     33      1.1  christos #include "opintl.h"
     34      1.1  christos #include "libiberty.h"
     35      1.1  christos #include "xregex.h"
     36      1.1  christos 
     37      1.1  christos /* Attributes.  */
     38      1.1  christos 
     39      1.1  christos static const CGEN_ATTR_ENTRY bool_attr[] =
     40      1.1  christos {
     41      1.1  christos   { "#f", 0 },
     42      1.1  christos   { "#t", 1 },
     43      1.1  christos   { 0, 0 }
     44      1.1  christos };
     45      1.1  christos 
     46      1.1  christos static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
     47      1.1  christos {
     48      1.1  christos   { "base", MACH_BASE },
     49      1.1  christos   { "iq2000", MACH_IQ2000 },
     50      1.1  christos   { "iq10", MACH_IQ10 },
     51      1.1  christos   { "max", MACH_MAX },
     52      1.1  christos   { 0, 0 }
     53      1.1  christos };
     54      1.1  christos 
     55      1.1  christos static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
     56      1.1  christos {
     57      1.1  christos   { "iq2000", ISA_IQ2000 },
     58      1.1  christos   { "max", ISA_MAX },
     59      1.1  christos   { 0, 0 }
     60      1.1  christos };
     61      1.1  christos 
     62      1.1  christos const CGEN_ATTR_TABLE iq2000_cgen_ifield_attr_table[] =
     63      1.1  christos {
     64      1.1  christos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
     65      1.1  christos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
     66      1.1  christos   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
     67      1.1  christos   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
     68      1.1  christos   { "RESERVED", &bool_attr[0], &bool_attr[0] },
     69      1.1  christos   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
     70      1.1  christos   { "SIGNED", &bool_attr[0], &bool_attr[0] },
     71      1.1  christos   { 0, 0, 0 }
     72      1.1  christos };
     73      1.1  christos 
     74      1.1  christos const CGEN_ATTR_TABLE iq2000_cgen_hardware_attr_table[] =
     75      1.1  christos {
     76      1.1  christos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
     77      1.1  christos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
     78      1.1  christos   { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
     79      1.1  christos   { "PC", &bool_attr[0], &bool_attr[0] },
     80      1.1  christos   { "PROFILE", &bool_attr[0], &bool_attr[0] },
     81      1.1  christos   { 0, 0, 0 }
     82      1.1  christos };
     83      1.1  christos 
     84      1.1  christos const CGEN_ATTR_TABLE iq2000_cgen_operand_attr_table[] =
     85      1.1  christos {
     86      1.1  christos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
     87      1.1  christos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
     88      1.1  christos   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
     89      1.1  christos   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
     90      1.1  christos   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
     91      1.1  christos   { "SIGNED", &bool_attr[0], &bool_attr[0] },
     92      1.1  christos   { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
     93      1.1  christos   { "RELAX", &bool_attr[0], &bool_attr[0] },
     94      1.1  christos   { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
     95      1.1  christos   { 0, 0, 0 }
     96      1.1  christos };
     97      1.1  christos 
     98      1.1  christos const CGEN_ATTR_TABLE iq2000_cgen_insn_attr_table[] =
     99      1.1  christos {
    100      1.1  christos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
    101      1.1  christos   { "ALIAS", &bool_attr[0], &bool_attr[0] },
    102      1.1  christos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
    103      1.1  christos   { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
    104      1.1  christos   { "COND-CTI", &bool_attr[0], &bool_attr[0] },
    105      1.1  christos   { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
    106      1.1  christos   { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
    107      1.1  christos   { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
    108      1.1  christos   { "RELAXED", &bool_attr[0], &bool_attr[0] },
    109      1.1  christos   { "NO-DIS", &bool_attr[0], &bool_attr[0] },
    110      1.1  christos   { "PBB", &bool_attr[0], &bool_attr[0] },
    111      1.1  christos   { "YIELD-INSN", &bool_attr[0], &bool_attr[0] },
    112      1.1  christos   { "LOAD-DELAY", &bool_attr[0], &bool_attr[0] },
    113      1.1  christos   { "EVEN-REG-NUM", &bool_attr[0], &bool_attr[0] },
    114      1.1  christos   { "UNSUPPORTED", &bool_attr[0], &bool_attr[0] },
    115      1.1  christos   { "USES-RD", &bool_attr[0], &bool_attr[0] },
    116      1.1  christos   { "USES-RS", &bool_attr[0], &bool_attr[0] },
    117      1.1  christos   { "USES-RT", &bool_attr[0], &bool_attr[0] },
    118      1.1  christos   { "USES-R31", &bool_attr[0], &bool_attr[0] },
    119      1.1  christos   { 0, 0, 0 }
    120      1.1  christos };
    121      1.1  christos 
    122      1.1  christos /* Instruction set variants.  */
    123      1.1  christos 
    124      1.1  christos static const CGEN_ISA iq2000_cgen_isa_table[] = {
    125      1.1  christos   { "iq2000", 32, 32, 32, 32 },
    126      1.1  christos   { 0, 0, 0, 0, 0 }
    127      1.1  christos };
    128      1.1  christos 
    129      1.1  christos /* Machine variants.  */
    130      1.1  christos 
    131      1.1  christos static const CGEN_MACH iq2000_cgen_mach_table[] = {
    132      1.1  christos   { "iq2000", "iq2000", MACH_IQ2000, 0 },
    133      1.1  christos   { "iq10", "iq10", MACH_IQ10, 0 },
    134      1.1  christos   { 0, 0, 0, 0 }
    135      1.1  christos };
    136      1.1  christos 
    137      1.1  christos static CGEN_KEYWORD_ENTRY iq2000_cgen_opval_gr_names_entries[] =
    138      1.1  christos {
    139      1.1  christos   { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
    140      1.1  christos   { "%0", 0, {0, {{{0, 0}}}}, 0, 0 },
    141      1.1  christos   { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
    142      1.1  christos   { "%1", 1, {0, {{{0, 0}}}}, 0, 0 },
    143      1.1  christos   { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
    144      1.1  christos   { "%2", 2, {0, {{{0, 0}}}}, 0, 0 },
    145      1.1  christos   { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
    146      1.1  christos   { "%3", 3, {0, {{{0, 0}}}}, 0, 0 },
    147      1.1  christos   { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
    148      1.1  christos   { "%4", 4, {0, {{{0, 0}}}}, 0, 0 },
    149      1.1  christos   { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
    150      1.1  christos   { "%5", 5, {0, {{{0, 0}}}}, 0, 0 },
    151      1.1  christos   { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
    152      1.1  christos   { "%6", 6, {0, {{{0, 0}}}}, 0, 0 },
    153      1.1  christos   { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
    154      1.1  christos   { "%7", 7, {0, {{{0, 0}}}}, 0, 0 },
    155      1.1  christos   { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
    156      1.1  christos   { "%8", 8, {0, {{{0, 0}}}}, 0, 0 },
    157      1.1  christos   { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
    158      1.1  christos   { "%9", 9, {0, {{{0, 0}}}}, 0, 0 },
    159      1.1  christos   { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
    160      1.1  christos   { "%10", 10, {0, {{{0, 0}}}}, 0, 0 },
    161      1.1  christos   { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
    162      1.1  christos   { "%11", 11, {0, {{{0, 0}}}}, 0, 0 },
    163      1.1  christos   { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
    164      1.1  christos   { "%12", 12, {0, {{{0, 0}}}}, 0, 0 },
    165      1.1  christos   { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
    166      1.1  christos   { "%13", 13, {0, {{{0, 0}}}}, 0, 0 },
    167      1.1  christos   { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
    168      1.1  christos   { "%14", 14, {0, {{{0, 0}}}}, 0, 0 },
    169      1.1  christos   { "r15", 15, {0, {{{0, 0}}}}, 0, 0 },
    170      1.1  christos   { "%15", 15, {0, {{{0, 0}}}}, 0, 0 },
    171      1.1  christos   { "r16", 16, {0, {{{0, 0}}}}, 0, 0 },
    172      1.1  christos   { "%16", 16, {0, {{{0, 0}}}}, 0, 0 },
    173      1.1  christos   { "r17", 17, {0, {{{0, 0}}}}, 0, 0 },
    174      1.1  christos   { "%17", 17, {0, {{{0, 0}}}}, 0, 0 },
    175      1.1  christos   { "r18", 18, {0, {{{0, 0}}}}, 0, 0 },
    176      1.1  christos   { "%18", 18, {0, {{{0, 0}}}}, 0, 0 },
    177      1.1  christos   { "r19", 19, {0, {{{0, 0}}}}, 0, 0 },
    178      1.1  christos   { "%19", 19, {0, {{{0, 0}}}}, 0, 0 },
    179      1.1  christos   { "r20", 20, {0, {{{0, 0}}}}, 0, 0 },
    180      1.1  christos   { "%20", 20, {0, {{{0, 0}}}}, 0, 0 },
    181      1.1  christos   { "r21", 21, {0, {{{0, 0}}}}, 0, 0 },
    182      1.1  christos   { "%21", 21, {0, {{{0, 0}}}}, 0, 0 },
    183      1.1  christos   { "r22", 22, {0, {{{0, 0}}}}, 0, 0 },
    184      1.1  christos   { "%22", 22, {0, {{{0, 0}}}}, 0, 0 },
    185      1.1  christos   { "r23", 23, {0, {{{0, 0}}}}, 0, 0 },
    186      1.1  christos   { "%23", 23, {0, {{{0, 0}}}}, 0, 0 },
    187      1.1  christos   { "r24", 24, {0, {{{0, 0}}}}, 0, 0 },
    188      1.1  christos   { "%24", 24, {0, {{{0, 0}}}}, 0, 0 },
    189      1.1  christos   { "r25", 25, {0, {{{0, 0}}}}, 0, 0 },
    190      1.1  christos   { "%25", 25, {0, {{{0, 0}}}}, 0, 0 },
    191      1.1  christos   { "r26", 26, {0, {{{0, 0}}}}, 0, 0 },
    192      1.1  christos   { "%26", 26, {0, {{{0, 0}}}}, 0, 0 },
    193      1.1  christos   { "r27", 27, {0, {{{0, 0}}}}, 0, 0 },
    194      1.1  christos   { "%27", 27, {0, {{{0, 0}}}}, 0, 0 },
    195      1.1  christos   { "r28", 28, {0, {{{0, 0}}}}, 0, 0 },
    196      1.1  christos   { "%28", 28, {0, {{{0, 0}}}}, 0, 0 },
    197      1.1  christos   { "r29", 29, {0, {{{0, 0}}}}, 0, 0 },
    198      1.1  christos   { "%29", 29, {0, {{{0, 0}}}}, 0, 0 },
    199      1.1  christos   { "r30", 30, {0, {{{0, 0}}}}, 0, 0 },
    200      1.1  christos   { "%30", 30, {0, {{{0, 0}}}}, 0, 0 },
    201      1.1  christos   { "r31", 31, {0, {{{0, 0}}}}, 0, 0 },
    202      1.1  christos   { "%31", 31, {0, {{{0, 0}}}}, 0, 0 }
    203      1.1  christos };
    204      1.1  christos 
    205      1.1  christos CGEN_KEYWORD iq2000_cgen_opval_gr_names =
    206      1.1  christos {
    207      1.1  christos   & iq2000_cgen_opval_gr_names_entries[0],
    208      1.1  christos   64,
    209      1.1  christos   0, 0, 0, 0, ""
    210      1.1  christos };
    211      1.1  christos 
    212      1.1  christos 
    213      1.1  christos /* The hardware table.  */
    214      1.1  christos 
    215      1.1  christos #define A(a) (1 << CGEN_HW_##a)
    216      1.1  christos 
    217      1.1  christos const CGEN_HW_ENTRY iq2000_cgen_hw_table[] =
    218      1.1  christos {
    219      1.1  christos   { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    220      1.1  christos   { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    221      1.1  christos   { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    222      1.1  christos   { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    223      1.1  christos   { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    224      1.1  christos   { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } },
    225      1.1  christos   { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, (PTR) & iq2000_cgen_opval_gr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    226      1.1  christos   { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
    227      1.1  christos };
    228      1.1  christos 
    229      1.1  christos #undef A
    230      1.1  christos 
    231      1.1  christos 
    232      1.1  christos /* The instruction field table.  */
    233      1.1  christos 
    234      1.1  christos #define A(a) (1 << CGEN_IFLD_##a)
    235      1.1  christos 
    236      1.1  christos const CGEN_IFLD iq2000_cgen_ifld_table[] =
    237      1.1  christos {
    238      1.1  christos   { IQ2000_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    239      1.1  christos   { IQ2000_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    240      1.1  christos   { IQ2000_F_OPCODE, "f-opcode", 0, 32, 31, 6, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    241      1.1  christos   { IQ2000_F_RS, "f-rs", 0, 32, 25, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    242      1.1  christos   { IQ2000_F_RT, "f-rt", 0, 32, 20, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    243      1.1  christos   { IQ2000_F_RD, "f-rd", 0, 32, 15, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    244      1.1  christos   { IQ2000_F_SHAMT, "f-shamt", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    245      1.1  christos   { IQ2000_F_CP_OP, "f-cp-op", 0, 32, 10, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    246      1.1  christos   { IQ2000_F_CP_OP_10, "f-cp-op-10", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    247      1.1  christos   { IQ2000_F_CP_GRP, "f-cp-grp", 0, 32, 7, 2, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    248      1.1  christos   { IQ2000_F_FUNC, "f-func", 0, 32, 5, 6, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    249      1.1  christos   { IQ2000_F_IMM, "f-imm", 0, 32, 15, 16, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    250      1.1  christos   { IQ2000_F_RD_RS, "f-rd-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
    251      1.1  christos   { IQ2000_F_RD_RT, "f-rd-rt", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
    252      1.1  christos   { IQ2000_F_RT_RS, "f-rt-rs", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
    253      1.1  christos   { IQ2000_F_JTARG, "f-jtarg", 0, 32, 15, 16, { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    254      1.1  christos   { IQ2000_F_JTARGQ10, "f-jtargq10", 0, 32, 20, 21, { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    255      1.1  christos   { IQ2000_F_OFFSET, "f-offset", 0, 32, 15, 16, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    256      1.1  christos   { IQ2000_F_COUNT, "f-count", 0, 32, 15, 7, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    257      1.1  christos   { IQ2000_F_BYTECOUNT, "f-bytecount", 0, 32, 7, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    258      1.1  christos   { IQ2000_F_INDEX, "f-index", 0, 32, 8, 9, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    259      1.1  christos   { IQ2000_F_MASK, "f-mask", 0, 32, 9, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    260      1.1  christos   { IQ2000_F_MASKQ10, "f-maskq10", 0, 32, 10, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    261      1.1  christos   { IQ2000_F_MASKL, "f-maskl", 0, 32, 4, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    262      1.1  christos   { IQ2000_F_EXCODE, "f-excode", 0, 32, 25, 20, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    263      1.1  christos   { IQ2000_F_RSRVD, "f-rsrvd", 0, 32, 25, 10, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    264      1.1  christos   { IQ2000_F_10_11, "f-10-11", 0, 32, 10, 11, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    265      1.1  christos   { IQ2000_F_24_19, "f-24-19", 0, 32, 24, 19, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    266      1.1  christos   { IQ2000_F_5, "f-5", 0, 32, 5, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    267      1.1  christos   { IQ2000_F_10, "f-10", 0, 32, 10, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    268      1.1  christos   { IQ2000_F_25, "f-25", 0, 32, 25, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    269      1.1  christos   { IQ2000_F_CAM_Z, "f-cam-z", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    270      1.1  christos   { IQ2000_F_CAM_Y, "f-cam-y", 0, 32, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    271      1.1  christos   { IQ2000_F_CM_3FUNC, "f-cm-3func", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    272      1.1  christos   { IQ2000_F_CM_4FUNC, "f-cm-4func", 0, 32, 5, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    273      1.1  christos   { IQ2000_F_CM_3Z, "f-cm-3z", 0, 32, 1, 2, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    274      1.1  christos   { IQ2000_F_CM_4Z, "f-cm-4z", 0, 32, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    275      1.1  christos   { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
    276      1.1  christos };
    277      1.1  christos 
    278      1.1  christos #undef A
    279      1.1  christos 
    280      1.1  christos 
    281      1.1  christos 
    282      1.1  christos /* multi ifield declarations */
    283      1.1  christos 
    284      1.1  christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RS_MULTI_IFIELD [];
    285      1.1  christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RT_MULTI_IFIELD [];
    286      1.1  christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RT_RS_MULTI_IFIELD [];
    287      1.1  christos 
    288      1.1  christos 
    289      1.1  christos /* multi ifield definitions */
    290      1.1  christos 
    291      1.1  christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RS_MULTI_IFIELD [] =
    292      1.1  christos {
    293      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
    294      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
    295      1.1  christos     { 0, { (const PTR) 0 } }
    296      1.1  christos };
    297      1.1  christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RD_RT_MULTI_IFIELD [] =
    298      1.1  christos {
    299      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
    300      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
    301      1.1  christos     { 0, { (const PTR) 0 } }
    302      1.1  christos };
    303      1.1  christos const CGEN_MAYBE_MULTI_IFLD IQ2000_F_RT_RS_MULTI_IFIELD [] =
    304      1.1  christos {
    305      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
    306      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
    307      1.1  christos     { 0, { (const PTR) 0 } }
    308      1.1  christos };
    309      1.1  christos 
    310      1.1  christos /* The operand table.  */
    311      1.1  christos 
    312      1.1  christos #define A(a) (1 << CGEN_OPERAND_##a)
    313      1.1  christos #define OPERAND(op) IQ2000_OPERAND_##op
    314      1.1  christos 
    315      1.1  christos const CGEN_OPERAND iq2000_cgen_operand_table[] =
    316      1.1  christos {
    317      1.1  christos /* pc: program counter */
    318      1.1  christos   { "pc", IQ2000_OPERAND_PC, HW_H_PC, 0, 0,
    319      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_NIL] } },
    320      1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    321      1.1  christos /* rs: register Rs */
    322      1.1  christos   { "rs", IQ2000_OPERAND_RS, HW_H_GR, 25, 5,
    323      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
    324      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    325      1.1  christos /* rt: register Rt */
    326      1.1  christos   { "rt", IQ2000_OPERAND_RT, HW_H_GR, 20, 5,
    327      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
    328      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    329      1.1  christos /* rd: register Rd */
    330      1.1  christos   { "rd", IQ2000_OPERAND_RD, HW_H_GR, 15, 5,
    331      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RD] } },
    332      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    333      1.1  christos /* rd-rs: register Rd from Rs */
    334      1.1  christos   { "rd-rs", IQ2000_OPERAND_RD_RS, HW_H_GR, 15, 10,
    335      1.1  christos     { 2, { (const PTR) &IQ2000_F_RD_RS_MULTI_IFIELD[0] } },
    336      1.1  christos     { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
    337      1.1  christos /* rd-rt: register Rd from Rt */
    338      1.1  christos   { "rd-rt", IQ2000_OPERAND_RD_RT, HW_H_GR, 15, 10,
    339      1.1  christos     { 2, { (const PTR) &IQ2000_F_RD_RT_MULTI_IFIELD[0] } },
    340      1.1  christos     { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
    341      1.1  christos /* rt-rs: register Rt from Rs */
    342      1.1  christos   { "rt-rs", IQ2000_OPERAND_RT_RS, HW_H_GR, 20, 10,
    343      1.1  christos     { 2, { (const PTR) &IQ2000_F_RT_RS_MULTI_IFIELD[0] } },
    344      1.1  christos     { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
    345      1.1  christos /* shamt: shift amount */
    346      1.1  christos   { "shamt", IQ2000_OPERAND_SHAMT, HW_H_UINT, 10, 5,
    347      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_SHAMT] } },
    348      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    349      1.1  christos /* imm: immediate */
    350      1.1  christos   { "imm", IQ2000_OPERAND_IMM, HW_H_UINT, 15, 16,
    351      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
    352      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    353      1.1  christos /* offset: pc-relative offset */
    354      1.1  christos   { "offset", IQ2000_OPERAND_OFFSET, HW_H_IADDR, 15, 16,
    355      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_OFFSET] } },
    356      1.1  christos     { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    357      1.1  christos /* baseoff: base register offset */
    358      1.1  christos   { "baseoff", IQ2000_OPERAND_BASEOFF, HW_H_IADDR, 15, 16,
    359      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
    360      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    361      1.1  christos /* jmptarg: jump target */
    362      1.1  christos   { "jmptarg", IQ2000_OPERAND_JMPTARG, HW_H_IADDR, 15, 16,
    363      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARG] } },
    364      1.1  christos     { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    365      1.1  christos /* mask: mask */
    366      1.1  christos   { "mask", IQ2000_OPERAND_MASK, HW_H_UINT, 9, 4,
    367      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASK] } },
    368      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    369      1.1  christos /* maskq10: iq10 mask */
    370      1.1  christos   { "maskq10", IQ2000_OPERAND_MASKQ10, HW_H_UINT, 10, 5,
    371      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKQ10] } },
    372      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    373      1.1  christos /* maskl: mask left */
    374      1.1  christos   { "maskl", IQ2000_OPERAND_MASKL, HW_H_UINT, 4, 5,
    375      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_MASKL] } },
    376      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    377      1.1  christos /* count: count */
    378      1.1  christos   { "count", IQ2000_OPERAND_COUNT, HW_H_UINT, 15, 7,
    379      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_COUNT] } },
    380      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    381      1.1  christos /* _index: index */
    382      1.1  christos   { "_index", IQ2000_OPERAND__INDEX, HW_H_UINT, 8, 9,
    383      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_INDEX] } },
    384      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    385      1.1  christos /* execode: execcode */
    386      1.1  christos   { "execode", IQ2000_OPERAND_EXECODE, HW_H_UINT, 25, 20,
    387      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_EXCODE] } },
    388      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    389      1.1  christos /* bytecount: byte count */
    390      1.1  christos   { "bytecount", IQ2000_OPERAND_BYTECOUNT, HW_H_UINT, 7, 8,
    391      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_BYTECOUNT] } },
    392      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    393      1.1  christos /* cam-y: cam global opn y */
    394      1.1  christos   { "cam-y", IQ2000_OPERAND_CAM_Y, HW_H_UINT, 2, 3,
    395      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Y] } },
    396      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    397      1.1  christos /* cam-z: cam global mask z */
    398      1.1  christos   { "cam-z", IQ2000_OPERAND_CAM_Z, HW_H_UINT, 5, 3,
    399      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CAM_Z] } },
    400      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    401      1.1  christos /* cm-3func: CM 3 bit fn field */
    402      1.1  christos   { "cm-3func", IQ2000_OPERAND_CM_3FUNC, HW_H_UINT, 5, 3,
    403      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3FUNC] } },
    404      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    405      1.1  christos /* cm-4func: CM 4 bit fn field */
    406      1.1  christos   { "cm-4func", IQ2000_OPERAND_CM_4FUNC, HW_H_UINT, 5, 4,
    407      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4FUNC] } },
    408      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    409      1.1  christos /* cm-3z: CM 3 bit Z field */
    410      1.1  christos   { "cm-3z", IQ2000_OPERAND_CM_3Z, HW_H_UINT, 1, 2,
    411      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_3Z] } },
    412      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    413      1.1  christos /* cm-4z: CM 4 bit Z field */
    414      1.1  christos   { "cm-4z", IQ2000_OPERAND_CM_4Z, HW_H_UINT, 2, 3,
    415      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_CM_4Z] } },
    416      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    417      1.1  christos /* base: base register */
    418      1.1  christos   { "base", IQ2000_OPERAND_BASE, HW_H_GR, 25, 5,
    419      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
    420      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    421      1.1  christos /* maskr: mask right */
    422      1.1  christos   { "maskr", IQ2000_OPERAND_MASKR, HW_H_UINT, 25, 5,
    423      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RS] } },
    424      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    425      1.1  christos /* bitnum: bit number */
    426      1.1  christos   { "bitnum", IQ2000_OPERAND_BITNUM, HW_H_UINT, 20, 5,
    427      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_RT] } },
    428      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    429      1.1  christos /* hi16: high 16 bit immediate */
    430      1.1  christos   { "hi16", IQ2000_OPERAND_HI16, HW_H_UINT, 15, 16,
    431      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
    432      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    433      1.1  christos /* lo16: 16 bit signed immediate, for low */
    434      1.1  christos   { "lo16", IQ2000_OPERAND_LO16, HW_H_UINT, 15, 16,
    435      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
    436      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    437      1.1  christos /* mlo16: negated 16 bit signed immediate */
    438      1.1  christos   { "mlo16", IQ2000_OPERAND_MLO16, HW_H_UINT, 15, 16,
    439      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_IMM] } },
    440      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    441      1.1  christos /* jmptargq10: iq10 21-bit jump offset */
    442      1.1  christos   { "jmptargq10", IQ2000_OPERAND_JMPTARGQ10, HW_H_IADDR, 20, 21,
    443      1.1  christos     { 0, { (const PTR) &iq2000_cgen_ifld_table[IQ2000_F_JTARGQ10] } },
    444      1.1  christos     { 0|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    445      1.1  christos /* sentinel */
    446      1.1  christos   { 0, 0, 0, 0, 0,
    447      1.1  christos     { 0, { (const PTR) 0 } },
    448      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } } }
    449      1.1  christos };
    450      1.1  christos 
    451      1.1  christos #undef A
    452      1.1  christos 
    453      1.1  christos 
    454      1.1  christos /* The instruction table.  */
    455      1.1  christos 
    456      1.1  christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
    457      1.1  christos #define A(a) (1 << CGEN_INSN_##a)
    458      1.1  christos 
    459      1.1  christos static const CGEN_IBASE iq2000_cgen_insn_table[MAX_INSNS] =
    460      1.1  christos {
    461      1.1  christos   /* Special null first entry.
    462      1.1  christos      A `num' value of zero is thus invalid.
    463      1.1  christos      Also, the special `invalid' insn resides here.  */
    464      1.1  christos   { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    465      1.1  christos /* add ${rd-rs},$rt */
    466      1.1  christos   {
    467      1.1  christos     -1, "add2", "add", 32,
    468      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    469      1.1  christos   },
    470      1.1  christos /* add $rd,$rs,$rt */
    471      1.1  christos   {
    472      1.1  christos     IQ2000_INSN_ADD, "add", "add", 32,
    473      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    474      1.1  christos   },
    475      1.1  christos /* addi ${rt-rs},$lo16 */
    476      1.1  christos   {
    477      1.1  christos     -1, "addi2", "addi", 32,
    478      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    479      1.1  christos   },
    480      1.1  christos /* addi $rt,$rs,$lo16 */
    481      1.1  christos   {
    482      1.1  christos     IQ2000_INSN_ADDI, "addi", "addi", 32,
    483      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    484      1.1  christos   },
    485      1.1  christos /* addiu ${rt-rs},$lo16 */
    486      1.1  christos   {
    487      1.1  christos     -1, "addiu2", "addiu", 32,
    488      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    489      1.1  christos   },
    490      1.1  christos /* addiu $rt,$rs,$lo16 */
    491      1.1  christos   {
    492      1.1  christos     IQ2000_INSN_ADDIU, "addiu", "addiu", 32,
    493      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    494      1.1  christos   },
    495      1.1  christos /* addu ${rd-rs},$rt */
    496      1.1  christos   {
    497      1.1  christos     -1, "addu2", "addu", 32,
    498      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    499      1.1  christos   },
    500      1.1  christos /* addu $rd,$rs,$rt */
    501      1.1  christos   {
    502      1.1  christos     IQ2000_INSN_ADDU, "addu", "addu", 32,
    503      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    504      1.1  christos   },
    505      1.1  christos /* ado16 ${rd-rs},$rt */
    506      1.1  christos   {
    507      1.1  christos     -1, "ado162", "ado16", 32,
    508      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    509      1.1  christos   },
    510      1.1  christos /* ado16 $rd,$rs,$rt */
    511      1.1  christos   {
    512      1.1  christos     IQ2000_INSN_ADO16, "ado16", "ado16", 32,
    513      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    514      1.1  christos   },
    515      1.1  christos /* and ${rd-rs},$rt */
    516      1.1  christos   {
    517      1.1  christos     -1, "and2", "and", 32,
    518      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    519      1.1  christos   },
    520      1.1  christos /* and $rd,$rs,$rt */
    521      1.1  christos   {
    522      1.1  christos     IQ2000_INSN_AND, "and", "and", 32,
    523      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    524      1.1  christos   },
    525      1.1  christos /* andi ${rt-rs},$lo16 */
    526      1.1  christos   {
    527      1.1  christos     -1, "andi2", "andi", 32,
    528      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    529      1.1  christos   },
    530      1.1  christos /* andi $rt,$rs,$lo16 */
    531      1.1  christos   {
    532      1.1  christos     IQ2000_INSN_ANDI, "andi", "andi", 32,
    533      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    534      1.1  christos   },
    535      1.1  christos /* andoi ${rt-rs},$lo16 */
    536      1.1  christos   {
    537      1.1  christos     -1, "andoi2", "andoi", 32,
    538      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    539      1.1  christos   },
    540      1.1  christos /* andoi $rt,$rs,$lo16 */
    541      1.1  christos   {
    542      1.1  christos     IQ2000_INSN_ANDOI, "andoi", "andoi", 32,
    543      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    544      1.1  christos   },
    545      1.1  christos /* nor ${rd-rs},$rt */
    546      1.1  christos   {
    547      1.1  christos     -1, "nor2", "nor", 32,
    548      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    549      1.1  christos   },
    550      1.1  christos /* nor $rd,$rs,$rt */
    551      1.1  christos   {
    552      1.1  christos     IQ2000_INSN_NOR, "nor", "nor", 32,
    553      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    554      1.1  christos   },
    555      1.1  christos /* or ${rd-rs},$rt */
    556      1.1  christos   {
    557      1.1  christos     -1, "or2", "or", 32,
    558      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    559      1.1  christos   },
    560      1.1  christos /* or $rd,$rs,$rt */
    561      1.1  christos   {
    562      1.1  christos     IQ2000_INSN_OR, "or", "or", 32,
    563      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    564      1.1  christos   },
    565      1.1  christos /* ori ${rt-rs},$lo16 */
    566      1.1  christos   {
    567      1.1  christos     -1, "ori2", "ori", 32,
    568      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    569      1.1  christos   },
    570      1.1  christos /* ori $rt,$rs,$lo16 */
    571      1.1  christos   {
    572      1.1  christos     IQ2000_INSN_ORI, "ori", "ori", 32,
    573      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    574      1.1  christos   },
    575      1.1  christos /* ram $rd,$rt,$shamt,$maskl,$maskr */
    576      1.1  christos   {
    577      1.1  christos     IQ2000_INSN_RAM, "ram", "ram", 32,
    578      1.1  christos     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    579      1.1  christos   },
    580      1.1  christos /* sll $rd,$rt,$shamt */
    581      1.1  christos   {
    582      1.1  christos     IQ2000_INSN_SLL, "sll", "sll", 32,
    583      1.1  christos     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    584      1.1  christos   },
    585      1.1  christos /* sllv ${rd-rt},$rs */
    586      1.1  christos   {
    587      1.1  christos     -1, "sllv2", "sllv", 32,
    588      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    589      1.1  christos   },
    590      1.1  christos /* sllv $rd,$rt,$rs */
    591      1.1  christos   {
    592      1.1  christos     IQ2000_INSN_SLLV, "sllv", "sllv", 32,
    593      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    594      1.1  christos   },
    595      1.1  christos /* slmv ${rd-rt},$rs,$shamt */
    596      1.1  christos   {
    597      1.1  christos     -1, "slmv2", "slmv", 32,
    598      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    599      1.1  christos   },
    600      1.1  christos /* slmv $rd,$rt,$rs,$shamt */
    601      1.1  christos   {
    602      1.1  christos     IQ2000_INSN_SLMV, "slmv", "slmv", 32,
    603      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    604      1.1  christos   },
    605      1.1  christos /* slt ${rd-rs},$rt */
    606      1.1  christos   {
    607      1.1  christos     -1, "slt2", "slt", 32,
    608      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    609      1.1  christos   },
    610      1.1  christos /* slt $rd,$rs,$rt */
    611      1.1  christos   {
    612      1.1  christos     IQ2000_INSN_SLT, "slt", "slt", 32,
    613      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    614      1.1  christos   },
    615      1.1  christos /* slti ${rt-rs},$imm */
    616      1.1  christos   {
    617      1.1  christos     -1, "slti2", "slti", 32,
    618      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    619      1.1  christos   },
    620      1.1  christos /* slti $rt,$rs,$imm */
    621      1.1  christos   {
    622      1.1  christos     IQ2000_INSN_SLTI, "slti", "slti", 32,
    623      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    624      1.1  christos   },
    625      1.1  christos /* sltiu ${rt-rs},$imm */
    626      1.1  christos   {
    627      1.1  christos     -1, "sltiu2", "sltiu", 32,
    628      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    629      1.1  christos   },
    630      1.1  christos /* sltiu $rt,$rs,$imm */
    631      1.1  christos   {
    632      1.1  christos     IQ2000_INSN_SLTIU, "sltiu", "sltiu", 32,
    633      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    634      1.1  christos   },
    635      1.1  christos /* sltu ${rd-rs},$rt */
    636      1.1  christos   {
    637      1.1  christos     -1, "sltu2", "sltu", 32,
    638      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    639      1.1  christos   },
    640      1.1  christos /* sltu $rd,$rs,$rt */
    641      1.1  christos   {
    642      1.1  christos     IQ2000_INSN_SLTU, "sltu", "sltu", 32,
    643      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    644      1.1  christos   },
    645      1.1  christos /* sra ${rd-rt},$shamt */
    646      1.1  christos   {
    647      1.1  christos     -1, "sra2", "sra", 32,
    648      1.1  christos     { 0|A(USES_RT)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    649      1.1  christos   },
    650      1.1  christos /* sra $rd,$rt,$shamt */
    651      1.1  christos   {
    652      1.1  christos     IQ2000_INSN_SRA, "sra", "sra", 32,
    653      1.1  christos     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    654      1.1  christos   },
    655      1.1  christos /* srav ${rd-rt},$rs */
    656      1.1  christos   {
    657      1.1  christos     -1, "srav2", "srav", 32,
    658      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    659      1.1  christos   },
    660      1.1  christos /* srav $rd,$rt,$rs */
    661      1.1  christos   {
    662      1.1  christos     IQ2000_INSN_SRAV, "srav", "srav", 32,
    663      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    664      1.1  christos   },
    665      1.1  christos /* srl $rd,$rt,$shamt */
    666      1.1  christos   {
    667      1.1  christos     IQ2000_INSN_SRL, "srl", "srl", 32,
    668      1.1  christos     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    669      1.1  christos   },
    670      1.1  christos /* srlv ${rd-rt},$rs */
    671      1.1  christos   {
    672      1.1  christos     -1, "srlv2", "srlv", 32,
    673      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    674      1.1  christos   },
    675      1.1  christos /* srlv $rd,$rt,$rs */
    676      1.1  christos   {
    677      1.1  christos     IQ2000_INSN_SRLV, "srlv", "srlv", 32,
    678      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    679      1.1  christos   },
    680      1.1  christos /* srmv ${rd-rt},$rs,$shamt */
    681      1.1  christos   {
    682      1.1  christos     -1, "srmv2", "srmv", 32,
    683      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    684      1.1  christos   },
    685      1.1  christos /* srmv $rd,$rt,$rs,$shamt */
    686      1.1  christos   {
    687      1.1  christos     IQ2000_INSN_SRMV, "srmv", "srmv", 32,
    688      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    689      1.1  christos   },
    690      1.1  christos /* sub ${rd-rs},$rt */
    691      1.1  christos   {
    692      1.1  christos     -1, "sub2", "sub", 32,
    693      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    694      1.1  christos   },
    695      1.1  christos /* sub $rd,$rs,$rt */
    696      1.1  christos   {
    697      1.1  christos     IQ2000_INSN_SUB, "sub", "sub", 32,
    698      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    699      1.1  christos   },
    700      1.1  christos /* subu ${rd-rs},$rt */
    701      1.1  christos   {
    702      1.1  christos     -1, "subu2", "subu", 32,
    703      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    704      1.1  christos   },
    705      1.1  christos /* subu $rd,$rs,$rt */
    706      1.1  christos   {
    707      1.1  christos     IQ2000_INSN_SUBU, "subu", "subu", 32,
    708      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    709      1.1  christos   },
    710      1.1  christos /* xor ${rd-rs},$rt */
    711      1.1  christos   {
    712      1.1  christos     -1, "xor2", "xor", 32,
    713      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    714      1.1  christos   },
    715      1.1  christos /* xor $rd,$rs,$rt */
    716      1.1  christos   {
    717      1.1  christos     IQ2000_INSN_XOR, "xor", "xor", 32,
    718      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_BASE), 0 } } } }
    719      1.1  christos   },
    720      1.1  christos /* xori ${rt-rs},$lo16 */
    721      1.1  christos   {
    722      1.1  christos     -1, "xori2", "xori", 32,
    723      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } } } }
    724      1.1  christos   },
    725      1.1  christos /* xori $rt,$rs,$lo16 */
    726      1.1  christos   {
    727      1.1  christos     IQ2000_INSN_XORI, "xori", "xori", 32,
    728      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    729      1.1  christos   },
    730      1.1  christos /* bbi $rs($bitnum),$offset */
    731      1.1  christos   {
    732      1.1  christos     IQ2000_INSN_BBI, "bbi", "bbi", 32,
    733      1.1  christos     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    734      1.1  christos   },
    735      1.1  christos /* bbin $rs($bitnum),$offset */
    736      1.1  christos   {
    737      1.1  christos     IQ2000_INSN_BBIN, "bbin", "bbin", 32,
    738      1.1  christos     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    739      1.1  christos   },
    740      1.1  christos /* bbv $rs,$rt,$offset */
    741      1.1  christos   {
    742      1.1  christos     IQ2000_INSN_BBV, "bbv", "bbv", 32,
    743      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    744      1.1  christos   },
    745      1.1  christos /* bbvn $rs,$rt,$offset */
    746      1.1  christos   {
    747      1.1  christos     IQ2000_INSN_BBVN, "bbvn", "bbvn", 32,
    748      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    749      1.1  christos   },
    750      1.1  christos /* beq $rs,$rt,$offset */
    751      1.1  christos   {
    752      1.1  christos     IQ2000_INSN_BEQ, "beq", "beq", 32,
    753      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    754      1.1  christos   },
    755      1.1  christos /* beql $rs,$rt,$offset */
    756      1.1  christos   {
    757      1.1  christos     IQ2000_INSN_BEQL, "beql", "beql", 32,
    758      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    759      1.1  christos   },
    760      1.1  christos /* bgez $rs,$offset */
    761      1.1  christos   {
    762      1.1  christos     IQ2000_INSN_BGEZ, "bgez", "bgez", 32,
    763      1.1  christos     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    764      1.1  christos   },
    765      1.1  christos /* bgezal $rs,$offset */
    766      1.1  christos   {
    767      1.1  christos     IQ2000_INSN_BGEZAL, "bgezal", "bgezal", 32,
    768      1.1  christos     { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    769      1.1  christos   },
    770      1.1  christos /* bgezall $rs,$offset */
    771      1.1  christos   {
    772      1.1  christos     IQ2000_INSN_BGEZALL, "bgezall", "bgezall", 32,
    773      1.1  christos     { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    774      1.1  christos   },
    775      1.1  christos /* bgezl $rs,$offset */
    776      1.1  christos   {
    777      1.1  christos     IQ2000_INSN_BGEZL, "bgezl", "bgezl", 32,
    778      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    779      1.1  christos   },
    780      1.1  christos /* bltz $rs,$offset */
    781      1.1  christos   {
    782      1.1  christos     IQ2000_INSN_BLTZ, "bltz", "bltz", 32,
    783      1.1  christos     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    784      1.1  christos   },
    785      1.1  christos /* bltzl $rs,$offset */
    786      1.1  christos   {
    787      1.1  christos     IQ2000_INSN_BLTZL, "bltzl", "bltzl", 32,
    788      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    789      1.1  christos   },
    790      1.1  christos /* bltzal $rs,$offset */
    791      1.1  christos   {
    792      1.1  christos     IQ2000_INSN_BLTZAL, "bltzal", "bltzal", 32,
    793      1.1  christos     { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    794      1.1  christos   },
    795      1.1  christos /* bltzall $rs,$offset */
    796      1.1  christos   {
    797      1.1  christos     IQ2000_INSN_BLTZALL, "bltzall", "bltzall", 32,
    798      1.1  christos     { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    799      1.1  christos   },
    800      1.1  christos /* bmb0 $rs,$rt,$offset */
    801      1.1  christos   {
    802      1.1  christos     IQ2000_INSN_BMB0, "bmb0", "bmb0", 32,
    803      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    804      1.1  christos   },
    805      1.1  christos /* bmb1 $rs,$rt,$offset */
    806      1.1  christos   {
    807      1.1  christos     IQ2000_INSN_BMB1, "bmb1", "bmb1", 32,
    808      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    809      1.1  christos   },
    810      1.1  christos /* bmb2 $rs,$rt,$offset */
    811      1.1  christos   {
    812      1.1  christos     IQ2000_INSN_BMB2, "bmb2", "bmb2", 32,
    813      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    814      1.1  christos   },
    815      1.1  christos /* bmb3 $rs,$rt,$offset */
    816      1.1  christos   {
    817      1.1  christos     IQ2000_INSN_BMB3, "bmb3", "bmb3", 32,
    818      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    819      1.1  christos   },
    820      1.1  christos /* bne $rs,$rt,$offset */
    821      1.1  christos   {
    822      1.1  christos     IQ2000_INSN_BNE, "bne", "bne", 32,
    823      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    824      1.1  christos   },
    825      1.1  christos /* bnel $rs,$rt,$offset */
    826      1.1  christos   {
    827      1.1  christos     IQ2000_INSN_BNEL, "bnel", "bnel", 32,
    828      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    829      1.1  christos   },
    830      1.1  christos /* jalr $rd,$rs */
    831      1.1  christos   {
    832      1.1  christos     IQ2000_INSN_JALR, "jalr", "jalr", 32,
    833      1.1  christos     { 0|A(USES_RS)|A(USES_RD)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    834      1.1  christos   },
    835      1.1  christos /* jr $rs */
    836      1.1  christos   {
    837      1.1  christos     IQ2000_INSN_JR, "jr", "jr", 32,
    838      1.1  christos     { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    839      1.1  christos   },
    840      1.1  christos /* lb $rt,$lo16($base) */
    841      1.1  christos   {
    842      1.1  christos     IQ2000_INSN_LB, "lb", "lb", 32,
    843      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
    844      1.1  christos   },
    845      1.1  christos /* lbu $rt,$lo16($base) */
    846      1.1  christos   {
    847      1.1  christos     IQ2000_INSN_LBU, "lbu", "lbu", 32,
    848      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
    849      1.1  christos   },
    850      1.1  christos /* lh $rt,$lo16($base) */
    851      1.1  christos   {
    852      1.1  christos     IQ2000_INSN_LH, "lh", "lh", 32,
    853      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
    854      1.1  christos   },
    855      1.1  christos /* lhu $rt,$lo16($base) */
    856      1.1  christos   {
    857      1.1  christos     IQ2000_INSN_LHU, "lhu", "lhu", 32,
    858      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
    859      1.1  christos   },
    860      1.1  christos /* lui $rt,$hi16 */
    861      1.1  christos   {
    862      1.1  christos     IQ2000_INSN_LUI, "lui", "lui", 32,
    863      1.1  christos     { 0|A(USES_RT), { { { (1<<MACH_BASE), 0 } } } }
    864      1.1  christos   },
    865      1.1  christos /* lw $rt,$lo16($base) */
    866      1.1  christos   {
    867      1.1  christos     IQ2000_INSN_LW, "lw", "lw", 32,
    868      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(LOAD_DELAY), { { { (1<<MACH_BASE), 0 } } } }
    869      1.1  christos   },
    870      1.1  christos /* sb $rt,$lo16($base) */
    871      1.1  christos   {
    872      1.1  christos     IQ2000_INSN_SB, "sb", "sb", 32,
    873      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    874      1.1  christos   },
    875      1.1  christos /* sh $rt,$lo16($base) */
    876      1.1  christos   {
    877      1.1  christos     IQ2000_INSN_SH, "sh", "sh", 32,
    878      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    879      1.1  christos   },
    880      1.1  christos /* sw $rt,$lo16($base) */
    881      1.1  christos   {
    882      1.1  christos     IQ2000_INSN_SW, "sw", "sw", 32,
    883      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_BASE), 0 } } } }
    884      1.1  christos   },
    885      1.1  christos /* break */
    886      1.1  christos   {
    887      1.1  christos     IQ2000_INSN_BREAK, "break", "break", 32,
    888      1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    889      1.1  christos   },
    890      1.1  christos /* syscall */
    891      1.1  christos   {
    892      1.1  christos     IQ2000_INSN_SYSCALL, "syscall", "syscall", 32,
    893      1.1  christos     { 0|A(YIELD_INSN), { { { (1<<MACH_BASE), 0 } } } }
    894      1.1  christos   },
    895      1.1  christos /* andoui $rt,$rs,$hi16 */
    896      1.1  christos   {
    897      1.1  christos     IQ2000_INSN_ANDOUI, "andoui", "andoui", 32,
    898      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ2000), 0 } } } }
    899      1.1  christos   },
    900      1.1  christos /* andoui ${rt-rs},$hi16 */
    901      1.1  christos   {
    902      1.1  christos     -1, "andoui2", "andoui", 32,
    903      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } }
    904      1.1  christos   },
    905      1.1  christos /* orui ${rt-rs},$hi16 */
    906      1.1  christos   {
    907      1.1  christos     -1, "orui2", "orui", 32,
    908      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } }
    909      1.1  christos   },
    910      1.1  christos /* orui $rt,$rs,$hi16 */
    911      1.1  christos   {
    912      1.1  christos     IQ2000_INSN_ORUI, "orui", "orui", 32,
    913      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ2000), 0 } } } }
    914      1.1  christos   },
    915      1.1  christos /* bgtz $rs,$offset */
    916      1.1  christos   {
    917      1.1  christos     IQ2000_INSN_BGTZ, "bgtz", "bgtz", 32,
    918      1.1  christos     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    919      1.1  christos   },
    920      1.1  christos /* bgtzl $rs,$offset */
    921      1.1  christos   {
    922      1.1  christos     IQ2000_INSN_BGTZL, "bgtzl", "bgtzl", 32,
    923      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    924      1.1  christos   },
    925      1.1  christos /* blez $rs,$offset */
    926      1.1  christos   {
    927      1.1  christos     IQ2000_INSN_BLEZ, "blez", "blez", 32,
    928      1.1  christos     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    929      1.1  christos   },
    930      1.1  christos /* blezl $rs,$offset */
    931      1.1  christos   {
    932      1.1  christos     IQ2000_INSN_BLEZL, "blezl", "blezl", 32,
    933      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    934      1.1  christos   },
    935      1.1  christos /* mrgb $rd,$rs,$rt,$mask */
    936      1.1  christos   {
    937      1.1  christos     IQ2000_INSN_MRGB, "mrgb", "mrgb", 32,
    938      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
    939      1.1  christos   },
    940      1.1  christos /* mrgb ${rd-rs},$rt,$mask */
    941      1.1  christos   {
    942      1.1  christos     -1, "mrgb2", "mrgb", 32,
    943      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ2000), 0 } } } }
    944      1.1  christos   },
    945      1.1  christos /* bctxt $rs,$offset */
    946      1.1  christos   {
    947      1.1  christos     IQ2000_INSN_BCTXT, "bctxt", "bctxt", 32,
    948      1.1  christos     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    949      1.1  christos   },
    950      1.1  christos /* bc0f $offset */
    951      1.1  christos   {
    952      1.1  christos     IQ2000_INSN_BC0F, "bc0f", "bc0f", 32,
    953      1.1  christos     { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    954      1.1  christos   },
    955      1.1  christos /* bc0fl $offset */
    956      1.1  christos   {
    957      1.1  christos     IQ2000_INSN_BC0FL, "bc0fl", "bc0fl", 32,
    958      1.1  christos     { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    959      1.1  christos   },
    960      1.1  christos /* bc3f $offset */
    961      1.1  christos   {
    962      1.1  christos     IQ2000_INSN_BC3F, "bc3f", "bc3f", 32,
    963      1.1  christos     { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    964      1.1  christos   },
    965      1.1  christos /* bc3fl $offset */
    966      1.1  christos   {
    967      1.1  christos     IQ2000_INSN_BC3FL, "bc3fl", "bc3fl", 32,
    968      1.1  christos     { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    969      1.1  christos   },
    970      1.1  christos /* bc0t $offset */
    971      1.1  christos   {
    972      1.1  christos     IQ2000_INSN_BC0T, "bc0t", "bc0t", 32,
    973      1.1  christos     { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    974      1.1  christos   },
    975      1.1  christos /* bc0tl $offset */
    976      1.1  christos   {
    977      1.1  christos     IQ2000_INSN_BC0TL, "bc0tl", "bc0tl", 32,
    978      1.1  christos     { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    979      1.1  christos   },
    980      1.1  christos /* bc3t $offset */
    981      1.1  christos   {
    982      1.1  christos     IQ2000_INSN_BC3T, "bc3t", "bc3t", 32,
    983      1.1  christos     { 0|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    984      1.1  christos   },
    985      1.1  christos /* bc3tl $offset */
    986      1.1  christos   {
    987      1.1  christos     IQ2000_INSN_BC3TL, "bc3tl", "bc3tl", 32,
    988      1.1  christos     { 0|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
    989      1.1  christos   },
    990      1.1  christos /* cfc0 $rt,$rd */
    991      1.1  christos   {
    992      1.1  christos     IQ2000_INSN_CFC0, "cfc0", "cfc0", 32,
    993      1.1  christos     { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
    994      1.1  christos   },
    995      1.1  christos /* cfc1 $rt,$rd */
    996      1.1  christos   {
    997      1.1  christos     IQ2000_INSN_CFC1, "cfc1", "cfc1", 32,
    998      1.1  christos     { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
    999      1.1  christos   },
   1000      1.1  christos /* cfc2 $rt,$rd */
   1001      1.1  christos   {
   1002      1.1  christos     IQ2000_INSN_CFC2, "cfc2", "cfc2", 32,
   1003      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
   1004      1.1  christos   },
   1005      1.1  christos /* cfc3 $rt,$rd */
   1006      1.1  christos   {
   1007      1.1  christos     IQ2000_INSN_CFC3, "cfc3", "cfc3", 32,
   1008      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
   1009      1.1  christos   },
   1010      1.1  christos /* chkhdr $rd,$rt */
   1011      1.1  christos   {
   1012      1.1  christos     IQ2000_INSN_CHKHDR, "chkhdr", "chkhdr", 32,
   1013      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
   1014      1.1  christos   },
   1015      1.1  christos /* ctc0 $rt,$rd */
   1016      1.1  christos   {
   1017      1.1  christos     IQ2000_INSN_CTC0, "ctc0", "ctc0", 32,
   1018      1.1  christos     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1019      1.1  christos   },
   1020      1.1  christos /* ctc1 $rt,$rd */
   1021      1.1  christos   {
   1022      1.1  christos     IQ2000_INSN_CTC1, "ctc1", "ctc1", 32,
   1023      1.1  christos     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1024      1.1  christos   },
   1025      1.1  christos /* ctc2 $rt,$rd */
   1026      1.1  christos   {
   1027      1.1  christos     IQ2000_INSN_CTC2, "ctc2", "ctc2", 32,
   1028      1.1  christos     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1029      1.1  christos   },
   1030      1.1  christos /* ctc3 $rt,$rd */
   1031      1.1  christos   {
   1032      1.1  christos     IQ2000_INSN_CTC3, "ctc3", "ctc3", 32,
   1033      1.1  christos     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1034      1.1  christos   },
   1035      1.1  christos /* jcr $rs */
   1036      1.1  christos   {
   1037      1.1  christos     IQ2000_INSN_JCR, "jcr", "jcr", 32,
   1038      1.1  christos     { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
   1039      1.1  christos   },
   1040      1.1  christos /* luc32 $rt,$rd */
   1041      1.1  christos   {
   1042      1.1  christos     IQ2000_INSN_LUC32, "luc32", "luc32", 32,
   1043      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1044      1.1  christos   },
   1045      1.1  christos /* luc32l $rt,$rd */
   1046      1.1  christos   {
   1047      1.1  christos     IQ2000_INSN_LUC32L, "luc32l", "luc32l", 32,
   1048      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1049      1.1  christos   },
   1050      1.1  christos /* luc64 $rt,$rd */
   1051      1.1  christos   {
   1052      1.1  christos     IQ2000_INSN_LUC64, "luc64", "luc64", 32,
   1053      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1054      1.1  christos   },
   1055      1.1  christos /* luc64l $rt,$rd */
   1056      1.1  christos   {
   1057      1.1  christos     IQ2000_INSN_LUC64L, "luc64l", "luc64l", 32,
   1058      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1059      1.1  christos   },
   1060      1.1  christos /* luk $rt,$rd */
   1061      1.1  christos   {
   1062      1.1  christos     IQ2000_INSN_LUK, "luk", "luk", 32,
   1063      1.1  christos     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1064      1.1  christos   },
   1065      1.1  christos /* lulck $rt */
   1066      1.1  christos   {
   1067      1.1  christos     IQ2000_INSN_LULCK, "lulck", "lulck", 32,
   1068      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1069      1.1  christos   },
   1070      1.1  christos /* lum32 $rt,$rd */
   1071      1.1  christos   {
   1072      1.1  christos     IQ2000_INSN_LUM32, "lum32", "lum32", 32,
   1073      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1074      1.1  christos   },
   1075      1.1  christos /* lum32l $rt,$rd */
   1076      1.1  christos   {
   1077      1.1  christos     IQ2000_INSN_LUM32L, "lum32l", "lum32l", 32,
   1078      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1079      1.1  christos   },
   1080      1.1  christos /* lum64 $rt,$rd */
   1081      1.1  christos   {
   1082      1.1  christos     IQ2000_INSN_LUM64, "lum64", "lum64", 32,
   1083      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1084      1.1  christos   },
   1085      1.1  christos /* lum64l $rt,$rd */
   1086      1.1  christos   {
   1087      1.1  christos     IQ2000_INSN_LUM64L, "lum64l", "lum64l", 32,
   1088      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1089      1.1  christos   },
   1090      1.1  christos /* lur $rt,$rd */
   1091      1.1  christos   {
   1092      1.1  christos     IQ2000_INSN_LUR, "lur", "lur", 32,
   1093      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1094      1.1  christos   },
   1095      1.1  christos /* lurl $rt,$rd */
   1096      1.1  christos   {
   1097      1.1  christos     IQ2000_INSN_LURL, "lurl", "lurl", 32,
   1098      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1099      1.1  christos   },
   1100      1.1  christos /* luulck $rt */
   1101      1.1  christos   {
   1102      1.1  christos     IQ2000_INSN_LUULCK, "luulck", "luulck", 32,
   1103      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1104      1.1  christos   },
   1105      1.1  christos /* mfc0 $rt,$rd */
   1106      1.1  christos   {
   1107      1.1  christos     IQ2000_INSN_MFC0, "mfc0", "mfc0", 32,
   1108      1.1  christos     { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
   1109      1.1  christos   },
   1110      1.1  christos /* mfc1 $rt,$rd */
   1111      1.1  christos   {
   1112      1.1  christos     IQ2000_INSN_MFC1, "mfc1", "mfc1", 32,
   1113      1.1  christos     { 0|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
   1114      1.1  christos   },
   1115      1.1  christos /* mfc2 $rt,$rd */
   1116      1.1  christos   {
   1117      1.1  christos     IQ2000_INSN_MFC2, "mfc2", "mfc2", 32,
   1118      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
   1119      1.1  christos   },
   1120      1.1  christos /* mfc3 $rt,$rd */
   1121      1.1  christos   {
   1122      1.1  christos     IQ2000_INSN_MFC3, "mfc3", "mfc3", 32,
   1123      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(LOAD_DELAY), { { { (1<<MACH_IQ2000), 0 } } } }
   1124      1.1  christos   },
   1125      1.1  christos /* mtc0 $rt,$rd */
   1126      1.1  christos   {
   1127      1.1  christos     IQ2000_INSN_MTC0, "mtc0", "mtc0", 32,
   1128      1.1  christos     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1129      1.1  christos   },
   1130      1.1  christos /* mtc1 $rt,$rd */
   1131      1.1  christos   {
   1132      1.1  christos     IQ2000_INSN_MTC1, "mtc1", "mtc1", 32,
   1133      1.1  christos     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1134      1.1  christos   },
   1135      1.1  christos /* mtc2 $rt,$rd */
   1136      1.1  christos   {
   1137      1.1  christos     IQ2000_INSN_MTC2, "mtc2", "mtc2", 32,
   1138      1.1  christos     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1139      1.1  christos   },
   1140      1.1  christos /* mtc3 $rt,$rd */
   1141      1.1  christos   {
   1142      1.1  christos     IQ2000_INSN_MTC3, "mtc3", "mtc3", 32,
   1143      1.1  christos     { 0|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1144      1.1  christos   },
   1145      1.1  christos /* pkrl $rd,$rt */
   1146      1.1  christos   {
   1147      1.1  christos     IQ2000_INSN_PKRL, "pkrl", "pkrl", 32,
   1148      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1149      1.1  christos   },
   1150      1.1  christos /* pkrlr1 $rt,$_index,$count */
   1151      1.1  christos   {
   1152      1.1  christos     IQ2000_INSN_PKRLR1, "pkrlr1", "pkrlr1", 32,
   1153      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1154      1.1  christos   },
   1155      1.1  christos /* pkrlr30 $rt,$_index,$count */
   1156      1.1  christos   {
   1157      1.1  christos     IQ2000_INSN_PKRLR30, "pkrlr30", "pkrlr30", 32,
   1158      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1159      1.1  christos   },
   1160      1.1  christos /* rb $rd,$rt */
   1161      1.1  christos   {
   1162      1.1  christos     IQ2000_INSN_RB, "rb", "rb", 32,
   1163      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1164      1.1  christos   },
   1165      1.1  christos /* rbr1 $rt,$_index,$count */
   1166      1.1  christos   {
   1167      1.1  christos     IQ2000_INSN_RBR1, "rbr1", "rbr1", 32,
   1168      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1169      1.1  christos   },
   1170      1.1  christos /* rbr30 $rt,$_index,$count */
   1171      1.1  christos   {
   1172      1.1  christos     IQ2000_INSN_RBR30, "rbr30", "rbr30", 32,
   1173      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1174      1.1  christos   },
   1175      1.1  christos /* rfe */
   1176      1.1  christos   {
   1177      1.1  christos     IQ2000_INSN_RFE, "rfe", "rfe", 32,
   1178      1.1  christos     { 0, { { { (1<<MACH_IQ2000), 0 } } } }
   1179      1.1  christos   },
   1180      1.1  christos /* rx $rd,$rt */
   1181      1.1  christos   {
   1182      1.1  christos     IQ2000_INSN_RX, "rx", "rx", 32,
   1183      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1184      1.1  christos   },
   1185      1.1  christos /* rxr1 $rt,$_index,$count */
   1186      1.1  christos   {
   1187      1.1  christos     IQ2000_INSN_RXR1, "rxr1", "rxr1", 32,
   1188      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1189      1.1  christos   },
   1190      1.1  christos /* rxr30 $rt,$_index,$count */
   1191      1.1  christos   {
   1192      1.1  christos     IQ2000_INSN_RXR30, "rxr30", "rxr30", 32,
   1193      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1194      1.1  christos   },
   1195      1.1  christos /* sleep */
   1196      1.1  christos   {
   1197      1.1  christos     IQ2000_INSN_SLEEP, "sleep", "sleep", 32,
   1198      1.1  christos     { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } }
   1199      1.1  christos   },
   1200      1.1  christos /* srrd $rt */
   1201      1.1  christos   {
   1202      1.1  christos     IQ2000_INSN_SRRD, "srrd", "srrd", 32,
   1203      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1204      1.1  christos   },
   1205      1.1  christos /* srrdl $rt */
   1206      1.1  christos   {
   1207      1.1  christos     IQ2000_INSN_SRRDL, "srrdl", "srrdl", 32,
   1208      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1209      1.1  christos   },
   1210      1.1  christos /* srulck $rt */
   1211      1.1  christos   {
   1212      1.1  christos     IQ2000_INSN_SRULCK, "srulck", "srulck", 32,
   1213      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1214      1.1  christos   },
   1215      1.1  christos /* srwr $rt,$rd */
   1216      1.1  christos   {
   1217      1.1  christos     IQ2000_INSN_SRWR, "srwr", "srwr", 32,
   1218      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1219      1.1  christos   },
   1220      1.1  christos /* srwru $rt,$rd */
   1221      1.1  christos   {
   1222      1.1  christos     IQ2000_INSN_SRWRU, "srwru", "srwru", 32,
   1223      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1224      1.1  christos   },
   1225      1.1  christos /* trapqfl */
   1226      1.1  christos   {
   1227      1.1  christos     IQ2000_INSN_TRAPQFL, "trapqfl", "trapqfl", 32,
   1228      1.1  christos     { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } }
   1229      1.1  christos   },
   1230      1.1  christos /* trapqne */
   1231      1.1  christos   {
   1232      1.1  christos     IQ2000_INSN_TRAPQNE, "trapqne", "trapqne", 32,
   1233      1.1  christos     { 0|A(YIELD_INSN), { { { (1<<MACH_IQ2000), 0 } } } }
   1234      1.1  christos   },
   1235      1.1  christos /* traprel $rt */
   1236      1.1  christos   {
   1237      1.1  christos     IQ2000_INSN_TRAPREL, "traprel", "traprel", 32,
   1238      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1239      1.1  christos   },
   1240      1.1  christos /* wb $rd,$rt */
   1241      1.1  christos   {
   1242      1.1  christos     IQ2000_INSN_WB, "wb", "wb", 32,
   1243      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1244      1.1  christos   },
   1245      1.1  christos /* wbu $rd,$rt */
   1246      1.1  christos   {
   1247      1.1  christos     IQ2000_INSN_WBU, "wbu", "wbu", 32,
   1248      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1249      1.1  christos   },
   1250      1.1  christos /* wbr1 $rt,$_index,$count */
   1251      1.1  christos   {
   1252      1.1  christos     IQ2000_INSN_WBR1, "wbr1", "wbr1", 32,
   1253      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1254      1.1  christos   },
   1255      1.1  christos /* wbr1u $rt,$_index,$count */
   1256      1.1  christos   {
   1257      1.1  christos     IQ2000_INSN_WBR1U, "wbr1u", "wbr1u", 32,
   1258      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1259      1.1  christos   },
   1260      1.1  christos /* wbr30 $rt,$_index,$count */
   1261      1.1  christos   {
   1262      1.1  christos     IQ2000_INSN_WBR30, "wbr30", "wbr30", 32,
   1263      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1264      1.1  christos   },
   1265      1.1  christos /* wbr30u $rt,$_index,$count */
   1266      1.1  christos   {
   1267      1.1  christos     IQ2000_INSN_WBR30U, "wbr30u", "wbr30u", 32,
   1268      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1269      1.1  christos   },
   1270      1.1  christos /* wx $rd,$rt */
   1271      1.1  christos   {
   1272      1.1  christos     IQ2000_INSN_WX, "wx", "wx", 32,
   1273      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1274      1.1  christos   },
   1275      1.1  christos /* wxu $rd,$rt */
   1276      1.1  christos   {
   1277      1.1  christos     IQ2000_INSN_WXU, "wxu", "wxu", 32,
   1278      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ2000), 0 } } } }
   1279      1.1  christos   },
   1280      1.1  christos /* wxr1 $rt,$_index,$count */
   1281      1.1  christos   {
   1282      1.1  christos     IQ2000_INSN_WXR1, "wxr1", "wxr1", 32,
   1283      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1284      1.1  christos   },
   1285      1.1  christos /* wxr1u $rt,$_index,$count */
   1286      1.1  christos   {
   1287      1.1  christos     IQ2000_INSN_WXR1U, "wxr1u", "wxr1u", 32,
   1288      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1289      1.1  christos   },
   1290      1.1  christos /* wxr30 $rt,$_index,$count */
   1291      1.1  christos   {
   1292      1.1  christos     IQ2000_INSN_WXR30, "wxr30", "wxr30", 32,
   1293      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1294      1.1  christos   },
   1295      1.1  christos /* wxr30u $rt,$_index,$count */
   1296      1.1  christos   {
   1297      1.1  christos     IQ2000_INSN_WXR30U, "wxr30u", "wxr30u", 32,
   1298      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RT), { { { (1<<MACH_IQ2000), 0 } } } }
   1299      1.1  christos   },
   1300      1.1  christos /* ldw $rt,$lo16($base) */
   1301      1.1  christos   {
   1302      1.1  christos     IQ2000_INSN_LDW, "ldw", "ldw", 32,
   1303      1.1  christos     { 0|A(USES_RT)|A(LOAD_DELAY)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ2000), 0 } } } }
   1304      1.1  christos   },
   1305      1.1  christos /* sdw $rt,$lo16($base) */
   1306      1.1  christos   {
   1307      1.1  christos     IQ2000_INSN_SDW, "sdw", "sdw", 32,
   1308      1.1  christos     { 0|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ2000), 0 } } } }
   1309      1.1  christos   },
   1310      1.1  christos /* j $jmptarg */
   1311      1.1  christos   {
   1312      1.1  christos     IQ2000_INSN_J, "j", "j", 32,
   1313      1.1  christos     { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
   1314      1.1  christos   },
   1315      1.1  christos /* jal $jmptarg */
   1316      1.1  christos   {
   1317      1.1  christos     IQ2000_INSN_JAL, "jal", "jal", 32,
   1318      1.1  christos     { 0|A(USES_R31)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
   1319      1.1  christos   },
   1320      1.1  christos /* bmb $rs,$rt,$offset */
   1321      1.1  christos   {
   1322      1.1  christos     IQ2000_INSN_BMB, "bmb", "bmb", 32,
   1323      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ2000), 0 } } } }
   1324      1.1  christos   },
   1325      1.1  christos /* andoui $rt,$rs,$hi16 */
   1326      1.1  christos   {
   1327      1.1  christos     IQ2000_INSN_ANDOUI_Q10, "andoui-q10", "andoui", 32,
   1328      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1329      1.1  christos   },
   1330      1.1  christos /* andoui ${rt-rs},$hi16 */
   1331      1.1  christos   {
   1332      1.1  christos     -1, "andoui2-q10", "andoui", 32,
   1333      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } }
   1334      1.1  christos   },
   1335      1.1  christos /* orui $rt,$rs,$hi16 */
   1336      1.1  christos   {
   1337      1.1  christos     IQ2000_INSN_ORUI_Q10, "orui-q10", "orui", 32,
   1338      1.1  christos     { 0|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1339      1.1  christos   },
   1340      1.1  christos /* orui ${rt-rs},$hi16 */
   1341      1.1  christos   {
   1342      1.1  christos     -1, "orui2-q10", "orui", 32,
   1343      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } }
   1344      1.1  christos   },
   1345      1.1  christos /* mrgb $rd,$rs,$rt,$maskq10 */
   1346      1.1  christos   {
   1347      1.1  christos     IQ2000_INSN_MRGBQ10, "mrgbq10", "mrgb", 32,
   1348      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1349      1.1  christos   },
   1350      1.1  christos /* mrgb ${rd-rs},$rt,$maskq10 */
   1351      1.1  christos   {
   1352      1.1  christos     -1, "mrgbq102", "mrgb", 32,
   1353      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD)|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_IQ10), 0 } } } }
   1354      1.1  christos   },
   1355      1.1  christos /* j $jmptarg */
   1356      1.1  christos   {
   1357      1.1  christos     IQ2000_INSN_JQ10, "jq10", "j", 32,
   1358      1.1  christos     { 0|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1359      1.1  christos   },
   1360      1.1  christos /* jal $rt,$jmptarg */
   1361      1.1  christos   {
   1362      1.1  christos     IQ2000_INSN_JALQ10, "jalq10", "jal", 32,
   1363      1.1  christos     { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1364      1.1  christos   },
   1365      1.1  christos /* jal $jmptarg */
   1366      1.1  christos   {
   1367      1.1  christos     IQ2000_INSN_JALQ10_2, "jalq10-2", "jal", 32,
   1368      1.1  christos     { 0|A(USES_RT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1369      1.1  christos   },
   1370      1.1  christos /* bbil $rs($bitnum),$offset */
   1371      1.1  christos   {
   1372      1.1  christos     IQ2000_INSN_BBIL, "bbil", "bbil", 32,
   1373      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1374      1.1  christos   },
   1375      1.1  christos /* bbinl $rs($bitnum),$offset */
   1376      1.1  christos   {
   1377      1.1  christos     IQ2000_INSN_BBINL, "bbinl", "bbinl", 32,
   1378      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1379      1.1  christos   },
   1380      1.1  christos /* bbvl $rs,$rt,$offset */
   1381      1.1  christos   {
   1382      1.1  christos     IQ2000_INSN_BBVL, "bbvl", "bbvl", 32,
   1383      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1384      1.1  christos   },
   1385      1.1  christos /* bbvnl $rs,$rt,$offset */
   1386      1.1  christos   {
   1387      1.1  christos     IQ2000_INSN_BBVNL, "bbvnl", "bbvnl", 32,
   1388      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1389      1.1  christos   },
   1390      1.1  christos /* bgtzal $rs,$offset */
   1391      1.1  christos   {
   1392      1.1  christos     IQ2000_INSN_BGTZAL, "bgtzal", "bgtzal", 32,
   1393      1.1  christos     { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1394      1.1  christos   },
   1395      1.1  christos /* bgtzall $rs,$offset */
   1396      1.1  christos   {
   1397      1.1  christos     IQ2000_INSN_BGTZALL, "bgtzall", "bgtzall", 32,
   1398      1.1  christos     { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1399      1.1  christos   },
   1400      1.1  christos /* blezal $rs,$offset */
   1401      1.1  christos   {
   1402      1.1  christos     IQ2000_INSN_BLEZAL, "blezal", "blezal", 32,
   1403      1.1  christos     { 0|A(USES_R31)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1404      1.1  christos   },
   1405      1.1  christos /* blezall $rs,$offset */
   1406      1.1  christos   {
   1407      1.1  christos     IQ2000_INSN_BLEZALL, "blezall", "blezall", 32,
   1408      1.1  christos     { 0|A(USES_R31)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1409      1.1  christos   },
   1410      1.1  christos /* bgtz $rs,$offset */
   1411      1.1  christos   {
   1412      1.1  christos     IQ2000_INSN_BGTZ_Q10, "bgtz-q10", "bgtz", 32,
   1413      1.1  christos     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1414      1.1  christos   },
   1415      1.1  christos /* bgtzl $rs,$offset */
   1416      1.1  christos   {
   1417      1.1  christos     IQ2000_INSN_BGTZL_Q10, "bgtzl-q10", "bgtzl", 32,
   1418      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1419      1.1  christos   },
   1420      1.1  christos /* blez $rs,$offset */
   1421      1.1  christos   {
   1422      1.1  christos     IQ2000_INSN_BLEZ_Q10, "blez-q10", "blez", 32,
   1423      1.1  christos     { 0|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1424      1.1  christos   },
   1425      1.1  christos /* blezl $rs,$offset */
   1426      1.1  christos   {
   1427      1.1  christos     IQ2000_INSN_BLEZL_Q10, "blezl-q10", "blezl", 32,
   1428      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1429      1.1  christos   },
   1430      1.1  christos /* bmb $rs,$rt,$offset */
   1431      1.1  christos   {
   1432      1.1  christos     IQ2000_INSN_BMB_Q10, "bmb-q10", "bmb", 32,
   1433      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1434      1.1  christos   },
   1435      1.1  christos /* bmbl $rs,$rt,$offset */
   1436      1.1  christos   {
   1437      1.1  christos     IQ2000_INSN_BMBL, "bmbl", "bmbl", 32,
   1438      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1439      1.1  christos   },
   1440      1.1  christos /* bri $rs,$offset */
   1441      1.1  christos   {
   1442      1.1  christos     IQ2000_INSN_BRI, "bri", "bri", 32,
   1443      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1444      1.1  christos   },
   1445      1.1  christos /* brv $rs,$offset */
   1446      1.1  christos   {
   1447      1.1  christos     IQ2000_INSN_BRV, "brv", "brv", 32,
   1448      1.1  christos     { 0|A(USES_RS)|A(SKIP_CTI)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1449      1.1  christos   },
   1450      1.1  christos /* bctx $rs,$offset */
   1451      1.1  christos   {
   1452      1.1  christos     IQ2000_INSN_BCTX, "bctx", "bctx", 32,
   1453      1.1  christos     { 0|A(USES_RS)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_IQ10), 0 } } } }
   1454      1.1  christos   },
   1455      1.1  christos /* yield */
   1456      1.1  christos   {
   1457      1.1  christos     IQ2000_INSN_YIELD, "yield", "yield", 32,
   1458      1.1  christos     { 0, { { { (1<<MACH_IQ10), 0 } } } }
   1459      1.1  christos   },
   1460      1.1  christos /* crc32 $rd,$rs,$rt */
   1461      1.1  christos   {
   1462      1.1  christos     IQ2000_INSN_CRC32, "crc32", "crc32", 32,
   1463      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1464      1.1  christos   },
   1465      1.1  christos /* crc32b $rd,$rs,$rt */
   1466      1.1  christos   {
   1467      1.1  christos     IQ2000_INSN_CRC32B, "crc32b", "crc32b", 32,
   1468      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1469      1.1  christos   },
   1470      1.1  christos /* cnt1s $rd,$rs */
   1471      1.1  christos   {
   1472      1.1  christos     IQ2000_INSN_CNT1S, "cnt1s", "cnt1s", 32,
   1473      1.1  christos     { 0|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1474      1.1  christos   },
   1475      1.1  christos /* avail $rd */
   1476      1.1  christos   {
   1477      1.1  christos     IQ2000_INSN_AVAIL, "avail", "avail", 32,
   1478      1.1  christos     { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1479      1.1  christos   },
   1480      1.1  christos /* free $rd,$rs */
   1481      1.1  christos   {
   1482      1.1  christos     IQ2000_INSN_FREE, "free", "free", 32,
   1483      1.1  christos     { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1484      1.1  christos   },
   1485      1.1  christos /* tstod $rd,$rs */
   1486      1.1  christos   {
   1487      1.1  christos     IQ2000_INSN_TSTOD, "tstod", "tstod", 32,
   1488      1.1  christos     { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1489      1.1  christos   },
   1490      1.1  christos /* cmphdr $rd */
   1491      1.1  christos   {
   1492      1.1  christos     IQ2000_INSN_CMPHDR, "cmphdr", "cmphdr", 32,
   1493      1.1  christos     { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1494      1.1  christos   },
   1495      1.1  christos /* mcid $rd,$rt */
   1496      1.1  christos   {
   1497      1.1  christos     IQ2000_INSN_MCID, "mcid", "mcid", 32,
   1498      1.1  christos     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1499      1.1  christos   },
   1500      1.1  christos /* dba $rd */
   1501      1.1  christos   {
   1502      1.1  christos     IQ2000_INSN_DBA, "dba", "dba", 32,
   1503      1.1  christos     { 0|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1504      1.1  christos   },
   1505      1.1  christos /* dbd $rd,$rs,$rt */
   1506      1.1  christos   {
   1507      1.1  christos     IQ2000_INSN_DBD, "dbd", "dbd", 32,
   1508      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1509      1.1  christos   },
   1510      1.1  christos /* dpwt $rd,$rs */
   1511      1.1  christos   {
   1512      1.1  christos     IQ2000_INSN_DPWT, "dpwt", "dpwt", 32,
   1513      1.1  christos     { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1514      1.1  christos   },
   1515      1.1  christos /* chkhdr $rd,$rs */
   1516      1.1  christos   {
   1517      1.1  christos     IQ2000_INSN_CHKHDRQ10, "chkhdrq10", "chkhdr", 32,
   1518      1.1  christos     { 0|A(USES_RD)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1519      1.1  christos   },
   1520      1.1  christos /* rba $rd,$rs,$rt */
   1521      1.1  christos   {
   1522      1.1  christos     IQ2000_INSN_RBA, "rba", "rba", 32,
   1523      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1524      1.1  christos   },
   1525      1.1  christos /* rbal $rd,$rs,$rt */
   1526      1.1  christos   {
   1527      1.1  christos     IQ2000_INSN_RBAL, "rbal", "rbal", 32,
   1528      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1529      1.1  christos   },
   1530      1.1  christos /* rbar $rd,$rs,$rt */
   1531      1.1  christos   {
   1532      1.1  christos     IQ2000_INSN_RBAR, "rbar", "rbar", 32,
   1533      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1534      1.1  christos   },
   1535      1.1  christos /* wba $rd,$rs,$rt */
   1536      1.1  christos   {
   1537      1.1  christos     IQ2000_INSN_WBA, "wba", "wba", 32,
   1538      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1539      1.1  christos   },
   1540      1.1  christos /* wbau $rd,$rs,$rt */
   1541      1.1  christos   {
   1542      1.1  christos     IQ2000_INSN_WBAU, "wbau", "wbau", 32,
   1543      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1544      1.1  christos   },
   1545      1.1  christos /* wbac $rd,$rs,$rt */
   1546      1.1  christos   {
   1547      1.1  christos     IQ2000_INSN_WBAC, "wbac", "wbac", 32,
   1548      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1549      1.1  christos   },
   1550      1.1  christos /* rbi $rd,$rs,$rt,$bytecount */
   1551      1.1  christos   {
   1552      1.1  christos     IQ2000_INSN_RBI, "rbi", "rbi", 32,
   1553      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1554      1.1  christos   },
   1555      1.1  christos /* rbil $rd,$rs,$rt,$bytecount */
   1556      1.1  christos   {
   1557      1.1  christos     IQ2000_INSN_RBIL, "rbil", "rbil", 32,
   1558      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1559      1.1  christos   },
   1560      1.1  christos /* rbir $rd,$rs,$rt,$bytecount */
   1561      1.1  christos   {
   1562      1.1  christos     IQ2000_INSN_RBIR, "rbir", "rbir", 32,
   1563      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1564      1.1  christos   },
   1565      1.1  christos /* wbi $rd,$rs,$rt,$bytecount */
   1566      1.1  christos   {
   1567      1.1  christos     IQ2000_INSN_WBI, "wbi", "wbi", 32,
   1568      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1569      1.1  christos   },
   1570      1.1  christos /* wbic $rd,$rs,$rt,$bytecount */
   1571      1.1  christos   {
   1572      1.1  christos     IQ2000_INSN_WBIC, "wbic", "wbic", 32,
   1573      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1574      1.1  christos   },
   1575      1.1  christos /* wbiu $rd,$rs,$rt,$bytecount */
   1576      1.1  christos   {
   1577      1.1  christos     IQ2000_INSN_WBIU, "wbiu", "wbiu", 32,
   1578      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1579      1.1  christos   },
   1580      1.1  christos /* pkrli $rd,$rs,$rt,$bytecount */
   1581      1.1  christos   {
   1582      1.1  christos     IQ2000_INSN_PKRLI, "pkrli", "pkrli", 32,
   1583      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1584      1.1  christos   },
   1585      1.1  christos /* pkrlih $rd,$rs,$rt,$bytecount */
   1586      1.1  christos   {
   1587      1.1  christos     IQ2000_INSN_PKRLIH, "pkrlih", "pkrlih", 32,
   1588      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1589      1.1  christos   },
   1590      1.1  christos /* pkrliu $rd,$rs,$rt,$bytecount */
   1591      1.1  christos   {
   1592      1.1  christos     IQ2000_INSN_PKRLIU, "pkrliu", "pkrliu", 32,
   1593      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1594      1.1  christos   },
   1595      1.1  christos /* pkrlic $rd,$rs,$rt,$bytecount */
   1596      1.1  christos   {
   1597      1.1  christos     IQ2000_INSN_PKRLIC, "pkrlic", "pkrlic", 32,
   1598      1.1  christos     { 0|A(USES_RT)|A(USES_RS)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1599      1.1  christos   },
   1600      1.1  christos /* pkrla $rd,$rs,$rt */
   1601      1.1  christos   {
   1602      1.1  christos     IQ2000_INSN_PKRLA, "pkrla", "pkrla", 32,
   1603      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1604      1.1  christos   },
   1605      1.1  christos /* pkrlau $rd,$rs,$rt */
   1606      1.1  christos   {
   1607      1.1  christos     IQ2000_INSN_PKRLAU, "pkrlau", "pkrlau", 32,
   1608      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1609      1.1  christos   },
   1610      1.1  christos /* pkrlah $rd,$rs,$rt */
   1611      1.1  christos   {
   1612      1.1  christos     IQ2000_INSN_PKRLAH, "pkrlah", "pkrlah", 32,
   1613      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1614      1.1  christos   },
   1615      1.1  christos /* pkrlac $rd,$rs,$rt */
   1616      1.1  christos   {
   1617      1.1  christos     IQ2000_INSN_PKRLAC, "pkrlac", "pkrlac", 32,
   1618      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1619      1.1  christos   },
   1620      1.1  christos /* lock $rd,$rt */
   1621      1.1  christos   {
   1622      1.1  christos     IQ2000_INSN_LOCK, "lock", "lock", 32,
   1623      1.1  christos     { 0|A(USES_RT)|A(USES_RD), { { { (1<<MACH_IQ10), 0 } } } }
   1624      1.1  christos   },
   1625      1.1  christos /* unlk $rd,$rt */
   1626      1.1  christos   {
   1627      1.1  christos     IQ2000_INSN_UNLK, "unlk", "unlk", 32,
   1628      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1629      1.1  christos   },
   1630      1.1  christos /* swrd $rd,$rt */
   1631      1.1  christos   {
   1632      1.1  christos     IQ2000_INSN_SWRD, "swrd", "swrd", 32,
   1633      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1634      1.1  christos   },
   1635      1.1  christos /* swrdl $rd,$rt */
   1636      1.1  christos   {
   1637      1.1  christos     IQ2000_INSN_SWRDL, "swrdl", "swrdl", 32,
   1638      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1639      1.1  christos   },
   1640      1.1  christos /* swwr $rd,$rs,$rt */
   1641      1.1  christos   {
   1642      1.1  christos     IQ2000_INSN_SWWR, "swwr", "swwr", 32,
   1643      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1644      1.1  christos   },
   1645      1.1  christos /* swwru $rd,$rs,$rt */
   1646      1.1  christos   {
   1647      1.1  christos     IQ2000_INSN_SWWRU, "swwru", "swwru", 32,
   1648      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1649      1.1  christos   },
   1650      1.1  christos /* dwrd $rd,$rt */
   1651      1.1  christos   {
   1652      1.1  christos     IQ2000_INSN_DWRD, "dwrd", "dwrd", 32,
   1653      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1654      1.1  christos   },
   1655      1.1  christos /* dwrdl $rd,$rt */
   1656      1.1  christos   {
   1657      1.1  christos     IQ2000_INSN_DWRDL, "dwrdl", "dwrdl", 32,
   1658      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1659      1.1  christos   },
   1660      1.1  christos /* cam36 $rd,$rt,${cam-z},${cam-y} */
   1661      1.1  christos   {
   1662      1.1  christos     IQ2000_INSN_CAM36, "cam36", "cam36", 32,
   1663      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1664      1.1  christos   },
   1665      1.1  christos /* cam72 $rd,$rt,${cam-y},${cam-z} */
   1666      1.1  christos   {
   1667      1.1  christos     IQ2000_INSN_CAM72, "cam72", "cam72", 32,
   1668      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1669      1.1  christos   },
   1670      1.1  christos /* cam144 $rd,$rt,${cam-y},${cam-z} */
   1671      1.1  christos   {
   1672      1.1  christos     IQ2000_INSN_CAM144, "cam144", "cam144", 32,
   1673      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1674      1.1  christos   },
   1675      1.1  christos /* cam288 $rd,$rt,${cam-y},${cam-z} */
   1676      1.1  christos   {
   1677      1.1  christos     IQ2000_INSN_CAM288, "cam288", "cam288", 32,
   1678      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1679      1.1  christos   },
   1680      1.1  christos /* cm32and $rd,$rs,$rt */
   1681      1.1  christos   {
   1682      1.1  christos     IQ2000_INSN_CM32AND, "cm32and", "cm32and", 32,
   1683      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1684      1.1  christos   },
   1685      1.1  christos /* cm32andn $rd,$rs,$rt */
   1686      1.1  christos   {
   1687      1.1  christos     IQ2000_INSN_CM32ANDN, "cm32andn", "cm32andn", 32,
   1688      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1689      1.1  christos   },
   1690      1.1  christos /* cm32or $rd,$rs,$rt */
   1691      1.1  christos   {
   1692      1.1  christos     IQ2000_INSN_CM32OR, "cm32or", "cm32or", 32,
   1693      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1694      1.1  christos   },
   1695      1.1  christos /* cm32ra $rd,$rs,$rt */
   1696      1.1  christos   {
   1697      1.1  christos     IQ2000_INSN_CM32RA, "cm32ra", "cm32ra", 32,
   1698      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1699      1.1  christos   },
   1700      1.1  christos /* cm32rd $rd,$rt */
   1701      1.1  christos   {
   1702      1.1  christos     IQ2000_INSN_CM32RD, "cm32rd", "cm32rd", 32,
   1703      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1704      1.1  christos   },
   1705      1.1  christos /* cm32ri $rd,$rt */
   1706      1.1  christos   {
   1707      1.1  christos     IQ2000_INSN_CM32RI, "cm32ri", "cm32ri", 32,
   1708      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1709      1.1  christos   },
   1710      1.1  christos /* cm32rs $rd,$rs,$rt */
   1711      1.1  christos   {
   1712      1.1  christos     IQ2000_INSN_CM32RS, "cm32rs", "cm32rs", 32,
   1713      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1714      1.1  christos   },
   1715      1.1  christos /* cm32sa $rd,$rs,$rt */
   1716      1.1  christos   {
   1717      1.1  christos     IQ2000_INSN_CM32SA, "cm32sa", "cm32sa", 32,
   1718      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1719      1.1  christos   },
   1720      1.1  christos /* cm32sd $rd,$rt */
   1721      1.1  christos   {
   1722      1.1  christos     IQ2000_INSN_CM32SD, "cm32sd", "cm32sd", 32,
   1723      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1724      1.1  christos   },
   1725      1.1  christos /* cm32si $rd,$rt */
   1726      1.1  christos   {
   1727      1.1  christos     IQ2000_INSN_CM32SI, "cm32si", "cm32si", 32,
   1728      1.1  christos     { 0|A(USES_RD)|A(USES_RT), { { { (1<<MACH_IQ10), 0 } } } }
   1729      1.1  christos   },
   1730      1.1  christos /* cm32ss $rd,$rs,$rt */
   1731      1.1  christos   {
   1732      1.1  christos     IQ2000_INSN_CM32SS, "cm32ss", "cm32ss", 32,
   1733      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1734      1.1  christos   },
   1735      1.1  christos /* cm32xor $rd,$rs,$rt */
   1736      1.1  christos   {
   1737      1.1  christos     IQ2000_INSN_CM32XOR, "cm32xor", "cm32xor", 32,
   1738      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1739      1.1  christos   },
   1740      1.1  christos /* cm64clr $rd,$rt */
   1741      1.1  christos   {
   1742      1.1  christos     IQ2000_INSN_CM64CLR, "cm64clr", "cm64clr", 32,
   1743      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1744      1.1  christos   },
   1745      1.1  christos /* cm64ra $rd,$rs,$rt */
   1746      1.1  christos   {
   1747      1.1  christos     IQ2000_INSN_CM64RA, "cm64ra", "cm64ra", 32,
   1748      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1749      1.1  christos   },
   1750      1.1  christos /* cm64rd $rd,$rt */
   1751      1.1  christos   {
   1752      1.1  christos     IQ2000_INSN_CM64RD, "cm64rd", "cm64rd", 32,
   1753      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1754      1.1  christos   },
   1755      1.1  christos /* cm64ri $rd,$rt */
   1756      1.1  christos   {
   1757      1.1  christos     IQ2000_INSN_CM64RI, "cm64ri", "cm64ri", 32,
   1758      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1759      1.1  christos   },
   1760      1.1  christos /* cm64ria2 $rd,$rs,$rt */
   1761      1.1  christos   {
   1762      1.1  christos     IQ2000_INSN_CM64RIA2, "cm64ria2", "cm64ria2", 32,
   1763      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1764      1.1  christos   },
   1765      1.1  christos /* cm64rs $rd,$rs,$rt */
   1766      1.1  christos   {
   1767      1.1  christos     IQ2000_INSN_CM64RS, "cm64rs", "cm64rs", 32,
   1768      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1769      1.1  christos   },
   1770      1.1  christos /* cm64sa $rd,$rs,$rt */
   1771      1.1  christos   {
   1772      1.1  christos     IQ2000_INSN_CM64SA, "cm64sa", "cm64sa", 32,
   1773      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1774      1.1  christos   },
   1775      1.1  christos /* cm64sd $rd,$rt */
   1776      1.1  christos   {
   1777      1.1  christos     IQ2000_INSN_CM64SD, "cm64sd", "cm64sd", 32,
   1778      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1779      1.1  christos   },
   1780      1.1  christos /* cm64si $rd,$rt */
   1781      1.1  christos   {
   1782      1.1  christos     IQ2000_INSN_CM64SI, "cm64si", "cm64si", 32,
   1783      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1784      1.1  christos   },
   1785      1.1  christos /* cm64sia2 $rd,$rs,$rt */
   1786      1.1  christos   {
   1787      1.1  christos     IQ2000_INSN_CM64SIA2, "cm64sia2", "cm64sia2", 32,
   1788      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1789      1.1  christos   },
   1790      1.1  christos /* cm64ss $rd,$rs,$rt */
   1791      1.1  christos   {
   1792      1.1  christos     IQ2000_INSN_CM64SS, "cm64ss", "cm64ss", 32,
   1793      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1794      1.1  christos   },
   1795      1.1  christos /* cm128ria2 $rd,$rs,$rt */
   1796      1.1  christos   {
   1797      1.1  christos     IQ2000_INSN_CM128RIA2, "cm128ria2", "cm128ria2", 32,
   1798      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1799      1.1  christos   },
   1800      1.1  christos /* cm128ria3 $rd,$rs,$rt,${cm-3z} */
   1801      1.1  christos   {
   1802      1.1  christos     IQ2000_INSN_CM128RIA3, "cm128ria3", "cm128ria3", 32,
   1803      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1804      1.1  christos   },
   1805      1.1  christos /* cm128ria4 $rd,$rs,$rt,${cm-4z} */
   1806      1.1  christos   {
   1807      1.1  christos     IQ2000_INSN_CM128RIA4, "cm128ria4", "cm128ria4", 32,
   1808      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1809      1.1  christos   },
   1810      1.1  christos /* cm128sia2 $rd,$rs,$rt */
   1811      1.1  christos   {
   1812      1.1  christos     IQ2000_INSN_CM128SIA2, "cm128sia2", "cm128sia2", 32,
   1813      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1814      1.1  christos   },
   1815      1.1  christos /* cm128sia3 $rd,$rs,$rt,${cm-3z} */
   1816      1.1  christos   {
   1817      1.1  christos     IQ2000_INSN_CM128SIA3, "cm128sia3", "cm128sia3", 32,
   1818      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS)|A(EVEN_REG_NUM), { { { (1<<MACH_IQ10), 0 } } } }
   1819      1.1  christos   },
   1820      1.1  christos /* cm128sia4 $rd,$rs,$rt,${cm-4z} */
   1821      1.1  christos   {
   1822      1.1  christos     IQ2000_INSN_CM128SIA4, "cm128sia4", "cm128sia4", 32,
   1823      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1824      1.1  christos   },
   1825      1.1  christos /* cm128vsa $rd,$rs,$rt */
   1826      1.1  christos   {
   1827      1.1  christos     IQ2000_INSN_CM128VSA, "cm128vsa", "cm128vsa", 32,
   1828      1.1  christos     { 0|A(USES_RD)|A(USES_RT)|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1829      1.1  christos   },
   1830      1.1  christos /* cfc $rd,$rt */
   1831      1.1  christos   {
   1832      1.1  christos     IQ2000_INSN_CFC, "cfc", "cfc", 32,
   1833      1.1  christos     { 0|A(YIELD_INSN)|A(USES_RD)|A(LOAD_DELAY), { { { (1<<MACH_IQ10), 0 } } } }
   1834      1.1  christos   },
   1835      1.1  christos /* ctc $rs,$rt */
   1836      1.1  christos   {
   1837      1.1  christos     IQ2000_INSN_CTC, "ctc", "ctc", 32,
   1838      1.1  christos     { 0|A(USES_RS), { { { (1<<MACH_IQ10), 0 } } } }
   1839      1.1  christos   },
   1840      1.1  christos };
   1841      1.1  christos 
   1842      1.1  christos #undef OP
   1843      1.1  christos #undef A
   1844      1.1  christos 
   1845      1.1  christos /* Initialize anything needed to be done once, before any cpu_open call.  */
   1846      1.1  christos 
   1847      1.1  christos static void
   1848      1.1  christos init_tables (void)
   1849      1.1  christos {
   1850      1.1  christos }
   1851      1.1  christos 
   1852      1.1  christos static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
   1853      1.1  christos static void build_hw_table      (CGEN_CPU_TABLE *);
   1854      1.1  christos static void build_ifield_table  (CGEN_CPU_TABLE *);
   1855      1.1  christos static void build_operand_table (CGEN_CPU_TABLE *);
   1856      1.1  christos static void build_insn_table    (CGEN_CPU_TABLE *);
   1857      1.1  christos static void iq2000_cgen_rebuild_tables (CGEN_CPU_TABLE *);
   1858      1.1  christos 
   1859      1.1  christos /* Subroutine of iq2000_cgen_cpu_open to look up a mach via its bfd name.  */
   1860      1.1  christos 
   1861      1.1  christos static const CGEN_MACH *
   1862      1.1  christos lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
   1863      1.1  christos {
   1864      1.1  christos   while (table->name)
   1865      1.1  christos     {
   1866      1.1  christos       if (strcmp (name, table->bfd_name) == 0)
   1867      1.1  christos 	return table;
   1868      1.1  christos       ++table;
   1869      1.1  christos     }
   1870      1.1  christos   abort ();
   1871      1.1  christos }
   1872      1.1  christos 
   1873      1.1  christos /* Subroutine of iq2000_cgen_cpu_open to build the hardware table.  */
   1874      1.1  christos 
   1875      1.1  christos static void
   1876      1.1  christos build_hw_table (CGEN_CPU_TABLE *cd)
   1877      1.1  christos {
   1878      1.1  christos   int i;
   1879      1.1  christos   int machs = cd->machs;
   1880      1.1  christos   const CGEN_HW_ENTRY *init = & iq2000_cgen_hw_table[0];
   1881      1.1  christos   /* MAX_HW is only an upper bound on the number of selected entries.
   1882      1.1  christos      However each entry is indexed by it's enum so there can be holes in
   1883      1.1  christos      the table.  */
   1884      1.1  christos   const CGEN_HW_ENTRY **selected =
   1885      1.1  christos     (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
   1886      1.1  christos 
   1887      1.1  christos   cd->hw_table.init_entries = init;
   1888      1.1  christos   cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
   1889      1.1  christos   memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
   1890      1.1  christos   /* ??? For now we just use machs to determine which ones we want.  */
   1891      1.1  christos   for (i = 0; init[i].name != NULL; ++i)
   1892      1.1  christos     if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
   1893      1.1  christos 	& machs)
   1894      1.1  christos       selected[init[i].type] = &init[i];
   1895      1.1  christos   cd->hw_table.entries = selected;
   1896      1.1  christos   cd->hw_table.num_entries = MAX_HW;
   1897      1.1  christos }
   1898      1.1  christos 
   1899      1.1  christos /* Subroutine of iq2000_cgen_cpu_open to build the hardware table.  */
   1900      1.1  christos 
   1901      1.1  christos static void
   1902      1.1  christos build_ifield_table (CGEN_CPU_TABLE *cd)
   1903      1.1  christos {
   1904      1.1  christos   cd->ifld_table = & iq2000_cgen_ifld_table[0];
   1905      1.1  christos }
   1906      1.1  christos 
   1907      1.1  christos /* Subroutine of iq2000_cgen_cpu_open to build the hardware table.  */
   1908      1.1  christos 
   1909      1.1  christos static void
   1910      1.1  christos build_operand_table (CGEN_CPU_TABLE *cd)
   1911      1.1  christos {
   1912      1.1  christos   int i;
   1913      1.1  christos   int machs = cd->machs;
   1914      1.1  christos   const CGEN_OPERAND *init = & iq2000_cgen_operand_table[0];
   1915      1.1  christos   /* MAX_OPERANDS is only an upper bound on the number of selected entries.
   1916      1.1  christos      However each entry is indexed by it's enum so there can be holes in
   1917      1.1  christos      the table.  */
   1918      1.1  christos   const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
   1919      1.1  christos 
   1920      1.1  christos   cd->operand_table.init_entries = init;
   1921      1.1  christos   cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
   1922      1.1  christos   memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
   1923      1.1  christos   /* ??? For now we just use mach to determine which ones we want.  */
   1924      1.1  christos   for (i = 0; init[i].name != NULL; ++i)
   1925      1.1  christos     if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
   1926      1.1  christos 	& machs)
   1927      1.1  christos       selected[init[i].type] = &init[i];
   1928      1.1  christos   cd->operand_table.entries = selected;
   1929      1.1  christos   cd->operand_table.num_entries = MAX_OPERANDS;
   1930      1.1  christos }
   1931      1.1  christos 
   1932      1.1  christos /* Subroutine of iq2000_cgen_cpu_open to build the hardware table.
   1933      1.1  christos    ??? This could leave out insns not supported by the specified mach/isa,
   1934      1.1  christos    but that would cause errors like "foo only supported by bar" to become
   1935      1.1  christos    "unknown insn", so for now we include all insns and require the app to
   1936      1.1  christos    do the checking later.
   1937      1.1  christos    ??? On the other hand, parsing of such insns may require their hardware or
   1938      1.1  christos    operand elements to be in the table [which they mightn't be].  */
   1939      1.1  christos 
   1940      1.1  christos static void
   1941      1.1  christos build_insn_table (CGEN_CPU_TABLE *cd)
   1942      1.1  christos {
   1943      1.1  christos   int i;
   1944      1.1  christos   const CGEN_IBASE *ib = & iq2000_cgen_insn_table[0];
   1945      1.1  christos   CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
   1946      1.1  christos 
   1947      1.1  christos   memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
   1948      1.1  christos   for (i = 0; i < MAX_INSNS; ++i)
   1949      1.1  christos     insns[i].base = &ib[i];
   1950      1.1  christos   cd->insn_table.init_entries = insns;
   1951      1.1  christos   cd->insn_table.entry_size = sizeof (CGEN_IBASE);
   1952      1.1  christos   cd->insn_table.num_init_entries = MAX_INSNS;
   1953      1.1  christos }
   1954      1.1  christos 
   1955      1.1  christos /* Subroutine of iq2000_cgen_cpu_open to rebuild the tables.  */
   1956      1.1  christos 
   1957      1.1  christos static void
   1958      1.1  christos iq2000_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
   1959      1.1  christos {
   1960      1.1  christos   int i;
   1961      1.1  christos   CGEN_BITSET *isas = cd->isas;
   1962      1.1  christos   unsigned int machs = cd->machs;
   1963      1.1  christos 
   1964      1.1  christos   cd->int_insn_p = CGEN_INT_INSN_P;
   1965      1.1  christos 
   1966      1.1  christos   /* Data derived from the isa spec.  */
   1967      1.1  christos #define UNSET (CGEN_SIZE_UNKNOWN + 1)
   1968      1.1  christos   cd->default_insn_bitsize = UNSET;
   1969      1.1  christos   cd->base_insn_bitsize = UNSET;
   1970      1.1  christos   cd->min_insn_bitsize = 65535; /* Some ridiculously big number.  */
   1971      1.1  christos   cd->max_insn_bitsize = 0;
   1972      1.1  christos   for (i = 0; i < MAX_ISAS; ++i)
   1973      1.1  christos     if (cgen_bitset_contains (isas, i))
   1974      1.1  christos       {
   1975      1.1  christos 	const CGEN_ISA *isa = & iq2000_cgen_isa_table[i];
   1976      1.1  christos 
   1977      1.1  christos 	/* Default insn sizes of all selected isas must be
   1978      1.1  christos 	   equal or we set the result to 0, meaning "unknown".  */
   1979      1.1  christos 	if (cd->default_insn_bitsize == UNSET)
   1980      1.1  christos 	  cd->default_insn_bitsize = isa->default_insn_bitsize;
   1981      1.1  christos 	else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
   1982      1.1  christos 	  ; /* This is ok.  */
   1983      1.1  christos 	else
   1984      1.1  christos 	  cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
   1985      1.1  christos 
   1986      1.1  christos 	/* Base insn sizes of all selected isas must be equal
   1987      1.1  christos 	   or we set the result to 0, meaning "unknown".  */
   1988      1.1  christos 	if (cd->base_insn_bitsize == UNSET)
   1989      1.1  christos 	  cd->base_insn_bitsize = isa->base_insn_bitsize;
   1990      1.1  christos 	else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
   1991      1.1  christos 	  ; /* This is ok.  */
   1992      1.1  christos 	else
   1993      1.1  christos 	  cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
   1994      1.1  christos 
   1995      1.1  christos 	/* Set min,max insn sizes.  */
   1996      1.1  christos 	if (isa->min_insn_bitsize < cd->min_insn_bitsize)
   1997      1.1  christos 	  cd->min_insn_bitsize = isa->min_insn_bitsize;
   1998      1.1  christos 	if (isa->max_insn_bitsize > cd->max_insn_bitsize)
   1999      1.1  christos 	  cd->max_insn_bitsize = isa->max_insn_bitsize;
   2000      1.1  christos       }
   2001      1.1  christos 
   2002      1.1  christos   /* Data derived from the mach spec.  */
   2003      1.1  christos   for (i = 0; i < MAX_MACHS; ++i)
   2004      1.1  christos     if (((1 << i) & machs) != 0)
   2005      1.1  christos       {
   2006      1.1  christos 	const CGEN_MACH *mach = & iq2000_cgen_mach_table[i];
   2007      1.1  christos 
   2008      1.1  christos 	if (mach->insn_chunk_bitsize != 0)
   2009      1.1  christos 	{
   2010      1.1  christos 	  if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
   2011      1.1  christos 	    {
   2012      1.1  christos 	      fprintf (stderr, "iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize values: `%d' vs. `%d'\n",
   2013      1.1  christos 		       cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
   2014      1.1  christos 	      abort ();
   2015      1.1  christos 	    }
   2016      1.1  christos 
   2017      1.1  christos  	  cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
   2018      1.1  christos 	}
   2019      1.1  christos       }
   2020      1.1  christos 
   2021      1.1  christos   /* Determine which hw elements are used by MACH.  */
   2022      1.1  christos   build_hw_table (cd);
   2023      1.1  christos 
   2024      1.1  christos   /* Build the ifield table.  */
   2025      1.1  christos   build_ifield_table (cd);
   2026      1.1  christos 
   2027      1.1  christos   /* Determine which operands are used by MACH/ISA.  */
   2028      1.1  christos   build_operand_table (cd);
   2029      1.1  christos 
   2030      1.1  christos   /* Build the instruction table.  */
   2031      1.1  christos   build_insn_table (cd);
   2032      1.1  christos }
   2033      1.1  christos 
   2034      1.1  christos /* Initialize a cpu table and return a descriptor.
   2035      1.1  christos    It's much like opening a file, and must be the first function called.
   2036      1.1  christos    The arguments are a set of (type/value) pairs, terminated with
   2037      1.1  christos    CGEN_CPU_OPEN_END.
   2038      1.1  christos 
   2039      1.1  christos    Currently supported values:
   2040      1.1  christos    CGEN_CPU_OPEN_ISAS:    bitmap of values in enum isa_attr
   2041      1.1  christos    CGEN_CPU_OPEN_MACHS:   bitmap of values in enum mach_attr
   2042      1.1  christos    CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
   2043      1.1  christos    CGEN_CPU_OPEN_ENDIAN:  specify endian choice
   2044      1.1  christos    CGEN_CPU_OPEN_END:     terminates arguments
   2045      1.1  christos 
   2046      1.1  christos    ??? Simultaneous multiple isas might not make sense, but it's not (yet)
   2047      1.1  christos    precluded.  */
   2048      1.1  christos 
   2049      1.1  christos CGEN_CPU_DESC
   2050      1.1  christos iq2000_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
   2051      1.1  christos {
   2052      1.1  christos   CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
   2053      1.1  christos   static int init_p;
   2054      1.1  christos   CGEN_BITSET *isas = 0;  /* 0 = "unspecified" */
   2055      1.1  christos   unsigned int machs = 0; /* 0 = "unspecified" */
   2056      1.1  christos   enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
   2057      1.1  christos   va_list ap;
   2058      1.1  christos 
   2059      1.1  christos   if (! init_p)
   2060      1.1  christos     {
   2061      1.1  christos       init_tables ();
   2062      1.1  christos       init_p = 1;
   2063      1.1  christos     }
   2064      1.1  christos 
   2065      1.1  christos   memset (cd, 0, sizeof (*cd));
   2066      1.1  christos 
   2067      1.1  christos   va_start (ap, arg_type);
   2068      1.1  christos   while (arg_type != CGEN_CPU_OPEN_END)
   2069      1.1  christos     {
   2070      1.1  christos       switch (arg_type)
   2071      1.1  christos 	{
   2072      1.1  christos 	case CGEN_CPU_OPEN_ISAS :
   2073      1.1  christos 	  isas = va_arg (ap, CGEN_BITSET *);
   2074      1.1  christos 	  break;
   2075      1.1  christos 	case CGEN_CPU_OPEN_MACHS :
   2076      1.1  christos 	  machs = va_arg (ap, unsigned int);
   2077      1.1  christos 	  break;
   2078      1.1  christos 	case CGEN_CPU_OPEN_BFDMACH :
   2079      1.1  christos 	  {
   2080      1.1  christos 	    const char *name = va_arg (ap, const char *);
   2081      1.1  christos 	    const CGEN_MACH *mach =
   2082      1.1  christos 	      lookup_mach_via_bfd_name (iq2000_cgen_mach_table, name);
   2083      1.1  christos 
   2084      1.1  christos 	    machs |= 1 << mach->num;
   2085      1.1  christos 	    break;
   2086      1.1  christos 	  }
   2087      1.1  christos 	case CGEN_CPU_OPEN_ENDIAN :
   2088      1.1  christos 	  endian = va_arg (ap, enum cgen_endian);
   2089      1.1  christos 	  break;
   2090      1.1  christos 	default :
   2091      1.1  christos 	  fprintf (stderr, "iq2000_cgen_cpu_open: unsupported argument `%d'\n",
   2092      1.1  christos 		   arg_type);
   2093      1.1  christos 	  abort (); /* ??? return NULL? */
   2094      1.1  christos 	}
   2095      1.1  christos       arg_type = va_arg (ap, enum cgen_cpu_open_arg);
   2096      1.1  christos     }
   2097      1.1  christos   va_end (ap);
   2098      1.1  christos 
   2099      1.1  christos   /* Mach unspecified means "all".  */
   2100      1.1  christos   if (machs == 0)
   2101      1.1  christos     machs = (1 << MAX_MACHS) - 1;
   2102      1.1  christos   /* Base mach is always selected.  */
   2103      1.1  christos   machs |= 1;
   2104      1.1  christos   if (endian == CGEN_ENDIAN_UNKNOWN)
   2105      1.1  christos     {
   2106      1.1  christos       /* ??? If target has only one, could have a default.  */
   2107      1.1  christos       fprintf (stderr, "iq2000_cgen_cpu_open: no endianness specified\n");
   2108      1.1  christos       abort ();
   2109      1.1  christos     }
   2110      1.1  christos 
   2111      1.1  christos   cd->isas = cgen_bitset_copy (isas);
   2112      1.1  christos   cd->machs = machs;
   2113      1.1  christos   cd->endian = endian;
   2114      1.1  christos   /* FIXME: for the sparc case we can determine insn-endianness statically.
   2115      1.1  christos      The worry here is where both data and insn endian can be independently
   2116      1.1  christos      chosen, in which case this function will need another argument.
   2117      1.1  christos      Actually, will want to allow for more arguments in the future anyway.  */
   2118      1.1  christos   cd->insn_endian = endian;
   2119      1.1  christos 
   2120      1.1  christos   /* Table (re)builder.  */
   2121      1.1  christos   cd->rebuild_tables = iq2000_cgen_rebuild_tables;
   2122      1.1  christos   iq2000_cgen_rebuild_tables (cd);
   2123      1.1  christos 
   2124      1.1  christos   /* Default to not allowing signed overflow.  */
   2125      1.1  christos   cd->signed_overflow_ok_p = 0;
   2126      1.1  christos 
   2127      1.1  christos   return (CGEN_CPU_DESC) cd;
   2128      1.1  christos }
   2129      1.1  christos 
   2130      1.1  christos /* Cover fn to iq2000_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
   2131      1.1  christos    MACH_NAME is the bfd name of the mach.  */
   2132      1.1  christos 
   2133      1.1  christos CGEN_CPU_DESC
   2134      1.1  christos iq2000_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
   2135      1.1  christos {
   2136      1.1  christos   return iq2000_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
   2137      1.1  christos 			       CGEN_CPU_OPEN_ENDIAN, endian,
   2138      1.1  christos 			       CGEN_CPU_OPEN_END);
   2139      1.1  christos }
   2140      1.1  christos 
   2141      1.1  christos /* Close a cpu table.
   2142      1.1  christos    ??? This can live in a machine independent file, but there's currently
   2143      1.1  christos    no place to put this file (there's no libcgen).  libopcodes is the wrong
   2144      1.1  christos    place as some simulator ports use this but they don't use libopcodes.  */
   2145      1.1  christos 
   2146      1.1  christos void
   2147      1.1  christos iq2000_cgen_cpu_close (CGEN_CPU_DESC cd)
   2148      1.1  christos {
   2149      1.1  christos   unsigned int i;
   2150      1.1  christos   const CGEN_INSN *insns;
   2151      1.1  christos 
   2152      1.1  christos   if (cd->macro_insn_table.init_entries)
   2153      1.1  christos     {
   2154      1.1  christos       insns = cd->macro_insn_table.init_entries;
   2155      1.1  christos       for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
   2156      1.1  christos 	if (CGEN_INSN_RX ((insns)))
   2157      1.1  christos 	  regfree (CGEN_INSN_RX (insns));
   2158      1.1  christos     }
   2159      1.1  christos 
   2160      1.1  christos   if (cd->insn_table.init_entries)
   2161      1.1  christos     {
   2162      1.1  christos       insns = cd->insn_table.init_entries;
   2163      1.1  christos       for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
   2164      1.1  christos 	if (CGEN_INSN_RX (insns))
   2165      1.1  christos 	  regfree (CGEN_INSN_RX (insns));
   2166      1.1  christos     }
   2167      1.1  christos 
   2168      1.1  christos   if (cd->macro_insn_table.init_entries)
   2169      1.1  christos     free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
   2170      1.1  christos 
   2171      1.1  christos   if (cd->insn_table.init_entries)
   2172      1.1  christos     free ((CGEN_INSN *) cd->insn_table.init_entries);
   2173      1.1  christos 
   2174      1.1  christos   if (cd->hw_table.entries)
   2175      1.1  christos     free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
   2176      1.1  christos 
   2177      1.1  christos   if (cd->operand_table.entries)
   2178      1.1  christos     free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
   2179      1.1  christos 
   2180      1.1  christos   free (cd);
   2181      1.1  christos }
   2182      1.1  christos 
   2183