Home | History | Annotate | Line # | Download | only in opcodes
      1   1.1.1.5  christos /* DO NOT EDIT!  -*- buffer-read-only: t -*- vi:set ro:  */
      2       1.1     skrll /* CPU data for m32r.
      3       1.1     skrll 
      4       1.1     skrll THIS FILE IS MACHINE GENERATED WITH CGEN.
      5       1.1     skrll 
      6  1.1.1.11  christos Copyright (C) 1996-2026 Free Software Foundation, Inc.
      7       1.1     skrll 
      8       1.1     skrll This file is part of the GNU Binutils and/or GDB, the GNU debugger.
      9       1.1     skrll 
     10       1.1     skrll    This file is free software; you can redistribute it and/or modify
     11       1.1     skrll    it under the terms of the GNU General Public License as published by
     12       1.1     skrll    the Free Software Foundation; either version 3, or (at your option)
     13       1.1     skrll    any later version.
     14       1.1     skrll 
     15       1.1     skrll    It is distributed in the hope that it will be useful, but WITHOUT
     16       1.1     skrll    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     17       1.1     skrll    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     18       1.1     skrll    License for more details.
     19       1.1     skrll 
     20       1.1     skrll    You should have received a copy of the GNU General Public License along
     21       1.1     skrll    with this program; if not, write to the Free Software Foundation, Inc.,
     22       1.1     skrll    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
     23       1.1     skrll 
     24       1.1     skrll */
     25       1.1     skrll 
     26       1.1     skrll #include "sysdep.h"
     27       1.1     skrll #include <stdio.h>
     28       1.1     skrll #include <stdarg.h>
     29   1.1.1.8  christos #include <stdlib.h>
     30       1.1     skrll #include "ansidecl.h"
     31       1.1     skrll #include "bfd.h"
     32       1.1     skrll #include "symcat.h"
     33       1.1     skrll #include "m32r-desc.h"
     34       1.1     skrll #include "m32r-opc.h"
     35       1.1     skrll #include "opintl.h"
     36       1.1     skrll #include "libiberty.h"
     37       1.1     skrll #include "xregex.h"
     38       1.1     skrll 
     39       1.1     skrll /* Attributes.  */
     40       1.1     skrll 
     41       1.1     skrll static const CGEN_ATTR_ENTRY bool_attr[] =
     42       1.1     skrll {
     43       1.1     skrll   { "#f", 0 },
     44       1.1     skrll   { "#t", 1 },
     45       1.1     skrll   { 0, 0 }
     46       1.1     skrll };
     47       1.1     skrll 
     48       1.1     skrll static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
     49       1.1     skrll {
     50       1.1     skrll   { "base", MACH_BASE },
     51       1.1     skrll   { "m32r", MACH_M32R },
     52       1.1     skrll   { "m32rx", MACH_M32RX },
     53       1.1     skrll   { "m32r2", MACH_M32R2 },
     54       1.1     skrll   { "max", MACH_MAX },
     55       1.1     skrll   { 0, 0 }
     56       1.1     skrll };
     57       1.1     skrll 
     58       1.1     skrll static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
     59       1.1     skrll {
     60       1.1     skrll   { "m32r", ISA_M32R },
     61       1.1     skrll   { "max", ISA_MAX },
     62       1.1     skrll   { 0, 0 }
     63       1.1     skrll };
     64       1.1     skrll 
     65       1.1     skrll static const CGEN_ATTR_ENTRY PIPE_attr[] ATTRIBUTE_UNUSED =
     66       1.1     skrll {
     67       1.1     skrll   { "NONE", PIPE_NONE },
     68       1.1     skrll   { "O", PIPE_O },
     69       1.1     skrll   { "S", PIPE_S },
     70       1.1     skrll   { "OS", PIPE_OS },
     71       1.1     skrll   { "O_OS", PIPE_O_OS },
     72       1.1     skrll   { 0, 0 }
     73       1.1     skrll };
     74       1.1     skrll 
     75       1.1     skrll const CGEN_ATTR_TABLE m32r_cgen_ifield_attr_table[] =
     76       1.1     skrll {
     77       1.1     skrll   { "MACH", & MACH_attr[0], & MACH_attr[0] },
     78       1.1     skrll   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
     79       1.1     skrll   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
     80       1.1     skrll   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
     81       1.1     skrll   { "RESERVED", &bool_attr[0], &bool_attr[0] },
     82       1.1     skrll   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
     83       1.1     skrll   { "SIGNED", &bool_attr[0], &bool_attr[0] },
     84       1.1     skrll   { "RELOC", &bool_attr[0], &bool_attr[0] },
     85       1.1     skrll   { 0, 0, 0 }
     86       1.1     skrll };
     87       1.1     skrll 
     88       1.1     skrll const CGEN_ATTR_TABLE m32r_cgen_hardware_attr_table[] =
     89       1.1     skrll {
     90       1.1     skrll   { "MACH", & MACH_attr[0], & MACH_attr[0] },
     91       1.1     skrll   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
     92       1.1     skrll   { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
     93       1.1     skrll   { "PC", &bool_attr[0], &bool_attr[0] },
     94       1.1     skrll   { "PROFILE", &bool_attr[0], &bool_attr[0] },
     95       1.1     skrll   { 0, 0, 0 }
     96       1.1     skrll };
     97       1.1     skrll 
     98       1.1     skrll const CGEN_ATTR_TABLE m32r_cgen_operand_attr_table[] =
     99       1.1     skrll {
    100       1.1     skrll   { "MACH", & MACH_attr[0], & MACH_attr[0] },
    101       1.1     skrll   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
    102       1.1     skrll   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
    103       1.1     skrll   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
    104       1.1     skrll   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
    105       1.1     skrll   { "SIGNED", &bool_attr[0], &bool_attr[0] },
    106       1.1     skrll   { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
    107       1.1     skrll   { "RELAX", &bool_attr[0], &bool_attr[0] },
    108       1.1     skrll   { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
    109       1.1     skrll   { "RELOC", &bool_attr[0], &bool_attr[0] },
    110       1.1     skrll   { 0, 0, 0 }
    111       1.1     skrll };
    112       1.1     skrll 
    113       1.1     skrll const CGEN_ATTR_TABLE m32r_cgen_insn_attr_table[] =
    114       1.1     skrll {
    115       1.1     skrll   { "MACH", & MACH_attr[0], & MACH_attr[0] },
    116       1.1     skrll   { "PIPE", & PIPE_attr[0], & PIPE_attr[0] },
    117       1.1     skrll   { "ALIAS", &bool_attr[0], &bool_attr[0] },
    118       1.1     skrll   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
    119       1.1     skrll   { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
    120       1.1     skrll   { "COND-CTI", &bool_attr[0], &bool_attr[0] },
    121       1.1     skrll   { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
    122       1.1     skrll   { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
    123       1.1     skrll   { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
    124       1.1     skrll   { "RELAXED", &bool_attr[0], &bool_attr[0] },
    125       1.1     skrll   { "NO-DIS", &bool_attr[0], &bool_attr[0] },
    126       1.1     skrll   { "PBB", &bool_attr[0], &bool_attr[0] },
    127       1.1     skrll   { "FILL-SLOT", &bool_attr[0], &bool_attr[0] },
    128       1.1     skrll   { "SPECIAL", &bool_attr[0], &bool_attr[0] },
    129       1.1     skrll   { "SPECIAL_M32R", &bool_attr[0], &bool_attr[0] },
    130       1.1     skrll   { "SPECIAL_FLOAT", &bool_attr[0], &bool_attr[0] },
    131       1.1     skrll   { 0, 0, 0 }
    132       1.1     skrll };
    133       1.1     skrll 
    134       1.1     skrll /* Instruction set variants.  */
    135       1.1     skrll 
    136       1.1     skrll static const CGEN_ISA m32r_cgen_isa_table[] = {
    137       1.1     skrll   { "m32r", 32, 32, 16, 32 },
    138       1.1     skrll   { 0, 0, 0, 0, 0 }
    139       1.1     skrll };
    140       1.1     skrll 
    141       1.1     skrll /* Machine variants.  */
    142       1.1     skrll 
    143       1.1     skrll static const CGEN_MACH m32r_cgen_mach_table[] = {
    144       1.1     skrll   { "m32r", "m32r", MACH_M32R, 0 },
    145       1.1     skrll   { "m32rx", "m32rx", MACH_M32RX, 0 },
    146       1.1     skrll   { "m32r2", "m32r2", MACH_M32R2, 0 },
    147       1.1     skrll   { 0, 0, 0, 0 }
    148       1.1     skrll };
    149       1.1     skrll 
    150       1.1     skrll static CGEN_KEYWORD_ENTRY m32r_cgen_opval_gr_names_entries[] =
    151       1.1     skrll {
    152       1.1     skrll   { "fp", 13, {0, {{{0, 0}}}}, 0, 0 },
    153       1.1     skrll   { "lr", 14, {0, {{{0, 0}}}}, 0, 0 },
    154       1.1     skrll   { "sp", 15, {0, {{{0, 0}}}}, 0, 0 },
    155       1.1     skrll   { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
    156       1.1     skrll   { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
    157       1.1     skrll   { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
    158       1.1     skrll   { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
    159       1.1     skrll   { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
    160       1.1     skrll   { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
    161       1.1     skrll   { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
    162       1.1     skrll   { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
    163       1.1     skrll   { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
    164       1.1     skrll   { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
    165       1.1     skrll   { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
    166       1.1     skrll   { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
    167       1.1     skrll   { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
    168       1.1     skrll   { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
    169       1.1     skrll   { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
    170       1.1     skrll   { "r15", 15, {0, {{{0, 0}}}}, 0, 0 }
    171       1.1     skrll };
    172       1.1     skrll 
    173       1.1     skrll CGEN_KEYWORD m32r_cgen_opval_gr_names =
    174       1.1     skrll {
    175       1.1     skrll   & m32r_cgen_opval_gr_names_entries[0],
    176       1.1     skrll   19,
    177       1.1     skrll   0, 0, 0, 0, ""
    178       1.1     skrll };
    179       1.1     skrll 
    180       1.1     skrll static CGEN_KEYWORD_ENTRY m32r_cgen_opval_cr_names_entries[] =
    181       1.1     skrll {
    182       1.1     skrll   { "psw", 0, {0, {{{0, 0}}}}, 0, 0 },
    183       1.1     skrll   { "cbr", 1, {0, {{{0, 0}}}}, 0, 0 },
    184       1.1     skrll   { "spi", 2, {0, {{{0, 0}}}}, 0, 0 },
    185       1.1     skrll   { "spu", 3, {0, {{{0, 0}}}}, 0, 0 },
    186       1.1     skrll   { "bpc", 6, {0, {{{0, 0}}}}, 0, 0 },
    187       1.1     skrll   { "bbpsw", 8, {0, {{{0, 0}}}}, 0, 0 },
    188       1.1     skrll   { "bbpc", 14, {0, {{{0, 0}}}}, 0, 0 },
    189       1.1     skrll   { "evb", 5, {0, {{{0, 0}}}}, 0, 0 },
    190       1.1     skrll   { "cr0", 0, {0, {{{0, 0}}}}, 0, 0 },
    191       1.1     skrll   { "cr1", 1, {0, {{{0, 0}}}}, 0, 0 },
    192       1.1     skrll   { "cr2", 2, {0, {{{0, 0}}}}, 0, 0 },
    193       1.1     skrll   { "cr3", 3, {0, {{{0, 0}}}}, 0, 0 },
    194       1.1     skrll   { "cr4", 4, {0, {{{0, 0}}}}, 0, 0 },
    195       1.1     skrll   { "cr5", 5, {0, {{{0, 0}}}}, 0, 0 },
    196       1.1     skrll   { "cr6", 6, {0, {{{0, 0}}}}, 0, 0 },
    197       1.1     skrll   { "cr7", 7, {0, {{{0, 0}}}}, 0, 0 },
    198       1.1     skrll   { "cr8", 8, {0, {{{0, 0}}}}, 0, 0 },
    199       1.1     skrll   { "cr9", 9, {0, {{{0, 0}}}}, 0, 0 },
    200       1.1     skrll   { "cr10", 10, {0, {{{0, 0}}}}, 0, 0 },
    201       1.1     skrll   { "cr11", 11, {0, {{{0, 0}}}}, 0, 0 },
    202       1.1     skrll   { "cr12", 12, {0, {{{0, 0}}}}, 0, 0 },
    203       1.1     skrll   { "cr13", 13, {0, {{{0, 0}}}}, 0, 0 },
    204       1.1     skrll   { "cr14", 14, {0, {{{0, 0}}}}, 0, 0 },
    205       1.1     skrll   { "cr15", 15, {0, {{{0, 0}}}}, 0, 0 }
    206       1.1     skrll };
    207       1.1     skrll 
    208       1.1     skrll CGEN_KEYWORD m32r_cgen_opval_cr_names =
    209       1.1     skrll {
    210       1.1     skrll   & m32r_cgen_opval_cr_names_entries[0],
    211       1.1     skrll   24,
    212       1.1     skrll   0, 0, 0, 0, ""
    213       1.1     skrll };
    214       1.1     skrll 
    215       1.1     skrll static CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_accums_entries[] =
    216       1.1     skrll {
    217       1.1     skrll   { "a0", 0, {0, {{{0, 0}}}}, 0, 0 },
    218       1.1     skrll   { "a1", 1, {0, {{{0, 0}}}}, 0, 0 }
    219       1.1     skrll };
    220       1.1     skrll 
    221       1.1     skrll CGEN_KEYWORD m32r_cgen_opval_h_accums =
    222       1.1     skrll {
    223       1.1     skrll   & m32r_cgen_opval_h_accums_entries[0],
    224       1.1     skrll   2,
    225       1.1     skrll   0, 0, 0, 0, ""
    226       1.1     skrll };
    227       1.1     skrll 
    228       1.1     skrll 
    229       1.1     skrll /* The hardware table.  */
    230       1.1     skrll 
    231       1.1     skrll #define A(a) (1 << CGEN_HW_##a)
    232       1.1     skrll 
    233       1.1     skrll const CGEN_HW_ENTRY m32r_cgen_hw_table[] =
    234       1.1     skrll {
    235       1.1     skrll   { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    236       1.1     skrll   { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    237       1.1     skrll   { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    238       1.1     skrll   { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    239       1.1     skrll   { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    240       1.1     skrll   { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } },
    241       1.1     skrll   { "h-hi16", HW_H_HI16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    242       1.1     skrll   { "h-slo16", HW_H_SLO16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    243       1.1     skrll   { "h-ulo16", HW_H_ULO16, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    244   1.1.1.8  christos   { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, & m32r_cgen_opval_gr_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
    245   1.1.1.8  christos   { "h-cr", HW_H_CR, CGEN_ASM_KEYWORD, & m32r_cgen_opval_cr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    246       1.1     skrll   { "h-accum", HW_H_ACCUM, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    247   1.1.1.8  christos   { "h-accums", HW_H_ACCUMS, CGEN_ASM_KEYWORD, & m32r_cgen_opval_h_accums, { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } } },
    248       1.1     skrll   { "h-cond", HW_H_COND, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    249       1.1     skrll   { "h-psw", HW_H_PSW, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    250       1.1     skrll   { "h-bpsw", HW_H_BPSW, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    251       1.1     skrll   { "h-bbpsw", HW_H_BBPSW, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    252       1.1     skrll   { "h-lock", HW_H_LOCK, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    253       1.1     skrll   { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
    254       1.1     skrll };
    255       1.1     skrll 
    256       1.1     skrll #undef A
    257       1.1     skrll 
    258       1.1     skrll 
    259       1.1     skrll /* The instruction field table.  */
    260       1.1     skrll 
    261       1.1     skrll #define A(a) (1 << CGEN_IFLD_##a)
    262       1.1     skrll 
    263       1.1     skrll const CGEN_IFLD m32r_cgen_ifld_table[] =
    264       1.1     skrll {
    265       1.1     skrll   { M32R_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    266       1.1     skrll   { M32R_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    267       1.1     skrll   { M32R_F_OP1, "f-op1", 0, 32, 0, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    268       1.1     skrll   { M32R_F_OP2, "f-op2", 0, 32, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    269       1.1     skrll   { M32R_F_COND, "f-cond", 0, 32, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    270       1.1     skrll   { M32R_F_R1, "f-r1", 0, 32, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    271       1.1     skrll   { M32R_F_R2, "f-r2", 0, 32, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    272       1.1     skrll   { M32R_F_SIMM8, "f-simm8", 0, 32, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    273       1.1     skrll   { M32R_F_SIMM16, "f-simm16", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    274       1.1     skrll   { M32R_F_SHIFT_OP2, "f-shift-op2", 0, 32, 8, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    275       1.1     skrll   { M32R_F_UIMM3, "f-uimm3", 0, 32, 5, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    276       1.1     skrll   { M32R_F_UIMM4, "f-uimm4", 0, 32, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    277       1.1     skrll   { M32R_F_UIMM5, "f-uimm5", 0, 32, 11, 5, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    278       1.1     skrll   { M32R_F_UIMM8, "f-uimm8", 0, 32, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    279       1.1     skrll   { M32R_F_UIMM16, "f-uimm16", 0, 32, 16, 16, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    280       1.1     skrll   { M32R_F_UIMM24, "f-uimm24", 0, 32, 8, 24, { 0|A(RELOC)|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    281       1.1     skrll   { M32R_F_HI16, "f-hi16", 0, 32, 16, 16, { 0|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } }  },
    282       1.1     skrll   { M32R_F_DISP8, "f-disp8", 0, 32, 8, 8, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    283       1.1     skrll   { M32R_F_DISP16, "f-disp16", 0, 32, 16, 16, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    284       1.1     skrll   { M32R_F_DISP24, "f-disp24", 0, 32, 8, 24, { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    285       1.1     skrll   { M32R_F_OP23, "f-op23", 0, 32, 9, 3, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    286       1.1     skrll   { M32R_F_OP3, "f-op3", 0, 32, 14, 2, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    287       1.1     skrll   { M32R_F_ACC, "f-acc", 0, 32, 8, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    288       1.1     skrll   { M32R_F_ACCS, "f-accs", 0, 32, 12, 2, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    289       1.1     skrll   { M32R_F_ACCD, "f-accd", 0, 32, 4, 2, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    290       1.1     skrll   { M32R_F_BITS67, "f-bits67", 0, 32, 6, 2, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    291       1.1     skrll   { M32R_F_BIT4, "f-bit4", 0, 32, 4, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    292       1.1     skrll   { M32R_F_BIT14, "f-bit14", 0, 32, 14, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    293       1.1     skrll   { M32R_F_IMM1, "f-imm1", 0, 32, 15, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    294       1.1     skrll   { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
    295       1.1     skrll };
    296       1.1     skrll 
    297       1.1     skrll #undef A
    298       1.1     skrll 
    299       1.1     skrll 
    300       1.1     skrll 
    301       1.1     skrll /* multi ifield declarations */
    302       1.1     skrll 
    303       1.1     skrll 
    304       1.1     skrll 
    305       1.1     skrll /* multi ifield definitions */
    306       1.1     skrll 
    307       1.1     skrll 
    308       1.1     skrll /* The operand table.  */
    309       1.1     skrll 
    310       1.1     skrll #define A(a) (1 << CGEN_OPERAND_##a)
    311       1.1     skrll #define OPERAND(op) M32R_OPERAND_##op
    312       1.1     skrll 
    313       1.1     skrll const CGEN_OPERAND m32r_cgen_operand_table[] =
    314       1.1     skrll {
    315       1.1     skrll /* pc: program counter */
    316       1.1     skrll   { "pc", M32R_OPERAND_PC, HW_H_PC, 0, 0,
    317   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_NIL] } },
    318       1.1     skrll     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    319       1.1     skrll /* sr: source register */
    320       1.1     skrll   { "sr", M32R_OPERAND_SR, HW_H_GR, 12, 4,
    321   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_R2] } },
    322       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    323       1.1     skrll /* dr: destination register */
    324       1.1     skrll   { "dr", M32R_OPERAND_DR, HW_H_GR, 4, 4,
    325   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_R1] } },
    326       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    327       1.1     skrll /* src1: source register 1 */
    328       1.1     skrll   { "src1", M32R_OPERAND_SRC1, HW_H_GR, 4, 4,
    329   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_R1] } },
    330       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    331       1.1     skrll /* src2: source register 2 */
    332       1.1     skrll   { "src2", M32R_OPERAND_SRC2, HW_H_GR, 12, 4,
    333   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_R2] } },
    334       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    335       1.1     skrll /* scr: source control register */
    336       1.1     skrll   { "scr", M32R_OPERAND_SCR, HW_H_CR, 12, 4,
    337   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_R2] } },
    338       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    339       1.1     skrll /* dcr: destination control register */
    340       1.1     skrll   { "dcr", M32R_OPERAND_DCR, HW_H_CR, 4, 4,
    341   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_R1] } },
    342       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    343       1.1     skrll /* simm8: 8 bit signed immediate */
    344       1.1     skrll   { "simm8", M32R_OPERAND_SIMM8, HW_H_SINT, 8, 8,
    345   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_SIMM8] } },
    346   1.1.1.2  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    347       1.1     skrll /* simm16: 16 bit signed immediate */
    348       1.1     skrll   { "simm16", M32R_OPERAND_SIMM16, HW_H_SINT, 16, 16,
    349   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_SIMM16] } },
    350   1.1.1.2  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    351       1.1     skrll /* uimm3: 3 bit unsigned number */
    352       1.1     skrll   { "uimm3", M32R_OPERAND_UIMM3, HW_H_UINT, 5, 3,
    353   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM3] } },
    354   1.1.1.2  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    355       1.1     skrll /* uimm4: 4 bit trap number */
    356       1.1     skrll   { "uimm4", M32R_OPERAND_UIMM4, HW_H_UINT, 12, 4,
    357   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM4] } },
    358   1.1.1.2  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    359       1.1     skrll /* uimm5: 5 bit shift count */
    360       1.1     skrll   { "uimm5", M32R_OPERAND_UIMM5, HW_H_UINT, 11, 5,
    361   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM5] } },
    362   1.1.1.2  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    363       1.1     skrll /* uimm8: 8 bit unsigned immediate */
    364       1.1     skrll   { "uimm8", M32R_OPERAND_UIMM8, HW_H_UINT, 8, 8,
    365   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM8] } },
    366   1.1.1.2  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    367       1.1     skrll /* uimm16: 16 bit unsigned immediate */
    368       1.1     skrll   { "uimm16", M32R_OPERAND_UIMM16, HW_H_UINT, 16, 16,
    369   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM16] } },
    370   1.1.1.2  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    371       1.1     skrll /* imm1: 1 bit immediate */
    372       1.1     skrll   { "imm1", M32R_OPERAND_IMM1, HW_H_UINT, 15, 1,
    373   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_IMM1] } },
    374   1.1.1.2  christos     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } }  },
    375       1.1     skrll /* accd: accumulator destination register */
    376       1.1     skrll   { "accd", M32R_OPERAND_ACCD, HW_H_ACCUMS, 4, 2,
    377   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_ACCD] } },
    378       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } }  },
    379       1.1     skrll /* accs: accumulator source register */
    380       1.1     skrll   { "accs", M32R_OPERAND_ACCS, HW_H_ACCUMS, 12, 2,
    381   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_ACCS] } },
    382       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } }  },
    383       1.1     skrll /* acc: accumulator reg (d) */
    384       1.1     skrll   { "acc", M32R_OPERAND_ACC, HW_H_ACCUMS, 8, 1,
    385   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_ACC] } },
    386       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } } } }  },
    387       1.1     skrll /* hash: # prefix */
    388       1.1     skrll   { "hash", M32R_OPERAND_HASH, HW_H_SINT, 0, 0,
    389   1.1.1.8  christos     { 0, { 0 } },
    390       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    391       1.1     skrll /* hi16: high 16 bit immediate, sign optional */
    392       1.1     skrll   { "hi16", M32R_OPERAND_HI16, HW_H_HI16, 16, 16,
    393   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_HI16] } },
    394       1.1     skrll     { 0|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } }  },
    395       1.1     skrll /* slo16: 16 bit signed immediate, for low() */
    396       1.1     skrll   { "slo16", M32R_OPERAND_SLO16, HW_H_SLO16, 16, 16,
    397   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_SIMM16] } },
    398       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    399       1.1     skrll /* ulo16: 16 bit unsigned immediate, for low() */
    400       1.1     skrll   { "ulo16", M32R_OPERAND_ULO16, HW_H_ULO16, 16, 16,
    401   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM16] } },
    402       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    403       1.1     skrll /* uimm24: 24 bit address */
    404       1.1     skrll   { "uimm24", M32R_OPERAND_UIMM24, HW_H_ADDR, 8, 24,
    405   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_UIMM24] } },
    406   1.1.1.2  christos     { 0|A(RELOC)|A(ABS_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    407       1.1     skrll /* disp8: 8 bit displacement */
    408       1.1     skrll   { "disp8", M32R_OPERAND_DISP8, HW_H_IADDR, 8, 8,
    409   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_DISP8] } },
    410       1.1     skrll     { 0|A(RELAX)|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    411       1.1     skrll /* disp16: 16 bit displacement */
    412       1.1     skrll   { "disp16", M32R_OPERAND_DISP16, HW_H_IADDR, 16, 16,
    413   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_DISP16] } },
    414       1.1     skrll     { 0|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    415       1.1     skrll /* disp24: 24 bit displacement */
    416       1.1     skrll   { "disp24", M32R_OPERAND_DISP24, HW_H_IADDR, 8, 24,
    417   1.1.1.8  christos     { 0, { &m32r_cgen_ifld_table[M32R_F_DISP24] } },
    418       1.1     skrll     { 0|A(RELAX)|A(RELOC)|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    419       1.1     skrll /* condbit: condition bit */
    420       1.1     skrll   { "condbit", M32R_OPERAND_CONDBIT, HW_H_COND, 0, 0,
    421   1.1.1.8  christos     { 0, { 0 } },
    422       1.1     skrll     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    423       1.1     skrll /* accum: accumulator */
    424       1.1     skrll   { "accum", M32R_OPERAND_ACCUM, HW_H_ACCUM, 0, 0,
    425   1.1.1.8  christos     { 0, { 0 } },
    426       1.1     skrll     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    427       1.1     skrll /* sentinel */
    428       1.1     skrll   { 0, 0, 0, 0, 0,
    429   1.1.1.8  christos     { 0, { 0 } },
    430       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } } } } }
    431       1.1     skrll };
    432       1.1     skrll 
    433       1.1     skrll #undef A
    434       1.1     skrll 
    435       1.1     skrll 
    436       1.1     skrll /* The instruction table.  */
    437       1.1     skrll 
    438       1.1     skrll #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
    439       1.1     skrll #define A(a) (1 << CGEN_INSN_##a)
    440       1.1     skrll 
    441       1.1     skrll static const CGEN_IBASE m32r_cgen_insn_table[MAX_INSNS] =
    442       1.1     skrll {
    443       1.1     skrll   /* Special null first entry.
    444       1.1     skrll      A `num' value of zero is thus invalid.
    445       1.1     skrll      Also, the special `invalid' insn resides here.  */
    446       1.1     skrll   { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } } },
    447       1.1     skrll /* add $dr,$sr */
    448       1.1     skrll   {
    449       1.1     skrll     M32R_INSN_ADD, "add", "add", 16,
    450       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    451       1.1     skrll   },
    452       1.1     skrll /* add3 $dr,$sr,$hash$slo16 */
    453       1.1     skrll   {
    454       1.1     skrll     M32R_INSN_ADD3, "add3", "add3", 32,
    455       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    456       1.1     skrll   },
    457       1.1     skrll /* and $dr,$sr */
    458       1.1     skrll   {
    459       1.1     skrll     M32R_INSN_AND, "and", "and", 16,
    460       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    461       1.1     skrll   },
    462       1.1     skrll /* and3 $dr,$sr,$uimm16 */
    463       1.1     skrll   {
    464       1.1     skrll     M32R_INSN_AND3, "and3", "and3", 32,
    465       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    466       1.1     skrll   },
    467       1.1     skrll /* or $dr,$sr */
    468       1.1     skrll   {
    469       1.1     skrll     M32R_INSN_OR, "or", "or", 16,
    470       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    471       1.1     skrll   },
    472       1.1     skrll /* or3 $dr,$sr,$hash$ulo16 */
    473       1.1     skrll   {
    474       1.1     skrll     M32R_INSN_OR3, "or3", "or3", 32,
    475       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    476       1.1     skrll   },
    477       1.1     skrll /* xor $dr,$sr */
    478       1.1     skrll   {
    479       1.1     skrll     M32R_INSN_XOR, "xor", "xor", 16,
    480       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    481       1.1     skrll   },
    482       1.1     skrll /* xor3 $dr,$sr,$uimm16 */
    483       1.1     skrll   {
    484       1.1     skrll     M32R_INSN_XOR3, "xor3", "xor3", 32,
    485       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    486       1.1     skrll   },
    487       1.1     skrll /* addi $dr,$simm8 */
    488       1.1     skrll   {
    489       1.1     skrll     M32R_INSN_ADDI, "addi", "addi", 16,
    490       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    491       1.1     skrll   },
    492       1.1     skrll /* addv $dr,$sr */
    493       1.1     skrll   {
    494       1.1     skrll     M32R_INSN_ADDV, "addv", "addv", 16,
    495       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    496       1.1     skrll   },
    497       1.1     skrll /* addv3 $dr,$sr,$simm16 */
    498       1.1     skrll   {
    499       1.1     skrll     M32R_INSN_ADDV3, "addv3", "addv3", 32,
    500       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    501       1.1     skrll   },
    502       1.1     skrll /* addx $dr,$sr */
    503       1.1     skrll   {
    504       1.1     skrll     M32R_INSN_ADDX, "addx", "addx", 16,
    505       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    506       1.1     skrll   },
    507       1.1     skrll /* bc.s $disp8 */
    508       1.1     skrll   {
    509       1.1     skrll     M32R_INSN_BC8, "bc8", "bc.s", 16,
    510       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    511       1.1     skrll   },
    512       1.1     skrll /* bc.l $disp24 */
    513       1.1     skrll   {
    514       1.1     skrll     M32R_INSN_BC24, "bc24", "bc.l", 32,
    515       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    516       1.1     skrll   },
    517       1.1     skrll /* beq $src1,$src2,$disp16 */
    518       1.1     skrll   {
    519       1.1     skrll     M32R_INSN_BEQ, "beq", "beq", 32,
    520       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    521       1.1     skrll   },
    522       1.1     skrll /* beqz $src2,$disp16 */
    523       1.1     skrll   {
    524       1.1     skrll     M32R_INSN_BEQZ, "beqz", "beqz", 32,
    525       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    526       1.1     skrll   },
    527       1.1     skrll /* bgez $src2,$disp16 */
    528       1.1     skrll   {
    529       1.1     skrll     M32R_INSN_BGEZ, "bgez", "bgez", 32,
    530       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    531       1.1     skrll   },
    532       1.1     skrll /* bgtz $src2,$disp16 */
    533       1.1     skrll   {
    534       1.1     skrll     M32R_INSN_BGTZ, "bgtz", "bgtz", 32,
    535       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    536       1.1     skrll   },
    537       1.1     skrll /* blez $src2,$disp16 */
    538       1.1     skrll   {
    539       1.1     skrll     M32R_INSN_BLEZ, "blez", "blez", 32,
    540       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    541       1.1     skrll   },
    542       1.1     skrll /* bltz $src2,$disp16 */
    543       1.1     skrll   {
    544       1.1     skrll     M32R_INSN_BLTZ, "bltz", "bltz", 32,
    545       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    546       1.1     skrll   },
    547       1.1     skrll /* bnez $src2,$disp16 */
    548       1.1     skrll   {
    549       1.1     skrll     M32R_INSN_BNEZ, "bnez", "bnez", 32,
    550       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    551       1.1     skrll   },
    552       1.1     skrll /* bl.s $disp8 */
    553       1.1     skrll   {
    554       1.1     skrll     M32R_INSN_BL8, "bl8", "bl.s", 16,
    555       1.1     skrll     { 0|A(FILL_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    556       1.1     skrll   },
    557       1.1     skrll /* bl.l $disp24 */
    558       1.1     skrll   {
    559       1.1     skrll     M32R_INSN_BL24, "bl24", "bl.l", 32,
    560       1.1     skrll     { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    561       1.1     skrll   },
    562       1.1     skrll /* bcl.s $disp8 */
    563       1.1     skrll   {
    564       1.1     skrll     M32R_INSN_BCL8, "bcl8", "bcl.s", 16,
    565       1.1     skrll     { 0|A(FILL_SLOT)|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
    566       1.1     skrll   },
    567       1.1     skrll /* bcl.l $disp24 */
    568       1.1     skrll   {
    569       1.1     skrll     M32R_INSN_BCL24, "bcl24", "bcl.l", 32,
    570       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    571       1.1     skrll   },
    572       1.1     skrll /* bnc.s $disp8 */
    573       1.1     skrll   {
    574       1.1     skrll     M32R_INSN_BNC8, "bnc8", "bnc.s", 16,
    575       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    576       1.1     skrll   },
    577       1.1     skrll /* bnc.l $disp24 */
    578       1.1     skrll   {
    579       1.1     skrll     M32R_INSN_BNC24, "bnc24", "bnc.l", 32,
    580       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    581       1.1     skrll   },
    582       1.1     skrll /* bne $src1,$src2,$disp16 */
    583       1.1     skrll   {
    584       1.1     skrll     M32R_INSN_BNE, "bne", "bne", 32,
    585       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    586       1.1     skrll   },
    587       1.1     skrll /* bra.s $disp8 */
    588       1.1     skrll   {
    589       1.1     skrll     M32R_INSN_BRA8, "bra8", "bra.s", 16,
    590       1.1     skrll     { 0|A(FILL_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    591       1.1     skrll   },
    592       1.1     skrll /* bra.l $disp24 */
    593       1.1     skrll   {
    594       1.1     skrll     M32R_INSN_BRA24, "bra24", "bra.l", 32,
    595       1.1     skrll     { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    596       1.1     skrll   },
    597       1.1     skrll /* bncl.s $disp8 */
    598       1.1     skrll   {
    599       1.1     skrll     M32R_INSN_BNCL8, "bncl8", "bncl.s", 16,
    600       1.1     skrll     { 0|A(FILL_SLOT)|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
    601       1.1     skrll   },
    602       1.1     skrll /* bncl.l $disp24 */
    603       1.1     skrll   {
    604       1.1     skrll     M32R_INSN_BNCL24, "bncl24", "bncl.l", 32,
    605       1.1     skrll     { 0|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    606       1.1     skrll   },
    607       1.1     skrll /* cmp $src1,$src2 */
    608       1.1     skrll   {
    609       1.1     skrll     M32R_INSN_CMP, "cmp", "cmp", 16,
    610       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    611       1.1     skrll   },
    612       1.1     skrll /* cmpi $src2,$simm16 */
    613       1.1     skrll   {
    614       1.1     skrll     M32R_INSN_CMPI, "cmpi", "cmpi", 32,
    615       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    616       1.1     skrll   },
    617       1.1     skrll /* cmpu $src1,$src2 */
    618       1.1     skrll   {
    619       1.1     skrll     M32R_INSN_CMPU, "cmpu", "cmpu", 16,
    620       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    621       1.1     skrll   },
    622       1.1     skrll /* cmpui $src2,$simm16 */
    623       1.1     skrll   {
    624       1.1     skrll     M32R_INSN_CMPUI, "cmpui", "cmpui", 32,
    625       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    626       1.1     skrll   },
    627       1.1     skrll /* cmpeq $src1,$src2 */
    628       1.1     skrll   {
    629       1.1     skrll     M32R_INSN_CMPEQ, "cmpeq", "cmpeq", 16,
    630       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_OS, 0 } } } }
    631       1.1     skrll   },
    632       1.1     skrll /* cmpz $src2 */
    633       1.1     skrll   {
    634       1.1     skrll     M32R_INSN_CMPZ, "cmpz", "cmpz", 16,
    635       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_OS, 0 } } } }
    636       1.1     skrll   },
    637       1.1     skrll /* div $dr,$sr */
    638       1.1     skrll   {
    639       1.1     skrll     M32R_INSN_DIV, "div", "div", 32,
    640       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    641       1.1     skrll   },
    642       1.1     skrll /* divu $dr,$sr */
    643       1.1     skrll   {
    644       1.1     skrll     M32R_INSN_DIVU, "divu", "divu", 32,
    645       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    646       1.1     skrll   },
    647       1.1     skrll /* rem $dr,$sr */
    648       1.1     skrll   {
    649       1.1     skrll     M32R_INSN_REM, "rem", "rem", 32,
    650       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    651       1.1     skrll   },
    652       1.1     skrll /* remu $dr,$sr */
    653       1.1     skrll   {
    654       1.1     skrll     M32R_INSN_REMU, "remu", "remu", 32,
    655       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    656       1.1     skrll   },
    657       1.1     skrll /* remh $dr,$sr */
    658       1.1     skrll   {
    659       1.1     skrll     M32R_INSN_REMH, "remh", "remh", 32,
    660       1.1     skrll     { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    661       1.1     skrll   },
    662       1.1     skrll /* remuh $dr,$sr */
    663       1.1     skrll   {
    664       1.1     skrll     M32R_INSN_REMUH, "remuh", "remuh", 32,
    665       1.1     skrll     { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    666       1.1     skrll   },
    667       1.1     skrll /* remb $dr,$sr */
    668       1.1     skrll   {
    669       1.1     skrll     M32R_INSN_REMB, "remb", "remb", 32,
    670       1.1     skrll     { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    671       1.1     skrll   },
    672       1.1     skrll /* remub $dr,$sr */
    673       1.1     skrll   {
    674       1.1     skrll     M32R_INSN_REMUB, "remub", "remub", 32,
    675       1.1     skrll     { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    676       1.1     skrll   },
    677       1.1     skrll /* divuh $dr,$sr */
    678       1.1     skrll   {
    679       1.1     skrll     M32R_INSN_DIVUH, "divuh", "divuh", 32,
    680       1.1     skrll     { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    681       1.1     skrll   },
    682       1.1     skrll /* divb $dr,$sr */
    683       1.1     skrll   {
    684       1.1     skrll     M32R_INSN_DIVB, "divb", "divb", 32,
    685       1.1     skrll     { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    686       1.1     skrll   },
    687       1.1     skrll /* divub $dr,$sr */
    688       1.1     skrll   {
    689       1.1     skrll     M32R_INSN_DIVUB, "divub", "divub", 32,
    690       1.1     skrll     { 0, { { { (1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    691       1.1     skrll   },
    692       1.1     skrll /* divh $dr,$sr */
    693       1.1     skrll   {
    694       1.1     skrll     M32R_INSN_DIVH, "divh", "divh", 32,
    695       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
    696       1.1     skrll   },
    697       1.1     skrll /* jc $sr */
    698       1.1     skrll   {
    699       1.1     skrll     M32R_INSN_JC, "jc", "jc", 16,
    700       1.1     skrll     { 0|A(SPECIAL)|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
    701       1.1     skrll   },
    702       1.1     skrll /* jnc $sr */
    703       1.1     skrll   {
    704       1.1     skrll     M32R_INSN_JNC, "jnc", "jnc", 16,
    705       1.1     skrll     { 0|A(SPECIAL)|A(COND_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
    706       1.1     skrll   },
    707       1.1     skrll /* jl $sr */
    708       1.1     skrll   {
    709       1.1     skrll     M32R_INSN_JL, "jl", "jl", 16,
    710       1.1     skrll     { 0|A(FILL_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    711       1.1     skrll   },
    712       1.1     skrll /* jmp $sr */
    713       1.1     skrll   {
    714       1.1     skrll     M32R_INSN_JMP, "jmp", "jmp", 16,
    715       1.1     skrll     { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    716       1.1     skrll   },
    717       1.1     skrll /* ld $dr,@$sr */
    718       1.1     skrll   {
    719       1.1     skrll     M32R_INSN_LD, "ld", "ld", 16,
    720       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    721       1.1     skrll   },
    722       1.1     skrll /* ld $dr,@($slo16,$sr) */
    723       1.1     skrll   {
    724       1.1     skrll     M32R_INSN_LD_D, "ld-d", "ld", 32,
    725       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    726       1.1     skrll   },
    727       1.1     skrll /* ldb $dr,@$sr */
    728       1.1     skrll   {
    729       1.1     skrll     M32R_INSN_LDB, "ldb", "ldb", 16,
    730       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    731       1.1     skrll   },
    732       1.1     skrll /* ldb $dr,@($slo16,$sr) */
    733       1.1     skrll   {
    734       1.1     skrll     M32R_INSN_LDB_D, "ldb-d", "ldb", 32,
    735       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    736       1.1     skrll   },
    737       1.1     skrll /* ldh $dr,@$sr */
    738       1.1     skrll   {
    739       1.1     skrll     M32R_INSN_LDH, "ldh", "ldh", 16,
    740       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    741       1.1     skrll   },
    742       1.1     skrll /* ldh $dr,@($slo16,$sr) */
    743       1.1     skrll   {
    744       1.1     skrll     M32R_INSN_LDH_D, "ldh-d", "ldh", 32,
    745       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    746       1.1     skrll   },
    747       1.1     skrll /* ldub $dr,@$sr */
    748       1.1     skrll   {
    749       1.1     skrll     M32R_INSN_LDUB, "ldub", "ldub", 16,
    750       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    751       1.1     skrll   },
    752       1.1     skrll /* ldub $dr,@($slo16,$sr) */
    753       1.1     skrll   {
    754       1.1     skrll     M32R_INSN_LDUB_D, "ldub-d", "ldub", 32,
    755       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    756       1.1     skrll   },
    757       1.1     skrll /* lduh $dr,@$sr */
    758       1.1     skrll   {
    759       1.1     skrll     M32R_INSN_LDUH, "lduh", "lduh", 16,
    760       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    761       1.1     skrll   },
    762       1.1     skrll /* lduh $dr,@($slo16,$sr) */
    763       1.1     skrll   {
    764       1.1     skrll     M32R_INSN_LDUH_D, "lduh-d", "lduh", 32,
    765       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    766       1.1     skrll   },
    767       1.1     skrll /* ld $dr,@$sr+ */
    768       1.1     skrll   {
    769       1.1     skrll     M32R_INSN_LD_PLUS, "ld-plus", "ld", 16,
    770       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    771       1.1     skrll   },
    772       1.1     skrll /* ld24 $dr,$uimm24 */
    773       1.1     skrll   {
    774       1.1     skrll     M32R_INSN_LD24, "ld24", "ld24", 32,
    775       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    776       1.1     skrll   },
    777       1.1     skrll /* ldi8 $dr,$simm8 */
    778       1.1     skrll   {
    779       1.1     skrll     M32R_INSN_LDI8, "ldi8", "ldi8", 16,
    780       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    781       1.1     skrll   },
    782       1.1     skrll /* ldi16 $dr,$hash$slo16 */
    783       1.1     skrll   {
    784       1.1     skrll     M32R_INSN_LDI16, "ldi16", "ldi16", 32,
    785       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    786       1.1     skrll   },
    787       1.1     skrll /* lock $dr,@$sr */
    788       1.1     skrll   {
    789       1.1     skrll     M32R_INSN_LOCK, "lock", "lock", 16,
    790       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    791       1.1     skrll   },
    792       1.1     skrll /* machi $src1,$src2 */
    793       1.1     skrll   {
    794       1.1     skrll     M32R_INSN_MACHI, "machi", "machi", 16,
    795       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    796       1.1     skrll   },
    797       1.1     skrll /* machi $src1,$src2,$acc */
    798       1.1     skrll   {
    799       1.1     skrll     M32R_INSN_MACHI_A, "machi-a", "machi", 16,
    800       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    801       1.1     skrll   },
    802       1.1     skrll /* maclo $src1,$src2 */
    803       1.1     skrll   {
    804       1.1     skrll     M32R_INSN_MACLO, "maclo", "maclo", 16,
    805       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    806       1.1     skrll   },
    807       1.1     skrll /* maclo $src1,$src2,$acc */
    808       1.1     skrll   {
    809       1.1     skrll     M32R_INSN_MACLO_A, "maclo-a", "maclo", 16,
    810       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    811       1.1     skrll   },
    812       1.1     skrll /* macwhi $src1,$src2 */
    813       1.1     skrll   {
    814       1.1     skrll     M32R_INSN_MACWHI, "macwhi", "macwhi", 16,
    815       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    816       1.1     skrll   },
    817       1.1     skrll /* macwhi $src1,$src2,$acc */
    818       1.1     skrll   {
    819       1.1     skrll     M32R_INSN_MACWHI_A, "macwhi-a", "macwhi", 16,
    820       1.1     skrll     { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    821       1.1     skrll   },
    822       1.1     skrll /* macwlo $src1,$src2 */
    823       1.1     skrll   {
    824       1.1     skrll     M32R_INSN_MACWLO, "macwlo", "macwlo", 16,
    825       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    826       1.1     skrll   },
    827       1.1     skrll /* macwlo $src1,$src2,$acc */
    828       1.1     skrll   {
    829       1.1     skrll     M32R_INSN_MACWLO_A, "macwlo-a", "macwlo", 16,
    830       1.1     skrll     { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    831       1.1     skrll   },
    832       1.1     skrll /* mul $dr,$sr */
    833       1.1     skrll   {
    834       1.1     skrll     M32R_INSN_MUL, "mul", "mul", 16,
    835       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_S, 0 } } } }
    836       1.1     skrll   },
    837       1.1     skrll /* mulhi $src1,$src2 */
    838       1.1     skrll   {
    839       1.1     skrll     M32R_INSN_MULHI, "mulhi", "mulhi", 16,
    840       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    841       1.1     skrll   },
    842       1.1     skrll /* mulhi $src1,$src2,$acc */
    843       1.1     skrll   {
    844       1.1     skrll     M32R_INSN_MULHI_A, "mulhi-a", "mulhi", 16,
    845       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    846       1.1     skrll   },
    847       1.1     skrll /* mullo $src1,$src2 */
    848       1.1     skrll   {
    849       1.1     skrll     M32R_INSN_MULLO, "mullo", "mullo", 16,
    850       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    851       1.1     skrll   },
    852       1.1     skrll /* mullo $src1,$src2,$acc */
    853       1.1     skrll   {
    854       1.1     skrll     M32R_INSN_MULLO_A, "mullo-a", "mullo", 16,
    855       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    856       1.1     skrll   },
    857       1.1     skrll /* mulwhi $src1,$src2 */
    858       1.1     skrll   {
    859       1.1     skrll     M32R_INSN_MULWHI, "mulwhi", "mulwhi", 16,
    860       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    861       1.1     skrll   },
    862       1.1     skrll /* mulwhi $src1,$src2,$acc */
    863       1.1     skrll   {
    864       1.1     skrll     M32R_INSN_MULWHI_A, "mulwhi-a", "mulwhi", 16,
    865       1.1     skrll     { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    866       1.1     skrll   },
    867       1.1     skrll /* mulwlo $src1,$src2 */
    868       1.1     skrll   {
    869       1.1     skrll     M32R_INSN_MULWLO, "mulwlo", "mulwlo", 16,
    870       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    871       1.1     skrll   },
    872       1.1     skrll /* mulwlo $src1,$src2,$acc */
    873       1.1     skrll   {
    874       1.1     skrll     M32R_INSN_MULWLO_A, "mulwlo-a", "mulwlo", 16,
    875       1.1     skrll     { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    876       1.1     skrll   },
    877       1.1     skrll /* mv $dr,$sr */
    878       1.1     skrll   {
    879       1.1     skrll     M32R_INSN_MV, "mv", "mv", 16,
    880       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    881       1.1     skrll   },
    882       1.1     skrll /* mvfachi $dr */
    883       1.1     skrll   {
    884       1.1     skrll     M32R_INSN_MVFACHI, "mvfachi", "mvfachi", 16,
    885       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    886       1.1     skrll   },
    887       1.1     skrll /* mvfachi $dr,$accs */
    888       1.1     skrll   {
    889       1.1     skrll     M32R_INSN_MVFACHI_A, "mvfachi-a", "mvfachi", 16,
    890       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    891       1.1     skrll   },
    892       1.1     skrll /* mvfaclo $dr */
    893       1.1     skrll   {
    894       1.1     skrll     M32R_INSN_MVFACLO, "mvfaclo", "mvfaclo", 16,
    895       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    896       1.1     skrll   },
    897       1.1     skrll /* mvfaclo $dr,$accs */
    898       1.1     skrll   {
    899       1.1     skrll     M32R_INSN_MVFACLO_A, "mvfaclo-a", "mvfaclo", 16,
    900       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    901       1.1     skrll   },
    902       1.1     skrll /* mvfacmi $dr */
    903       1.1     skrll   {
    904       1.1     skrll     M32R_INSN_MVFACMI, "mvfacmi", "mvfacmi", 16,
    905       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    906       1.1     skrll   },
    907       1.1     skrll /* mvfacmi $dr,$accs */
    908       1.1     skrll   {
    909       1.1     skrll     M32R_INSN_MVFACMI_A, "mvfacmi-a", "mvfacmi", 16,
    910       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    911       1.1     skrll   },
    912       1.1     skrll /* mvfc $dr,$scr */
    913       1.1     skrll   {
    914       1.1     skrll     M32R_INSN_MVFC, "mvfc", "mvfc", 16,
    915       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    916       1.1     skrll   },
    917       1.1     skrll /* mvtachi $src1 */
    918       1.1     skrll   {
    919       1.1     skrll     M32R_INSN_MVTACHI, "mvtachi", "mvtachi", 16,
    920       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    921       1.1     skrll   },
    922       1.1     skrll /* mvtachi $src1,$accs */
    923       1.1     skrll   {
    924       1.1     skrll     M32R_INSN_MVTACHI_A, "mvtachi-a", "mvtachi", 16,
    925       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    926       1.1     skrll   },
    927       1.1     skrll /* mvtaclo $src1 */
    928       1.1     skrll   {
    929       1.1     skrll     M32R_INSN_MVTACLO, "mvtaclo", "mvtaclo", 16,
    930       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    931       1.1     skrll   },
    932       1.1     skrll /* mvtaclo $src1,$accs */
    933       1.1     skrll   {
    934       1.1     skrll     M32R_INSN_MVTACLO_A, "mvtaclo-a", "mvtaclo", 16,
    935       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    936       1.1     skrll   },
    937       1.1     skrll /* mvtc $sr,$dcr */
    938       1.1     skrll   {
    939       1.1     skrll     M32R_INSN_MVTC, "mvtc", "mvtc", 16,
    940       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    941       1.1     skrll   },
    942       1.1     skrll /* neg $dr,$sr */
    943       1.1     skrll   {
    944       1.1     skrll     M32R_INSN_NEG, "neg", "neg", 16,
    945       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    946       1.1     skrll   },
    947       1.1     skrll /* nop */
    948       1.1     skrll   {
    949       1.1     skrll     M32R_INSN_NOP, "nop", "nop", 16,
    950       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    951       1.1     skrll   },
    952       1.1     skrll /* not $dr,$sr */
    953       1.1     skrll   {
    954       1.1     skrll     M32R_INSN_NOT, "not", "not", 16,
    955       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
    956       1.1     skrll   },
    957       1.1     skrll /* rac */
    958       1.1     skrll   {
    959       1.1     skrll     M32R_INSN_RAC, "rac", "rac", 16,
    960       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    961       1.1     skrll   },
    962       1.1     skrll /* rac $accd,$accs,$imm1 */
    963       1.1     skrll   {
    964       1.1     skrll     M32R_INSN_RAC_DSI, "rac-dsi", "rac", 16,
    965       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    966       1.1     skrll   },
    967       1.1     skrll /* rach */
    968       1.1     skrll   {
    969       1.1     skrll     M32R_INSN_RACH, "rach", "rach", 16,
    970       1.1     skrll     { 0, { { { (1<<MACH_M32R), 0 } }, { { PIPE_S, 0 } } } }
    971       1.1     skrll   },
    972       1.1     skrll /* rach $accd,$accs,$imm1 */
    973       1.1     skrll   {
    974       1.1     skrll     M32R_INSN_RACH_DSI, "rach-dsi", "rach", 16,
    975       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
    976       1.1     skrll   },
    977       1.1     skrll /* rte */
    978       1.1     skrll   {
    979       1.1     skrll     M32R_INSN_RTE, "rte", "rte", 16,
    980       1.1     skrll     { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
    981       1.1     skrll   },
    982       1.1     skrll /* seth $dr,$hash$hi16 */
    983       1.1     skrll   {
    984       1.1     skrll     M32R_INSN_SETH, "seth", "seth", 32,
    985       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    986       1.1     skrll   },
    987       1.1     skrll /* sll $dr,$sr */
    988       1.1     skrll   {
    989       1.1     skrll     M32R_INSN_SLL, "sll", "sll", 16,
    990       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
    991       1.1     skrll   },
    992       1.1     skrll /* sll3 $dr,$sr,$simm16 */
    993       1.1     skrll   {
    994       1.1     skrll     M32R_INSN_SLL3, "sll3", "sll3", 32,
    995       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
    996       1.1     skrll   },
    997       1.1     skrll /* slli $dr,$uimm5 */
    998       1.1     skrll   {
    999       1.1     skrll     M32R_INSN_SLLI, "slli", "slli", 16,
   1000       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
   1001       1.1     skrll   },
   1002       1.1     skrll /* sra $dr,$sr */
   1003       1.1     skrll   {
   1004       1.1     skrll     M32R_INSN_SRA, "sra", "sra", 16,
   1005       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
   1006       1.1     skrll   },
   1007       1.1     skrll /* sra3 $dr,$sr,$simm16 */
   1008       1.1     skrll   {
   1009       1.1     skrll     M32R_INSN_SRA3, "sra3", "sra3", 32,
   1010       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
   1011       1.1     skrll   },
   1012       1.1     skrll /* srai $dr,$uimm5 */
   1013       1.1     skrll   {
   1014       1.1     skrll     M32R_INSN_SRAI, "srai", "srai", 16,
   1015       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
   1016       1.1     skrll   },
   1017       1.1     skrll /* srl $dr,$sr */
   1018       1.1     skrll   {
   1019       1.1     skrll     M32R_INSN_SRL, "srl", "srl", 16,
   1020       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
   1021       1.1     skrll   },
   1022       1.1     skrll /* srl3 $dr,$sr,$simm16 */
   1023       1.1     skrll   {
   1024       1.1     skrll     M32R_INSN_SRL3, "srl3", "srl3", 32,
   1025       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
   1026       1.1     skrll   },
   1027       1.1     skrll /* srli $dr,$uimm5 */
   1028       1.1     skrll   {
   1029       1.1     skrll     M32R_INSN_SRLI, "srli", "srli", 16,
   1030       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O_OS, 0 } } } }
   1031       1.1     skrll   },
   1032       1.1     skrll /* st $src1,@$src2 */
   1033       1.1     skrll   {
   1034       1.1     skrll     M32R_INSN_ST, "st", "st", 16,
   1035       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1036       1.1     skrll   },
   1037       1.1     skrll /* st $src1,@($slo16,$src2) */
   1038       1.1     skrll   {
   1039       1.1     skrll     M32R_INSN_ST_D, "st-d", "st", 32,
   1040       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
   1041       1.1     skrll   },
   1042       1.1     skrll /* stb $src1,@$src2 */
   1043       1.1     skrll   {
   1044       1.1     skrll     M32R_INSN_STB, "stb", "stb", 16,
   1045       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1046       1.1     skrll   },
   1047       1.1     skrll /* stb $src1,@($slo16,$src2) */
   1048       1.1     skrll   {
   1049       1.1     skrll     M32R_INSN_STB_D, "stb-d", "stb", 32,
   1050       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
   1051       1.1     skrll   },
   1052       1.1     skrll /* sth $src1,@$src2 */
   1053       1.1     skrll   {
   1054       1.1     skrll     M32R_INSN_STH, "sth", "sth", 16,
   1055       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1056       1.1     skrll   },
   1057       1.1     skrll /* sth $src1,@($slo16,$src2) */
   1058       1.1     skrll   {
   1059       1.1     skrll     M32R_INSN_STH_D, "sth-d", "sth", 32,
   1060       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
   1061       1.1     skrll   },
   1062       1.1     skrll /* st $src1,@+$src2 */
   1063       1.1     skrll   {
   1064       1.1     skrll     M32R_INSN_ST_PLUS, "st-plus", "st", 16,
   1065       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1066       1.1     skrll   },
   1067       1.1     skrll /* sth $src1,@$src2+ */
   1068       1.1     skrll   {
   1069       1.1     skrll     M32R_INSN_STH_PLUS, "sth-plus", "sth", 16,
   1070       1.1     skrll     { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
   1071       1.1     skrll   },
   1072       1.1     skrll /* stb $src1,@$src2+ */
   1073       1.1     skrll   {
   1074       1.1     skrll     M32R_INSN_STB_PLUS, "stb-plus", "stb", 16,
   1075       1.1     skrll     { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
   1076       1.1     skrll   },
   1077       1.1     skrll /* st $src1,@-$src2 */
   1078       1.1     skrll   {
   1079       1.1     skrll     M32R_INSN_ST_MINUS, "st-minus", "st", 16,
   1080       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1081       1.1     skrll   },
   1082       1.1     skrll /* sub $dr,$sr */
   1083       1.1     skrll   {
   1084       1.1     skrll     M32R_INSN_SUB, "sub", "sub", 16,
   1085       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
   1086       1.1     skrll   },
   1087       1.1     skrll /* subv $dr,$sr */
   1088       1.1     skrll   {
   1089       1.1     skrll     M32R_INSN_SUBV, "subv", "subv", 16,
   1090       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
   1091       1.1     skrll   },
   1092       1.1     skrll /* subx $dr,$sr */
   1093       1.1     skrll   {
   1094       1.1     skrll     M32R_INSN_SUBX, "subx", "subx", 16,
   1095       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
   1096       1.1     skrll   },
   1097       1.1     skrll /* trap $uimm4 */
   1098       1.1     skrll   {
   1099       1.1     skrll     M32R_INSN_TRAP, "trap", "trap", 16,
   1100       1.1     skrll     { 0|A(FILL_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1101       1.1     skrll   },
   1102       1.1     skrll /* unlock $src1,@$src2 */
   1103       1.1     skrll   {
   1104       1.1     skrll     M32R_INSN_UNLOCK, "unlock", "unlock", 16,
   1105       1.1     skrll     { 0, { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1106       1.1     skrll   },
   1107       1.1     skrll /* satb $dr,$sr */
   1108       1.1     skrll   {
   1109       1.1     skrll     M32R_INSN_SATB, "satb", "satb", 32,
   1110       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
   1111       1.1     skrll   },
   1112       1.1     skrll /* sath $dr,$sr */
   1113       1.1     skrll   {
   1114       1.1     skrll     M32R_INSN_SATH, "sath", "sath", 32,
   1115       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
   1116       1.1     skrll   },
   1117       1.1     skrll /* sat $dr,$sr */
   1118       1.1     skrll   {
   1119       1.1     skrll     M32R_INSN_SAT, "sat", "sat", 32,
   1120       1.1     skrll     { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
   1121       1.1     skrll   },
   1122       1.1     skrll /* pcmpbz $src2 */
   1123       1.1     skrll   {
   1124       1.1     skrll     M32R_INSN_PCMPBZ, "pcmpbz", "pcmpbz", 16,
   1125       1.1     skrll     { 0|A(SPECIAL), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_OS, 0 } } } }
   1126       1.1     skrll   },
   1127       1.1     skrll /* sadd */
   1128       1.1     skrll   {
   1129       1.1     skrll     M32R_INSN_SADD, "sadd", "sadd", 16,
   1130       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
   1131       1.1     skrll   },
   1132       1.1     skrll /* macwu1 $src1,$src2 */
   1133       1.1     skrll   {
   1134       1.1     skrll     M32R_INSN_MACWU1, "macwu1", "macwu1", 16,
   1135       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
   1136       1.1     skrll   },
   1137       1.1     skrll /* msblo $src1,$src2 */
   1138       1.1     skrll   {
   1139       1.1     skrll     M32R_INSN_MSBLO, "msblo", "msblo", 16,
   1140       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
   1141       1.1     skrll   },
   1142       1.1     skrll /* mulwu1 $src1,$src2 */
   1143       1.1     skrll   {
   1144       1.1     skrll     M32R_INSN_MULWU1, "mulwu1", "mulwu1", 16,
   1145       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
   1146       1.1     skrll   },
   1147       1.1     skrll /* maclh1 $src1,$src2 */
   1148       1.1     skrll   {
   1149       1.1     skrll     M32R_INSN_MACLH1, "maclh1", "maclh1", 16,
   1150       1.1     skrll     { 0, { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
   1151       1.1     skrll   },
   1152       1.1     skrll /* sc */
   1153       1.1     skrll   {
   1154       1.1     skrll     M32R_INSN_SC, "sc", "sc", 16,
   1155       1.1     skrll     { 0|A(SPECIAL)|A(SKIP_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
   1156       1.1     skrll   },
   1157       1.1     skrll /* snc */
   1158       1.1     skrll   {
   1159       1.1     skrll     M32R_INSN_SNC, "snc", "snc", 16,
   1160       1.1     skrll     { 0|A(SPECIAL)|A(SKIP_CTI), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
   1161       1.1     skrll   },
   1162       1.1     skrll /* clrpsw $uimm8 */
   1163       1.1     skrll   {
   1164       1.1     skrll     M32R_INSN_CLRPSW, "clrpsw", "clrpsw", 16,
   1165       1.1     skrll     { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1166       1.1     skrll   },
   1167       1.1     skrll /* setpsw $uimm8 */
   1168       1.1     skrll   {
   1169       1.1     skrll     M32R_INSN_SETPSW, "setpsw", "setpsw", 16,
   1170       1.1     skrll     { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1171       1.1     skrll   },
   1172       1.1     skrll /* bset $uimm3,@($slo16,$sr) */
   1173       1.1     skrll   {
   1174       1.1     skrll     M32R_INSN_BSET, "bset", "bset", 32,
   1175       1.1     skrll     { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
   1176       1.1     skrll   },
   1177       1.1     skrll /* bclr $uimm3,@($slo16,$sr) */
   1178       1.1     skrll   {
   1179       1.1     skrll     M32R_INSN_BCLR, "bclr", "bclr", 32,
   1180       1.1     skrll     { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
   1181       1.1     skrll   },
   1182       1.1     skrll /* btst $uimm3,$sr */
   1183       1.1     skrll   {
   1184       1.1     skrll     M32R_INSN_BTST, "btst", "btst", 16,
   1185       1.1     skrll     { 0|A(SPECIAL_M32R), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
   1186       1.1     skrll   },
   1187       1.1     skrll };
   1188       1.1     skrll 
   1189       1.1     skrll #undef OP
   1190       1.1     skrll #undef A
   1191       1.1     skrll 
   1192       1.1     skrll /* Initialize anything needed to be done once, before any cpu_open call.  */
   1193       1.1     skrll 
   1194       1.1     skrll static void
   1195       1.1     skrll init_tables (void)
   1196       1.1     skrll {
   1197       1.1     skrll }
   1198       1.1     skrll 
   1199   1.1.1.6  christos #ifndef opcodes_error_handler
   1200   1.1.1.6  christos #define opcodes_error_handler(...) \
   1201   1.1.1.6  christos   fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr)
   1202   1.1.1.6  christos #endif
   1203   1.1.1.6  christos 
   1204       1.1     skrll static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
   1205       1.1     skrll static void build_hw_table      (CGEN_CPU_TABLE *);
   1206       1.1     skrll static void build_ifield_table  (CGEN_CPU_TABLE *);
   1207       1.1     skrll static void build_operand_table (CGEN_CPU_TABLE *);
   1208       1.1     skrll static void build_insn_table    (CGEN_CPU_TABLE *);
   1209       1.1     skrll static void m32r_cgen_rebuild_tables (CGEN_CPU_TABLE *);
   1210       1.1     skrll 
   1211       1.1     skrll /* Subroutine of m32r_cgen_cpu_open to look up a mach via its bfd name.  */
   1212       1.1     skrll 
   1213       1.1     skrll static const CGEN_MACH *
   1214       1.1     skrll lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
   1215       1.1     skrll {
   1216       1.1     skrll   while (table->name)
   1217       1.1     skrll     {
   1218       1.1     skrll       if (strcmp (name, table->bfd_name) == 0)
   1219       1.1     skrll 	return table;
   1220       1.1     skrll       ++table;
   1221       1.1     skrll     }
   1222   1.1.1.5  christos   return NULL;
   1223       1.1     skrll }
   1224       1.1     skrll 
   1225       1.1     skrll /* Subroutine of m32r_cgen_cpu_open to build the hardware table.  */
   1226       1.1     skrll 
   1227       1.1     skrll static void
   1228       1.1     skrll build_hw_table (CGEN_CPU_TABLE *cd)
   1229       1.1     skrll {
   1230       1.1     skrll   int i;
   1231       1.1     skrll   int machs = cd->machs;
   1232       1.1     skrll   const CGEN_HW_ENTRY *init = & m32r_cgen_hw_table[0];
   1233       1.1     skrll   /* MAX_HW is only an upper bound on the number of selected entries.
   1234       1.1     skrll      However each entry is indexed by it's enum so there can be holes in
   1235       1.1     skrll      the table.  */
   1236       1.1     skrll   const CGEN_HW_ENTRY **selected =
   1237       1.1     skrll     (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
   1238       1.1     skrll 
   1239       1.1     skrll   cd->hw_table.init_entries = init;
   1240       1.1     skrll   cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
   1241       1.1     skrll   memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
   1242       1.1     skrll   /* ??? For now we just use machs to determine which ones we want.  */
   1243       1.1     skrll   for (i = 0; init[i].name != NULL; ++i)
   1244       1.1     skrll     if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
   1245       1.1     skrll 	& machs)
   1246       1.1     skrll       selected[init[i].type] = &init[i];
   1247       1.1     skrll   cd->hw_table.entries = selected;
   1248       1.1     skrll   cd->hw_table.num_entries = MAX_HW;
   1249       1.1     skrll }
   1250       1.1     skrll 
   1251       1.1     skrll /* Subroutine of m32r_cgen_cpu_open to build the hardware table.  */
   1252       1.1     skrll 
   1253       1.1     skrll static void
   1254       1.1     skrll build_ifield_table (CGEN_CPU_TABLE *cd)
   1255       1.1     skrll {
   1256       1.1     skrll   cd->ifld_table = & m32r_cgen_ifld_table[0];
   1257       1.1     skrll }
   1258       1.1     skrll 
   1259       1.1     skrll /* Subroutine of m32r_cgen_cpu_open to build the hardware table.  */
   1260       1.1     skrll 
   1261       1.1     skrll static void
   1262       1.1     skrll build_operand_table (CGEN_CPU_TABLE *cd)
   1263       1.1     skrll {
   1264       1.1     skrll   int i;
   1265       1.1     skrll   int machs = cd->machs;
   1266       1.1     skrll   const CGEN_OPERAND *init = & m32r_cgen_operand_table[0];
   1267       1.1     skrll   /* MAX_OPERANDS is only an upper bound on the number of selected entries.
   1268       1.1     skrll      However each entry is indexed by it's enum so there can be holes in
   1269       1.1     skrll      the table.  */
   1270       1.1     skrll   const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
   1271       1.1     skrll 
   1272       1.1     skrll   cd->operand_table.init_entries = init;
   1273       1.1     skrll   cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
   1274       1.1     skrll   memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
   1275       1.1     skrll   /* ??? For now we just use mach to determine which ones we want.  */
   1276       1.1     skrll   for (i = 0; init[i].name != NULL; ++i)
   1277       1.1     skrll     if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
   1278       1.1     skrll 	& machs)
   1279       1.1     skrll       selected[init[i].type] = &init[i];
   1280       1.1     skrll   cd->operand_table.entries = selected;
   1281       1.1     skrll   cd->operand_table.num_entries = MAX_OPERANDS;
   1282       1.1     skrll }
   1283       1.1     skrll 
   1284       1.1     skrll /* Subroutine of m32r_cgen_cpu_open to build the hardware table.
   1285       1.1     skrll    ??? This could leave out insns not supported by the specified mach/isa,
   1286       1.1     skrll    but that would cause errors like "foo only supported by bar" to become
   1287       1.1     skrll    "unknown insn", so for now we include all insns and require the app to
   1288       1.1     skrll    do the checking later.
   1289       1.1     skrll    ??? On the other hand, parsing of such insns may require their hardware or
   1290       1.1     skrll    operand elements to be in the table [which they mightn't be].  */
   1291       1.1     skrll 
   1292       1.1     skrll static void
   1293       1.1     skrll build_insn_table (CGEN_CPU_TABLE *cd)
   1294       1.1     skrll {
   1295       1.1     skrll   int i;
   1296       1.1     skrll   const CGEN_IBASE *ib = & m32r_cgen_insn_table[0];
   1297       1.1     skrll   CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
   1298       1.1     skrll 
   1299       1.1     skrll   memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
   1300       1.1     skrll   for (i = 0; i < MAX_INSNS; ++i)
   1301       1.1     skrll     insns[i].base = &ib[i];
   1302       1.1     skrll   cd->insn_table.init_entries = insns;
   1303       1.1     skrll   cd->insn_table.entry_size = sizeof (CGEN_IBASE);
   1304       1.1     skrll   cd->insn_table.num_init_entries = MAX_INSNS;
   1305       1.1     skrll }
   1306       1.1     skrll 
   1307       1.1     skrll /* Subroutine of m32r_cgen_cpu_open to rebuild the tables.  */
   1308       1.1     skrll 
   1309       1.1     skrll static void
   1310       1.1     skrll m32r_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
   1311       1.1     skrll {
   1312       1.1     skrll   int i;
   1313       1.1     skrll   CGEN_BITSET *isas = cd->isas;
   1314       1.1     skrll   unsigned int machs = cd->machs;
   1315       1.1     skrll 
   1316       1.1     skrll   cd->int_insn_p = CGEN_INT_INSN_P;
   1317       1.1     skrll 
   1318       1.1     skrll   /* Data derived from the isa spec.  */
   1319       1.1     skrll #define UNSET (CGEN_SIZE_UNKNOWN + 1)
   1320       1.1     skrll   cd->default_insn_bitsize = UNSET;
   1321       1.1     skrll   cd->base_insn_bitsize = UNSET;
   1322       1.1     skrll   cd->min_insn_bitsize = 65535; /* Some ridiculously big number.  */
   1323       1.1     skrll   cd->max_insn_bitsize = 0;
   1324       1.1     skrll   for (i = 0; i < MAX_ISAS; ++i)
   1325       1.1     skrll     if (cgen_bitset_contains (isas, i))
   1326       1.1     skrll       {
   1327       1.1     skrll 	const CGEN_ISA *isa = & m32r_cgen_isa_table[i];
   1328       1.1     skrll 
   1329       1.1     skrll 	/* Default insn sizes of all selected isas must be
   1330       1.1     skrll 	   equal or we set the result to 0, meaning "unknown".  */
   1331       1.1     skrll 	if (cd->default_insn_bitsize == UNSET)
   1332       1.1     skrll 	  cd->default_insn_bitsize = isa->default_insn_bitsize;
   1333       1.1     skrll 	else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
   1334       1.1     skrll 	  ; /* This is ok.  */
   1335       1.1     skrll 	else
   1336       1.1     skrll 	  cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
   1337       1.1     skrll 
   1338       1.1     skrll 	/* Base insn sizes of all selected isas must be equal
   1339       1.1     skrll 	   or we set the result to 0, meaning "unknown".  */
   1340       1.1     skrll 	if (cd->base_insn_bitsize == UNSET)
   1341       1.1     skrll 	  cd->base_insn_bitsize = isa->base_insn_bitsize;
   1342       1.1     skrll 	else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
   1343       1.1     skrll 	  ; /* This is ok.  */
   1344       1.1     skrll 	else
   1345       1.1     skrll 	  cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
   1346       1.1     skrll 
   1347       1.1     skrll 	/* Set min,max insn sizes.  */
   1348       1.1     skrll 	if (isa->min_insn_bitsize < cd->min_insn_bitsize)
   1349       1.1     skrll 	  cd->min_insn_bitsize = isa->min_insn_bitsize;
   1350       1.1     skrll 	if (isa->max_insn_bitsize > cd->max_insn_bitsize)
   1351       1.1     skrll 	  cd->max_insn_bitsize = isa->max_insn_bitsize;
   1352       1.1     skrll       }
   1353       1.1     skrll 
   1354       1.1     skrll   /* Data derived from the mach spec.  */
   1355       1.1     skrll   for (i = 0; i < MAX_MACHS; ++i)
   1356       1.1     skrll     if (((1 << i) & machs) != 0)
   1357       1.1     skrll       {
   1358       1.1     skrll 	const CGEN_MACH *mach = & m32r_cgen_mach_table[i];
   1359       1.1     skrll 
   1360       1.1     skrll 	if (mach->insn_chunk_bitsize != 0)
   1361       1.1     skrll 	{
   1362       1.1     skrll 	  if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
   1363       1.1     skrll 	    {
   1364   1.1.1.6  christos 	      opcodes_error_handler
   1365   1.1.1.6  christos 		(/* xgettext:c-format */
   1366   1.1.1.6  christos 		 _("internal error: m32r_cgen_rebuild_tables: "
   1367   1.1.1.6  christos 		   "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
   1368   1.1.1.6  christos 		 cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
   1369       1.1     skrll 	      abort ();
   1370       1.1     skrll 	    }
   1371       1.1     skrll 
   1372       1.1     skrll  	  cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
   1373       1.1     skrll 	}
   1374       1.1     skrll       }
   1375       1.1     skrll 
   1376       1.1     skrll   /* Determine which hw elements are used by MACH.  */
   1377       1.1     skrll   build_hw_table (cd);
   1378       1.1     skrll 
   1379       1.1     skrll   /* Build the ifield table.  */
   1380       1.1     skrll   build_ifield_table (cd);
   1381       1.1     skrll 
   1382       1.1     skrll   /* Determine which operands are used by MACH/ISA.  */
   1383       1.1     skrll   build_operand_table (cd);
   1384       1.1     skrll 
   1385       1.1     skrll   /* Build the instruction table.  */
   1386       1.1     skrll   build_insn_table (cd);
   1387       1.1     skrll }
   1388       1.1     skrll 
   1389       1.1     skrll /* Initialize a cpu table and return a descriptor.
   1390       1.1     skrll    It's much like opening a file, and must be the first function called.
   1391       1.1     skrll    The arguments are a set of (type/value) pairs, terminated with
   1392       1.1     skrll    CGEN_CPU_OPEN_END.
   1393       1.1     skrll 
   1394       1.1     skrll    Currently supported values:
   1395       1.1     skrll    CGEN_CPU_OPEN_ISAS:    bitmap of values in enum isa_attr
   1396       1.1     skrll    CGEN_CPU_OPEN_MACHS:   bitmap of values in enum mach_attr
   1397       1.1     skrll    CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
   1398       1.1     skrll    CGEN_CPU_OPEN_ENDIAN:  specify endian choice
   1399   1.1.1.8  christos    CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice
   1400       1.1     skrll    CGEN_CPU_OPEN_END:     terminates arguments
   1401       1.1     skrll 
   1402       1.1     skrll    ??? Simultaneous multiple isas might not make sense, but it's not (yet)
   1403   1.1.1.2  christos    precluded.  */
   1404       1.1     skrll 
   1405       1.1     skrll CGEN_CPU_DESC
   1406       1.1     skrll m32r_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
   1407       1.1     skrll {
   1408       1.1     skrll   CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
   1409       1.1     skrll   static int init_p;
   1410       1.1     skrll   CGEN_BITSET *isas = 0;  /* 0 = "unspecified" */
   1411       1.1     skrll   unsigned int machs = 0; /* 0 = "unspecified" */
   1412       1.1     skrll   enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
   1413   1.1.1.8  christos   enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN;
   1414       1.1     skrll   va_list ap;
   1415       1.1     skrll 
   1416       1.1     skrll   if (! init_p)
   1417       1.1     skrll     {
   1418       1.1     skrll       init_tables ();
   1419       1.1     skrll       init_p = 1;
   1420       1.1     skrll     }
   1421       1.1     skrll 
   1422       1.1     skrll   memset (cd, 0, sizeof (*cd));
   1423       1.1     skrll 
   1424       1.1     skrll   va_start (ap, arg_type);
   1425       1.1     skrll   while (arg_type != CGEN_CPU_OPEN_END)
   1426       1.1     skrll     {
   1427       1.1     skrll       switch (arg_type)
   1428       1.1     skrll 	{
   1429       1.1     skrll 	case CGEN_CPU_OPEN_ISAS :
   1430       1.1     skrll 	  isas = va_arg (ap, CGEN_BITSET *);
   1431       1.1     skrll 	  break;
   1432       1.1     skrll 	case CGEN_CPU_OPEN_MACHS :
   1433       1.1     skrll 	  machs = va_arg (ap, unsigned int);
   1434       1.1     skrll 	  break;
   1435       1.1     skrll 	case CGEN_CPU_OPEN_BFDMACH :
   1436       1.1     skrll 	  {
   1437       1.1     skrll 	    const char *name = va_arg (ap, const char *);
   1438       1.1     skrll 	    const CGEN_MACH *mach =
   1439       1.1     skrll 	      lookup_mach_via_bfd_name (m32r_cgen_mach_table, name);
   1440       1.1     skrll 
   1441   1.1.1.5  christos 	    if (mach != NULL)
   1442   1.1.1.5  christos 	      machs |= 1 << mach->num;
   1443       1.1     skrll 	    break;
   1444       1.1     skrll 	  }
   1445       1.1     skrll 	case CGEN_CPU_OPEN_ENDIAN :
   1446       1.1     skrll 	  endian = va_arg (ap, enum cgen_endian);
   1447       1.1     skrll 	  break;
   1448   1.1.1.8  christos 	case CGEN_CPU_OPEN_INSN_ENDIAN :
   1449   1.1.1.8  christos 	  insn_endian = va_arg (ap, enum cgen_endian);
   1450   1.1.1.8  christos 	  break;
   1451       1.1     skrll 	default :
   1452   1.1.1.6  christos 	  opcodes_error_handler
   1453   1.1.1.6  christos 	    (/* xgettext:c-format */
   1454   1.1.1.6  christos 	     _("internal error: m32r_cgen_cpu_open: "
   1455   1.1.1.6  christos 	       "unsupported argument `%d'"),
   1456   1.1.1.6  christos 	     arg_type);
   1457       1.1     skrll 	  abort (); /* ??? return NULL? */
   1458       1.1     skrll 	}
   1459       1.1     skrll       arg_type = va_arg (ap, enum cgen_cpu_open_arg);
   1460       1.1     skrll     }
   1461       1.1     skrll   va_end (ap);
   1462       1.1     skrll 
   1463       1.1     skrll   /* Mach unspecified means "all".  */
   1464       1.1     skrll   if (machs == 0)
   1465       1.1     skrll     machs = (1 << MAX_MACHS) - 1;
   1466       1.1     skrll   /* Base mach is always selected.  */
   1467       1.1     skrll   machs |= 1;
   1468       1.1     skrll   if (endian == CGEN_ENDIAN_UNKNOWN)
   1469       1.1     skrll     {
   1470       1.1     skrll       /* ??? If target has only one, could have a default.  */
   1471   1.1.1.6  christos       opcodes_error_handler
   1472   1.1.1.6  christos 	(/* xgettext:c-format */
   1473   1.1.1.6  christos 	 _("internal error: m32r_cgen_cpu_open: no endianness specified"));
   1474       1.1     skrll       abort ();
   1475       1.1     skrll     }
   1476       1.1     skrll 
   1477       1.1     skrll   cd->isas = cgen_bitset_copy (isas);
   1478       1.1     skrll   cd->machs = machs;
   1479       1.1     skrll   cd->endian = endian;
   1480   1.1.1.8  christos   cd->insn_endian
   1481   1.1.1.8  christos     = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian);
   1482       1.1     skrll 
   1483       1.1     skrll   /* Table (re)builder.  */
   1484       1.1     skrll   cd->rebuild_tables = m32r_cgen_rebuild_tables;
   1485       1.1     skrll   m32r_cgen_rebuild_tables (cd);
   1486       1.1     skrll 
   1487       1.1     skrll   /* Default to not allowing signed overflow.  */
   1488       1.1     skrll   cd->signed_overflow_ok_p = 0;
   1489   1.1.1.3  christos 
   1490       1.1     skrll   return (CGEN_CPU_DESC) cd;
   1491       1.1     skrll }
   1492       1.1     skrll 
   1493       1.1     skrll /* Cover fn to m32r_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
   1494       1.1     skrll    MACH_NAME is the bfd name of the mach.  */
   1495       1.1     skrll 
   1496       1.1     skrll CGEN_CPU_DESC
   1497       1.1     skrll m32r_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
   1498       1.1     skrll {
   1499       1.1     skrll   return m32r_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
   1500       1.1     skrll 			       CGEN_CPU_OPEN_ENDIAN, endian,
   1501       1.1     skrll 			       CGEN_CPU_OPEN_END);
   1502       1.1     skrll }
   1503       1.1     skrll 
   1504       1.1     skrll /* Close a cpu table.
   1505       1.1     skrll    ??? This can live in a machine independent file, but there's currently
   1506       1.1     skrll    no place to put this file (there's no libcgen).  libopcodes is the wrong
   1507       1.1     skrll    place as some simulator ports use this but they don't use libopcodes.  */
   1508       1.1     skrll 
   1509       1.1     skrll void
   1510       1.1     skrll m32r_cgen_cpu_close (CGEN_CPU_DESC cd)
   1511       1.1     skrll {
   1512       1.1     skrll   unsigned int i;
   1513       1.1     skrll   const CGEN_INSN *insns;
   1514       1.1     skrll 
   1515       1.1     skrll   if (cd->macro_insn_table.init_entries)
   1516       1.1     skrll     {
   1517       1.1     skrll       insns = cd->macro_insn_table.init_entries;
   1518       1.1     skrll       for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
   1519       1.1     skrll 	if (CGEN_INSN_RX ((insns)))
   1520       1.1     skrll 	  regfree (CGEN_INSN_RX (insns));
   1521       1.1     skrll     }
   1522       1.1     skrll 
   1523       1.1     skrll   if (cd->insn_table.init_entries)
   1524       1.1     skrll     {
   1525       1.1     skrll       insns = cd->insn_table.init_entries;
   1526       1.1     skrll       for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
   1527       1.1     skrll 	if (CGEN_INSN_RX (insns))
   1528       1.1     skrll 	  regfree (CGEN_INSN_RX (insns));
   1529   1.1.1.3  christos     }
   1530       1.1     skrll 
   1531   1.1.1.8  christos   free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
   1532   1.1.1.8  christos   free ((CGEN_INSN *) cd->insn_table.init_entries);
   1533   1.1.1.8  christos   free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
   1534   1.1.1.8  christos   free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
   1535       1.1     skrll   free (cd);
   1536       1.1     skrll }
   1537       1.1     skrll 
   1538