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