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