Home | History | Annotate | Line # | Download | only in opcodes
      1  1.1.1.4  christos /* DO NOT EDIT!  -*- buffer-read-only: t -*- vi:set ro:  */
      2      1.1  christos /* Instruction opcode table for lm32.
      3      1.1  christos 
      4      1.1  christos THIS FILE IS MACHINE GENERATED WITH CGEN.
      5      1.1  christos 
      6  1.1.1.9  christos Copyright (C) 1996-2026 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 "ansidecl.h"
     28      1.1  christos #include "bfd.h"
     29      1.1  christos #include "symcat.h"
     30      1.1  christos #include "lm32-desc.h"
     31      1.1  christos #include "lm32-opc.h"
     32      1.1  christos #include "libiberty.h"
     33      1.1  christos 
     34      1.1  christos /* The hash functions are recorded here to help keep assembler code out of
     35      1.1  christos    the disassembler and vice versa.  */
     36      1.1  christos 
     37      1.1  christos static int asm_hash_insn_p        (const CGEN_INSN *);
     38      1.1  christos static unsigned int asm_hash_insn (const char *);
     39      1.1  christos static int dis_hash_insn_p        (const CGEN_INSN *);
     40      1.1  christos static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
     41      1.1  christos 
     42      1.1  christos /* Instruction formats.  */
     43      1.1  christos 
     44      1.1  christos #define F(f) & lm32_cgen_ifld_table[LM32_##f]
     45      1.1  christos static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
     46      1.1  christos   0, 0, 0x0, { { 0 } }
     47      1.1  christos };
     48      1.1  christos 
     49      1.1  christos static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
     50      1.1  christos   32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
     51      1.1  christos };
     52      1.1  christos 
     53      1.1  christos static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = {
     54      1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
     55      1.1  christos };
     56      1.1  christos 
     57      1.1  christos static const CGEN_IFMT ifmt_andi ATTRIBUTE_UNUSED = {
     58      1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
     59      1.1  christos };
     60      1.1  christos 
     61      1.1  christos static const CGEN_IFMT ifmt_andhii ATTRIBUTE_UNUSED = {
     62      1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
     63      1.1  christos };
     64      1.1  christos 
     65      1.1  christos static const CGEN_IFMT ifmt_b ATTRIBUTE_UNUSED = {
     66      1.1  christos   32, 32, 0xfc1fffff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
     67      1.1  christos };
     68      1.1  christos 
     69      1.1  christos static const CGEN_IFMT ifmt_bi ATTRIBUTE_UNUSED = {
     70      1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_CALL) }, { 0 } }
     71      1.1  christos };
     72      1.1  christos 
     73      1.1  christos static const CGEN_IFMT ifmt_be ATTRIBUTE_UNUSED = {
     74      1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_BRANCH) }, { 0 } }
     75      1.1  christos };
     76      1.1  christos 
     77      1.1  christos static const CGEN_IFMT ifmt_ori ATTRIBUTE_UNUSED = {
     78      1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
     79      1.1  christos };
     80      1.1  christos 
     81      1.1  christos static const CGEN_IFMT ifmt_rcsr ATTRIBUTE_UNUSED = {
     82      1.1  christos   32, 32, 0xfc1f07ff, { { F (F_OPCODE) }, { F (F_CSR) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
     83      1.1  christos };
     84      1.1  christos 
     85      1.1  christos static const CGEN_IFMT ifmt_sextb ATTRIBUTE_UNUSED = {
     86      1.1  christos   32, 32, 0xfc1f07ff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
     87      1.1  christos };
     88      1.1  christos 
     89      1.1  christos static const CGEN_IFMT ifmt_user ATTRIBUTE_UNUSED = {
     90      1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_USER) }, { 0 } }
     91      1.1  christos };
     92      1.1  christos 
     93      1.1  christos static const CGEN_IFMT ifmt_wcsr ATTRIBUTE_UNUSED = {
     94      1.1  christos   32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_CSR) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
     95      1.1  christos };
     96      1.1  christos 
     97      1.1  christos static const CGEN_IFMT ifmt_break ATTRIBUTE_UNUSED = {
     98      1.1  christos   32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_EXCEPTION) }, { 0 } }
     99      1.1  christos };
    100      1.1  christos 
    101      1.1  christos static const CGEN_IFMT ifmt_bret ATTRIBUTE_UNUSED = {
    102      1.1  christos   32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV0) }, { 0 } }
    103      1.1  christos };
    104      1.1  christos 
    105      1.1  christos static const CGEN_IFMT ifmt_mvi ATTRIBUTE_UNUSED = {
    106      1.1  christos   32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
    107      1.1  christos };
    108      1.1  christos 
    109      1.1  christos static const CGEN_IFMT ifmt_mvui ATTRIBUTE_UNUSED = {
    110      1.1  christos   32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
    111      1.1  christos };
    112      1.1  christos 
    113      1.1  christos static const CGEN_IFMT ifmt_mvhi ATTRIBUTE_UNUSED = {
    114      1.1  christos   32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_UIMM) }, { 0 } }
    115      1.1  christos };
    116      1.1  christos 
    117      1.1  christos static const CGEN_IFMT ifmt_mva ATTRIBUTE_UNUSED = {
    118      1.1  christos   32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
    119      1.1  christos };
    120      1.1  christos 
    121      1.1  christos static const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = {
    122      1.1  christos   32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
    123      1.1  christos };
    124      1.1  christos 
    125      1.1  christos static const CGEN_IFMT ifmt_lwgotrel ATTRIBUTE_UNUSED = {
    126      1.1  christos   32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
    127      1.1  christos };
    128      1.1  christos 
    129      1.1  christos static const CGEN_IFMT ifmt_orhigotoffi ATTRIBUTE_UNUSED = {
    130      1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
    131      1.1  christos };
    132      1.1  christos 
    133      1.1  christos static const CGEN_IFMT ifmt_addgotoff ATTRIBUTE_UNUSED = {
    134      1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R0) }, { F (F_R1) }, { F (F_IMM) }, { 0 } }
    135      1.1  christos };
    136      1.1  christos 
    137      1.1  christos #undef F
    138      1.1  christos 
    139      1.1  christos #define A(a) (1 << CGEN_INSN_##a)
    140      1.1  christos #define OPERAND(op) LM32_OPERAND_##op
    141      1.1  christos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
    142      1.1  christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
    143      1.1  christos 
    144      1.1  christos /* The instruction table.  */
    145      1.1  christos 
    146      1.1  christos static const CGEN_OPCODE lm32_cgen_insn_opcode_table[MAX_INSNS] =
    147      1.1  christos {
    148      1.1  christos   /* Special null first entry.
    149      1.1  christos      A `num' value of zero is thus invalid.
    150      1.1  christos      Also, the special `invalid' insn resides here.  */
    151      1.1  christos   { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
    152      1.1  christos /* add $r2,$r0,$r1 */
    153      1.1  christos   {
    154      1.1  christos     { 0, 0, 0, 0 },
    155      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    156      1.1  christos     & ifmt_add, { 0xb4000000 }
    157      1.1  christos   },
    158      1.1  christos /* addi $r1,$r0,$imm */
    159      1.1  christos   {
    160      1.1  christos     { 0, 0, 0, 0 },
    161      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
    162      1.1  christos     & ifmt_addi, { 0x34000000 }
    163      1.1  christos   },
    164      1.1  christos /* and $r2,$r0,$r1 */
    165      1.1  christos   {
    166      1.1  christos     { 0, 0, 0, 0 },
    167      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    168      1.1  christos     & ifmt_add, { 0xa0000000 }
    169      1.1  christos   },
    170      1.1  christos /* andi $r1,$r0,$uimm */
    171      1.1  christos   {
    172      1.1  christos     { 0, 0, 0, 0 },
    173      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
    174      1.1  christos     & ifmt_andi, { 0x20000000 }
    175      1.1  christos   },
    176      1.1  christos /* andhi $r1,$r0,$hi16 */
    177      1.1  christos   {
    178      1.1  christos     { 0, 0, 0, 0 },
    179      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (HI16), 0 } },
    180      1.1  christos     & ifmt_andhii, { 0x60000000 }
    181      1.1  christos   },
    182      1.1  christos /* b $r0 */
    183      1.1  christos   {
    184      1.1  christos     { 0, 0, 0, 0 },
    185      1.1  christos     { { MNEM, ' ', OP (R0), 0 } },
    186      1.1  christos     & ifmt_b, { 0xc0000000 }
    187      1.1  christos   },
    188      1.1  christos /* bi $call */
    189      1.1  christos   {
    190      1.1  christos     { 0, 0, 0, 0 },
    191      1.1  christos     { { MNEM, ' ', OP (CALL), 0 } },
    192      1.1  christos     & ifmt_bi, { 0xe0000000 }
    193      1.1  christos   },
    194      1.1  christos /* be $r0,$r1,$branch */
    195      1.1  christos   {
    196      1.1  christos     { 0, 0, 0, 0 },
    197      1.1  christos     { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
    198      1.1  christos     & ifmt_be, { 0x44000000 }
    199      1.1  christos   },
    200      1.1  christos /* bg $r0,$r1,$branch */
    201      1.1  christos   {
    202      1.1  christos     { 0, 0, 0, 0 },
    203      1.1  christos     { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
    204      1.1  christos     & ifmt_be, { 0x48000000 }
    205      1.1  christos   },
    206      1.1  christos /* bge $r0,$r1,$branch */
    207      1.1  christos   {
    208      1.1  christos     { 0, 0, 0, 0 },
    209      1.1  christos     { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
    210      1.1  christos     & ifmt_be, { 0x4c000000 }
    211      1.1  christos   },
    212      1.1  christos /* bgeu $r0,$r1,$branch */
    213      1.1  christos   {
    214      1.1  christos     { 0, 0, 0, 0 },
    215      1.1  christos     { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
    216      1.1  christos     & ifmt_be, { 0x50000000 }
    217      1.1  christos   },
    218      1.1  christos /* bgu $r0,$r1,$branch */
    219      1.1  christos   {
    220      1.1  christos     { 0, 0, 0, 0 },
    221      1.1  christos     { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
    222      1.1  christos     & ifmt_be, { 0x54000000 }
    223      1.1  christos   },
    224      1.1  christos /* bne $r0,$r1,$branch */
    225      1.1  christos   {
    226      1.1  christos     { 0, 0, 0, 0 },
    227      1.1  christos     { { MNEM, ' ', OP (R0), ',', OP (R1), ',', OP (BRANCH), 0 } },
    228      1.1  christos     & ifmt_be, { 0x5c000000 }
    229      1.1  christos   },
    230      1.1  christos /* call $r0 */
    231      1.1  christos   {
    232      1.1  christos     { 0, 0, 0, 0 },
    233      1.1  christos     { { MNEM, ' ', OP (R0), 0 } },
    234      1.1  christos     & ifmt_b, { 0xd8000000 }
    235      1.1  christos   },
    236      1.1  christos /* calli $call */
    237      1.1  christos   {
    238      1.1  christos     { 0, 0, 0, 0 },
    239      1.1  christos     { { MNEM, ' ', OP (CALL), 0 } },
    240      1.1  christos     & ifmt_bi, { 0xf8000000 }
    241      1.1  christos   },
    242      1.1  christos /* cmpe $r2,$r0,$r1 */
    243      1.1  christos   {
    244      1.1  christos     { 0, 0, 0, 0 },
    245      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    246      1.1  christos     & ifmt_add, { 0xe4000000 }
    247      1.1  christos   },
    248      1.1  christos /* cmpei $r1,$r0,$imm */
    249      1.1  christos   {
    250      1.1  christos     { 0, 0, 0, 0 },
    251      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
    252      1.1  christos     & ifmt_addi, { 0x64000000 }
    253      1.1  christos   },
    254      1.1  christos /* cmpg $r2,$r0,$r1 */
    255      1.1  christos   {
    256      1.1  christos     { 0, 0, 0, 0 },
    257      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    258      1.1  christos     & ifmt_add, { 0xe8000000 }
    259      1.1  christos   },
    260      1.1  christos /* cmpgi $r1,$r0,$imm */
    261      1.1  christos   {
    262      1.1  christos     { 0, 0, 0, 0 },
    263      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
    264      1.1  christos     & ifmt_addi, { 0x68000000 }
    265      1.1  christos   },
    266      1.1  christos /* cmpge $r2,$r0,$r1 */
    267      1.1  christos   {
    268      1.1  christos     { 0, 0, 0, 0 },
    269      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    270      1.1  christos     & ifmt_add, { 0xec000000 }
    271      1.1  christos   },
    272      1.1  christos /* cmpgei $r1,$r0,$imm */
    273      1.1  christos   {
    274      1.1  christos     { 0, 0, 0, 0 },
    275      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
    276      1.1  christos     & ifmt_addi, { 0x6c000000 }
    277      1.1  christos   },
    278      1.1  christos /* cmpgeu $r2,$r0,$r1 */
    279      1.1  christos   {
    280      1.1  christos     { 0, 0, 0, 0 },
    281      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    282      1.1  christos     & ifmt_add, { 0xf0000000 }
    283      1.1  christos   },
    284      1.1  christos /* cmpgeui $r1,$r0,$uimm */
    285      1.1  christos   {
    286      1.1  christos     { 0, 0, 0, 0 },
    287      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
    288      1.1  christos     & ifmt_andi, { 0x70000000 }
    289      1.1  christos   },
    290      1.1  christos /* cmpgu $r2,$r0,$r1 */
    291      1.1  christos   {
    292      1.1  christos     { 0, 0, 0, 0 },
    293      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    294      1.1  christos     & ifmt_add, { 0xf4000000 }
    295      1.1  christos   },
    296      1.1  christos /* cmpgui $r1,$r0,$uimm */
    297      1.1  christos   {
    298      1.1  christos     { 0, 0, 0, 0 },
    299      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
    300      1.1  christos     & ifmt_andi, { 0x74000000 }
    301      1.1  christos   },
    302      1.1  christos /* cmpne $r2,$r0,$r1 */
    303      1.1  christos   {
    304      1.1  christos     { 0, 0, 0, 0 },
    305      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    306      1.1  christos     & ifmt_add, { 0xfc000000 }
    307      1.1  christos   },
    308      1.1  christos /* cmpnei $r1,$r0,$imm */
    309      1.1  christos   {
    310      1.1  christos     { 0, 0, 0, 0 },
    311      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
    312      1.1  christos     & ifmt_addi, { 0x7c000000 }
    313      1.1  christos   },
    314      1.1  christos /* divu $r2,$r0,$r1 */
    315      1.1  christos   {
    316      1.1  christos     { 0, 0, 0, 0 },
    317      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    318      1.1  christos     & ifmt_add, { 0x8c000000 }
    319      1.1  christos   },
    320      1.1  christos /* lb $r1,($r0+$imm) */
    321      1.1  christos   {
    322      1.1  christos     { 0, 0, 0, 0 },
    323      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
    324      1.1  christos     & ifmt_addi, { 0x10000000 }
    325      1.1  christos   },
    326      1.1  christos /* lbu $r1,($r0+$imm) */
    327      1.1  christos   {
    328      1.1  christos     { 0, 0, 0, 0 },
    329      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
    330      1.1  christos     & ifmt_addi, { 0x40000000 }
    331      1.1  christos   },
    332      1.1  christos /* lh $r1,($r0+$imm) */
    333      1.1  christos   {
    334      1.1  christos     { 0, 0, 0, 0 },
    335      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
    336      1.1  christos     & ifmt_addi, { 0x1c000000 }
    337      1.1  christos   },
    338      1.1  christos /* lhu $r1,($r0+$imm) */
    339      1.1  christos   {
    340      1.1  christos     { 0, 0, 0, 0 },
    341      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
    342      1.1  christos     & ifmt_addi, { 0x2c000000 }
    343      1.1  christos   },
    344      1.1  christos /* lw $r1,($r0+$imm) */
    345      1.1  christos   {
    346      1.1  christos     { 0, 0, 0, 0 },
    347      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (IMM), ')', 0 } },
    348      1.1  christos     & ifmt_addi, { 0x28000000 }
    349      1.1  christos   },
    350      1.1  christos /* modu $r2,$r0,$r1 */
    351      1.1  christos   {
    352      1.1  christos     { 0, 0, 0, 0 },
    353      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    354      1.1  christos     & ifmt_add, { 0xc4000000 }
    355      1.1  christos   },
    356      1.1  christos /* mul $r2,$r0,$r1 */
    357      1.1  christos   {
    358      1.1  christos     { 0, 0, 0, 0 },
    359      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    360      1.1  christos     & ifmt_add, { 0x88000000 }
    361      1.1  christos   },
    362      1.1  christos /* muli $r1,$r0,$imm */
    363      1.1  christos   {
    364      1.1  christos     { 0, 0, 0, 0 },
    365      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
    366      1.1  christos     & ifmt_addi, { 0x8000000 }
    367      1.1  christos   },
    368      1.1  christos /* nor $r2,$r0,$r1 */
    369      1.1  christos   {
    370      1.1  christos     { 0, 0, 0, 0 },
    371      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    372      1.1  christos     & ifmt_add, { 0x84000000 }
    373      1.1  christos   },
    374      1.1  christos /* nori $r1,$r0,$uimm */
    375      1.1  christos   {
    376      1.1  christos     { 0, 0, 0, 0 },
    377      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
    378      1.1  christos     & ifmt_andi, { 0x4000000 }
    379      1.1  christos   },
    380      1.1  christos /* or $r2,$r0,$r1 */
    381      1.1  christos   {
    382      1.1  christos     { 0, 0, 0, 0 },
    383      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    384      1.1  christos     & ifmt_add, { 0xb8000000 }
    385      1.1  christos   },
    386      1.1  christos /* ori $r1,$r0,$lo16 */
    387      1.1  christos   {
    388      1.1  christos     { 0, 0, 0, 0 },
    389      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (LO16), 0 } },
    390      1.1  christos     & ifmt_ori, { 0x38000000 }
    391      1.1  christos   },
    392      1.1  christos /* orhi $r1,$r0,$hi16 */
    393      1.1  christos   {
    394      1.1  christos     { 0, 0, 0, 0 },
    395      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (HI16), 0 } },
    396      1.1  christos     & ifmt_andhii, { 0x78000000 }
    397      1.1  christos   },
    398      1.1  christos /* rcsr $r2,$csr */
    399      1.1  christos   {
    400      1.1  christos     { 0, 0, 0, 0 },
    401      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (CSR), 0 } },
    402      1.1  christos     & ifmt_rcsr, { 0x90000000 }
    403      1.1  christos   },
    404      1.1  christos /* sb ($r0+$imm),$r1 */
    405      1.1  christos   {
    406      1.1  christos     { 0, 0, 0, 0 },
    407      1.1  christos     { { MNEM, ' ', '(', OP (R0), '+', OP (IMM), ')', ',', OP (R1), 0 } },
    408      1.1  christos     & ifmt_addi, { 0x30000000 }
    409      1.1  christos   },
    410      1.1  christos /* sextb $r2,$r0 */
    411      1.1  christos   {
    412      1.1  christos     { 0, 0, 0, 0 },
    413      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } },
    414      1.1  christos     & ifmt_sextb, { 0xb0000000 }
    415      1.1  christos   },
    416      1.1  christos /* sexth $r2,$r0 */
    417      1.1  christos   {
    418      1.1  christos     { 0, 0, 0, 0 },
    419      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } },
    420      1.1  christos     & ifmt_sextb, { 0xdc000000 }
    421      1.1  christos   },
    422      1.1  christos /* sh ($r0+$imm),$r1 */
    423      1.1  christos   {
    424      1.1  christos     { 0, 0, 0, 0 },
    425      1.1  christos     { { MNEM, ' ', '(', OP (R0), '+', OP (IMM), ')', ',', OP (R1), 0 } },
    426      1.1  christos     & ifmt_addi, { 0xc000000 }
    427      1.1  christos   },
    428      1.1  christos /* sl $r2,$r0,$r1 */
    429      1.1  christos   {
    430      1.1  christos     { 0, 0, 0, 0 },
    431      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    432      1.1  christos     & ifmt_add, { 0xbc000000 }
    433      1.1  christos   },
    434      1.1  christos /* sli $r1,$r0,$imm */
    435      1.1  christos   {
    436      1.1  christos     { 0, 0, 0, 0 },
    437      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
    438      1.1  christos     & ifmt_addi, { 0x3c000000 }
    439      1.1  christos   },
    440      1.1  christos /* sr $r2,$r0,$r1 */
    441      1.1  christos   {
    442      1.1  christos     { 0, 0, 0, 0 },
    443      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    444      1.1  christos     & ifmt_add, { 0x94000000 }
    445      1.1  christos   },
    446      1.1  christos /* sri $r1,$r0,$imm */
    447      1.1  christos   {
    448      1.1  christos     { 0, 0, 0, 0 },
    449      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
    450      1.1  christos     & ifmt_addi, { 0x14000000 }
    451      1.1  christos   },
    452      1.1  christos /* sru $r2,$r0,$r1 */
    453      1.1  christos   {
    454      1.1  christos     { 0, 0, 0, 0 },
    455      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    456      1.1  christos     & ifmt_add, { 0x80000000 }
    457      1.1  christos   },
    458      1.1  christos /* srui $r1,$r0,$imm */
    459      1.1  christos   {
    460      1.1  christos     { 0, 0, 0, 0 },
    461      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (IMM), 0 } },
    462      1.1  christos     & ifmt_addi, { 0x0 }
    463      1.1  christos   },
    464      1.1  christos /* sub $r2,$r0,$r1 */
    465      1.1  christos   {
    466      1.1  christos     { 0, 0, 0, 0 },
    467      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    468      1.1  christos     & ifmt_add, { 0xc8000000 }
    469      1.1  christos   },
    470      1.1  christos /* sw ($r0+$imm),$r1 */
    471      1.1  christos   {
    472      1.1  christos     { 0, 0, 0, 0 },
    473      1.1  christos     { { MNEM, ' ', '(', OP (R0), '+', OP (IMM), ')', ',', OP (R1), 0 } },
    474      1.1  christos     & ifmt_addi, { 0x58000000 }
    475      1.1  christos   },
    476      1.1  christos /* user $r2,$r0,$r1,$user */
    477      1.1  christos   {
    478      1.1  christos     { 0, 0, 0, 0 },
    479      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), ',', OP (USER), 0 } },
    480      1.1  christos     & ifmt_user, { 0xcc000000 }
    481      1.1  christos   },
    482      1.1  christos /* wcsr $csr,$r1 */
    483      1.1  christos   {
    484      1.1  christos     { 0, 0, 0, 0 },
    485      1.1  christos     { { MNEM, ' ', OP (CSR), ',', OP (R1), 0 } },
    486      1.1  christos     & ifmt_wcsr, { 0xd0000000 }
    487      1.1  christos   },
    488      1.1  christos /* xor $r2,$r0,$r1 */
    489      1.1  christos   {
    490      1.1  christos     { 0, 0, 0, 0 },
    491      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    492      1.1  christos     & ifmt_add, { 0x98000000 }
    493      1.1  christos   },
    494      1.1  christos /* xori $r1,$r0,$uimm */
    495      1.1  christos   {
    496      1.1  christos     { 0, 0, 0, 0 },
    497      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
    498      1.1  christos     & ifmt_andi, { 0x18000000 }
    499      1.1  christos   },
    500      1.1  christos /* xnor $r2,$r0,$r1 */
    501      1.1  christos   {
    502      1.1  christos     { 0, 0, 0, 0 },
    503      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), ',', OP (R1), 0 } },
    504      1.1  christos     & ifmt_add, { 0xa4000000 }
    505      1.1  christos   },
    506      1.1  christos /* xnori $r1,$r0,$uimm */
    507      1.1  christos   {
    508      1.1  christos     { 0, 0, 0, 0 },
    509      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (UIMM), 0 } },
    510      1.1  christos     & ifmt_andi, { 0x24000000 }
    511      1.1  christos   },
    512      1.1  christos /* break */
    513      1.1  christos   {
    514      1.1  christos     { 0, 0, 0, 0 },
    515      1.1  christos     { { MNEM, 0 } },
    516      1.1  christos     & ifmt_break, { 0xac000002 }
    517      1.1  christos   },
    518      1.1  christos /* scall */
    519      1.1  christos   {
    520      1.1  christos     { 0, 0, 0, 0 },
    521      1.1  christos     { { MNEM, 0 } },
    522      1.1  christos     & ifmt_break, { 0xac000007 }
    523      1.1  christos   },
    524      1.1  christos /* bret */
    525      1.1  christos   {
    526      1.1  christos     { 0, 0, 0, 0 },
    527      1.1  christos     { { MNEM, 0 } },
    528      1.1  christos     & ifmt_bret, { 0xc3e00000 }
    529      1.1  christos   },
    530      1.1  christos /* eret */
    531      1.1  christos   {
    532      1.1  christos     { 0, 0, 0, 0 },
    533      1.1  christos     { { MNEM, 0 } },
    534      1.1  christos     & ifmt_bret, { 0xc3c00000 }
    535      1.1  christos   },
    536      1.1  christos /* ret */
    537      1.1  christos   {
    538      1.1  christos     { 0, 0, 0, 0 },
    539      1.1  christos     { { MNEM, 0 } },
    540      1.1  christos     & ifmt_bret, { 0xc3a00000 }
    541      1.1  christos   },
    542      1.1  christos /* mv $r2,$r0 */
    543      1.1  christos   {
    544      1.1  christos     { 0, 0, 0, 0 },
    545      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } },
    546      1.1  christos     & ifmt_sextb, { 0xb8000000 }
    547      1.1  christos   },
    548      1.1  christos /* mvi $r1,$imm */
    549      1.1  christos   {
    550      1.1  christos     { 0, 0, 0, 0 },
    551      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (IMM), 0 } },
    552      1.1  christos     & ifmt_mvi, { 0x34000000 }
    553      1.1  christos   },
    554      1.1  christos /* mvu $r1,$lo16 */
    555      1.1  christos   {
    556      1.1  christos     { 0, 0, 0, 0 },
    557      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (LO16), 0 } },
    558      1.1  christos     & ifmt_mvui, { 0x38000000 }
    559      1.1  christos   },
    560      1.1  christos /* mvhi $r1,$hi16 */
    561      1.1  christos   {
    562      1.1  christos     { 0, 0, 0, 0 },
    563      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (HI16), 0 } },
    564      1.1  christos     & ifmt_mvhi, { 0x78000000 }
    565      1.1  christos   },
    566      1.1  christos /* mva $r1,$gp16 */
    567      1.1  christos   {
    568      1.1  christos     { 0, 0, 0, 0 },
    569      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
    570      1.1  christos     & ifmt_mva, { 0x37400000 }
    571      1.1  christos   },
    572      1.1  christos /* not $r2,$r0 */
    573      1.1  christos   {
    574      1.1  christos     { 0, 0, 0, 0 },
    575      1.1  christos     { { MNEM, ' ', OP (R2), ',', OP (R0), 0 } },
    576      1.1  christos     & ifmt_sextb, { 0xa4000000 }
    577      1.1  christos   },
    578      1.1  christos /* nop */
    579      1.1  christos   {
    580      1.1  christos     { 0, 0, 0, 0 },
    581      1.1  christos     { { MNEM, 0 } },
    582      1.1  christos     & ifmt_nop, { 0x34000000 }
    583      1.1  christos   },
    584      1.1  christos /* lb $r1,$gp16 */
    585      1.1  christos   {
    586      1.1  christos     { 0, 0, 0, 0 },
    587      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
    588      1.1  christos     & ifmt_mva, { 0x13400000 }
    589      1.1  christos   },
    590      1.1  christos /* lbu $r1,$gp16 */
    591      1.1  christos   {
    592      1.1  christos     { 0, 0, 0, 0 },
    593      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
    594      1.1  christos     & ifmt_mva, { 0x43400000 }
    595      1.1  christos   },
    596      1.1  christos /* lh $r1,$gp16 */
    597      1.1  christos   {
    598      1.1  christos     { 0, 0, 0, 0 },
    599      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
    600      1.1  christos     & ifmt_mva, { 0x1f400000 }
    601      1.1  christos   },
    602      1.1  christos /* lhu $r1,$gp16 */
    603      1.1  christos   {
    604      1.1  christos     { 0, 0, 0, 0 },
    605      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
    606      1.1  christos     & ifmt_mva, { 0x2f400000 }
    607      1.1  christos   },
    608      1.1  christos /* lw $r1,$gp16 */
    609      1.1  christos   {
    610      1.1  christos     { 0, 0, 0, 0 },
    611      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (GP16), 0 } },
    612      1.1  christos     & ifmt_mva, { 0x2b400000 }
    613      1.1  christos   },
    614      1.1  christos /* sb $gp16,$r1 */
    615      1.1  christos   {
    616      1.1  christos     { 0, 0, 0, 0 },
    617      1.1  christos     { { MNEM, ' ', OP (GP16), ',', OP (R1), 0 } },
    618      1.1  christos     & ifmt_mva, { 0x33400000 }
    619      1.1  christos   },
    620      1.1  christos /* sh $gp16,$r1 */
    621      1.1  christos   {
    622      1.1  christos     { 0, 0, 0, 0 },
    623      1.1  christos     { { MNEM, ' ', OP (GP16), ',', OP (R1), 0 } },
    624      1.1  christos     & ifmt_mva, { 0xf400000 }
    625      1.1  christos   },
    626      1.1  christos /* sw $gp16,$r1 */
    627      1.1  christos   {
    628      1.1  christos     { 0, 0, 0, 0 },
    629      1.1  christos     { { MNEM, ' ', OP (GP16), ',', OP (R1), 0 } },
    630      1.1  christos     & ifmt_mva, { 0x5b400000 }
    631      1.1  christos   },
    632      1.1  christos /* lw $r1,(gp+$got16) */
    633      1.1  christos   {
    634      1.1  christos     { 0, 0, 0, 0 },
    635      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', 'g', 'p', '+', OP (GOT16), ')', 0 } },
    636      1.1  christos     & ifmt_lwgotrel, { 0x2b400000 }
    637      1.1  christos   },
    638      1.1  christos /* orhi $r1,$r0,$gotoffhi16 */
    639      1.1  christos   {
    640      1.1  christos     { 0, 0, 0, 0 },
    641      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (GOTOFFHI16), 0 } },
    642      1.1  christos     & ifmt_orhigotoffi, { 0x78000000 }
    643      1.1  christos   },
    644      1.1  christos /* addi $r1,$r0,$gotofflo16 */
    645      1.1  christos   {
    646      1.1  christos     { 0, 0, 0, 0 },
    647      1.1  christos     { { MNEM, ' ', OP (R1), ',', OP (R0), ',', OP (GOTOFFLO16), 0 } },
    648      1.1  christos     & ifmt_addgotoff, { 0x34000000 }
    649      1.1  christos   },
    650      1.1  christos /* sw ($r0+$gotofflo16),$r1 */
    651      1.1  christos   {
    652      1.1  christos     { 0, 0, 0, 0 },
    653      1.1  christos     { { MNEM, ' ', '(', OP (R0), '+', OP (GOTOFFLO16), ')', ',', OP (R1), 0 } },
    654      1.1  christos     & ifmt_addgotoff, { 0x58000000 }
    655      1.1  christos   },
    656      1.1  christos /* lw $r1,($r0+$gotofflo16) */
    657      1.1  christos   {
    658      1.1  christos     { 0, 0, 0, 0 },
    659      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
    660      1.1  christos     & ifmt_addgotoff, { 0x28000000 }
    661      1.1  christos   },
    662      1.1  christos /* sh ($r0+$gotofflo16),$r1 */
    663      1.1  christos   {
    664      1.1  christos     { 0, 0, 0, 0 },
    665      1.1  christos     { { MNEM, ' ', '(', OP (R0), '+', OP (GOTOFFLO16), ')', ',', OP (R1), 0 } },
    666      1.1  christos     & ifmt_addgotoff, { 0xc000000 }
    667      1.1  christos   },
    668      1.1  christos /* lh $r1,($r0+$gotofflo16) */
    669      1.1  christos   {
    670      1.1  christos     { 0, 0, 0, 0 },
    671      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
    672      1.1  christos     & ifmt_addgotoff, { 0x1c000000 }
    673      1.1  christos   },
    674      1.1  christos /* lhu $r1,($r0+$gotofflo16) */
    675      1.1  christos   {
    676      1.1  christos     { 0, 0, 0, 0 },
    677      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
    678      1.1  christos     & ifmt_addgotoff, { 0x2c000000 }
    679      1.1  christos   },
    680      1.1  christos /* sb ($r0+$gotofflo16),$r1 */
    681      1.1  christos   {
    682      1.1  christos     { 0, 0, 0, 0 },
    683      1.1  christos     { { MNEM, ' ', '(', OP (R0), '+', OP (GOTOFFLO16), ')', ',', OP (R1), 0 } },
    684      1.1  christos     & ifmt_addgotoff, { 0x30000000 }
    685      1.1  christos   },
    686      1.1  christos /* lb $r1,($r0+$gotofflo16) */
    687      1.1  christos   {
    688      1.1  christos     { 0, 0, 0, 0 },
    689      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
    690      1.1  christos     & ifmt_addgotoff, { 0x10000000 }
    691      1.1  christos   },
    692      1.1  christos /* lbu $r1,($r0+$gotofflo16) */
    693      1.1  christos   {
    694      1.1  christos     { 0, 0, 0, 0 },
    695      1.1  christos     { { MNEM, ' ', OP (R1), ',', '(', OP (R0), '+', OP (GOTOFFLO16), ')', 0 } },
    696      1.1  christos     & ifmt_addgotoff, { 0x40000000 }
    697      1.1  christos   },
    698      1.1  christos };
    699      1.1  christos 
    700      1.1  christos #undef A
    701      1.1  christos #undef OPERAND
    702      1.1  christos #undef MNEM
    703      1.1  christos #undef OP
    704      1.1  christos 
    705      1.1  christos /* Formats for ALIAS macro-insns.  */
    706      1.1  christos 
    707      1.1  christos #define F(f) & lm32_cgen_ifld_table[LM32_##f]
    708      1.1  christos #undef F
    709      1.1  christos 
    710      1.1  christos /* Each non-simple macro entry points to an array of expansion possibilities.  */
    711      1.1  christos 
    712      1.1  christos #define A(a) (1 << CGEN_INSN_##a)
    713      1.1  christos #define OPERAND(op) LM32_OPERAND_##op
    714      1.1  christos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
    715      1.1  christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
    716      1.1  christos 
    717      1.1  christos /* The macro instruction table.  */
    718      1.1  christos 
    719      1.1  christos static const CGEN_IBASE lm32_cgen_macro_insn_table[] =
    720      1.1  christos {
    721      1.1  christos };
    722      1.1  christos 
    723      1.1  christos /* The macro instruction opcode table.  */
    724      1.1  christos 
    725      1.1  christos static const CGEN_OPCODE lm32_cgen_macro_insn_opcode_table[] =
    726      1.1  christos {
    727      1.1  christos };
    728      1.1  christos 
    729      1.1  christos #undef A
    730      1.1  christos #undef OPERAND
    731      1.1  christos #undef MNEM
    732      1.1  christos #undef OP
    733      1.1  christos 
    734      1.1  christos #ifndef CGEN_ASM_HASH_P
    735      1.1  christos #define CGEN_ASM_HASH_P(insn) 1
    736      1.1  christos #endif
    737      1.1  christos 
    738      1.1  christos #ifndef CGEN_DIS_HASH_P
    739      1.1  christos #define CGEN_DIS_HASH_P(insn) 1
    740      1.1  christos #endif
    741      1.1  christos 
    742      1.1  christos /* Return non-zero if INSN is to be added to the hash table.
    743      1.1  christos    Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file.  */
    744      1.1  christos 
    745      1.1  christos static int
    746  1.1.1.3  christos asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED)
    747      1.1  christos {
    748      1.1  christos   return CGEN_ASM_HASH_P (insn);
    749      1.1  christos }
    750      1.1  christos 
    751      1.1  christos static int
    752  1.1.1.3  christos dis_hash_insn_p (const CGEN_INSN *insn)
    753      1.1  christos {
    754      1.1  christos   /* If building the hash table and the NO-DIS attribute is present,
    755      1.1  christos      ignore.  */
    756      1.1  christos   if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
    757      1.1  christos     return 0;
    758      1.1  christos   return CGEN_DIS_HASH_P (insn);
    759      1.1  christos }
    760      1.1  christos 
    761      1.1  christos #ifndef CGEN_ASM_HASH
    762      1.1  christos #define CGEN_ASM_HASH_SIZE 127
    763      1.1  christos #ifdef CGEN_MNEMONIC_OPERANDS
    764      1.1  christos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
    765      1.1  christos #else
    766      1.1  christos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
    767      1.1  christos #endif
    768      1.1  christos #endif
    769      1.1  christos 
    770      1.1  christos /* It doesn't make much sense to provide a default here,
    771      1.1  christos    but while this is under development we do.
    772      1.1  christos    BUFFER is a pointer to the bytes of the insn, target order.
    773      1.1  christos    VALUE is the first base_insn_bitsize bits as an int in host order.  */
    774      1.1  christos 
    775      1.1  christos #ifndef CGEN_DIS_HASH
    776      1.1  christos #define CGEN_DIS_HASH_SIZE 256
    777      1.1  christos #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
    778      1.1  christos #endif
    779      1.1  christos 
    780      1.1  christos /* The result is the hash value of the insn.
    781      1.1  christos    Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file.  */
    782      1.1  christos 
    783      1.1  christos static unsigned int
    784  1.1.1.3  christos asm_hash_insn (const char *mnem)
    785      1.1  christos {
    786      1.1  christos   return CGEN_ASM_HASH (mnem);
    787      1.1  christos }
    788      1.1  christos 
    789      1.1  christos /* BUF is a pointer to the bytes of the insn, target order.
    790      1.1  christos    VALUE is the first base_insn_bitsize bits as an int in host order.  */
    791      1.1  christos 
    792      1.1  christos static unsigned int
    793  1.1.1.3  christos dis_hash_insn (const char *buf ATTRIBUTE_UNUSED,
    794  1.1.1.3  christos 		     CGEN_INSN_INT value ATTRIBUTE_UNUSED)
    795      1.1  christos {
    796      1.1  christos   return CGEN_DIS_HASH (buf, value);
    797      1.1  christos }
    798      1.1  christos 
    799      1.1  christos /* Set the recorded length of the insn in the CGEN_FIELDS struct.  */
    800      1.1  christos 
    801      1.1  christos static void
    802      1.1  christos set_fields_bitsize (CGEN_FIELDS *fields, int size)
    803      1.1  christos {
    804      1.1  christos   CGEN_FIELDS_BITSIZE (fields) = size;
    805      1.1  christos }
    806      1.1  christos 
    807      1.1  christos /* Function to call before using the operand instance table.
    808      1.1  christos    This plugs the opcode entries and macro instructions into the cpu table.  */
    809      1.1  christos 
    810      1.1  christos void
    811      1.1  christos lm32_cgen_init_opcode_table (CGEN_CPU_DESC cd)
    812      1.1  christos {
    813      1.1  christos   int i;
    814      1.1  christos   int num_macros = (sizeof (lm32_cgen_macro_insn_table) /
    815      1.1  christos 		    sizeof (lm32_cgen_macro_insn_table[0]));
    816      1.1  christos   const CGEN_IBASE *ib = & lm32_cgen_macro_insn_table[0];
    817      1.1  christos   const CGEN_OPCODE *oc = & lm32_cgen_macro_insn_opcode_table[0];
    818      1.1  christos   CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
    819      1.1  christos 
    820      1.1  christos   /* This test has been added to avoid a warning generated
    821      1.1  christos      if memset is called with a third argument of value zero.  */
    822      1.1  christos   if (num_macros >= 1)
    823      1.1  christos     memset (insns, 0, num_macros * sizeof (CGEN_INSN));
    824      1.1  christos   for (i = 0; i < num_macros; ++i)
    825      1.1  christos     {
    826      1.1  christos       insns[i].base = &ib[i];
    827      1.1  christos       insns[i].opcode = &oc[i];
    828      1.1  christos       lm32_cgen_build_insn_regex (& insns[i]);
    829      1.1  christos     }
    830      1.1  christos   cd->macro_insn_table.init_entries = insns;
    831      1.1  christos   cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
    832      1.1  christos   cd->macro_insn_table.num_init_entries = num_macros;
    833      1.1  christos 
    834      1.1  christos   oc = & lm32_cgen_insn_opcode_table[0];
    835      1.1  christos   insns = (CGEN_INSN *) cd->insn_table.init_entries;
    836      1.1  christos   for (i = 0; i < MAX_INSNS; ++i)
    837      1.1  christos     {
    838      1.1  christos       insns[i].opcode = &oc[i];
    839      1.1  christos       lm32_cgen_build_insn_regex (& insns[i]);
    840      1.1  christos     }
    841      1.1  christos 
    842      1.1  christos   cd->sizeof_fields = sizeof (CGEN_FIELDS);
    843      1.1  christos   cd->set_fields_bitsize = set_fields_bitsize;
    844      1.1  christos 
    845      1.1  christos   cd->asm_hash_p = asm_hash_insn_p;
    846      1.1  christos   cd->asm_hash = asm_hash_insn;
    847      1.1  christos   cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
    848      1.1  christos 
    849      1.1  christos   cd->dis_hash_p = dis_hash_insn_p;
    850      1.1  christos   cd->dis_hash = dis_hash_insn;
    851      1.1  christos   cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
    852      1.1  christos }
    853