Home | History | Annotate | Download | only in opcodes
      1 /* Semantic operand instances for lm32.
      2 
      3 THIS FILE IS MACHINE GENERATED WITH CGEN.
      4 
      5 Copyright (C) 1996-2016 Free Software Foundation, Inc.
      6 
      7 This file is part of the GNU Binutils and/or GDB, the GNU debugger.
      8 
      9    This file is free software; you can redistribute it and/or modify
     10    it under the terms of the GNU General Public License as published by
     11    the Free Software Foundation; either version 3, or (at your option)
     12    any later version.
     13 
     14    It is distributed in the hope that it will be useful, but WITHOUT
     15    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     16    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     17    License for more details.
     18 
     19    You should have received a copy of the GNU General Public License along
     20    with this program; if not, write to the Free Software Foundation, Inc.,
     21    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
     22 
     23 */
     24 
     25 #include "sysdep.h"
     26 #include "ansidecl.h"
     27 #include "bfd.h"
     28 #include "symcat.h"
     29 #include "lm32-desc.h"
     30 #include "lm32-opc.h"
     31 
     32 /* Operand references.  */
     33 
     34 #define OP_ENT(op) LM32_OPERAND_##op
     35 #define INPUT CGEN_OPINST_INPUT
     36 #define OUTPUT CGEN_OPINST_OUTPUT
     37 #define END CGEN_OPINST_END
     38 #define COND_REF CGEN_OPINST_COND_REF
     39 
     40 static const CGEN_OPINST sfmt_empty_ops[] ATTRIBUTE_UNUSED = {
     41   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
     42 };
     43 
     44 static const CGEN_OPINST sfmt_add_ops[] ATTRIBUTE_UNUSED = {
     45   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
     46   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
     47   { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
     48   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
     49 };
     50 
     51 static const CGEN_OPINST sfmt_addi_ops[] ATTRIBUTE_UNUSED = {
     52   { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
     53   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
     54   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
     55   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
     56 };
     57 
     58 static const CGEN_OPINST sfmt_andi_ops[] ATTRIBUTE_UNUSED = {
     59   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
     60   { INPUT, "uimm", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (UIMM), 0, 0 },
     61   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
     62   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
     63 };
     64 
     65 static const CGEN_OPINST sfmt_andhii_ops[] ATTRIBUTE_UNUSED = {
     66   { INPUT, "hi16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (HI16), 0, 0 },
     67   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
     68   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
     69   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
     70 };
     71 
     72 static const CGEN_OPINST sfmt_b_ops[] ATTRIBUTE_UNUSED = {
     73   { INPUT, "f_r0", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
     74   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
     75   { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
     76   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
     77 };
     78 
     79 static const CGEN_OPINST sfmt_bi_ops[] ATTRIBUTE_UNUSED = {
     80   { INPUT, "call", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (CALL), 0, 0 },
     81   { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
     82   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
     83 };
     84 
     85 static const CGEN_OPINST sfmt_be_ops[] ATTRIBUTE_UNUSED = {
     86   { INPUT, "branch", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (BRANCH), 0, COND_REF },
     87   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
     88   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
     89   { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, COND_REF },
     90   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
     91 };
     92 
     93 static const CGEN_OPINST sfmt_call_ops[] ATTRIBUTE_UNUSED = {
     94   { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
     95   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
     96   { OUTPUT, "h_gr_SI_29", HW_H_GR, CGEN_MODE_SI, 0, 29, 0 },
     97   { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
     98   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
     99 };
    100 
    101 static const CGEN_OPINST sfmt_calli_ops[] ATTRIBUTE_UNUSED = {
    102   { INPUT, "call", HW_H_IADDR, CGEN_MODE_USI, OP_ENT (CALL), 0, 0 },
    103   { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
    104   { OUTPUT, "h_gr_SI_29", HW_H_GR, CGEN_MODE_SI, 0, 29, 0 },
    105   { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
    106   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    107 };
    108 
    109 static const CGEN_OPINST sfmt_divu_ops[] ATTRIBUTE_UNUSED = {
    110   { INPUT, "f_r0", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
    111   { INPUT, "f_r1", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
    112   { INPUT, "f_r2", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
    113   { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
    114   { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
    115   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    116 };
    117 
    118 static const CGEN_OPINST sfmt_lb_ops[] ATTRIBUTE_UNUSED = {
    119   { INPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
    120   { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
    121   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    122   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    123   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    124 };
    125 
    126 static const CGEN_OPINST sfmt_lh_ops[] ATTRIBUTE_UNUSED = {
    127   { INPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
    128   { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
    129   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    130   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    131   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    132 };
    133 
    134 static const CGEN_OPINST sfmt_lw_ops[] ATTRIBUTE_UNUSED = {
    135   { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
    136   { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
    137   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    138   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    139   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    140 };
    141 
    142 static const CGEN_OPINST sfmt_ori_ops[] ATTRIBUTE_UNUSED = {
    143   { INPUT, "lo16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (LO16), 0, 0 },
    144   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    145   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    146   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    147 };
    148 
    149 static const CGEN_OPINST sfmt_rcsr_ops[] ATTRIBUTE_UNUSED = {
    150   { INPUT, "csr", HW_H_CSR, CGEN_MODE_SI, OP_ENT (CSR), 0, 0 },
    151   { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
    152   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    153 };
    154 
    155 static const CGEN_OPINST sfmt_sb_ops[] ATTRIBUTE_UNUSED = {
    156   { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
    157   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    158   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    159   { OUTPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
    160   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    161 };
    162 
    163 static const CGEN_OPINST sfmt_sextb_ops[] ATTRIBUTE_UNUSED = {
    164   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    165   { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
    166   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    167 };
    168 
    169 static const CGEN_OPINST sfmt_sh_ops[] ATTRIBUTE_UNUSED = {
    170   { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
    171   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    172   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    173   { OUTPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
    174   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    175 };
    176 
    177 static const CGEN_OPINST sfmt_sw_ops[] ATTRIBUTE_UNUSED = {
    178   { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
    179   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    180   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    181   { OUTPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_imm", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
    182   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    183 };
    184 
    185 static const CGEN_OPINST sfmt_user_ops[] ATTRIBUTE_UNUSED = {
    186   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    187   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    188   { INPUT, "user", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (USER), 0, 0 },
    189   { OUTPUT, "r2", HW_H_GR, CGEN_MODE_SI, OP_ENT (R2), 0, 0 },
    190   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    191 };
    192 
    193 static const CGEN_OPINST sfmt_wcsr_ops[] ATTRIBUTE_UNUSED = {
    194   { INPUT, "f_csr", HW_H_UINT, CGEN_MODE_UINT, 0, 0, 0 },
    195   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    196   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    197 };
    198 
    199 static const CGEN_OPINST sfmt_break_ops[] ATTRIBUTE_UNUSED = {
    200   { INPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
    201   { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
    202   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    203 };
    204 
    205 static const CGEN_OPINST sfmt_bret_ops[] ATTRIBUTE_UNUSED = {
    206   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    207   { OUTPUT, "pc", HW_H_PC, CGEN_MODE_USI, 0, 0, 0 },
    208   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    209 };
    210 
    211 static const CGEN_OPINST sfmt_mvi_ops[] ATTRIBUTE_UNUSED = {
    212   { INPUT, "imm", HW_H_SINT, CGEN_MODE_INT, OP_ENT (IMM), 0, 0 },
    213   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    214   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    215   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    216 };
    217 
    218 static const CGEN_OPINST sfmt_mvui_ops[] ATTRIBUTE_UNUSED = {
    219   { INPUT, "lo16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (LO16), 0, 0 },
    220   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    221   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    222 };
    223 
    224 static const CGEN_OPINST sfmt_mvhi_ops[] ATTRIBUTE_UNUSED = {
    225   { INPUT, "hi16", HW_H_UINT, CGEN_MODE_UINT, OP_ENT (HI16), 0, 0 },
    226   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    227   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    228   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    229 };
    230 
    231 static const CGEN_OPINST sfmt_mva_ops[] ATTRIBUTE_UNUSED = {
    232   { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
    233   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    234   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    235   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    236 };
    237 
    238 static const CGEN_OPINST sfmt_nop_ops[] ATTRIBUTE_UNUSED = {
    239   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    240   { OUTPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    241   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    242 };
    243 
    244 static const CGEN_OPINST sfmt_lbgprel_ops[] ATTRIBUTE_UNUSED = {
    245   { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
    246   { INPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
    247   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    248   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    249   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    250 };
    251 
    252 static const CGEN_OPINST sfmt_lhgprel_ops[] ATTRIBUTE_UNUSED = {
    253   { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
    254   { INPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
    255   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    256   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    257   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    258 };
    259 
    260 static const CGEN_OPINST sfmt_lwgprel_ops[] ATTRIBUTE_UNUSED = {
    261   { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
    262   { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
    263   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    264   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    265   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    266 };
    267 
    268 static const CGEN_OPINST sfmt_sbgprel_ops[] ATTRIBUTE_UNUSED = {
    269   { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
    270   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    271   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    272   { OUTPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
    273   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    274 };
    275 
    276 static const CGEN_OPINST sfmt_shgprel_ops[] ATTRIBUTE_UNUSED = {
    277   { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
    278   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    279   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    280   { OUTPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
    281   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    282 };
    283 
    284 static const CGEN_OPINST sfmt_swgprel_ops[] ATTRIBUTE_UNUSED = {
    285   { INPUT, "gp16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GP16), 0, 0 },
    286   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    287   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    288   { OUTPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gp16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
    289   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    290 };
    291 
    292 static const CGEN_OPINST sfmt_lwgotrel_ops[] ATTRIBUTE_UNUSED = {
    293   { INPUT, "got16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOT16), 0, 0 },
    294   { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_got16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
    295   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    296   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    297   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    298 };
    299 
    300 static const CGEN_OPINST sfmt_orhigotoffi_ops[] ATTRIBUTE_UNUSED = {
    301   { INPUT, "gotoffhi16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFHI16), 0, 0 },
    302   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    303   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    304   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    305 };
    306 
    307 static const CGEN_OPINST sfmt_addgotoff_ops[] ATTRIBUTE_UNUSED = {
    308   { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
    309   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    310   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    311   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    312 };
    313 
    314 static const CGEN_OPINST sfmt_swgotoff_ops[] ATTRIBUTE_UNUSED = {
    315   { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
    316   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    317   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    318   { OUTPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
    319   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    320 };
    321 
    322 static const CGEN_OPINST sfmt_lwgotoff_ops[] ATTRIBUTE_UNUSED = {
    323   { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
    324   { INPUT, "h_memory_SI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_SI, 0, 0, 0 },
    325   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    326   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    327   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    328 };
    329 
    330 static const CGEN_OPINST sfmt_shgotoff_ops[] ATTRIBUTE_UNUSED = {
    331   { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
    332   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    333   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    334   { OUTPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
    335   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    336 };
    337 
    338 static const CGEN_OPINST sfmt_lhgotoff_ops[] ATTRIBUTE_UNUSED = {
    339   { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
    340   { INPUT, "h_memory_HI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_HI, 0, 0, 0 },
    341   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    342   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    343   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    344 };
    345 
    346 static const CGEN_OPINST sfmt_sbgotoff_ops[] ATTRIBUTE_UNUSED = {
    347   { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
    348   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    349   { INPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    350   { OUTPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
    351   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    352 };
    353 
    354 static const CGEN_OPINST sfmt_lbgotoff_ops[] ATTRIBUTE_UNUSED = {
    355   { INPUT, "gotofflo16", HW_H_SINT, CGEN_MODE_INT, OP_ENT (GOTOFFLO16), 0, 0 },
    356   { INPUT, "h_memory_QI_add__SI_r0_ext__SI_trunc__HI_gotofflo16", HW_H_MEMORY, CGEN_MODE_QI, 0, 0, 0 },
    357   { INPUT, "r0", HW_H_GR, CGEN_MODE_SI, OP_ENT (R0), 0, 0 },
    358   { OUTPUT, "r1", HW_H_GR, CGEN_MODE_SI, OP_ENT (R1), 0, 0 },
    359   { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 }
    360 };
    361 
    362 #undef OP_ENT
    363 #undef INPUT
    364 #undef OUTPUT
    365 #undef END
    366 #undef COND_REF
    367 
    368 /* Operand instance lookup table.  */
    369 
    370 static const CGEN_OPINST *lm32_cgen_opinst_table[MAX_INSNS] = {
    371   0,
    372   & sfmt_add_ops[0],
    373   & sfmt_addi_ops[0],
    374   & sfmt_add_ops[0],
    375   & sfmt_andi_ops[0],
    376   & sfmt_andhii_ops[0],
    377   & sfmt_b_ops[0],
    378   & sfmt_bi_ops[0],
    379   & sfmt_be_ops[0],
    380   & sfmt_be_ops[0],
    381   & sfmt_be_ops[0],
    382   & sfmt_be_ops[0],
    383   & sfmt_be_ops[0],
    384   & sfmt_be_ops[0],
    385   & sfmt_call_ops[0],
    386   & sfmt_calli_ops[0],
    387   & sfmt_add_ops[0],
    388   & sfmt_addi_ops[0],
    389   & sfmt_add_ops[0],
    390   & sfmt_addi_ops[0],
    391   & sfmt_add_ops[0],
    392   & sfmt_addi_ops[0],
    393   & sfmt_add_ops[0],
    394   & sfmt_andi_ops[0],
    395   & sfmt_add_ops[0],
    396   & sfmt_andi_ops[0],
    397   & sfmt_add_ops[0],
    398   & sfmt_addi_ops[0],
    399   & sfmt_divu_ops[0],
    400   & sfmt_lb_ops[0],
    401   & sfmt_lb_ops[0],
    402   & sfmt_lh_ops[0],
    403   & sfmt_lh_ops[0],
    404   & sfmt_lw_ops[0],
    405   & sfmt_divu_ops[0],
    406   & sfmt_add_ops[0],
    407   & sfmt_addi_ops[0],
    408   & sfmt_add_ops[0],
    409   & sfmt_andi_ops[0],
    410   & sfmt_add_ops[0],
    411   & sfmt_ori_ops[0],
    412   & sfmt_andhii_ops[0],
    413   & sfmt_rcsr_ops[0],
    414   & sfmt_sb_ops[0],
    415   & sfmt_sextb_ops[0],
    416   & sfmt_sextb_ops[0],
    417   & sfmt_sh_ops[0],
    418   & sfmt_add_ops[0],
    419   & sfmt_addi_ops[0],
    420   & sfmt_add_ops[0],
    421   & sfmt_addi_ops[0],
    422   & sfmt_add_ops[0],
    423   & sfmt_addi_ops[0],
    424   & sfmt_add_ops[0],
    425   & sfmt_sw_ops[0],
    426   & sfmt_user_ops[0],
    427   & sfmt_wcsr_ops[0],
    428   & sfmt_add_ops[0],
    429   & sfmt_andi_ops[0],
    430   & sfmt_add_ops[0],
    431   & sfmt_andi_ops[0],
    432   & sfmt_break_ops[0],
    433   & sfmt_break_ops[0],
    434   & sfmt_bret_ops[0],
    435   & sfmt_bret_ops[0],
    436   & sfmt_bret_ops[0],
    437   & sfmt_sextb_ops[0],
    438   & sfmt_mvi_ops[0],
    439   & sfmt_mvui_ops[0],
    440   & sfmt_mvhi_ops[0],
    441   & sfmt_mva_ops[0],
    442   & sfmt_sextb_ops[0],
    443   & sfmt_nop_ops[0],
    444   & sfmt_lbgprel_ops[0],
    445   & sfmt_lbgprel_ops[0],
    446   & sfmt_lhgprel_ops[0],
    447   & sfmt_lhgprel_ops[0],
    448   & sfmt_lwgprel_ops[0],
    449   & sfmt_sbgprel_ops[0],
    450   & sfmt_shgprel_ops[0],
    451   & sfmt_swgprel_ops[0],
    452   & sfmt_lwgotrel_ops[0],
    453   & sfmt_orhigotoffi_ops[0],
    454   & sfmt_addgotoff_ops[0],
    455   & sfmt_swgotoff_ops[0],
    456   & sfmt_lwgotoff_ops[0],
    457   & sfmt_shgotoff_ops[0],
    458   & sfmt_lhgotoff_ops[0],
    459   & sfmt_lhgotoff_ops[0],
    460   & sfmt_sbgotoff_ops[0],
    461   & sfmt_lbgotoff_ops[0],
    462   & sfmt_lbgotoff_ops[0],
    463 };
    464 
    465 /* Function to call before using the operand instance table.  */
    466 
    467 void
    468 lm32_cgen_init_opinst_table (CGEN_CPU_DESC cd)
    469 {
    470   int i;
    471   const CGEN_OPINST **oi = & lm32_cgen_opinst_table[0];
    472   CGEN_INSN *insns = (CGEN_INSN *) cd->insn_table.init_entries;
    473   for (i = 0; i < MAX_INSNS; ++i)
    474     insns[i].opinst = oi[i];
    475 }
    476