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