Home | History | Annotate | Line # | Download | only in opcodes
      1   1.8  christos /* DO NOT EDIT!  -*- buffer-read-only: t -*- vi:set ro:  */
      2   1.1  christos /* CPU data for fr30.
      3   1.1  christos 
      4   1.1  christos THIS FILE IS MACHINE GENERATED WITH CGEN.
      5   1.1  christos 
      6  1.11  christos Copyright (C) 1996-2024 Free Software Foundation, Inc.
      7   1.1  christos 
      8   1.1  christos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
      9   1.1  christos 
     10   1.1  christos    This file is free software; you can redistribute it and/or modify
     11   1.1  christos    it under the terms of the GNU General Public License as published by
     12   1.1  christos    the Free Software Foundation; either version 3, or (at your option)
     13   1.1  christos    any later version.
     14   1.1  christos 
     15   1.1  christos    It is distributed in the hope that it will be useful, but WITHOUT
     16   1.1  christos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     17   1.1  christos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     18   1.1  christos    License for more details.
     19   1.1  christos 
     20   1.1  christos    You should have received a copy of the GNU General Public License along
     21   1.1  christos    with this program; if not, write to the Free Software Foundation, Inc.,
     22   1.1  christos    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
     23   1.1  christos 
     24   1.1  christos */
     25   1.1  christos 
     26   1.1  christos #include "sysdep.h"
     27   1.1  christos #include <stdio.h>
     28   1.1  christos #include <stdarg.h>
     29  1.10  christos #include <stdlib.h>
     30   1.1  christos #include "ansidecl.h"
     31   1.1  christos #include "bfd.h"
     32   1.1  christos #include "symcat.h"
     33   1.1  christos #include "fr30-desc.h"
     34   1.1  christos #include "fr30-opc.h"
     35   1.1  christos #include "opintl.h"
     36   1.1  christos #include "libiberty.h"
     37   1.1  christos #include "xregex.h"
     38   1.1  christos 
     39   1.1  christos /* Attributes.  */
     40   1.1  christos 
     41   1.1  christos static const CGEN_ATTR_ENTRY bool_attr[] =
     42   1.1  christos {
     43   1.1  christos   { "#f", 0 },
     44   1.1  christos   { "#t", 1 },
     45   1.1  christos   { 0, 0 }
     46   1.1  christos };
     47   1.1  christos 
     48   1.1  christos static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
     49   1.1  christos {
     50   1.1  christos   { "base", MACH_BASE },
     51   1.1  christos   { "fr30", MACH_FR30 },
     52   1.1  christos   { "max", MACH_MAX },
     53   1.1  christos   { 0, 0 }
     54   1.1  christos };
     55   1.1  christos 
     56   1.1  christos static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
     57   1.1  christos {
     58   1.1  christos   { "fr30", ISA_FR30 },
     59   1.1  christos   { "max", ISA_MAX },
     60   1.1  christos   { 0, 0 }
     61   1.1  christos };
     62   1.1  christos 
     63   1.1  christos const CGEN_ATTR_TABLE fr30_cgen_ifield_attr_table[] =
     64   1.1  christos {
     65   1.1  christos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
     66   1.1  christos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
     67   1.1  christos   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
     68   1.1  christos   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
     69   1.1  christos   { "RESERVED", &bool_attr[0], &bool_attr[0] },
     70   1.1  christos   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
     71   1.1  christos   { "SIGNED", &bool_attr[0], &bool_attr[0] },
     72   1.1  christos   { 0, 0, 0 }
     73   1.1  christos };
     74   1.1  christos 
     75   1.1  christos const CGEN_ATTR_TABLE fr30_cgen_hardware_attr_table[] =
     76   1.1  christos {
     77   1.1  christos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
     78   1.1  christos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
     79   1.1  christos   { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
     80   1.1  christos   { "PC", &bool_attr[0], &bool_attr[0] },
     81   1.1  christos   { "PROFILE", &bool_attr[0], &bool_attr[0] },
     82   1.1  christos   { 0, 0, 0 }
     83   1.1  christos };
     84   1.1  christos 
     85   1.1  christos const CGEN_ATTR_TABLE fr30_cgen_operand_attr_table[] =
     86   1.1  christos {
     87   1.1  christos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
     88   1.1  christos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
     89   1.1  christos   { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
     90   1.1  christos   { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
     91   1.1  christos   { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
     92   1.1  christos   { "SIGNED", &bool_attr[0], &bool_attr[0] },
     93   1.1  christos   { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
     94   1.1  christos   { "RELAX", &bool_attr[0], &bool_attr[0] },
     95   1.1  christos   { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
     96   1.1  christos   { "HASH-PREFIX", &bool_attr[0], &bool_attr[0] },
     97   1.1  christos   { 0, 0, 0 }
     98   1.1  christos };
     99   1.1  christos 
    100   1.1  christos const CGEN_ATTR_TABLE fr30_cgen_insn_attr_table[] =
    101   1.1  christos {
    102   1.1  christos   { "MACH", & MACH_attr[0], & MACH_attr[0] },
    103   1.1  christos   { "ALIAS", &bool_attr[0], &bool_attr[0] },
    104   1.1  christos   { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
    105   1.1  christos   { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
    106   1.1  christos   { "COND-CTI", &bool_attr[0], &bool_attr[0] },
    107   1.1  christos   { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
    108   1.1  christos   { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
    109   1.1  christos   { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
    110   1.1  christos   { "RELAXED", &bool_attr[0], &bool_attr[0] },
    111   1.1  christos   { "NO-DIS", &bool_attr[0], &bool_attr[0] },
    112   1.1  christos   { "PBB", &bool_attr[0], &bool_attr[0] },
    113   1.1  christos   { "NOT-IN-DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
    114   1.1  christos   { 0, 0, 0 }
    115   1.1  christos };
    116   1.1  christos 
    117   1.1  christos /* Instruction set variants.  */
    118   1.1  christos 
    119   1.1  christos static const CGEN_ISA fr30_cgen_isa_table[] = {
    120   1.1  christos   { "fr30", 16, 16, 16, 48 },
    121   1.1  christos   { 0, 0, 0, 0, 0 }
    122   1.1  christos };
    123   1.1  christos 
    124   1.1  christos /* Machine variants.  */
    125   1.1  christos 
    126   1.1  christos static const CGEN_MACH fr30_cgen_mach_table[] = {
    127   1.1  christos   { "fr30", "fr30", MACH_FR30, 0 },
    128   1.1  christos   { 0, 0, 0, 0 }
    129   1.1  christos };
    130   1.1  christos 
    131   1.1  christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_gr_names_entries[] =
    132   1.1  christos {
    133   1.1  christos   { "r0", 0, {0, {{{0, 0}}}}, 0, 0 },
    134   1.1  christos   { "r1", 1, {0, {{{0, 0}}}}, 0, 0 },
    135   1.1  christos   { "r2", 2, {0, {{{0, 0}}}}, 0, 0 },
    136   1.1  christos   { "r3", 3, {0, {{{0, 0}}}}, 0, 0 },
    137   1.1  christos   { "r4", 4, {0, {{{0, 0}}}}, 0, 0 },
    138   1.1  christos   { "r5", 5, {0, {{{0, 0}}}}, 0, 0 },
    139   1.1  christos   { "r6", 6, {0, {{{0, 0}}}}, 0, 0 },
    140   1.1  christos   { "r7", 7, {0, {{{0, 0}}}}, 0, 0 },
    141   1.1  christos   { "r8", 8, {0, {{{0, 0}}}}, 0, 0 },
    142   1.1  christos   { "r9", 9, {0, {{{0, 0}}}}, 0, 0 },
    143   1.1  christos   { "r10", 10, {0, {{{0, 0}}}}, 0, 0 },
    144   1.1  christos   { "r11", 11, {0, {{{0, 0}}}}, 0, 0 },
    145   1.1  christos   { "r12", 12, {0, {{{0, 0}}}}, 0, 0 },
    146   1.1  christos   { "r13", 13, {0, {{{0, 0}}}}, 0, 0 },
    147   1.1  christos   { "r14", 14, {0, {{{0, 0}}}}, 0, 0 },
    148   1.1  christos   { "r15", 15, {0, {{{0, 0}}}}, 0, 0 },
    149   1.1  christos   { "ac", 13, {0, {{{0, 0}}}}, 0, 0 },
    150   1.1  christos   { "fp", 14, {0, {{{0, 0}}}}, 0, 0 },
    151   1.1  christos   { "sp", 15, {0, {{{0, 0}}}}, 0, 0 }
    152   1.1  christos };
    153   1.1  christos 
    154   1.1  christos CGEN_KEYWORD fr30_cgen_opval_gr_names =
    155   1.1  christos {
    156   1.1  christos   & fr30_cgen_opval_gr_names_entries[0],
    157   1.1  christos   19,
    158   1.1  christos   0, 0, 0, 0, ""
    159   1.1  christos };
    160   1.1  christos 
    161   1.1  christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_cr_names_entries[] =
    162   1.1  christos {
    163   1.1  christos   { "cr0", 0, {0, {{{0, 0}}}}, 0, 0 },
    164   1.1  christos   { "cr1", 1, {0, {{{0, 0}}}}, 0, 0 },
    165   1.1  christos   { "cr2", 2, {0, {{{0, 0}}}}, 0, 0 },
    166   1.1  christos   { "cr3", 3, {0, {{{0, 0}}}}, 0, 0 },
    167   1.1  christos   { "cr4", 4, {0, {{{0, 0}}}}, 0, 0 },
    168   1.1  christos   { "cr5", 5, {0, {{{0, 0}}}}, 0, 0 },
    169   1.1  christos   { "cr6", 6, {0, {{{0, 0}}}}, 0, 0 },
    170   1.1  christos   { "cr7", 7, {0, {{{0, 0}}}}, 0, 0 },
    171   1.1  christos   { "cr8", 8, {0, {{{0, 0}}}}, 0, 0 },
    172   1.1  christos   { "cr9", 9, {0, {{{0, 0}}}}, 0, 0 },
    173   1.1  christos   { "cr10", 10, {0, {{{0, 0}}}}, 0, 0 },
    174   1.1  christos   { "cr11", 11, {0, {{{0, 0}}}}, 0, 0 },
    175   1.1  christos   { "cr12", 12, {0, {{{0, 0}}}}, 0, 0 },
    176   1.1  christos   { "cr13", 13, {0, {{{0, 0}}}}, 0, 0 },
    177   1.1  christos   { "cr14", 14, {0, {{{0, 0}}}}, 0, 0 },
    178   1.1  christos   { "cr15", 15, {0, {{{0, 0}}}}, 0, 0 }
    179   1.1  christos };
    180   1.1  christos 
    181   1.1  christos CGEN_KEYWORD fr30_cgen_opval_cr_names =
    182   1.1  christos {
    183   1.1  christos   & fr30_cgen_opval_cr_names_entries[0],
    184   1.1  christos   16,
    185   1.1  christos   0, 0, 0, 0, ""
    186   1.1  christos };
    187   1.1  christos 
    188   1.1  christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_dr_names_entries[] =
    189   1.1  christos {
    190   1.1  christos   { "tbr", 0, {0, {{{0, 0}}}}, 0, 0 },
    191   1.1  christos   { "rp", 1, {0, {{{0, 0}}}}, 0, 0 },
    192   1.1  christos   { "ssp", 2, {0, {{{0, 0}}}}, 0, 0 },
    193   1.1  christos   { "usp", 3, {0, {{{0, 0}}}}, 0, 0 },
    194   1.1  christos   { "mdh", 4, {0, {{{0, 0}}}}, 0, 0 },
    195   1.1  christos   { "mdl", 5, {0, {{{0, 0}}}}, 0, 0 }
    196   1.1  christos };
    197   1.1  christos 
    198   1.1  christos CGEN_KEYWORD fr30_cgen_opval_dr_names =
    199   1.1  christos {
    200   1.1  christos   & fr30_cgen_opval_dr_names_entries[0],
    201   1.1  christos   6,
    202   1.1  christos   0, 0, 0, 0, ""
    203   1.1  christos };
    204   1.1  christos 
    205   1.1  christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_ps_entries[] =
    206   1.1  christos {
    207   1.1  christos   { "ps", 0, {0, {{{0, 0}}}}, 0, 0 }
    208   1.1  christos };
    209   1.1  christos 
    210   1.1  christos CGEN_KEYWORD fr30_cgen_opval_h_ps =
    211   1.1  christos {
    212   1.1  christos   & fr30_cgen_opval_h_ps_entries[0],
    213   1.1  christos   1,
    214   1.1  christos   0, 0, 0, 0, ""
    215   1.1  christos };
    216   1.1  christos 
    217   1.1  christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r13_entries[] =
    218   1.1  christos {
    219   1.1  christos   { "r13", 0, {0, {{{0, 0}}}}, 0, 0 }
    220   1.1  christos };
    221   1.1  christos 
    222   1.1  christos CGEN_KEYWORD fr30_cgen_opval_h_r13 =
    223   1.1  christos {
    224   1.1  christos   & fr30_cgen_opval_h_r13_entries[0],
    225   1.1  christos   1,
    226   1.1  christos   0, 0, 0, 0, ""
    227   1.1  christos };
    228   1.1  christos 
    229   1.1  christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r14_entries[] =
    230   1.1  christos {
    231   1.1  christos   { "r14", 0, {0, {{{0, 0}}}}, 0, 0 }
    232   1.1  christos };
    233   1.1  christos 
    234   1.1  christos CGEN_KEYWORD fr30_cgen_opval_h_r14 =
    235   1.1  christos {
    236   1.1  christos   & fr30_cgen_opval_h_r14_entries[0],
    237   1.1  christos   1,
    238   1.1  christos   0, 0, 0, 0, ""
    239   1.1  christos };
    240   1.1  christos 
    241   1.1  christos static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r15_entries[] =
    242   1.1  christos {
    243   1.1  christos   { "r15", 0, {0, {{{0, 0}}}}, 0, 0 }
    244   1.1  christos };
    245   1.1  christos 
    246   1.1  christos CGEN_KEYWORD fr30_cgen_opval_h_r15 =
    247   1.1  christos {
    248   1.1  christos   & fr30_cgen_opval_h_r15_entries[0],
    249   1.1  christos   1,
    250   1.1  christos   0, 0, 0, 0, ""
    251   1.1  christos };
    252   1.1  christos 
    253   1.1  christos 
    254   1.1  christos /* The hardware table.  */
    255   1.1  christos 
    256   1.1  christos #define A(a) (1 << CGEN_HW_##a)
    257   1.1  christos 
    258   1.1  christos const CGEN_HW_ENTRY fr30_cgen_hw_table[] =
    259   1.1  christos {
    260   1.1  christos   { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    261   1.1  christos   { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    262   1.1  christos   { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    263   1.1  christos   { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    264   1.1  christos   { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    265   1.1  christos   { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } } } } },
    266  1.10  christos   { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, & fr30_cgen_opval_gr_names, { 0|A(CACHE_ADDR)|A(PROFILE), { { { (1<<MACH_BASE), 0 } } } } },
    267  1.10  christos   { "h-cr", HW_H_CR, CGEN_ASM_KEYWORD, & fr30_cgen_opval_cr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    268  1.10  christos   { "h-dr", HW_H_DR, CGEN_ASM_KEYWORD, & fr30_cgen_opval_dr_names, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    269  1.10  christos   { "h-ps", HW_H_PS, CGEN_ASM_KEYWORD, & fr30_cgen_opval_h_ps, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    270  1.10  christos   { "h-r13", HW_H_R13, CGEN_ASM_KEYWORD, & fr30_cgen_opval_h_r13, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    271  1.10  christos   { "h-r14", HW_H_R14, CGEN_ASM_KEYWORD, & fr30_cgen_opval_h_r14, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    272  1.10  christos   { "h-r15", HW_H_R15, CGEN_ASM_KEYWORD, & fr30_cgen_opval_h_r15, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    273   1.1  christos   { "h-nbit", HW_H_NBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    274   1.1  christos   { "h-zbit", HW_H_ZBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    275   1.1  christos   { "h-vbit", HW_H_VBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    276   1.1  christos   { "h-cbit", HW_H_CBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    277   1.1  christos   { "h-ibit", HW_H_IBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    278   1.1  christos   { "h-sbit", HW_H_SBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    279   1.1  christos   { "h-tbit", HW_H_TBIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    280   1.1  christos   { "h-d0bit", HW_H_D0BIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    281   1.1  christos   { "h-d1bit", HW_H_D1BIT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    282   1.1  christos   { "h-ccr", HW_H_CCR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    283   1.1  christos   { "h-scr", HW_H_SCR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    284   1.1  christos   { "h-ilm", HW_H_ILM, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    285   1.1  christos   { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
    286   1.1  christos };
    287   1.1  christos 
    288   1.1  christos #undef A
    289   1.1  christos 
    290   1.1  christos 
    291   1.1  christos /* The instruction field table.  */
    292   1.1  christos 
    293   1.1  christos #define A(a) (1 << CGEN_IFLD_##a)
    294   1.1  christos 
    295   1.1  christos const CGEN_IFLD fr30_cgen_ifld_table[] =
    296   1.1  christos {
    297   1.1  christos   { FR30_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    298   1.1  christos   { FR30_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    299   1.1  christos   { FR30_F_OP1, "f-op1", 0, 16, 0, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    300   1.1  christos   { FR30_F_OP2, "f-op2", 0, 16, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    301   1.1  christos   { FR30_F_OP3, "f-op3", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    302   1.1  christos   { FR30_F_OP4, "f-op4", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    303   1.1  christos   { FR30_F_OP5, "f-op5", 0, 16, 4, 1, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    304   1.1  christos   { FR30_F_CC, "f-cc", 0, 16, 4, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    305   1.1  christos   { FR30_F_CCC, "f-ccc", 16, 16, 0, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    306   1.1  christos   { FR30_F_RJ, "f-Rj", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    307   1.1  christos   { FR30_F_RI, "f-Ri", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    308   1.1  christos   { FR30_F_RS1, "f-Rs1", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    309   1.1  christos   { FR30_F_RS2, "f-Rs2", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    310   1.1  christos   { FR30_F_RJC, "f-Rjc", 16, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    311   1.1  christos   { FR30_F_RIC, "f-Ric", 16, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    312   1.1  christos   { FR30_F_CRJ, "f-CRj", 16, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    313   1.1  christos   { FR30_F_CRI, "f-CRi", 16, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    314   1.1  christos   { FR30_F_U4, "f-u4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    315   1.1  christos   { FR30_F_U4C, "f-u4c", 0, 16, 12, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    316   1.1  christos   { FR30_F_I4, "f-i4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    317   1.1  christos   { FR30_F_M4, "f-m4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    318   1.1  christos   { FR30_F_U8, "f-u8", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    319   1.1  christos   { FR30_F_I8, "f-i8", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    320   1.1  christos   { FR30_F_I20_4, "f-i20-4", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    321   1.1  christos   { FR30_F_I20_16, "f-i20-16", 16, 16, 0, 16, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    322   1.1  christos   { FR30_F_I20, "f-i20", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
    323   1.1  christos   { FR30_F_I32, "f-i32", 16, 32, 0, 32, { 0|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } }  },
    324   1.1  christos   { FR30_F_UDISP6, "f-udisp6", 0, 16, 8, 4, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    325   1.1  christos   { FR30_F_DISP8, "f-disp8", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    326   1.1  christos   { FR30_F_DISP9, "f-disp9", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    327   1.1  christos   { FR30_F_DISP10, "f-disp10", 0, 16, 4, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    328   1.1  christos   { FR30_F_S10, "f-s10", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    329   1.1  christos   { FR30_F_U10, "f-u10", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    330   1.1  christos   { FR30_F_REL9, "f-rel9", 0, 16, 8, 8, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    331   1.1  christos   { FR30_F_DIR8, "f-dir8", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    332   1.1  christos   { FR30_F_DIR9, "f-dir9", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    333   1.1  christos   { FR30_F_DIR10, "f-dir10", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    334   1.1  christos   { FR30_F_REL12, "f-rel12", 0, 16, 5, 11, { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    335   1.1  christos   { FR30_F_REGLIST_HI_ST, "f-reglist_hi_st", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    336   1.1  christos   { FR30_F_REGLIST_LOW_ST, "f-reglist_low_st", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    337   1.1  christos   { FR30_F_REGLIST_HI_LD, "f-reglist_hi_ld", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    338   1.1  christos   { FR30_F_REGLIST_LOW_LD, "f-reglist_low_ld", 0, 16, 8, 8, { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    339   1.1  christos   { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } }
    340   1.1  christos };
    341   1.1  christos 
    342   1.1  christos #undef A
    343   1.1  christos 
    344   1.1  christos 
    345   1.1  christos 
    346   1.1  christos /* multi ifield declarations */
    347   1.1  christos 
    348   1.1  christos const CGEN_MAYBE_MULTI_IFLD FR30_F_I20_MULTI_IFIELD [];
    349   1.1  christos 
    350   1.1  christos 
    351   1.1  christos /* multi ifield definitions */
    352   1.1  christos 
    353   1.1  christos const CGEN_MAYBE_MULTI_IFLD FR30_F_I20_MULTI_IFIELD [] =
    354   1.1  christos {
    355  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_I20_4] } },
    356  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_I20_16] } },
    357  1.10  christos     { 0, { 0 } }
    358   1.1  christos };
    359   1.1  christos 
    360   1.1  christos /* The operand table.  */
    361   1.1  christos 
    362   1.1  christos #define A(a) (1 << CGEN_OPERAND_##a)
    363   1.1  christos #define OPERAND(op) FR30_OPERAND_##op
    364   1.1  christos 
    365   1.1  christos const CGEN_OPERAND fr30_cgen_operand_table[] =
    366   1.1  christos {
    367   1.1  christos /* pc: program counter */
    368   1.1  christos   { "pc", FR30_OPERAND_PC, HW_H_PC, 0, 0,
    369  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_NIL] } },
    370   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    371   1.1  christos /* Ri: destination register */
    372   1.1  christos   { "Ri", FR30_OPERAND_RI, HW_H_GR, 12, 4,
    373  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_RI] } },
    374   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    375   1.1  christos /* Rj: source register */
    376   1.1  christos   { "Rj", FR30_OPERAND_RJ, HW_H_GR, 8, 4,
    377  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_RJ] } },
    378   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    379   1.1  christos /* Ric: target register coproc insn */
    380   1.1  christos   { "Ric", FR30_OPERAND_RIC, HW_H_GR, 12, 4,
    381  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_RIC] } },
    382   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    383   1.1  christos /* Rjc: source register coproc insn */
    384   1.1  christos   { "Rjc", FR30_OPERAND_RJC, HW_H_GR, 8, 4,
    385  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_RJC] } },
    386   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    387   1.1  christos /* CRi: coprocessor register */
    388   1.1  christos   { "CRi", FR30_OPERAND_CRI, HW_H_CR, 12, 4,
    389  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_CRI] } },
    390   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    391   1.1  christos /* CRj: coprocessor register */
    392   1.1  christos   { "CRj", FR30_OPERAND_CRJ, HW_H_CR, 8, 4,
    393  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_CRJ] } },
    394   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    395   1.1  christos /* Rs1: dedicated register */
    396   1.1  christos   { "Rs1", FR30_OPERAND_RS1, HW_H_DR, 8, 4,
    397  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_RS1] } },
    398   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    399   1.1  christos /* Rs2: dedicated register */
    400   1.1  christos   { "Rs2", FR30_OPERAND_RS2, HW_H_DR, 12, 4,
    401  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_RS2] } },
    402   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    403   1.1  christos /* R13: General Register 13 */
    404   1.1  christos   { "R13", FR30_OPERAND_R13, HW_H_R13, 0, 0,
    405  1.10  christos     { 0, { 0 } },
    406   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    407   1.1  christos /* R14: General Register 14 */
    408   1.1  christos   { "R14", FR30_OPERAND_R14, HW_H_R14, 0, 0,
    409  1.10  christos     { 0, { 0 } },
    410   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    411   1.1  christos /* R15: General Register 15 */
    412   1.1  christos   { "R15", FR30_OPERAND_R15, HW_H_R15, 0, 0,
    413  1.10  christos     { 0, { 0 } },
    414   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    415   1.1  christos /* ps: Program Status register */
    416   1.1  christos   { "ps", FR30_OPERAND_PS, HW_H_PS, 0, 0,
    417  1.10  christos     { 0, { 0 } },
    418   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    419   1.1  christos /* u4: 4  bit unsigned immediate */
    420   1.1  christos   { "u4", FR30_OPERAND_U4, HW_H_UINT, 8, 4,
    421  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_U4] } },
    422   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    423   1.1  christos /* u4c: 4  bit unsigned immediate */
    424   1.1  christos   { "u4c", FR30_OPERAND_U4C, HW_H_UINT, 12, 4,
    425  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_U4C] } },
    426   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    427   1.1  christos /* u8: 8  bit unsigned immediate */
    428   1.1  christos   { "u8", FR30_OPERAND_U8, HW_H_UINT, 8, 8,
    429  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_U8] } },
    430   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    431   1.1  christos /* i8: 8  bit unsigned immediate */
    432   1.1  christos   { "i8", FR30_OPERAND_I8, HW_H_UINT, 4, 8,
    433  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_I8] } },
    434   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    435   1.1  christos /* udisp6: 6  bit unsigned immediate */
    436   1.1  christos   { "udisp6", FR30_OPERAND_UDISP6, HW_H_UINT, 8, 4,
    437  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_UDISP6] } },
    438   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    439   1.1  christos /* disp8: 8  bit signed   immediate */
    440   1.1  christos   { "disp8", FR30_OPERAND_DISP8, HW_H_SINT, 4, 8,
    441  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_DISP8] } },
    442   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    443   1.1  christos /* disp9: 9  bit signed   immediate */
    444   1.1  christos   { "disp9", FR30_OPERAND_DISP9, HW_H_SINT, 4, 8,
    445  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_DISP9] } },
    446   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    447   1.1  christos /* disp10: 10 bit signed   immediate */
    448   1.1  christos   { "disp10", FR30_OPERAND_DISP10, HW_H_SINT, 4, 8,
    449  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_DISP10] } },
    450   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    451   1.1  christos /* s10: 10 bit signed   immediate */
    452   1.1  christos   { "s10", FR30_OPERAND_S10, HW_H_SINT, 8, 8,
    453  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_S10] } },
    454   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    455   1.1  christos /* u10: 10 bit unsigned immediate */
    456   1.1  christos   { "u10", FR30_OPERAND_U10, HW_H_UINT, 8, 8,
    457  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_U10] } },
    458   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    459   1.1  christos /* i32: 32 bit immediate */
    460   1.1  christos   { "i32", FR30_OPERAND_I32, HW_H_UINT, 0, 32,
    461  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_I32] } },
    462   1.1  christos     { 0|A(HASH_PREFIX)|A(SIGN_OPT), { { { (1<<MACH_BASE), 0 } } } }  },
    463   1.1  christos /* m4: 4  bit negative immediate */
    464   1.1  christos   { "m4", FR30_OPERAND_M4, HW_H_SINT, 8, 4,
    465  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_M4] } },
    466   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    467   1.1  christos /* i20: 20 bit immediate */
    468   1.1  christos   { "i20", FR30_OPERAND_I20, HW_H_UINT, 0, 20,
    469  1.10  christos     { 2, { &FR30_F_I20_MULTI_IFIELD[0] } },
    470   1.1  christos     { 0|A(HASH_PREFIX)|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } } } }  },
    471   1.1  christos /* dir8: 8  bit direct address */
    472   1.1  christos   { "dir8", FR30_OPERAND_DIR8, HW_H_UINT, 8, 8,
    473  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_DIR8] } },
    474   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    475   1.1  christos /* dir9: 9  bit direct address */
    476   1.1  christos   { "dir9", FR30_OPERAND_DIR9, HW_H_UINT, 8, 8,
    477  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_DIR9] } },
    478   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    479   1.1  christos /* dir10: 10 bit direct address */
    480   1.1  christos   { "dir10", FR30_OPERAND_DIR10, HW_H_UINT, 8, 8,
    481  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_DIR10] } },
    482   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    483   1.1  christos /* label9: 9  bit pc relative address */
    484   1.1  christos   { "label9", FR30_OPERAND_LABEL9, HW_H_IADDR, 8, 8,
    485  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_REL9] } },
    486   1.1  christos     { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    487   1.1  christos /* label12: 12 bit pc relative address */
    488   1.1  christos   { "label12", FR30_OPERAND_LABEL12, HW_H_IADDR, 5, 11,
    489  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_REL12] } },
    490   1.1  christos     { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } } } }  },
    491   1.1  christos /* reglist_low_ld: 8 bit low register mask for ldm */
    492   1.1  christos   { "reglist_low_ld", FR30_OPERAND_REGLIST_LOW_LD, HW_H_UINT, 8, 8,
    493  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_REGLIST_LOW_LD] } },
    494   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    495   1.1  christos /* reglist_hi_ld: 8 bit high register mask for ldm */
    496   1.1  christos   { "reglist_hi_ld", FR30_OPERAND_REGLIST_HI_LD, HW_H_UINT, 8, 8,
    497  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_REGLIST_HI_LD] } },
    498   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    499   1.1  christos /* reglist_low_st: 8 bit low register mask for stm */
    500   1.1  christos   { "reglist_low_st", FR30_OPERAND_REGLIST_LOW_ST, HW_H_UINT, 8, 8,
    501  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_REGLIST_LOW_ST] } },
    502   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    503   1.1  christos /* reglist_hi_st: 8 bit high register mask for stm */
    504   1.1  christos   { "reglist_hi_st", FR30_OPERAND_REGLIST_HI_ST, HW_H_UINT, 8, 8,
    505  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_REGLIST_HI_ST] } },
    506   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    507   1.1  christos /* cc: condition codes */
    508   1.1  christos   { "cc", FR30_OPERAND_CC, HW_H_UINT, 4, 4,
    509  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_CC] } },
    510   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }  },
    511   1.1  christos /* ccc: coprocessor calc */
    512   1.1  christos   { "ccc", FR30_OPERAND_CCC, HW_H_UINT, 0, 8,
    513  1.10  christos     { 0, { &fr30_cgen_ifld_table[FR30_F_CCC] } },
    514   1.1  christos     { 0|A(HASH_PREFIX), { { { (1<<MACH_BASE), 0 } } } }  },
    515   1.1  christos /* nbit: negative   bit */
    516   1.1  christos   { "nbit", FR30_OPERAND_NBIT, HW_H_NBIT, 0, 0,
    517  1.10  christos     { 0, { 0 } },
    518   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    519   1.1  christos /* vbit: overflow   bit */
    520   1.1  christos   { "vbit", FR30_OPERAND_VBIT, HW_H_VBIT, 0, 0,
    521  1.10  christos     { 0, { 0 } },
    522   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    523   1.1  christos /* zbit: zero       bit */
    524   1.1  christos   { "zbit", FR30_OPERAND_ZBIT, HW_H_ZBIT, 0, 0,
    525  1.10  christos     { 0, { 0 } },
    526   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    527   1.1  christos /* cbit: carry      bit */
    528   1.1  christos   { "cbit", FR30_OPERAND_CBIT, HW_H_CBIT, 0, 0,
    529  1.10  christos     { 0, { 0 } },
    530   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    531   1.1  christos /* ibit: interrupt  bit */
    532   1.1  christos   { "ibit", FR30_OPERAND_IBIT, HW_H_IBIT, 0, 0,
    533  1.10  christos     { 0, { 0 } },
    534   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    535   1.1  christos /* sbit: stack      bit */
    536   1.1  christos   { "sbit", FR30_OPERAND_SBIT, HW_H_SBIT, 0, 0,
    537  1.10  christos     { 0, { 0 } },
    538   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    539   1.1  christos /* tbit: trace trap bit */
    540   1.1  christos   { "tbit", FR30_OPERAND_TBIT, HW_H_TBIT, 0, 0,
    541  1.10  christos     { 0, { 0 } },
    542   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    543   1.1  christos /* d0bit: division 0 bit */
    544   1.1  christos   { "d0bit", FR30_OPERAND_D0BIT, HW_H_D0BIT, 0, 0,
    545  1.10  christos     { 0, { 0 } },
    546   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    547   1.1  christos /* d1bit: division 1 bit */
    548   1.1  christos   { "d1bit", FR30_OPERAND_D1BIT, HW_H_D1BIT, 0, 0,
    549  1.10  christos     { 0, { 0 } },
    550   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    551   1.1  christos /* ccr: condition code bits */
    552   1.1  christos   { "ccr", FR30_OPERAND_CCR, HW_H_CCR, 0, 0,
    553  1.10  christos     { 0, { 0 } },
    554   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    555   1.1  christos /* scr: system condition bits */
    556   1.1  christos   { "scr", FR30_OPERAND_SCR, HW_H_SCR, 0, 0,
    557  1.10  christos     { 0, { 0 } },
    558   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    559   1.1  christos /* ilm: interrupt level mask */
    560   1.1  christos   { "ilm", FR30_OPERAND_ILM, HW_H_ILM, 0, 0,
    561  1.10  christos     { 0, { 0 } },
    562   1.1  christos     { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } } } }  },
    563   1.1  christos /* sentinel */
    564   1.1  christos   { 0, 0, 0, 0, 0,
    565  1.10  christos     { 0, { 0 } },
    566   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } } }
    567   1.1  christos };
    568   1.1  christos 
    569   1.1  christos #undef A
    570   1.1  christos 
    571   1.1  christos 
    572   1.1  christos /* The instruction table.  */
    573   1.1  christos 
    574   1.1  christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
    575   1.1  christos #define A(a) (1 << CGEN_INSN_##a)
    576   1.1  christos 
    577   1.1  christos static const CGEN_IBASE fr30_cgen_insn_table[MAX_INSNS] =
    578   1.1  christos {
    579   1.1  christos   /* Special null first entry.
    580   1.1  christos      A `num' value of zero is thus invalid.
    581   1.1  christos      Also, the special `invalid' insn resides here.  */
    582   1.1  christos   { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } } } } },
    583   1.1  christos /* add $Rj,$Ri */
    584   1.1  christos   {
    585   1.1  christos     FR30_INSN_ADD, "add", "add", 16,
    586   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    587   1.1  christos   },
    588   1.1  christos /* add $u4,$Ri */
    589   1.1  christos   {
    590   1.1  christos     FR30_INSN_ADDI, "addi", "add", 16,
    591   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    592   1.1  christos   },
    593   1.1  christos /* add2 $m4,$Ri */
    594   1.1  christos   {
    595   1.1  christos     FR30_INSN_ADD2, "add2", "add2", 16,
    596   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    597   1.1  christos   },
    598   1.1  christos /* addc $Rj,$Ri */
    599   1.1  christos   {
    600   1.1  christos     FR30_INSN_ADDC, "addc", "addc", 16,
    601   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    602   1.1  christos   },
    603   1.1  christos /* addn $Rj,$Ri */
    604   1.1  christos   {
    605   1.1  christos     FR30_INSN_ADDN, "addn", "addn", 16,
    606   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    607   1.1  christos   },
    608   1.1  christos /* addn $u4,$Ri */
    609   1.1  christos   {
    610   1.1  christos     FR30_INSN_ADDNI, "addni", "addn", 16,
    611   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    612   1.1  christos   },
    613   1.1  christos /* addn2 $m4,$Ri */
    614   1.1  christos   {
    615   1.1  christos     FR30_INSN_ADDN2, "addn2", "addn2", 16,
    616   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    617   1.1  christos   },
    618   1.1  christos /* sub $Rj,$Ri */
    619   1.1  christos   {
    620   1.1  christos     FR30_INSN_SUB, "sub", "sub", 16,
    621   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    622   1.1  christos   },
    623   1.1  christos /* subc $Rj,$Ri */
    624   1.1  christos   {
    625   1.1  christos     FR30_INSN_SUBC, "subc", "subc", 16,
    626   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    627   1.1  christos   },
    628   1.1  christos /* subn $Rj,$Ri */
    629   1.1  christos   {
    630   1.1  christos     FR30_INSN_SUBN, "subn", "subn", 16,
    631   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    632   1.1  christos   },
    633   1.1  christos /* cmp $Rj,$Ri */
    634   1.1  christos   {
    635   1.1  christos     FR30_INSN_CMP, "cmp", "cmp", 16,
    636   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    637   1.1  christos   },
    638   1.1  christos /* cmp $u4,$Ri */
    639   1.1  christos   {
    640   1.1  christos     FR30_INSN_CMPI, "cmpi", "cmp", 16,
    641   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    642   1.1  christos   },
    643   1.1  christos /* cmp2 $m4,$Ri */
    644   1.1  christos   {
    645   1.1  christos     FR30_INSN_CMP2, "cmp2", "cmp2", 16,
    646   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    647   1.1  christos   },
    648   1.1  christos /* and $Rj,$Ri */
    649   1.1  christos   {
    650   1.1  christos     FR30_INSN_AND, "and", "and", 16,
    651   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    652   1.1  christos   },
    653   1.1  christos /* or $Rj,$Ri */
    654   1.1  christos   {
    655   1.1  christos     FR30_INSN_OR, "or", "or", 16,
    656   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    657   1.1  christos   },
    658   1.1  christos /* eor $Rj,$Ri */
    659   1.1  christos   {
    660   1.1  christos     FR30_INSN_EOR, "eor", "eor", 16,
    661   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    662   1.1  christos   },
    663   1.1  christos /* and $Rj,@$Ri */
    664   1.1  christos   {
    665   1.1  christos     FR30_INSN_ANDM, "andm", "and", 16,
    666   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    667   1.1  christos   },
    668   1.1  christos /* andh $Rj,@$Ri */
    669   1.1  christos   {
    670   1.1  christos     FR30_INSN_ANDH, "andh", "andh", 16,
    671   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    672   1.1  christos   },
    673   1.1  christos /* andb $Rj,@$Ri */
    674   1.1  christos   {
    675   1.1  christos     FR30_INSN_ANDB, "andb", "andb", 16,
    676   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    677   1.1  christos   },
    678   1.1  christos /* or $Rj,@$Ri */
    679   1.1  christos   {
    680   1.1  christos     FR30_INSN_ORM, "orm", "or", 16,
    681   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    682   1.1  christos   },
    683   1.1  christos /* orh $Rj,@$Ri */
    684   1.1  christos   {
    685   1.1  christos     FR30_INSN_ORH, "orh", "orh", 16,
    686   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    687   1.1  christos   },
    688   1.1  christos /* orb $Rj,@$Ri */
    689   1.1  christos   {
    690   1.1  christos     FR30_INSN_ORB, "orb", "orb", 16,
    691   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    692   1.1  christos   },
    693   1.1  christos /* eor $Rj,@$Ri */
    694   1.1  christos   {
    695   1.1  christos     FR30_INSN_EORM, "eorm", "eor", 16,
    696   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    697   1.1  christos   },
    698   1.1  christos /* eorh $Rj,@$Ri */
    699   1.1  christos   {
    700   1.1  christos     FR30_INSN_EORH, "eorh", "eorh", 16,
    701   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    702   1.1  christos   },
    703   1.1  christos /* eorb $Rj,@$Ri */
    704   1.1  christos   {
    705   1.1  christos     FR30_INSN_EORB, "eorb", "eorb", 16,
    706   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    707   1.1  christos   },
    708   1.1  christos /* bandl $u4,@$Ri */
    709   1.1  christos   {
    710   1.1  christos     FR30_INSN_BANDL, "bandl", "bandl", 16,
    711   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    712   1.1  christos   },
    713   1.1  christos /* borl $u4,@$Ri */
    714   1.1  christos   {
    715   1.1  christos     FR30_INSN_BORL, "borl", "borl", 16,
    716   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    717   1.1  christos   },
    718   1.1  christos /* beorl $u4,@$Ri */
    719   1.1  christos   {
    720   1.1  christos     FR30_INSN_BEORL, "beorl", "beorl", 16,
    721   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    722   1.1  christos   },
    723   1.1  christos /* bandh $u4,@$Ri */
    724   1.1  christos   {
    725   1.1  christos     FR30_INSN_BANDH, "bandh", "bandh", 16,
    726   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    727   1.1  christos   },
    728   1.1  christos /* borh $u4,@$Ri */
    729   1.1  christos   {
    730   1.1  christos     FR30_INSN_BORH, "borh", "borh", 16,
    731   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    732   1.1  christos   },
    733   1.1  christos /* beorh $u4,@$Ri */
    734   1.1  christos   {
    735   1.1  christos     FR30_INSN_BEORH, "beorh", "beorh", 16,
    736   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    737   1.1  christos   },
    738   1.1  christos /* btstl $u4,@$Ri */
    739   1.1  christos   {
    740   1.1  christos     FR30_INSN_BTSTL, "btstl", "btstl", 16,
    741   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    742   1.1  christos   },
    743   1.1  christos /* btsth $u4,@$Ri */
    744   1.1  christos   {
    745   1.1  christos     FR30_INSN_BTSTH, "btsth", "btsth", 16,
    746   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    747   1.1  christos   },
    748   1.1  christos /* mul $Rj,$Ri */
    749   1.1  christos   {
    750   1.1  christos     FR30_INSN_MUL, "mul", "mul", 16,
    751   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    752   1.1  christos   },
    753   1.1  christos /* mulu $Rj,$Ri */
    754   1.1  christos   {
    755   1.1  christos     FR30_INSN_MULU, "mulu", "mulu", 16,
    756   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    757   1.1  christos   },
    758   1.1  christos /* mulh $Rj,$Ri */
    759   1.1  christos   {
    760   1.1  christos     FR30_INSN_MULH, "mulh", "mulh", 16,
    761   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    762   1.1  christos   },
    763   1.1  christos /* muluh $Rj,$Ri */
    764   1.1  christos   {
    765   1.1  christos     FR30_INSN_MULUH, "muluh", "muluh", 16,
    766   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    767   1.1  christos   },
    768   1.1  christos /* div0s $Ri */
    769   1.1  christos   {
    770   1.1  christos     FR30_INSN_DIV0S, "div0s", "div0s", 16,
    771   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    772   1.1  christos   },
    773   1.1  christos /* div0u $Ri */
    774   1.1  christos   {
    775   1.1  christos     FR30_INSN_DIV0U, "div0u", "div0u", 16,
    776   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    777   1.1  christos   },
    778   1.1  christos /* div1 $Ri */
    779   1.1  christos   {
    780   1.1  christos     FR30_INSN_DIV1, "div1", "div1", 16,
    781   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    782   1.1  christos   },
    783   1.1  christos /* div2 $Ri */
    784   1.1  christos   {
    785   1.1  christos     FR30_INSN_DIV2, "div2", "div2", 16,
    786   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    787   1.1  christos   },
    788   1.1  christos /* div3 */
    789   1.1  christos   {
    790   1.1  christos     FR30_INSN_DIV3, "div3", "div3", 16,
    791   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    792   1.1  christos   },
    793   1.1  christos /* div4s */
    794   1.1  christos   {
    795   1.1  christos     FR30_INSN_DIV4S, "div4s", "div4s", 16,
    796   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    797   1.1  christos   },
    798   1.1  christos /* lsl $Rj,$Ri */
    799   1.1  christos   {
    800   1.1  christos     FR30_INSN_LSL, "lsl", "lsl", 16,
    801   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    802   1.1  christos   },
    803   1.1  christos /* lsl $u4,$Ri */
    804   1.1  christos   {
    805   1.1  christos     FR30_INSN_LSLI, "lsli", "lsl", 16,
    806   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    807   1.1  christos   },
    808   1.1  christos /* lsl2 $u4,$Ri */
    809   1.1  christos   {
    810   1.1  christos     FR30_INSN_LSL2, "lsl2", "lsl2", 16,
    811   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    812   1.1  christos   },
    813   1.1  christos /* lsr $Rj,$Ri */
    814   1.1  christos   {
    815   1.1  christos     FR30_INSN_LSR, "lsr", "lsr", 16,
    816   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    817   1.1  christos   },
    818   1.1  christos /* lsr $u4,$Ri */
    819   1.1  christos   {
    820   1.1  christos     FR30_INSN_LSRI, "lsri", "lsr", 16,
    821   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    822   1.1  christos   },
    823   1.1  christos /* lsr2 $u4,$Ri */
    824   1.1  christos   {
    825   1.1  christos     FR30_INSN_LSR2, "lsr2", "lsr2", 16,
    826   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    827   1.1  christos   },
    828   1.1  christos /* asr $Rj,$Ri */
    829   1.1  christos   {
    830   1.1  christos     FR30_INSN_ASR, "asr", "asr", 16,
    831   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    832   1.1  christos   },
    833   1.1  christos /* asr $u4,$Ri */
    834   1.1  christos   {
    835   1.1  christos     FR30_INSN_ASRI, "asri", "asr", 16,
    836   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    837   1.1  christos   },
    838   1.1  christos /* asr2 $u4,$Ri */
    839   1.1  christos   {
    840   1.1  christos     FR30_INSN_ASR2, "asr2", "asr2", 16,
    841   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    842   1.1  christos   },
    843   1.1  christos /* ldi:8 $i8,$Ri */
    844   1.1  christos   {
    845   1.1  christos     FR30_INSN_LDI8, "ldi8", "ldi:8", 16,
    846   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    847   1.1  christos   },
    848   1.1  christos /* ldi:20 $i20,$Ri */
    849   1.1  christos   {
    850   1.1  christos     FR30_INSN_LDI20, "ldi20", "ldi:20", 32,
    851   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    852   1.1  christos   },
    853   1.1  christos /* ldi:32 $i32,$Ri */
    854   1.1  christos   {
    855   1.1  christos     FR30_INSN_LDI32, "ldi32", "ldi:32", 48,
    856   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    857   1.1  christos   },
    858   1.1  christos /* ld @$Rj,$Ri */
    859   1.1  christos   {
    860   1.1  christos     FR30_INSN_LD, "ld", "ld", 16,
    861   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    862   1.1  christos   },
    863   1.1  christos /* lduh @$Rj,$Ri */
    864   1.1  christos   {
    865   1.1  christos     FR30_INSN_LDUH, "lduh", "lduh", 16,
    866   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    867   1.1  christos   },
    868   1.1  christos /* ldub @$Rj,$Ri */
    869   1.1  christos   {
    870   1.1  christos     FR30_INSN_LDUB, "ldub", "ldub", 16,
    871   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    872   1.1  christos   },
    873   1.1  christos /* ld @($R13,$Rj),$Ri */
    874   1.1  christos   {
    875   1.1  christos     FR30_INSN_LDR13, "ldr13", "ld", 16,
    876   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    877   1.1  christos   },
    878   1.1  christos /* lduh @($R13,$Rj),$Ri */
    879   1.1  christos   {
    880   1.1  christos     FR30_INSN_LDR13UH, "ldr13uh", "lduh", 16,
    881   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    882   1.1  christos   },
    883   1.1  christos /* ldub @($R13,$Rj),$Ri */
    884   1.1  christos   {
    885   1.1  christos     FR30_INSN_LDR13UB, "ldr13ub", "ldub", 16,
    886   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    887   1.1  christos   },
    888   1.1  christos /* ld @($R14,$disp10),$Ri */
    889   1.1  christos   {
    890   1.1  christos     FR30_INSN_LDR14, "ldr14", "ld", 16,
    891   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    892   1.1  christos   },
    893   1.1  christos /* lduh @($R14,$disp9),$Ri */
    894   1.1  christos   {
    895   1.1  christos     FR30_INSN_LDR14UH, "ldr14uh", "lduh", 16,
    896   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    897   1.1  christos   },
    898   1.1  christos /* ldub @($R14,$disp8),$Ri */
    899   1.1  christos   {
    900   1.1  christos     FR30_INSN_LDR14UB, "ldr14ub", "ldub", 16,
    901   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    902   1.1  christos   },
    903   1.1  christos /* ld @($R15,$udisp6),$Ri */
    904   1.1  christos   {
    905   1.1  christos     FR30_INSN_LDR15, "ldr15", "ld", 16,
    906   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    907   1.1  christos   },
    908   1.1  christos /* ld @$R15+,$Ri */
    909   1.1  christos   {
    910   1.1  christos     FR30_INSN_LDR15GR, "ldr15gr", "ld", 16,
    911   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    912   1.1  christos   },
    913   1.1  christos /* ld @$R15+,$Rs2 */
    914   1.1  christos   {
    915   1.1  christos     FR30_INSN_LDR15DR, "ldr15dr", "ld", 16,
    916   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    917   1.1  christos   },
    918   1.1  christos /* ld @$R15+,$ps */
    919   1.1  christos   {
    920   1.1  christos     FR30_INSN_LDR15PS, "ldr15ps", "ld", 16,
    921   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
    922   1.1  christos   },
    923   1.1  christos /* st $Ri,@$Rj */
    924   1.1  christos   {
    925   1.1  christos     FR30_INSN_ST, "st", "st", 16,
    926   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    927   1.1  christos   },
    928   1.1  christos /* sth $Ri,@$Rj */
    929   1.1  christos   {
    930   1.1  christos     FR30_INSN_STH, "sth", "sth", 16,
    931   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    932   1.1  christos   },
    933   1.1  christos /* stb $Ri,@$Rj */
    934   1.1  christos   {
    935   1.1  christos     FR30_INSN_STB, "stb", "stb", 16,
    936   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    937   1.1  christos   },
    938   1.1  christos /* st $Ri,@($R13,$Rj) */
    939   1.1  christos   {
    940   1.1  christos     FR30_INSN_STR13, "str13", "st", 16,
    941   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    942   1.1  christos   },
    943   1.1  christos /* sth $Ri,@($R13,$Rj) */
    944   1.1  christos   {
    945   1.1  christos     FR30_INSN_STR13H, "str13h", "sth", 16,
    946   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    947   1.1  christos   },
    948   1.1  christos /* stb $Ri,@($R13,$Rj) */
    949   1.1  christos   {
    950   1.1  christos     FR30_INSN_STR13B, "str13b", "stb", 16,
    951   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    952   1.1  christos   },
    953   1.1  christos /* st $Ri,@($R14,$disp10) */
    954   1.1  christos   {
    955   1.1  christos     FR30_INSN_STR14, "str14", "st", 16,
    956   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    957   1.1  christos   },
    958   1.1  christos /* sth $Ri,@($R14,$disp9) */
    959   1.1  christos   {
    960   1.1  christos     FR30_INSN_STR14H, "str14h", "sth", 16,
    961   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    962   1.1  christos   },
    963   1.1  christos /* stb $Ri,@($R14,$disp8) */
    964   1.1  christos   {
    965   1.1  christos     FR30_INSN_STR14B, "str14b", "stb", 16,
    966   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    967   1.1  christos   },
    968   1.1  christos /* st $Ri,@($R15,$udisp6) */
    969   1.1  christos   {
    970   1.1  christos     FR30_INSN_STR15, "str15", "st", 16,
    971   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    972   1.1  christos   },
    973   1.1  christos /* st $Ri,@-$R15 */
    974   1.1  christos   {
    975   1.1  christos     FR30_INSN_STR15GR, "str15gr", "st", 16,
    976   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    977   1.1  christos   },
    978   1.1  christos /* st $Rs2,@-$R15 */
    979   1.1  christos   {
    980   1.1  christos     FR30_INSN_STR15DR, "str15dr", "st", 16,
    981   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    982   1.1  christos   },
    983   1.1  christos /* st $ps,@-$R15 */
    984   1.1  christos   {
    985   1.1  christos     FR30_INSN_STR15PS, "str15ps", "st", 16,
    986   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    987   1.1  christos   },
    988   1.1  christos /* mov $Rj,$Ri */
    989   1.1  christos   {
    990   1.1  christos     FR30_INSN_MOV, "mov", "mov", 16,
    991   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    992   1.1  christos   },
    993   1.1  christos /* mov $Rs1,$Ri */
    994   1.1  christos   {
    995   1.1  christos     FR30_INSN_MOVDR, "movdr", "mov", 16,
    996   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
    997   1.1  christos   },
    998   1.1  christos /* mov $ps,$Ri */
    999   1.1  christos   {
   1000   1.1  christos     FR30_INSN_MOVPS, "movps", "mov", 16,
   1001   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1002   1.1  christos   },
   1003   1.1  christos /* mov $Ri,$Rs1 */
   1004   1.1  christos   {
   1005   1.1  christos     FR30_INSN_MOV2DR, "mov2dr", "mov", 16,
   1006   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1007   1.1  christos   },
   1008   1.1  christos /* mov $Ri,$ps */
   1009   1.1  christos   {
   1010   1.1  christos     FR30_INSN_MOV2PS, "mov2ps", "mov", 16,
   1011   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1012   1.1  christos   },
   1013   1.1  christos /* jmp @$Ri */
   1014   1.1  christos   {
   1015   1.1  christos     FR30_INSN_JMP, "jmp", "jmp", 16,
   1016   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1017   1.1  christos   },
   1018   1.1  christos /* jmp:d @$Ri */
   1019   1.1  christos   {
   1020   1.1  christos     FR30_INSN_JMPD, "jmpd", "jmp:d", 16,
   1021   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1022   1.1  christos   },
   1023   1.1  christos /* call @$Ri */
   1024   1.1  christos   {
   1025   1.1  christos     FR30_INSN_CALLR, "callr", "call", 16,
   1026   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1027   1.1  christos   },
   1028   1.1  christos /* call:d @$Ri */
   1029   1.1  christos   {
   1030   1.1  christos     FR30_INSN_CALLRD, "callrd", "call:d", 16,
   1031   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1032   1.1  christos   },
   1033   1.1  christos /* call $label12 */
   1034   1.1  christos   {
   1035   1.1  christos     FR30_INSN_CALL, "call", "call", 16,
   1036   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1037   1.1  christos   },
   1038   1.1  christos /* call:d $label12 */
   1039   1.1  christos   {
   1040   1.1  christos     FR30_INSN_CALLD, "calld", "call:d", 16,
   1041   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1042   1.1  christos   },
   1043   1.1  christos /* ret */
   1044   1.1  christos   {
   1045   1.1  christos     FR30_INSN_RET, "ret", "ret", 16,
   1046   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1047   1.1  christos   },
   1048   1.1  christos /* ret:d */
   1049   1.1  christos   {
   1050   1.1  christos     FR30_INSN_RET_D, "ret:d", "ret:d", 16,
   1051   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1052   1.1  christos   },
   1053   1.1  christos /* int $u8 */
   1054   1.1  christos   {
   1055   1.1  christos     FR30_INSN_INT, "int", "int", 16,
   1056   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1057   1.1  christos   },
   1058   1.1  christos /* inte */
   1059   1.1  christos   {
   1060   1.1  christos     FR30_INSN_INTE, "inte", "inte", 16,
   1061   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1062   1.1  christos   },
   1063   1.1  christos /* reti */
   1064   1.1  christos   {
   1065   1.1  christos     FR30_INSN_RETI, "reti", "reti", 16,
   1066   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1067   1.1  christos   },
   1068   1.1  christos /* bra:d $label9 */
   1069   1.1  christos   {
   1070   1.1  christos     FR30_INSN_BRAD, "brad", "bra:d", 16,
   1071   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1072   1.1  christos   },
   1073   1.1  christos /* bra $label9 */
   1074   1.1  christos   {
   1075   1.1  christos     FR30_INSN_BRA, "bra", "bra", 16,
   1076   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1077   1.1  christos   },
   1078   1.1  christos /* bno:d $label9 */
   1079   1.1  christos   {
   1080   1.1  christos     FR30_INSN_BNOD, "bnod", "bno:d", 16,
   1081   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1082   1.1  christos   },
   1083   1.1  christos /* bno $label9 */
   1084   1.1  christos   {
   1085   1.1  christos     FR30_INSN_BNO, "bno", "bno", 16,
   1086   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1087   1.1  christos   },
   1088   1.1  christos /* beq:d $label9 */
   1089   1.1  christos   {
   1090   1.1  christos     FR30_INSN_BEQD, "beqd", "beq:d", 16,
   1091   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1092   1.1  christos   },
   1093   1.1  christos /* beq $label9 */
   1094   1.1  christos   {
   1095   1.1  christos     FR30_INSN_BEQ, "beq", "beq", 16,
   1096   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1097   1.1  christos   },
   1098   1.1  christos /* bne:d $label9 */
   1099   1.1  christos   {
   1100   1.1  christos     FR30_INSN_BNED, "bned", "bne:d", 16,
   1101   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1102   1.1  christos   },
   1103   1.1  christos /* bne $label9 */
   1104   1.1  christos   {
   1105   1.1  christos     FR30_INSN_BNE, "bne", "bne", 16,
   1106   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1107   1.1  christos   },
   1108   1.1  christos /* bc:d $label9 */
   1109   1.1  christos   {
   1110   1.1  christos     FR30_INSN_BCD, "bcd", "bc:d", 16,
   1111   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1112   1.1  christos   },
   1113   1.1  christos /* bc $label9 */
   1114   1.1  christos   {
   1115   1.1  christos     FR30_INSN_BC, "bc", "bc", 16,
   1116   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1117   1.1  christos   },
   1118   1.1  christos /* bnc:d $label9 */
   1119   1.1  christos   {
   1120   1.1  christos     FR30_INSN_BNCD, "bncd", "bnc:d", 16,
   1121   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1122   1.1  christos   },
   1123   1.1  christos /* bnc $label9 */
   1124   1.1  christos   {
   1125   1.1  christos     FR30_INSN_BNC, "bnc", "bnc", 16,
   1126   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1127   1.1  christos   },
   1128   1.1  christos /* bn:d $label9 */
   1129   1.1  christos   {
   1130   1.1  christos     FR30_INSN_BND, "bnd", "bn:d", 16,
   1131   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1132   1.1  christos   },
   1133   1.1  christos /* bn $label9 */
   1134   1.1  christos   {
   1135   1.1  christos     FR30_INSN_BN, "bn", "bn", 16,
   1136   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1137   1.1  christos   },
   1138   1.1  christos /* bp:d $label9 */
   1139   1.1  christos   {
   1140   1.1  christos     FR30_INSN_BPD, "bpd", "bp:d", 16,
   1141   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1142   1.1  christos   },
   1143   1.1  christos /* bp $label9 */
   1144   1.1  christos   {
   1145   1.1  christos     FR30_INSN_BP, "bp", "bp", 16,
   1146   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1147   1.1  christos   },
   1148   1.1  christos /* bv:d $label9 */
   1149   1.1  christos   {
   1150   1.1  christos     FR30_INSN_BVD, "bvd", "bv:d", 16,
   1151   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1152   1.1  christos   },
   1153   1.1  christos /* bv $label9 */
   1154   1.1  christos   {
   1155   1.1  christos     FR30_INSN_BV, "bv", "bv", 16,
   1156   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1157   1.1  christos   },
   1158   1.1  christos /* bnv:d $label9 */
   1159   1.1  christos   {
   1160   1.1  christos     FR30_INSN_BNVD, "bnvd", "bnv:d", 16,
   1161   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1162   1.1  christos   },
   1163   1.1  christos /* bnv $label9 */
   1164   1.1  christos   {
   1165   1.1  christos     FR30_INSN_BNV, "bnv", "bnv", 16,
   1166   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1167   1.1  christos   },
   1168   1.1  christos /* blt:d $label9 */
   1169   1.1  christos   {
   1170   1.1  christos     FR30_INSN_BLTD, "bltd", "blt:d", 16,
   1171   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1172   1.1  christos   },
   1173   1.1  christos /* blt $label9 */
   1174   1.1  christos   {
   1175   1.1  christos     FR30_INSN_BLT, "blt", "blt", 16,
   1176   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1177   1.1  christos   },
   1178   1.1  christos /* bge:d $label9 */
   1179   1.1  christos   {
   1180   1.1  christos     FR30_INSN_BGED, "bged", "bge:d", 16,
   1181   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1182   1.1  christos   },
   1183   1.1  christos /* bge $label9 */
   1184   1.1  christos   {
   1185   1.1  christos     FR30_INSN_BGE, "bge", "bge", 16,
   1186   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1187   1.1  christos   },
   1188   1.1  christos /* ble:d $label9 */
   1189   1.1  christos   {
   1190   1.1  christos     FR30_INSN_BLED, "bled", "ble:d", 16,
   1191   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1192   1.1  christos   },
   1193   1.1  christos /* ble $label9 */
   1194   1.1  christos   {
   1195   1.1  christos     FR30_INSN_BLE, "ble", "ble", 16,
   1196   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1197   1.1  christos   },
   1198   1.1  christos /* bgt:d $label9 */
   1199   1.1  christos   {
   1200   1.1  christos     FR30_INSN_BGTD, "bgtd", "bgt:d", 16,
   1201   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1202   1.1  christos   },
   1203   1.1  christos /* bgt $label9 */
   1204   1.1  christos   {
   1205   1.1  christos     FR30_INSN_BGT, "bgt", "bgt", 16,
   1206   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1207   1.1  christos   },
   1208   1.1  christos /* bls:d $label9 */
   1209   1.1  christos   {
   1210   1.1  christos     FR30_INSN_BLSD, "blsd", "bls:d", 16,
   1211   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1212   1.1  christos   },
   1213   1.1  christos /* bls $label9 */
   1214   1.1  christos   {
   1215   1.1  christos     FR30_INSN_BLS, "bls", "bls", 16,
   1216   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1217   1.1  christos   },
   1218   1.1  christos /* bhi:d $label9 */
   1219   1.1  christos   {
   1220   1.1  christos     FR30_INSN_BHID, "bhid", "bhi:d", 16,
   1221   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI)|A(DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1222   1.1  christos   },
   1223   1.1  christos /* bhi $label9 */
   1224   1.1  christos   {
   1225   1.1  christos     FR30_INSN_BHI, "bhi", "bhi", 16,
   1226   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT)|A(COND_CTI), { { { (1<<MACH_BASE), 0 } } } }
   1227   1.1  christos   },
   1228   1.1  christos /* dmov $R13,@$dir10 */
   1229   1.1  christos   {
   1230   1.1  christos     FR30_INSN_DMOVR13, "dmovr13", "dmov", 16,
   1231   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1232   1.1  christos   },
   1233   1.1  christos /* dmovh $R13,@$dir9 */
   1234   1.1  christos   {
   1235   1.1  christos     FR30_INSN_DMOVR13H, "dmovr13h", "dmovh", 16,
   1236   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1237   1.1  christos   },
   1238   1.1  christos /* dmovb $R13,@$dir8 */
   1239   1.1  christos   {
   1240   1.1  christos     FR30_INSN_DMOVR13B, "dmovr13b", "dmovb", 16,
   1241   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1242   1.1  christos   },
   1243   1.1  christos /* dmov @$R13+,@$dir10 */
   1244   1.1  christos   {
   1245   1.1  christos     FR30_INSN_DMOVR13PI, "dmovr13pi", "dmov", 16,
   1246   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1247   1.1  christos   },
   1248   1.1  christos /* dmovh @$R13+,@$dir9 */
   1249   1.1  christos   {
   1250   1.1  christos     FR30_INSN_DMOVR13PIH, "dmovr13pih", "dmovh", 16,
   1251   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1252   1.1  christos   },
   1253   1.1  christos /* dmovb @$R13+,@$dir8 */
   1254   1.1  christos   {
   1255   1.1  christos     FR30_INSN_DMOVR13PIB, "dmovr13pib", "dmovb", 16,
   1256   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1257   1.1  christos   },
   1258   1.1  christos /* dmov @$R15+,@$dir10 */
   1259   1.1  christos   {
   1260   1.1  christos     FR30_INSN_DMOVR15PI, "dmovr15pi", "dmov", 16,
   1261   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1262   1.1  christos   },
   1263   1.1  christos /* dmov @$dir10,$R13 */
   1264   1.1  christos   {
   1265   1.1  christos     FR30_INSN_DMOV2R13, "dmov2r13", "dmov", 16,
   1266   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1267   1.1  christos   },
   1268   1.1  christos /* dmovh @$dir9,$R13 */
   1269   1.1  christos   {
   1270   1.1  christos     FR30_INSN_DMOV2R13H, "dmov2r13h", "dmovh", 16,
   1271   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1272   1.1  christos   },
   1273   1.1  christos /* dmovb @$dir8,$R13 */
   1274   1.1  christos   {
   1275   1.1  christos     FR30_INSN_DMOV2R13B, "dmov2r13b", "dmovb", 16,
   1276   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1277   1.1  christos   },
   1278   1.1  christos /* dmov @$dir10,@$R13+ */
   1279   1.1  christos   {
   1280   1.1  christos     FR30_INSN_DMOV2R13PI, "dmov2r13pi", "dmov", 16,
   1281   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1282   1.1  christos   },
   1283   1.1  christos /* dmovh @$dir9,@$R13+ */
   1284   1.1  christos   {
   1285   1.1  christos     FR30_INSN_DMOV2R13PIH, "dmov2r13pih", "dmovh", 16,
   1286   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1287   1.1  christos   },
   1288   1.1  christos /* dmovb @$dir8,@$R13+ */
   1289   1.1  christos   {
   1290   1.1  christos     FR30_INSN_DMOV2R13PIB, "dmov2r13pib", "dmovb", 16,
   1291   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1292   1.1  christos   },
   1293   1.1  christos /* dmov @$dir10,@-$R15 */
   1294   1.1  christos   {
   1295   1.1  christos     FR30_INSN_DMOV2R15PD, "dmov2r15pd", "dmov", 16,
   1296   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1297   1.1  christos   },
   1298   1.1  christos /* ldres @$Ri+,$u4 */
   1299   1.1  christos   {
   1300   1.1  christos     FR30_INSN_LDRES, "ldres", "ldres", 16,
   1301   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1302   1.1  christos   },
   1303   1.1  christos /* stres $u4,@$Ri+ */
   1304   1.1  christos   {
   1305   1.1  christos     FR30_INSN_STRES, "stres", "stres", 16,
   1306   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1307   1.1  christos   },
   1308   1.1  christos /* copop $u4c,$ccc,$CRj,$CRi */
   1309   1.1  christos   {
   1310   1.1  christos     FR30_INSN_COPOP, "copop", "copop", 32,
   1311   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1312   1.1  christos   },
   1313   1.1  christos /* copld $u4c,$ccc,$Rjc,$CRi */
   1314   1.1  christos   {
   1315   1.1  christos     FR30_INSN_COPLD, "copld", "copld", 32,
   1316   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1317   1.1  christos   },
   1318   1.1  christos /* copst $u4c,$ccc,$CRj,$Ric */
   1319   1.1  christos   {
   1320   1.1  christos     FR30_INSN_COPST, "copst", "copst", 32,
   1321   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1322   1.1  christos   },
   1323   1.1  christos /* copsv $u4c,$ccc,$CRj,$Ric */
   1324   1.1  christos   {
   1325   1.1  christos     FR30_INSN_COPSV, "copsv", "copsv", 32,
   1326   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1327   1.1  christos   },
   1328   1.1  christos /* nop */
   1329   1.1  christos   {
   1330   1.1  christos     FR30_INSN_NOP, "nop", "nop", 16,
   1331   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1332   1.1  christos   },
   1333   1.1  christos /* andccr $u8 */
   1334   1.1  christos   {
   1335   1.1  christos     FR30_INSN_ANDCCR, "andccr", "andccr", 16,
   1336   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1337   1.1  christos   },
   1338   1.1  christos /* orccr $u8 */
   1339   1.1  christos   {
   1340   1.1  christos     FR30_INSN_ORCCR, "orccr", "orccr", 16,
   1341   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1342   1.1  christos   },
   1343   1.1  christos /* stilm $u8 */
   1344   1.1  christos   {
   1345   1.1  christos     FR30_INSN_STILM, "stilm", "stilm", 16,
   1346   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1347   1.1  christos   },
   1348   1.1  christos /* addsp $s10 */
   1349   1.1  christos   {
   1350   1.1  christos     FR30_INSN_ADDSP, "addsp", "addsp", 16,
   1351   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1352   1.1  christos   },
   1353   1.1  christos /* extsb $Ri */
   1354   1.1  christos   {
   1355   1.1  christos     FR30_INSN_EXTSB, "extsb", "extsb", 16,
   1356   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1357   1.1  christos   },
   1358   1.1  christos /* extub $Ri */
   1359   1.1  christos   {
   1360   1.1  christos     FR30_INSN_EXTUB, "extub", "extub", 16,
   1361   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1362   1.1  christos   },
   1363   1.1  christos /* extsh $Ri */
   1364   1.1  christos   {
   1365   1.1  christos     FR30_INSN_EXTSH, "extsh", "extsh", 16,
   1366   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1367   1.1  christos   },
   1368   1.1  christos /* extuh $Ri */
   1369   1.1  christos   {
   1370   1.1  christos     FR30_INSN_EXTUH, "extuh", "extuh", 16,
   1371   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1372   1.1  christos   },
   1373   1.1  christos /* ldm0 ($reglist_low_ld) */
   1374   1.1  christos   {
   1375   1.1  christos     FR30_INSN_LDM0, "ldm0", "ldm0", 16,
   1376   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1377   1.1  christos   },
   1378   1.1  christos /* ldm1 ($reglist_hi_ld) */
   1379   1.1  christos   {
   1380   1.1  christos     FR30_INSN_LDM1, "ldm1", "ldm1", 16,
   1381   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1382   1.1  christos   },
   1383   1.1  christos /* stm0 ($reglist_low_st) */
   1384   1.1  christos   {
   1385   1.1  christos     FR30_INSN_STM0, "stm0", "stm0", 16,
   1386   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1387   1.1  christos   },
   1388   1.1  christos /* stm1 ($reglist_hi_st) */
   1389   1.1  christos   {
   1390   1.1  christos     FR30_INSN_STM1, "stm1", "stm1", 16,
   1391   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1392   1.1  christos   },
   1393   1.1  christos /* enter $u10 */
   1394   1.1  christos   {
   1395   1.1  christos     FR30_INSN_ENTER, "enter", "enter", 16,
   1396   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1397   1.1  christos   },
   1398   1.1  christos /* leave */
   1399   1.1  christos   {
   1400   1.1  christos     FR30_INSN_LEAVE, "leave", "leave", 16,
   1401   1.1  christos     { 0, { { { (1<<MACH_BASE), 0 } } } }
   1402   1.1  christos   },
   1403   1.1  christos /* xchb @$Rj,$Ri */
   1404   1.1  christos   {
   1405   1.1  christos     FR30_INSN_XCHB, "xchb", "xchb", 16,
   1406   1.1  christos     { 0|A(NOT_IN_DELAY_SLOT), { { { (1<<MACH_BASE), 0 } } } }
   1407   1.1  christos   },
   1408   1.1  christos };
   1409   1.1  christos 
   1410   1.1  christos #undef OP
   1411   1.1  christos #undef A
   1412   1.1  christos 
   1413   1.1  christos /* Initialize anything needed to be done once, before any cpu_open call.  */
   1414   1.1  christos 
   1415   1.1  christos static void
   1416   1.1  christos init_tables (void)
   1417   1.1  christos {
   1418   1.1  christos }
   1419   1.1  christos 
   1420   1.8  christos #ifndef opcodes_error_handler
   1421   1.8  christos #define opcodes_error_handler(...) \
   1422   1.8  christos   fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr)
   1423   1.8  christos #endif
   1424   1.8  christos 
   1425   1.1  christos static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
   1426   1.1  christos static void build_hw_table      (CGEN_CPU_TABLE *);
   1427   1.1  christos static void build_ifield_table  (CGEN_CPU_TABLE *);
   1428   1.1  christos static void build_operand_table (CGEN_CPU_TABLE *);
   1429   1.1  christos static void build_insn_table    (CGEN_CPU_TABLE *);
   1430   1.1  christos static void fr30_cgen_rebuild_tables (CGEN_CPU_TABLE *);
   1431   1.1  christos 
   1432   1.1  christos /* Subroutine of fr30_cgen_cpu_open to look up a mach via its bfd name.  */
   1433   1.1  christos 
   1434   1.1  christos static const CGEN_MACH *
   1435   1.1  christos lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
   1436   1.1  christos {
   1437   1.1  christos   while (table->name)
   1438   1.1  christos     {
   1439   1.1  christos       if (strcmp (name, table->bfd_name) == 0)
   1440   1.1  christos 	return table;
   1441   1.1  christos       ++table;
   1442   1.1  christos     }
   1443   1.7  christos   return NULL;
   1444   1.1  christos }
   1445   1.1  christos 
   1446   1.1  christos /* Subroutine of fr30_cgen_cpu_open to build the hardware table.  */
   1447   1.1  christos 
   1448   1.1  christos static void
   1449   1.1  christos build_hw_table (CGEN_CPU_TABLE *cd)
   1450   1.1  christos {
   1451   1.1  christos   int i;
   1452   1.1  christos   int machs = cd->machs;
   1453   1.1  christos   const CGEN_HW_ENTRY *init = & fr30_cgen_hw_table[0];
   1454   1.1  christos   /* MAX_HW is only an upper bound on the number of selected entries.
   1455   1.1  christos      However each entry is indexed by it's enum so there can be holes in
   1456   1.1  christos      the table.  */
   1457   1.1  christos   const CGEN_HW_ENTRY **selected =
   1458   1.1  christos     (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
   1459   1.1  christos 
   1460   1.1  christos   cd->hw_table.init_entries = init;
   1461   1.1  christos   cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
   1462   1.1  christos   memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
   1463   1.1  christos   /* ??? For now we just use machs to determine which ones we want.  */
   1464   1.1  christos   for (i = 0; init[i].name != NULL; ++i)
   1465   1.1  christos     if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
   1466   1.1  christos 	& machs)
   1467   1.1  christos       selected[init[i].type] = &init[i];
   1468   1.1  christos   cd->hw_table.entries = selected;
   1469   1.1  christos   cd->hw_table.num_entries = MAX_HW;
   1470   1.1  christos }
   1471   1.1  christos 
   1472   1.1  christos /* Subroutine of fr30_cgen_cpu_open to build the hardware table.  */
   1473   1.1  christos 
   1474   1.1  christos static void
   1475   1.1  christos build_ifield_table (CGEN_CPU_TABLE *cd)
   1476   1.1  christos {
   1477   1.1  christos   cd->ifld_table = & fr30_cgen_ifld_table[0];
   1478   1.1  christos }
   1479   1.1  christos 
   1480   1.1  christos /* Subroutine of fr30_cgen_cpu_open to build the hardware table.  */
   1481   1.1  christos 
   1482   1.1  christos static void
   1483   1.1  christos build_operand_table (CGEN_CPU_TABLE *cd)
   1484   1.1  christos {
   1485   1.1  christos   int i;
   1486   1.1  christos   int machs = cd->machs;
   1487   1.1  christos   const CGEN_OPERAND *init = & fr30_cgen_operand_table[0];
   1488   1.1  christos   /* MAX_OPERANDS is only an upper bound on the number of selected entries.
   1489   1.1  christos      However each entry is indexed by it's enum so there can be holes in
   1490   1.1  christos      the table.  */
   1491   1.1  christos   const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
   1492   1.1  christos 
   1493   1.1  christos   cd->operand_table.init_entries = init;
   1494   1.1  christos   cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
   1495   1.1  christos   memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
   1496   1.1  christos   /* ??? For now we just use mach to determine which ones we want.  */
   1497   1.1  christos   for (i = 0; init[i].name != NULL; ++i)
   1498   1.1  christos     if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
   1499   1.1  christos 	& machs)
   1500   1.1  christos       selected[init[i].type] = &init[i];
   1501   1.1  christos   cd->operand_table.entries = selected;
   1502   1.1  christos   cd->operand_table.num_entries = MAX_OPERANDS;
   1503   1.1  christos }
   1504   1.1  christos 
   1505   1.1  christos /* Subroutine of fr30_cgen_cpu_open to build the hardware table.
   1506   1.1  christos    ??? This could leave out insns not supported by the specified mach/isa,
   1507   1.1  christos    but that would cause errors like "foo only supported by bar" to become
   1508   1.1  christos    "unknown insn", so for now we include all insns and require the app to
   1509   1.1  christos    do the checking later.
   1510   1.1  christos    ??? On the other hand, parsing of such insns may require their hardware or
   1511   1.1  christos    operand elements to be in the table [which they mightn't be].  */
   1512   1.1  christos 
   1513   1.1  christos static void
   1514   1.1  christos build_insn_table (CGEN_CPU_TABLE *cd)
   1515   1.1  christos {
   1516   1.1  christos   int i;
   1517   1.1  christos   const CGEN_IBASE *ib = & fr30_cgen_insn_table[0];
   1518   1.1  christos   CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
   1519   1.1  christos 
   1520   1.1  christos   memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
   1521   1.1  christos   for (i = 0; i < MAX_INSNS; ++i)
   1522   1.1  christos     insns[i].base = &ib[i];
   1523   1.1  christos   cd->insn_table.init_entries = insns;
   1524   1.1  christos   cd->insn_table.entry_size = sizeof (CGEN_IBASE);
   1525   1.1  christos   cd->insn_table.num_init_entries = MAX_INSNS;
   1526   1.1  christos }
   1527   1.1  christos 
   1528   1.1  christos /* Subroutine of fr30_cgen_cpu_open to rebuild the tables.  */
   1529   1.1  christos 
   1530   1.1  christos static void
   1531   1.1  christos fr30_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
   1532   1.1  christos {
   1533   1.1  christos   int i;
   1534   1.1  christos   CGEN_BITSET *isas = cd->isas;
   1535   1.1  christos   unsigned int machs = cd->machs;
   1536   1.1  christos 
   1537   1.1  christos   cd->int_insn_p = CGEN_INT_INSN_P;
   1538   1.1  christos 
   1539   1.1  christos   /* Data derived from the isa spec.  */
   1540   1.1  christos #define UNSET (CGEN_SIZE_UNKNOWN + 1)
   1541   1.1  christos   cd->default_insn_bitsize = UNSET;
   1542   1.1  christos   cd->base_insn_bitsize = UNSET;
   1543   1.1  christos   cd->min_insn_bitsize = 65535; /* Some ridiculously big number.  */
   1544   1.1  christos   cd->max_insn_bitsize = 0;
   1545   1.1  christos   for (i = 0; i < MAX_ISAS; ++i)
   1546   1.1  christos     if (cgen_bitset_contains (isas, i))
   1547   1.1  christos       {
   1548   1.1  christos 	const CGEN_ISA *isa = & fr30_cgen_isa_table[i];
   1549   1.1  christos 
   1550   1.1  christos 	/* Default insn sizes of all selected isas must be
   1551   1.1  christos 	   equal or we set the result to 0, meaning "unknown".  */
   1552   1.1  christos 	if (cd->default_insn_bitsize == UNSET)
   1553   1.1  christos 	  cd->default_insn_bitsize = isa->default_insn_bitsize;
   1554   1.1  christos 	else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
   1555   1.1  christos 	  ; /* This is ok.  */
   1556   1.1  christos 	else
   1557   1.1  christos 	  cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
   1558   1.1  christos 
   1559   1.1  christos 	/* Base insn sizes of all selected isas must be equal
   1560   1.1  christos 	   or we set the result to 0, meaning "unknown".  */
   1561   1.1  christos 	if (cd->base_insn_bitsize == UNSET)
   1562   1.1  christos 	  cd->base_insn_bitsize = isa->base_insn_bitsize;
   1563   1.1  christos 	else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
   1564   1.1  christos 	  ; /* This is ok.  */
   1565   1.1  christos 	else
   1566   1.1  christos 	  cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
   1567   1.1  christos 
   1568   1.1  christos 	/* Set min,max insn sizes.  */
   1569   1.1  christos 	if (isa->min_insn_bitsize < cd->min_insn_bitsize)
   1570   1.1  christos 	  cd->min_insn_bitsize = isa->min_insn_bitsize;
   1571   1.1  christos 	if (isa->max_insn_bitsize > cd->max_insn_bitsize)
   1572   1.1  christos 	  cd->max_insn_bitsize = isa->max_insn_bitsize;
   1573   1.1  christos       }
   1574   1.1  christos 
   1575   1.1  christos   /* Data derived from the mach spec.  */
   1576   1.1  christos   for (i = 0; i < MAX_MACHS; ++i)
   1577   1.1  christos     if (((1 << i) & machs) != 0)
   1578   1.1  christos       {
   1579   1.1  christos 	const CGEN_MACH *mach = & fr30_cgen_mach_table[i];
   1580   1.1  christos 
   1581   1.1  christos 	if (mach->insn_chunk_bitsize != 0)
   1582   1.1  christos 	{
   1583   1.1  christos 	  if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
   1584   1.1  christos 	    {
   1585   1.8  christos 	      opcodes_error_handler
   1586   1.8  christos 		(/* xgettext:c-format */
   1587   1.8  christos 		 _("internal error: fr30_cgen_rebuild_tables: "
   1588   1.8  christos 		   "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
   1589   1.8  christos 		 cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
   1590   1.1  christos 	      abort ();
   1591   1.1  christos 	    }
   1592   1.1  christos 
   1593   1.1  christos  	  cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
   1594   1.1  christos 	}
   1595   1.1  christos       }
   1596   1.1  christos 
   1597   1.1  christos   /* Determine which hw elements are used by MACH.  */
   1598   1.1  christos   build_hw_table (cd);
   1599   1.1  christos 
   1600   1.1  christos   /* Build the ifield table.  */
   1601   1.1  christos   build_ifield_table (cd);
   1602   1.1  christos 
   1603   1.1  christos   /* Determine which operands are used by MACH/ISA.  */
   1604   1.1  christos   build_operand_table (cd);
   1605   1.1  christos 
   1606   1.1  christos   /* Build the instruction table.  */
   1607   1.1  christos   build_insn_table (cd);
   1608   1.1  christos }
   1609   1.1  christos 
   1610   1.1  christos /* Initialize a cpu table and return a descriptor.
   1611   1.1  christos    It's much like opening a file, and must be the first function called.
   1612   1.1  christos    The arguments are a set of (type/value) pairs, terminated with
   1613   1.1  christos    CGEN_CPU_OPEN_END.
   1614   1.1  christos 
   1615   1.1  christos    Currently supported values:
   1616   1.1  christos    CGEN_CPU_OPEN_ISAS:    bitmap of values in enum isa_attr
   1617   1.1  christos    CGEN_CPU_OPEN_MACHS:   bitmap of values in enum mach_attr
   1618   1.1  christos    CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
   1619   1.1  christos    CGEN_CPU_OPEN_ENDIAN:  specify endian choice
   1620   1.9  christos    CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice
   1621   1.1  christos    CGEN_CPU_OPEN_END:     terminates arguments
   1622   1.1  christos 
   1623   1.1  christos    ??? Simultaneous multiple isas might not make sense, but it's not (yet)
   1624   1.1  christos    precluded.  */
   1625   1.1  christos 
   1626   1.1  christos CGEN_CPU_DESC
   1627   1.1  christos fr30_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
   1628   1.1  christos {
   1629   1.1  christos   CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
   1630   1.1  christos   static int init_p;
   1631   1.1  christos   CGEN_BITSET *isas = 0;  /* 0 = "unspecified" */
   1632   1.1  christos   unsigned int machs = 0; /* 0 = "unspecified" */
   1633   1.1  christos   enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
   1634   1.9  christos   enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN;
   1635   1.1  christos   va_list ap;
   1636   1.1  christos 
   1637   1.1  christos   if (! init_p)
   1638   1.1  christos     {
   1639   1.1  christos       init_tables ();
   1640   1.1  christos       init_p = 1;
   1641   1.1  christos     }
   1642   1.1  christos 
   1643   1.1  christos   memset (cd, 0, sizeof (*cd));
   1644   1.1  christos 
   1645   1.1  christos   va_start (ap, arg_type);
   1646   1.1  christos   while (arg_type != CGEN_CPU_OPEN_END)
   1647   1.1  christos     {
   1648   1.1  christos       switch (arg_type)
   1649   1.1  christos 	{
   1650   1.1  christos 	case CGEN_CPU_OPEN_ISAS :
   1651   1.1  christos 	  isas = va_arg (ap, CGEN_BITSET *);
   1652   1.1  christos 	  break;
   1653   1.1  christos 	case CGEN_CPU_OPEN_MACHS :
   1654   1.1  christos 	  machs = va_arg (ap, unsigned int);
   1655   1.1  christos 	  break;
   1656   1.1  christos 	case CGEN_CPU_OPEN_BFDMACH :
   1657   1.1  christos 	  {
   1658   1.1  christos 	    const char *name = va_arg (ap, const char *);
   1659   1.1  christos 	    const CGEN_MACH *mach =
   1660   1.1  christos 	      lookup_mach_via_bfd_name (fr30_cgen_mach_table, name);
   1661   1.1  christos 
   1662   1.7  christos 	    if (mach != NULL)
   1663   1.7  christos 	      machs |= 1 << mach->num;
   1664   1.1  christos 	    break;
   1665   1.1  christos 	  }
   1666   1.1  christos 	case CGEN_CPU_OPEN_ENDIAN :
   1667   1.1  christos 	  endian = va_arg (ap, enum cgen_endian);
   1668   1.1  christos 	  break;
   1669   1.9  christos 	case CGEN_CPU_OPEN_INSN_ENDIAN :
   1670   1.9  christos 	  insn_endian = va_arg (ap, enum cgen_endian);
   1671   1.9  christos 	  break;
   1672   1.1  christos 	default :
   1673   1.8  christos 	  opcodes_error_handler
   1674   1.8  christos 	    (/* xgettext:c-format */
   1675   1.8  christos 	     _("internal error: fr30_cgen_cpu_open: "
   1676   1.8  christos 	       "unsupported argument `%d'"),
   1677   1.8  christos 	     arg_type);
   1678   1.1  christos 	  abort (); /* ??? return NULL? */
   1679   1.1  christos 	}
   1680   1.1  christos       arg_type = va_arg (ap, enum cgen_cpu_open_arg);
   1681   1.1  christos     }
   1682   1.1  christos   va_end (ap);
   1683   1.1  christos 
   1684   1.1  christos   /* Mach unspecified means "all".  */
   1685   1.1  christos   if (machs == 0)
   1686   1.1  christos     machs = (1 << MAX_MACHS) - 1;
   1687   1.1  christos   /* Base mach is always selected.  */
   1688   1.1  christos   machs |= 1;
   1689   1.1  christos   if (endian == CGEN_ENDIAN_UNKNOWN)
   1690   1.1  christos     {
   1691   1.1  christos       /* ??? If target has only one, could have a default.  */
   1692   1.8  christos       opcodes_error_handler
   1693   1.8  christos 	(/* xgettext:c-format */
   1694   1.8  christos 	 _("internal error: fr30_cgen_cpu_open: no endianness specified"));
   1695   1.1  christos       abort ();
   1696   1.1  christos     }
   1697   1.1  christos 
   1698   1.1  christos   cd->isas = cgen_bitset_copy (isas);
   1699   1.1  christos   cd->machs = machs;
   1700   1.1  christos   cd->endian = endian;
   1701   1.9  christos   cd->insn_endian
   1702   1.9  christos     = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian);
   1703   1.1  christos 
   1704   1.1  christos   /* Table (re)builder.  */
   1705   1.1  christos   cd->rebuild_tables = fr30_cgen_rebuild_tables;
   1706   1.1  christos   fr30_cgen_rebuild_tables (cd);
   1707   1.1  christos 
   1708   1.1  christos   /* Default to not allowing signed overflow.  */
   1709   1.1  christos   cd->signed_overflow_ok_p = 0;
   1710   1.6  christos 
   1711   1.1  christos   return (CGEN_CPU_DESC) cd;
   1712   1.1  christos }
   1713   1.1  christos 
   1714   1.1  christos /* Cover fn to fr30_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
   1715   1.1  christos    MACH_NAME is the bfd name of the mach.  */
   1716   1.1  christos 
   1717   1.1  christos CGEN_CPU_DESC
   1718   1.1  christos fr30_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
   1719   1.1  christos {
   1720   1.1  christos   return fr30_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
   1721   1.1  christos 			       CGEN_CPU_OPEN_ENDIAN, endian,
   1722   1.1  christos 			       CGEN_CPU_OPEN_END);
   1723   1.1  christos }
   1724   1.1  christos 
   1725   1.1  christos /* Close a cpu table.
   1726   1.1  christos    ??? This can live in a machine independent file, but there's currently
   1727   1.1  christos    no place to put this file (there's no libcgen).  libopcodes is the wrong
   1728   1.1  christos    place as some simulator ports use this but they don't use libopcodes.  */
   1729   1.1  christos 
   1730   1.1  christos void
   1731   1.1  christos fr30_cgen_cpu_close (CGEN_CPU_DESC cd)
   1732   1.1  christos {
   1733   1.1  christos   unsigned int i;
   1734   1.1  christos   const CGEN_INSN *insns;
   1735   1.1  christos 
   1736   1.1  christos   if (cd->macro_insn_table.init_entries)
   1737   1.1  christos     {
   1738   1.1  christos       insns = cd->macro_insn_table.init_entries;
   1739   1.1  christos       for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
   1740   1.1  christos 	if (CGEN_INSN_RX ((insns)))
   1741   1.1  christos 	  regfree (CGEN_INSN_RX (insns));
   1742   1.1  christos     }
   1743   1.1  christos 
   1744   1.1  christos   if (cd->insn_table.init_entries)
   1745   1.1  christos     {
   1746   1.1  christos       insns = cd->insn_table.init_entries;
   1747   1.1  christos       for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
   1748   1.1  christos 	if (CGEN_INSN_RX (insns))
   1749   1.1  christos 	  regfree (CGEN_INSN_RX (insns));
   1750   1.6  christos     }
   1751   1.1  christos 
   1752   1.9  christos   free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
   1753   1.9  christos   free ((CGEN_INSN *) cd->insn_table.init_entries);
   1754   1.9  christos   free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
   1755   1.9  christos   free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
   1756   1.1  christos   free (cd);
   1757   1.1  christos }
   1758   1.1  christos 
   1759