Home | History | Annotate | Line # | Download | only in opcodes
or1k-opc.c revision 1.4
      1  1.1  christos /* Instruction opcode table for or1k.
      2  1.1  christos 
      3  1.1  christos THIS FILE IS MACHINE GENERATED WITH CGEN.
      4  1.1  christos 
      5  1.4  christos Copyright (C) 1996-2016 Free Software Foundation, Inc.
      6  1.1  christos 
      7  1.1  christos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
      8  1.1  christos 
      9  1.1  christos    This file is free software; you can redistribute it and/or modify
     10  1.1  christos    it under the terms of the GNU General Public License as published by
     11  1.1  christos    the Free Software Foundation; either version 3, or (at your option)
     12  1.1  christos    any later version.
     13  1.1  christos 
     14  1.1  christos    It is distributed in the hope that it will be useful, but WITHOUT
     15  1.1  christos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     16  1.1  christos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     17  1.1  christos    License for more details.
     18  1.1  christos 
     19  1.1  christos    You should have received a copy of the GNU General Public License along
     20  1.1  christos    with this program; if not, write to the Free Software Foundation, Inc.,
     21  1.1  christos    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
     22  1.1  christos 
     23  1.1  christos */
     24  1.1  christos 
     25  1.1  christos #include "sysdep.h"
     26  1.1  christos #include "ansidecl.h"
     27  1.1  christos #include "bfd.h"
     28  1.1  christos #include "symcat.h"
     29  1.1  christos #include "or1k-desc.h"
     30  1.1  christos #include "or1k-opc.h"
     31  1.1  christos #include "libiberty.h"
     32  1.1  christos 
     33  1.1  christos /* -- opc.c */
     34  1.1  christos /* -- */
     35  1.1  christos /* The hash functions are recorded here to help keep assembler code out of
     36  1.1  christos    the disassembler and vice versa.  */
     37  1.1  christos 
     38  1.1  christos static int asm_hash_insn_p        (const CGEN_INSN *);
     39  1.1  christos static unsigned int asm_hash_insn (const char *);
     40  1.1  christos static int dis_hash_insn_p        (const CGEN_INSN *);
     41  1.1  christos static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
     42  1.1  christos 
     43  1.1  christos /* Instruction formats.  */
     44  1.1  christos 
     45  1.1  christos #define F(f) & or1k_cgen_ifld_table[OR1K_##f]
     46  1.1  christos static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
     47  1.1  christos   0, 0, 0x0, { { 0 } }
     48  1.1  christos };
     49  1.1  christos 
     50  1.1  christos static const CGEN_IFMT ifmt_l_j ATTRIBUTE_UNUSED = {
     51  1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_DISP26) }, { 0 } }
     52  1.1  christos };
     53  1.1  christos 
     54  1.1  christos static const CGEN_IFMT ifmt_l_jr ATTRIBUTE_UNUSED = {
     55  1.1  christos   32, 32, 0xffff07ff, { { F (F_OPCODE) }, { F (F_RESV_25_10) }, { F (F_R3) }, { F (F_RESV_10_11) }, { 0 } }
     56  1.1  christos };
     57  1.1  christos 
     58  1.1  christos static const CGEN_IFMT ifmt_l_trap ATTRIBUTE_UNUSED = {
     59  1.1  christos   32, 32, 0xffff0000, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_RESV_20_5) }, { F (F_UIMM16) }, { 0 } }
     60  1.1  christos };
     61  1.1  christos 
     62  1.1  christos static const CGEN_IFMT ifmt_l_msync ATTRIBUTE_UNUSED = {
     63  1.1  christos   32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_RESV_20_21) }, { 0 } }
     64  1.1  christos };
     65  1.1  christos 
     66  1.1  christos static const CGEN_IFMT ifmt_l_rfe ATTRIBUTE_UNUSED = {
     67  1.1  christos   32, 32, 0xffffffff, { { F (F_OPCODE) }, { F (F_RESV_25_26) }, { 0 } }
     68  1.1  christos };
     69  1.1  christos 
     70  1.1  christos static const CGEN_IFMT ifmt_l_nop_imm ATTRIBUTE_UNUSED = {
     71  1.1  christos   32, 32, 0xffff0000, { { F (F_OPCODE) }, { F (F_OP_25_2) }, { F (F_RESV_23_8) }, { F (F_UIMM16) }, { 0 } }
     72  1.1  christos };
     73  1.1  christos 
     74  1.1  christos static const CGEN_IFMT ifmt_l_movhi ATTRIBUTE_UNUSED = {
     75  1.1  christos   32, 32, 0xfc1f0000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_20_4) }, { F (F_OP_16_1) }, { F (F_UIMM16) }, { 0 } }
     76  1.1  christos };
     77  1.1  christos 
     78  1.1  christos static const CGEN_IFMT ifmt_l_macrc ATTRIBUTE_UNUSED = {
     79  1.1  christos   32, 32, 0xfc1fffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_RESV_20_4) }, { F (F_OP_16_1) }, { F (F_UIMM16) }, { 0 } }
     80  1.1  christos };
     81  1.1  christos 
     82  1.1  christos static const CGEN_IFMT ifmt_l_mfspr ATTRIBUTE_UNUSED = {
     83  1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } }
     84  1.1  christos };
     85  1.1  christos 
     86  1.1  christos static const CGEN_IFMT ifmt_l_mtspr ATTRIBUTE_UNUSED = {
     87  1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_UIMM16_SPLIT) }, { 0 } }
     88  1.1  christos };
     89  1.1  christos 
     90  1.1  christos static const CGEN_IFMT ifmt_l_lwz ATTRIBUTE_UNUSED = {
     91  1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
     92  1.1  christos };
     93  1.1  christos 
     94  1.1  christos static const CGEN_IFMT ifmt_l_sw ATTRIBUTE_UNUSED = {
     95  1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_SIMM16_SPLIT) }, { 0 } }
     96  1.1  christos };
     97  1.1  christos 
     98  1.1  christos static const CGEN_IFMT ifmt_l_swa ATTRIBUTE_UNUSED = {
     99  1.1  christos   32, 32, 0xfc000000, { { F (F_OPCODE) }, { F (F_R2) }, { F (F_R3) }, { F (F_SIMM16) }, { 0 } }
    100  1.1  christos };
    101  1.1  christos 
    102  1.1  christos static const CGEN_IFMT ifmt_l_sll ATTRIBUTE_UNUSED = {
    103  1.1  christos   32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_2) }, { F (F_RESV_5_2) }, { F (F_OP_3_4) }, { 0 } }
    104  1.1  christos };
    105  1.1  christos 
    106  1.1  christos static const CGEN_IFMT ifmt_l_slli ATTRIBUTE_UNUSED = {
    107  1.1  christos   32, 32, 0xfc00ffc0, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV_15_8) }, { F (F_OP_7_2) }, { F (F_UIMM6) }, { 0 } }
    108  1.1  christos };
    109  1.1  christos 
    110  1.1  christos static const CGEN_IFMT ifmt_l_and ATTRIBUTE_UNUSED = {
    111  1.1  christos   32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_7) }, { F (F_OP_3_4) }, { 0 } }
    112  1.1  christos };
    113  1.1  christos 
    114  1.1  christos static const CGEN_IFMT ifmt_l_exths ATTRIBUTE_UNUSED = {
    115  1.1  christos   32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_RESV_15_6) }, { F (F_OP_9_4) }, { F (F_RESV_5_2) }, { F (F_OP_3_4) }, { 0 } }
    116  1.1  christos };
    117  1.1  christos 
    118  1.1  christos static const CGEN_IFMT ifmt_l_cmov ATTRIBUTE_UNUSED = {
    119  1.1  christos   32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_1) }, { F (F_OP_9_2) }, { F (F_RESV_7_4) }, { F (F_OP_3_4) }, { 0 } }
    120  1.1  christos };
    121  1.1  christos 
    122  1.1  christos static const CGEN_IFMT ifmt_l_sfgts ATTRIBUTE_UNUSED = {
    123  1.1  christos   32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_11) }, { 0 } }
    124  1.1  christos };
    125  1.1  christos 
    126  1.1  christos static const CGEN_IFMT ifmt_l_sfgtsi ATTRIBUTE_UNUSED = {
    127  1.1  christos   32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
    128  1.1  christos };
    129  1.1  christos 
    130  1.1  christos static const CGEN_IFMT ifmt_l_mac ATTRIBUTE_UNUSED = {
    131  1.1  christos   32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_OP_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_7) }, { F (F_OP_3_4) }, { 0 } }
    132  1.1  christos };
    133  1.1  christos 
    134  1.1  christos static const CGEN_IFMT ifmt_l_maci ATTRIBUTE_UNUSED = {
    135  1.1  christos   32, 32, 0xffe00000, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
    136  1.1  christos };
    137  1.1  christos 
    138  1.1  christos static const CGEN_IFMT ifmt_lf_add_s ATTRIBUTE_UNUSED = {
    139  1.1  christos   32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
    140  1.1  christos };
    141  1.1  christos 
    142  1.1  christos static const CGEN_IFMT ifmt_lf_add_d ATTRIBUTE_UNUSED = {
    143  1.1  christos   32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R1) }, { F (F_R1) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
    144  1.1  christos };
    145  1.1  christos 
    146  1.1  christos static const CGEN_IFMT ifmt_lf_itof_s ATTRIBUTE_UNUSED = {
    147  1.1  christos   32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
    148  1.1  christos };
    149  1.1  christos 
    150  1.1  christos static const CGEN_IFMT ifmt_lf_ftoi_s ATTRIBUTE_UNUSED = {
    151  1.1  christos   32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
    152  1.1  christos };
    153  1.1  christos 
    154  1.1  christos static const CGEN_IFMT ifmt_lf_ftoi_d ATTRIBUTE_UNUSED = {
    155  1.1  christos   32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R1) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
    156  1.1  christos };
    157  1.1  christos 
    158  1.1  christos static const CGEN_IFMT ifmt_lf_eq_s ATTRIBUTE_UNUSED = {
    159  1.1  christos   32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
    160  1.1  christos };
    161  1.1  christos 
    162  1.1  christos static const CGEN_IFMT ifmt_lf_cust1_s ATTRIBUTE_UNUSED = {
    163  1.1  christos   32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
    164  1.1  christos };
    165  1.1  christos 
    166  1.1  christos static const CGEN_IFMT ifmt_lf_cust1_d ATTRIBUTE_UNUSED = {
    167  1.1  christos   32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R1) }, { F (F_R1) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } }
    168  1.1  christos };
    169  1.1  christos 
    170  1.1  christos #undef F
    171  1.1  christos 
    172  1.1  christos #define A(a) (1 << CGEN_INSN_##a)
    173  1.1  christos #define OPERAND(op) OR1K_OPERAND_##op
    174  1.1  christos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
    175  1.1  christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
    176  1.1  christos 
    177  1.1  christos /* The instruction table.  */
    178  1.1  christos 
    179  1.1  christos static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] =
    180  1.1  christos {
    181  1.1  christos   /* Special null first entry.
    182  1.1  christos      A `num' value of zero is thus invalid.
    183  1.1  christos      Also, the special `invalid' insn resides here.  */
    184  1.1  christos   { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
    185  1.1  christos /* l.j ${disp26} */
    186  1.1  christos   {
    187  1.1  christos     { 0, 0, 0, 0 },
    188  1.1  christos     { { MNEM, ' ', OP (DISP26), 0 } },
    189  1.1  christos     & ifmt_l_j, { 0x0 }
    190  1.1  christos   },
    191  1.1  christos /* l.jal ${disp26} */
    192  1.1  christos   {
    193  1.1  christos     { 0, 0, 0, 0 },
    194  1.1  christos     { { MNEM, ' ', OP (DISP26), 0 } },
    195  1.1  christos     & ifmt_l_j, { 0x4000000 }
    196  1.1  christos   },
    197  1.1  christos /* l.jr $rB */
    198  1.1  christos   {
    199  1.1  christos     { 0, 0, 0, 0 },
    200  1.1  christos     { { MNEM, ' ', OP (RB), 0 } },
    201  1.1  christos     & ifmt_l_jr, { 0x44000000 }
    202  1.1  christos   },
    203  1.1  christos /* l.jalr $rB */
    204  1.1  christos   {
    205  1.1  christos     { 0, 0, 0, 0 },
    206  1.1  christos     { { MNEM, ' ', OP (RB), 0 } },
    207  1.1  christos     & ifmt_l_jr, { 0x48000000 }
    208  1.1  christos   },
    209  1.1  christos /* l.bnf ${disp26} */
    210  1.1  christos   {
    211  1.1  christos     { 0, 0, 0, 0 },
    212  1.1  christos     { { MNEM, ' ', OP (DISP26), 0 } },
    213  1.1  christos     & ifmt_l_j, { 0xc000000 }
    214  1.1  christos   },
    215  1.1  christos /* l.bf ${disp26} */
    216  1.1  christos   {
    217  1.1  christos     { 0, 0, 0, 0 },
    218  1.1  christos     { { MNEM, ' ', OP (DISP26), 0 } },
    219  1.1  christos     & ifmt_l_j, { 0x10000000 }
    220  1.1  christos   },
    221  1.1  christos /* l.trap ${uimm16} */
    222  1.1  christos   {
    223  1.1  christos     { 0, 0, 0, 0 },
    224  1.1  christos     { { MNEM, ' ', OP (UIMM16), 0 } },
    225  1.1  christos     & ifmt_l_trap, { 0x21000000 }
    226  1.1  christos   },
    227  1.1  christos /* l.sys ${uimm16} */
    228  1.1  christos   {
    229  1.1  christos     { 0, 0, 0, 0 },
    230  1.1  christos     { { MNEM, ' ', OP (UIMM16), 0 } },
    231  1.1  christos     & ifmt_l_trap, { 0x20000000 }
    232  1.1  christos   },
    233  1.1  christos /* l.msync */
    234  1.1  christos   {
    235  1.1  christos     { 0, 0, 0, 0 },
    236  1.1  christos     { { MNEM, 0 } },
    237  1.1  christos     & ifmt_l_msync, { 0x22000000 }
    238  1.1  christos   },
    239  1.1  christos /* l.psync */
    240  1.1  christos   {
    241  1.1  christos     { 0, 0, 0, 0 },
    242  1.1  christos     { { MNEM, 0 } },
    243  1.1  christos     & ifmt_l_msync, { 0x22800000 }
    244  1.1  christos   },
    245  1.1  christos /* l.csync */
    246  1.1  christos   {
    247  1.1  christos     { 0, 0, 0, 0 },
    248  1.1  christos     { { MNEM, 0 } },
    249  1.1  christos     & ifmt_l_msync, { 0x23000000 }
    250  1.1  christos   },
    251  1.1  christos /* l.rfe */
    252  1.1  christos   {
    253  1.1  christos     { 0, 0, 0, 0 },
    254  1.1  christos     { { MNEM, 0 } },
    255  1.1  christos     & ifmt_l_rfe, { 0x24000000 }
    256  1.1  christos   },
    257  1.1  christos /* l.nop ${uimm16} */
    258  1.1  christos   {
    259  1.1  christos     { 0, 0, 0, 0 },
    260  1.1  christos     { { MNEM, ' ', OP (UIMM16), 0 } },
    261  1.1  christos     & ifmt_l_nop_imm, { 0x15000000 }
    262  1.1  christos   },
    263  1.1  christos /* l.nop */
    264  1.1  christos   {
    265  1.1  christos     { 0, 0, 0, 0 },
    266  1.1  christos     { { MNEM, 0 } },
    267  1.1  christos     & ifmt_l_nop_imm, { 0x15000000 }
    268  1.1  christos   },
    269  1.1  christos /* l.movhi $rD,$uimm16 */
    270  1.1  christos   {
    271  1.1  christos     { 0, 0, 0, 0 },
    272  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (UIMM16), 0 } },
    273  1.1  christos     & ifmt_l_movhi, { 0x18000000 }
    274  1.1  christos   },
    275  1.1  christos /* l.macrc $rD */
    276  1.1  christos   {
    277  1.1  christos     { 0, 0, 0, 0 },
    278  1.1  christos     { { MNEM, ' ', OP (RD), 0 } },
    279  1.1  christos     & ifmt_l_macrc, { 0x18010000 }
    280  1.1  christos   },
    281  1.1  christos /* l.mfspr $rD,$rA,${uimm16} */
    282  1.1  christos   {
    283  1.1  christos     { 0, 0, 0, 0 },
    284  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } },
    285  1.1  christos     & ifmt_l_mfspr, { 0xb4000000 }
    286  1.1  christos   },
    287  1.1  christos /* l.mtspr $rA,$rB,${uimm16-split} */
    288  1.1  christos   {
    289  1.1  christos     { 0, 0, 0, 0 },
    290  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), ',', OP (UIMM16_SPLIT), 0 } },
    291  1.1  christos     & ifmt_l_mtspr, { 0xc0000000 }
    292  1.1  christos   },
    293  1.1  christos /* l.lwz $rD,${simm16}($rA) */
    294  1.1  christos   {
    295  1.1  christos     { 0, 0, 0, 0 },
    296  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
    297  1.1  christos     & ifmt_l_lwz, { 0x84000000 }
    298  1.1  christos   },
    299  1.1  christos /* l.lws $rD,${simm16}($rA) */
    300  1.1  christos   {
    301  1.1  christos     { 0, 0, 0, 0 },
    302  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
    303  1.1  christos     & ifmt_l_lwz, { 0x88000000 }
    304  1.1  christos   },
    305  1.1  christos /* l.lwa $rD,${simm16}($rA) */
    306  1.1  christos   {
    307  1.1  christos     { 0, 0, 0, 0 },
    308  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
    309  1.1  christos     & ifmt_l_lwz, { 0x6c000000 }
    310  1.1  christos   },
    311  1.1  christos /* l.lbz $rD,${simm16}($rA) */
    312  1.1  christos   {
    313  1.1  christos     { 0, 0, 0, 0 },
    314  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
    315  1.1  christos     & ifmt_l_lwz, { 0x8c000000 }
    316  1.1  christos   },
    317  1.1  christos /* l.lbs $rD,${simm16}($rA) */
    318  1.1  christos   {
    319  1.1  christos     { 0, 0, 0, 0 },
    320  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
    321  1.1  christos     & ifmt_l_lwz, { 0x90000000 }
    322  1.1  christos   },
    323  1.1  christos /* l.lhz $rD,${simm16}($rA) */
    324  1.1  christos   {
    325  1.1  christos     { 0, 0, 0, 0 },
    326  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
    327  1.1  christos     & ifmt_l_lwz, { 0x94000000 }
    328  1.1  christos   },
    329  1.1  christos /* l.lhs $rD,${simm16}($rA) */
    330  1.1  christos   {
    331  1.1  christos     { 0, 0, 0, 0 },
    332  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (SIMM16), '(', OP (RA), ')', 0 } },
    333  1.1  christos     & ifmt_l_lwz, { 0x98000000 }
    334  1.1  christos   },
    335  1.1  christos /* l.sw ${simm16-split}($rA),$rB */
    336  1.1  christos   {
    337  1.1  christos     { 0, 0, 0, 0 },
    338  1.1  christos     { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } },
    339  1.1  christos     & ifmt_l_sw, { 0xd4000000 }
    340  1.1  christos   },
    341  1.1  christos /* l.sb ${simm16-split}($rA),$rB */
    342  1.1  christos   {
    343  1.1  christos     { 0, 0, 0, 0 },
    344  1.1  christos     { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } },
    345  1.1  christos     & ifmt_l_sw, { 0xd8000000 }
    346  1.1  christos   },
    347  1.1  christos /* l.sh ${simm16-split}($rA),$rB */
    348  1.1  christos   {
    349  1.1  christos     { 0, 0, 0, 0 },
    350  1.1  christos     { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } },
    351  1.1  christos     & ifmt_l_sw, { 0xdc000000 }
    352  1.1  christos   },
    353  1.1  christos /* l.swa ${simm16-split}($rA),$rB */
    354  1.1  christos   {
    355  1.1  christos     { 0, 0, 0, 0 },
    356  1.1  christos     { { MNEM, ' ', OP (SIMM16_SPLIT), '(', OP (RA), ')', ',', OP (RB), 0 } },
    357  1.1  christos     & ifmt_l_swa, { 0xcc000000 }
    358  1.1  christos   },
    359  1.1  christos /* l.sll $rD,$rA,$rB */
    360  1.1  christos   {
    361  1.1  christos     { 0, 0, 0, 0 },
    362  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    363  1.1  christos     & ifmt_l_sll, { 0xe0000008 }
    364  1.1  christos   },
    365  1.1  christos /* l.slli $rD,$rA,${uimm6} */
    366  1.1  christos   {
    367  1.1  christos     { 0, 0, 0, 0 },
    368  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } },
    369  1.1  christos     & ifmt_l_slli, { 0xb8000000 }
    370  1.1  christos   },
    371  1.1  christos /* l.srl $rD,$rA,$rB */
    372  1.1  christos   {
    373  1.1  christos     { 0, 0, 0, 0 },
    374  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    375  1.1  christos     & ifmt_l_sll, { 0xe0000048 }
    376  1.1  christos   },
    377  1.1  christos /* l.srli $rD,$rA,${uimm6} */
    378  1.1  christos   {
    379  1.1  christos     { 0, 0, 0, 0 },
    380  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } },
    381  1.1  christos     & ifmt_l_slli, { 0xb8000040 }
    382  1.1  christos   },
    383  1.1  christos /* l.sra $rD,$rA,$rB */
    384  1.1  christos   {
    385  1.1  christos     { 0, 0, 0, 0 },
    386  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    387  1.1  christos     & ifmt_l_sll, { 0xe0000088 }
    388  1.1  christos   },
    389  1.1  christos /* l.srai $rD,$rA,${uimm6} */
    390  1.1  christos   {
    391  1.1  christos     { 0, 0, 0, 0 },
    392  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } },
    393  1.1  christos     & ifmt_l_slli, { 0xb8000080 }
    394  1.1  christos   },
    395  1.1  christos /* l.ror $rD,$rA,$rB */
    396  1.1  christos   {
    397  1.1  christos     { 0, 0, 0, 0 },
    398  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    399  1.1  christos     & ifmt_l_sll, { 0xe00000c8 }
    400  1.1  christos   },
    401  1.1  christos /* l.rori $rD,$rA,${uimm6} */
    402  1.1  christos   {
    403  1.1  christos     { 0, 0, 0, 0 },
    404  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM6), 0 } },
    405  1.1  christos     & ifmt_l_slli, { 0xb80000c0 }
    406  1.1  christos   },
    407  1.1  christos /* l.and $rD,$rA,$rB */
    408  1.1  christos   {
    409  1.1  christos     { 0, 0, 0, 0 },
    410  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    411  1.1  christos     & ifmt_l_and, { 0xe0000003 }
    412  1.1  christos   },
    413  1.1  christos /* l.or $rD,$rA,$rB */
    414  1.1  christos   {
    415  1.1  christos     { 0, 0, 0, 0 },
    416  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    417  1.1  christos     & ifmt_l_and, { 0xe0000004 }
    418  1.1  christos   },
    419  1.1  christos /* l.xor $rD,$rA,$rB */
    420  1.1  christos   {
    421  1.1  christos     { 0, 0, 0, 0 },
    422  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    423  1.1  christos     & ifmt_l_and, { 0xe0000005 }
    424  1.1  christos   },
    425  1.1  christos /* l.add $rD,$rA,$rB */
    426  1.1  christos   {
    427  1.1  christos     { 0, 0, 0, 0 },
    428  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    429  1.1  christos     & ifmt_l_and, { 0xe0000000 }
    430  1.1  christos   },
    431  1.1  christos /* l.sub $rD,$rA,$rB */
    432  1.1  christos   {
    433  1.1  christos     { 0, 0, 0, 0 },
    434  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    435  1.1  christos     & ifmt_l_and, { 0xe0000002 }
    436  1.1  christos   },
    437  1.1  christos /* l.addc $rD,$rA,$rB */
    438  1.1  christos   {
    439  1.1  christos     { 0, 0, 0, 0 },
    440  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    441  1.1  christos     & ifmt_l_and, { 0xe0000001 }
    442  1.1  christos   },
    443  1.1  christos /* l.mul $rD,$rA,$rB */
    444  1.1  christos   {
    445  1.1  christos     { 0, 0, 0, 0 },
    446  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    447  1.1  christos     & ifmt_l_and, { 0xe0000306 }
    448  1.1  christos   },
    449  1.1  christos /* l.mulu $rD,$rA,$rB */
    450  1.1  christos   {
    451  1.1  christos     { 0, 0, 0, 0 },
    452  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    453  1.1  christos     & ifmt_l_and, { 0xe000030b }
    454  1.1  christos   },
    455  1.1  christos /* l.div $rD,$rA,$rB */
    456  1.1  christos   {
    457  1.1  christos     { 0, 0, 0, 0 },
    458  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    459  1.1  christos     & ifmt_l_and, { 0xe0000309 }
    460  1.1  christos   },
    461  1.1  christos /* l.divu $rD,$rA,$rB */
    462  1.1  christos   {
    463  1.1  christos     { 0, 0, 0, 0 },
    464  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    465  1.1  christos     & ifmt_l_and, { 0xe000030a }
    466  1.1  christos   },
    467  1.1  christos /* l.ff1 $rD,$rA */
    468  1.1  christos   {
    469  1.1  christos     { 0, 0, 0, 0 },
    470  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
    471  1.1  christos     & ifmt_l_and, { 0xe000000f }
    472  1.1  christos   },
    473  1.1  christos /* l.fl1 $rD,$rA */
    474  1.1  christos   {
    475  1.1  christos     { 0, 0, 0, 0 },
    476  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
    477  1.1  christos     & ifmt_l_and, { 0xe000010f }
    478  1.1  christos   },
    479  1.1  christos /* l.andi $rD,$rA,$uimm16 */
    480  1.1  christos   {
    481  1.1  christos     { 0, 0, 0, 0 },
    482  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } },
    483  1.1  christos     & ifmt_l_mfspr, { 0xa4000000 }
    484  1.1  christos   },
    485  1.1  christos /* l.ori $rD,$rA,$uimm16 */
    486  1.1  christos   {
    487  1.1  christos     { 0, 0, 0, 0 },
    488  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (UIMM16), 0 } },
    489  1.1  christos     & ifmt_l_mfspr, { 0xa8000000 }
    490  1.1  christos   },
    491  1.1  christos /* l.xori $rD,$rA,$simm16 */
    492  1.1  christos   {
    493  1.1  christos     { 0, 0, 0, 0 },
    494  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } },
    495  1.1  christos     & ifmt_l_lwz, { 0xac000000 }
    496  1.1  christos   },
    497  1.1  christos /* l.addi $rD,$rA,$simm16 */
    498  1.1  christos   {
    499  1.1  christos     { 0, 0, 0, 0 },
    500  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } },
    501  1.1  christos     & ifmt_l_lwz, { 0x9c000000 }
    502  1.1  christos   },
    503  1.1  christos /* l.addic $rD,$rA,$simm16 */
    504  1.1  christos   {
    505  1.1  christos     { 0, 0, 0, 0 },
    506  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } },
    507  1.1  christos     & ifmt_l_lwz, { 0xa0000000 }
    508  1.1  christos   },
    509  1.1  christos /* l.muli $rD,$rA,$simm16 */
    510  1.1  christos   {
    511  1.1  christos     { 0, 0, 0, 0 },
    512  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (SIMM16), 0 } },
    513  1.1  christos     & ifmt_l_lwz, { 0xb0000000 }
    514  1.1  christos   },
    515  1.1  christos /* l.exths $rD,$rA */
    516  1.1  christos   {
    517  1.1  christos     { 0, 0, 0, 0 },
    518  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
    519  1.1  christos     & ifmt_l_exths, { 0xe000000c }
    520  1.1  christos   },
    521  1.1  christos /* l.extbs $rD,$rA */
    522  1.1  christos   {
    523  1.1  christos     { 0, 0, 0, 0 },
    524  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
    525  1.1  christos     & ifmt_l_exths, { 0xe000004c }
    526  1.1  christos   },
    527  1.1  christos /* l.exthz $rD,$rA */
    528  1.1  christos   {
    529  1.1  christos     { 0, 0, 0, 0 },
    530  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
    531  1.1  christos     & ifmt_l_exths, { 0xe000008c }
    532  1.1  christos   },
    533  1.1  christos /* l.extbz $rD,$rA */
    534  1.1  christos   {
    535  1.1  christos     { 0, 0, 0, 0 },
    536  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
    537  1.1  christos     & ifmt_l_exths, { 0xe00000cc }
    538  1.1  christos   },
    539  1.1  christos /* l.extws $rD,$rA */
    540  1.1  christos   {
    541  1.1  christos     { 0, 0, 0, 0 },
    542  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
    543  1.1  christos     & ifmt_l_exths, { 0xe000000d }
    544  1.1  christos   },
    545  1.1  christos /* l.extwz $rD,$rA */
    546  1.1  christos   {
    547  1.1  christos     { 0, 0, 0, 0 },
    548  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), 0 } },
    549  1.1  christos     & ifmt_l_exths, { 0xe000004d }
    550  1.1  christos   },
    551  1.1  christos /* l.cmov $rD,$rA,$rB */
    552  1.1  christos   {
    553  1.1  christos     { 0, 0, 0, 0 },
    554  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RA), ',', OP (RB), 0 } },
    555  1.1  christos     & ifmt_l_cmov, { 0xe000000e }
    556  1.1  christos   },
    557  1.1  christos /* l.sfgts $rA,$rB */
    558  1.1  christos   {
    559  1.1  christos     { 0, 0, 0, 0 },
    560  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    561  1.1  christos     & ifmt_l_sfgts, { 0xe5400000 }
    562  1.1  christos   },
    563  1.1  christos /* l.sfgtsi $rA,$simm16 */
    564  1.1  christos   {
    565  1.1  christos     { 0, 0, 0, 0 },
    566  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    567  1.1  christos     & ifmt_l_sfgtsi, { 0xbd400000 }
    568  1.1  christos   },
    569  1.1  christos /* l.sfgtu $rA,$rB */
    570  1.1  christos   {
    571  1.1  christos     { 0, 0, 0, 0 },
    572  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    573  1.1  christos     & ifmt_l_sfgts, { 0xe4400000 }
    574  1.1  christos   },
    575  1.1  christos /* l.sfgtui $rA,$simm16 */
    576  1.1  christos   {
    577  1.1  christos     { 0, 0, 0, 0 },
    578  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    579  1.1  christos     & ifmt_l_sfgtsi, { 0xbc400000 }
    580  1.1  christos   },
    581  1.1  christos /* l.sfges $rA,$rB */
    582  1.1  christos   {
    583  1.1  christos     { 0, 0, 0, 0 },
    584  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    585  1.1  christos     & ifmt_l_sfgts, { 0xe5600000 }
    586  1.1  christos   },
    587  1.1  christos /* l.sfgesi $rA,$simm16 */
    588  1.1  christos   {
    589  1.1  christos     { 0, 0, 0, 0 },
    590  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    591  1.1  christos     & ifmt_l_sfgtsi, { 0xbd600000 }
    592  1.1  christos   },
    593  1.1  christos /* l.sfgeu $rA,$rB */
    594  1.1  christos   {
    595  1.1  christos     { 0, 0, 0, 0 },
    596  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    597  1.1  christos     & ifmt_l_sfgts, { 0xe4600000 }
    598  1.1  christos   },
    599  1.1  christos /* l.sfgeui $rA,$simm16 */
    600  1.1  christos   {
    601  1.1  christos     { 0, 0, 0, 0 },
    602  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    603  1.1  christos     & ifmt_l_sfgtsi, { 0xbc600000 }
    604  1.1  christos   },
    605  1.1  christos /* l.sflts $rA,$rB */
    606  1.1  christos   {
    607  1.1  christos     { 0, 0, 0, 0 },
    608  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    609  1.1  christos     & ifmt_l_sfgts, { 0xe5800000 }
    610  1.1  christos   },
    611  1.1  christos /* l.sfltsi $rA,$simm16 */
    612  1.1  christos   {
    613  1.1  christos     { 0, 0, 0, 0 },
    614  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    615  1.1  christos     & ifmt_l_sfgtsi, { 0xbd800000 }
    616  1.1  christos   },
    617  1.1  christos /* l.sfltu $rA,$rB */
    618  1.1  christos   {
    619  1.1  christos     { 0, 0, 0, 0 },
    620  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    621  1.1  christos     & ifmt_l_sfgts, { 0xe4800000 }
    622  1.1  christos   },
    623  1.1  christos /* l.sfltui $rA,$simm16 */
    624  1.1  christos   {
    625  1.1  christos     { 0, 0, 0, 0 },
    626  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    627  1.1  christos     & ifmt_l_sfgtsi, { 0xbc800000 }
    628  1.1  christos   },
    629  1.1  christos /* l.sfles $rA,$rB */
    630  1.1  christos   {
    631  1.1  christos     { 0, 0, 0, 0 },
    632  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    633  1.1  christos     & ifmt_l_sfgts, { 0xe5a00000 }
    634  1.1  christos   },
    635  1.1  christos /* l.sflesi $rA,$simm16 */
    636  1.1  christos   {
    637  1.1  christos     { 0, 0, 0, 0 },
    638  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    639  1.1  christos     & ifmt_l_sfgtsi, { 0xbda00000 }
    640  1.1  christos   },
    641  1.1  christos /* l.sfleu $rA,$rB */
    642  1.1  christos   {
    643  1.1  christos     { 0, 0, 0, 0 },
    644  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    645  1.1  christos     & ifmt_l_sfgts, { 0xe4a00000 }
    646  1.1  christos   },
    647  1.1  christos /* l.sfleui $rA,$simm16 */
    648  1.1  christos   {
    649  1.1  christos     { 0, 0, 0, 0 },
    650  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    651  1.1  christos     & ifmt_l_sfgtsi, { 0xbca00000 }
    652  1.1  christos   },
    653  1.1  christos /* l.sfeq $rA,$rB */
    654  1.1  christos   {
    655  1.1  christos     { 0, 0, 0, 0 },
    656  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    657  1.1  christos     & ifmt_l_sfgts, { 0xe4000000 }
    658  1.1  christos   },
    659  1.1  christos /* l.sfeqi $rA,$simm16 */
    660  1.1  christos   {
    661  1.1  christos     { 0, 0, 0, 0 },
    662  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    663  1.1  christos     & ifmt_l_sfgtsi, { 0xbc000000 }
    664  1.1  christos   },
    665  1.1  christos /* l.sfne $rA,$rB */
    666  1.1  christos   {
    667  1.1  christos     { 0, 0, 0, 0 },
    668  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    669  1.1  christos     & ifmt_l_sfgts, { 0xe4200000 }
    670  1.1  christos   },
    671  1.1  christos /* l.sfnei $rA,$simm16 */
    672  1.1  christos   {
    673  1.1  christos     { 0, 0, 0, 0 },
    674  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    675  1.1  christos     & ifmt_l_sfgtsi, { 0xbc200000 }
    676  1.1  christos   },
    677  1.1  christos /* l.mac $rA,$rB */
    678  1.1  christos   {
    679  1.1  christos     { 0, 0, 0, 0 },
    680  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    681  1.1  christos     & ifmt_l_mac, { 0xc4000001 }
    682  1.1  christos   },
    683  1.1  christos /* l.msb $rA,$rB */
    684  1.1  christos   {
    685  1.1  christos     { 0, 0, 0, 0 },
    686  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (RB), 0 } },
    687  1.1  christos     & ifmt_l_mac, { 0xc4000002 }
    688  1.1  christos   },
    689  1.1  christos /* l.maci $rA,${simm16} */
    690  1.1  christos   {
    691  1.1  christos     { 0, 0, 0, 0 },
    692  1.1  christos     { { MNEM, ' ', OP (RA), ',', OP (SIMM16), 0 } },
    693  1.1  christos     & ifmt_l_maci, { 0x4c000000 }
    694  1.1  christos   },
    695  1.1  christos /* l.cust1 */
    696  1.1  christos   {
    697  1.1  christos     { 0, 0, 0, 0 },
    698  1.1  christos     { { MNEM, 0 } },
    699  1.1  christos     & ifmt_l_rfe, { 0x70000000 }
    700  1.1  christos   },
    701  1.1  christos /* l.cust2 */
    702  1.1  christos   {
    703  1.1  christos     { 0, 0, 0, 0 },
    704  1.1  christos     { { MNEM, 0 } },
    705  1.1  christos     & ifmt_l_rfe, { 0x74000000 }
    706  1.1  christos   },
    707  1.1  christos /* l.cust3 */
    708  1.1  christos   {
    709  1.1  christos     { 0, 0, 0, 0 },
    710  1.1  christos     { { MNEM, 0 } },
    711  1.1  christos     & ifmt_l_rfe, { 0x78000000 }
    712  1.1  christos   },
    713  1.1  christos /* l.cust4 */
    714  1.1  christos   {
    715  1.1  christos     { 0, 0, 0, 0 },
    716  1.1  christos     { { MNEM, 0 } },
    717  1.1  christos     & ifmt_l_rfe, { 0x7c000000 }
    718  1.1  christos   },
    719  1.1  christos /* l.cust5 */
    720  1.1  christos   {
    721  1.1  christos     { 0, 0, 0, 0 },
    722  1.1  christos     { { MNEM, 0 } },
    723  1.1  christos     & ifmt_l_rfe, { 0xf0000000 }
    724  1.1  christos   },
    725  1.1  christos /* l.cust6 */
    726  1.1  christos   {
    727  1.1  christos     { 0, 0, 0, 0 },
    728  1.1  christos     { { MNEM, 0 } },
    729  1.1  christos     & ifmt_l_rfe, { 0xf4000000 }
    730  1.1  christos   },
    731  1.1  christos /* l.cust7 */
    732  1.1  christos   {
    733  1.1  christos     { 0, 0, 0, 0 },
    734  1.1  christos     { { MNEM, 0 } },
    735  1.1  christos     & ifmt_l_rfe, { 0xf8000000 }
    736  1.1  christos   },
    737  1.1  christos /* l.cust8 */
    738  1.1  christos   {
    739  1.1  christos     { 0, 0, 0, 0 },
    740  1.1  christos     { { MNEM, 0 } },
    741  1.1  christos     & ifmt_l_rfe, { 0xfc000000 }
    742  1.1  christos   },
    743  1.1  christos /* lf.add.s $rDSF,$rASF,$rBSF */
    744  1.1  christos   {
    745  1.1  christos     { 0, 0, 0, 0 },
    746  1.1  christos     { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
    747  1.1  christos     & ifmt_lf_add_s, { 0xc8000000 }
    748  1.1  christos   },
    749  1.1  christos /* lf.add.d $rDDF,$rADF,$rBDF */
    750  1.1  christos   {
    751  1.1  christos     { 0, 0, 0, 0 },
    752  1.1  christos     { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
    753  1.1  christos     & ifmt_lf_add_d, { 0xc8000010 }
    754  1.1  christos   },
    755  1.1  christos /* lf.sub.s $rDSF,$rASF,$rBSF */
    756  1.1  christos   {
    757  1.1  christos     { 0, 0, 0, 0 },
    758  1.1  christos     { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
    759  1.1  christos     & ifmt_lf_add_s, { 0xc8000001 }
    760  1.1  christos   },
    761  1.1  christos /* lf.sub.d $rDDF,$rADF,$rBDF */
    762  1.1  christos   {
    763  1.1  christos     { 0, 0, 0, 0 },
    764  1.1  christos     { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
    765  1.1  christos     & ifmt_lf_add_d, { 0xc8000011 }
    766  1.1  christos   },
    767  1.1  christos /* lf.mul.s $rDSF,$rASF,$rBSF */
    768  1.1  christos   {
    769  1.1  christos     { 0, 0, 0, 0 },
    770  1.1  christos     { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
    771  1.1  christos     & ifmt_lf_add_s, { 0xc8000002 }
    772  1.1  christos   },
    773  1.1  christos /* lf.mul.d $rDDF,$rADF,$rBDF */
    774  1.1  christos   {
    775  1.1  christos     { 0, 0, 0, 0 },
    776  1.1  christos     { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
    777  1.1  christos     & ifmt_lf_add_d, { 0xc8000012 }
    778  1.1  christos   },
    779  1.1  christos /* lf.div.s $rDSF,$rASF,$rBSF */
    780  1.1  christos   {
    781  1.1  christos     { 0, 0, 0, 0 },
    782  1.1  christos     { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
    783  1.1  christos     & ifmt_lf_add_s, { 0xc8000003 }
    784  1.1  christos   },
    785  1.1  christos /* lf.div.d $rDDF,$rADF,$rBDF */
    786  1.1  christos   {
    787  1.1  christos     { 0, 0, 0, 0 },
    788  1.1  christos     { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
    789  1.1  christos     & ifmt_lf_add_d, { 0xc8000013 }
    790  1.1  christos   },
    791  1.1  christos /* lf.rem.s $rDSF,$rASF,$rBSF */
    792  1.1  christos   {
    793  1.1  christos     { 0, 0, 0, 0 },
    794  1.1  christos     { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
    795  1.1  christos     & ifmt_lf_add_s, { 0xc8000006 }
    796  1.1  christos   },
    797  1.1  christos /* lf.rem.d $rDDF,$rADF,$rBDF */
    798  1.1  christos   {
    799  1.1  christos     { 0, 0, 0, 0 },
    800  1.1  christos     { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
    801  1.1  christos     & ifmt_lf_add_d, { 0xc8000016 }
    802  1.1  christos   },
    803  1.1  christos /* lf.itof.s $rDSF,$rA */
    804  1.1  christos   {
    805  1.1  christos     { 0, 0, 0, 0 },
    806  1.1  christos     { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } },
    807  1.1  christos     & ifmt_lf_itof_s, { 0xc8000004 }
    808  1.1  christos   },
    809  1.1  christos /* lf.itof.d $rDSF,$rA */
    810  1.1  christos   {
    811  1.1  christos     { 0, 0, 0, 0 },
    812  1.1  christos     { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } },
    813  1.1  christos     & ifmt_lf_itof_s, { 0xc8000014 }
    814  1.1  christos   },
    815  1.1  christos /* lf.ftoi.s $rD,$rASF */
    816  1.1  christos   {
    817  1.1  christos     { 0, 0, 0, 0 },
    818  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RASF), 0 } },
    819  1.1  christos     & ifmt_lf_ftoi_s, { 0xc8000005 }
    820  1.1  christos   },
    821  1.1  christos /* lf.ftoi.d $rD,$rADF */
    822  1.1  christos   {
    823  1.1  christos     { 0, 0, 0, 0 },
    824  1.1  christos     { { MNEM, ' ', OP (RD), ',', OP (RADF), 0 } },
    825  1.1  christos     & ifmt_lf_ftoi_d, { 0xc8000015 }
    826  1.1  christos   },
    827  1.1  christos /* lf.sfeq.s $rASF,$rBSF */
    828  1.1  christos   {
    829  1.1  christos     { 0, 0, 0, 0 },
    830  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    831  1.1  christos     & ifmt_lf_eq_s, { 0xc8000008 }
    832  1.1  christos   },
    833  1.1  christos /* lf.sfeq.d $rASF,$rBSF */
    834  1.1  christos   {
    835  1.1  christos     { 0, 0, 0, 0 },
    836  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    837  1.1  christos     & ifmt_lf_eq_s, { 0xc8000018 }
    838  1.1  christos   },
    839  1.1  christos /* lf.sfne.s $rASF,$rBSF */
    840  1.1  christos   {
    841  1.1  christos     { 0, 0, 0, 0 },
    842  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    843  1.1  christos     & ifmt_lf_eq_s, { 0xc8000009 }
    844  1.1  christos   },
    845  1.1  christos /* lf.sfne.d $rASF,$rBSF */
    846  1.1  christos   {
    847  1.1  christos     { 0, 0, 0, 0 },
    848  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    849  1.1  christos     & ifmt_lf_eq_s, { 0xc8000019 }
    850  1.1  christos   },
    851  1.1  christos /* lf.sfge.s $rASF,$rBSF */
    852  1.1  christos   {
    853  1.1  christos     { 0, 0, 0, 0 },
    854  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    855  1.1  christos     & ifmt_lf_eq_s, { 0xc800000b }
    856  1.1  christos   },
    857  1.1  christos /* lf.sfge.d $rASF,$rBSF */
    858  1.1  christos   {
    859  1.1  christos     { 0, 0, 0, 0 },
    860  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    861  1.1  christos     & ifmt_lf_eq_s, { 0xc800001b }
    862  1.1  christos   },
    863  1.1  christos /* lf.sfgt.s $rASF,$rBSF */
    864  1.1  christos   {
    865  1.1  christos     { 0, 0, 0, 0 },
    866  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    867  1.1  christos     & ifmt_lf_eq_s, { 0xc800000a }
    868  1.1  christos   },
    869  1.1  christos /* lf.sfgt.d $rASF,$rBSF */
    870  1.1  christos   {
    871  1.1  christos     { 0, 0, 0, 0 },
    872  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    873  1.1  christos     & ifmt_lf_eq_s, { 0xc800001a }
    874  1.1  christos   },
    875  1.1  christos /* lf.sflt.s $rASF,$rBSF */
    876  1.1  christos   {
    877  1.1  christos     { 0, 0, 0, 0 },
    878  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    879  1.1  christos     & ifmt_lf_eq_s, { 0xc800000c }
    880  1.1  christos   },
    881  1.1  christos /* lf.sflt.d $rASF,$rBSF */
    882  1.1  christos   {
    883  1.1  christos     { 0, 0, 0, 0 },
    884  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    885  1.1  christos     & ifmt_lf_eq_s, { 0xc800001c }
    886  1.1  christos   },
    887  1.1  christos /* lf.sfle.s $rASF,$rBSF */
    888  1.1  christos   {
    889  1.1  christos     { 0, 0, 0, 0 },
    890  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    891  1.1  christos     & ifmt_lf_eq_s, { 0xc800000d }
    892  1.1  christos   },
    893  1.1  christos /* lf.sfle.d $rASF,$rBSF */
    894  1.1  christos   {
    895  1.1  christos     { 0, 0, 0, 0 },
    896  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    897  1.1  christos     & ifmt_lf_eq_s, { 0xc800001d }
    898  1.1  christos   },
    899  1.1  christos /* lf.madd.s $rDSF,$rASF,$rBSF */
    900  1.1  christos   {
    901  1.1  christos     { 0, 0, 0, 0 },
    902  1.1  christos     { { MNEM, ' ', OP (RDSF), ',', OP (RASF), ',', OP (RBSF), 0 } },
    903  1.1  christos     & ifmt_lf_add_s, { 0xc8000007 }
    904  1.1  christos   },
    905  1.1  christos /* lf.madd.d $rDDF,$rADF,$rBDF */
    906  1.1  christos   {
    907  1.1  christos     { 0, 0, 0, 0 },
    908  1.1  christos     { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } },
    909  1.1  christos     & ifmt_lf_add_d, { 0xc8000017 }
    910  1.1  christos   },
    911  1.1  christos /* lf.cust1.s $rASF,$rBSF */
    912  1.1  christos   {
    913  1.1  christos     { 0, 0, 0, 0 },
    914  1.1  christos     { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } },
    915  1.1  christos     & ifmt_lf_cust1_s, { 0xc80000d0 }
    916  1.1  christos   },
    917  1.1  christos /* lf.cust1.d */
    918  1.1  christos   {
    919  1.1  christos     { 0, 0, 0, 0 },
    920  1.1  christos     { { MNEM, 0 } },
    921  1.1  christos     & ifmt_lf_cust1_d, { 0xc80000e0 }
    922  1.1  christos   },
    923  1.1  christos };
    924  1.1  christos 
    925  1.1  christos #undef A
    926  1.1  christos #undef OPERAND
    927  1.1  christos #undef MNEM
    928  1.1  christos #undef OP
    929  1.1  christos 
    930  1.1  christos /* Formats for ALIAS macro-insns.  */
    931  1.1  christos 
    932  1.1  christos #define F(f) & or1k_cgen_ifld_table[OR1K_##f]
    933  1.1  christos #undef F
    934  1.1  christos 
    935  1.1  christos /* Each non-simple macro entry points to an array of expansion possibilities.  */
    936  1.1  christos 
    937  1.1  christos #define A(a) (1 << CGEN_INSN_##a)
    938  1.1  christos #define OPERAND(op) OR1K_OPERAND_##op
    939  1.1  christos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
    940  1.1  christos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
    941  1.1  christos 
    942  1.1  christos /* The macro instruction table.  */
    943  1.1  christos 
    944  1.1  christos static const CGEN_IBASE or1k_cgen_macro_insn_table[] =
    945  1.1  christos {
    946  1.1  christos };
    947  1.1  christos 
    948  1.1  christos /* The macro instruction opcode table.  */
    949  1.1  christos 
    950  1.1  christos static const CGEN_OPCODE or1k_cgen_macro_insn_opcode_table[] =
    951  1.1  christos {
    952  1.1  christos };
    953  1.1  christos 
    954  1.1  christos #undef A
    955  1.1  christos #undef OPERAND
    956  1.1  christos #undef MNEM
    957  1.1  christos #undef OP
    958  1.1  christos 
    959  1.1  christos #ifndef CGEN_ASM_HASH_P
    960  1.1  christos #define CGEN_ASM_HASH_P(insn) 1
    961  1.1  christos #endif
    962  1.1  christos 
    963  1.1  christos #ifndef CGEN_DIS_HASH_P
    964  1.1  christos #define CGEN_DIS_HASH_P(insn) 1
    965  1.1  christos #endif
    966  1.1  christos 
    967  1.1  christos /* Return non-zero if INSN is to be added to the hash table.
    968  1.1  christos    Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file.  */
    969  1.1  christos 
    970  1.1  christos static int
    971  1.4  christos asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED)
    972  1.1  christos {
    973  1.1  christos   return CGEN_ASM_HASH_P (insn);
    974  1.1  christos }
    975  1.1  christos 
    976  1.1  christos static int
    977  1.4  christos dis_hash_insn_p (const CGEN_INSN *insn)
    978  1.1  christos {
    979  1.1  christos   /* If building the hash table and the NO-DIS attribute is present,
    980  1.1  christos      ignore.  */
    981  1.1  christos   if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
    982  1.1  christos     return 0;
    983  1.1  christos   return CGEN_DIS_HASH_P (insn);
    984  1.1  christos }
    985  1.1  christos 
    986  1.1  christos #ifndef CGEN_ASM_HASH
    987  1.1  christos #define CGEN_ASM_HASH_SIZE 127
    988  1.1  christos #ifdef CGEN_MNEMONIC_OPERANDS
    989  1.1  christos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
    990  1.1  christos #else
    991  1.1  christos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
    992  1.1  christos #endif
    993  1.1  christos #endif
    994  1.1  christos 
    995  1.1  christos /* It doesn't make much sense to provide a default here,
    996  1.1  christos    but while this is under development we do.
    997  1.1  christos    BUFFER is a pointer to the bytes of the insn, target order.
    998  1.1  christos    VALUE is the first base_insn_bitsize bits as an int in host order.  */
    999  1.1  christos 
   1000  1.1  christos #ifndef CGEN_DIS_HASH
   1001  1.1  christos #define CGEN_DIS_HASH_SIZE 256
   1002  1.1  christos #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
   1003  1.1  christos #endif
   1004  1.1  christos 
   1005  1.1  christos /* The result is the hash value of the insn.
   1006  1.1  christos    Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file.  */
   1007  1.1  christos 
   1008  1.1  christos static unsigned int
   1009  1.4  christos asm_hash_insn (const char *mnem)
   1010  1.1  christos {
   1011  1.1  christos   return CGEN_ASM_HASH (mnem);
   1012  1.1  christos }
   1013  1.1  christos 
   1014  1.1  christos /* BUF is a pointer to the bytes of the insn, target order.
   1015  1.1  christos    VALUE is the first base_insn_bitsize bits as an int in host order.  */
   1016  1.1  christos 
   1017  1.1  christos static unsigned int
   1018  1.4  christos dis_hash_insn (const char *buf ATTRIBUTE_UNUSED,
   1019  1.4  christos 		     CGEN_INSN_INT value ATTRIBUTE_UNUSED)
   1020  1.1  christos {
   1021  1.1  christos   return CGEN_DIS_HASH (buf, value);
   1022  1.1  christos }
   1023  1.1  christos 
   1024  1.1  christos /* Set the recorded length of the insn in the CGEN_FIELDS struct.  */
   1025  1.1  christos 
   1026  1.1  christos static void
   1027  1.1  christos set_fields_bitsize (CGEN_FIELDS *fields, int size)
   1028  1.1  christos {
   1029  1.1  christos   CGEN_FIELDS_BITSIZE (fields) = size;
   1030  1.1  christos }
   1031  1.1  christos 
   1032  1.1  christos /* Function to call before using the operand instance table.
   1033  1.1  christos    This plugs the opcode entries and macro instructions into the cpu table.  */
   1034  1.1  christos 
   1035  1.1  christos void
   1036  1.1  christos or1k_cgen_init_opcode_table (CGEN_CPU_DESC cd)
   1037  1.1  christos {
   1038  1.1  christos   int i;
   1039  1.1  christos   int num_macros = (sizeof (or1k_cgen_macro_insn_table) /
   1040  1.1  christos 		    sizeof (or1k_cgen_macro_insn_table[0]));
   1041  1.1  christos   const CGEN_IBASE *ib = & or1k_cgen_macro_insn_table[0];
   1042  1.1  christos   const CGEN_OPCODE *oc = & or1k_cgen_macro_insn_opcode_table[0];
   1043  1.1  christos   CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
   1044  1.1  christos 
   1045  1.1  christos   /* This test has been added to avoid a warning generated
   1046  1.1  christos      if memset is called with a third argument of value zero.  */
   1047  1.1  christos   if (num_macros >= 1)
   1048  1.1  christos     memset (insns, 0, num_macros * sizeof (CGEN_INSN));
   1049  1.1  christos   for (i = 0; i < num_macros; ++i)
   1050  1.1  christos     {
   1051  1.1  christos       insns[i].base = &ib[i];
   1052  1.1  christos       insns[i].opcode = &oc[i];
   1053  1.1  christos       or1k_cgen_build_insn_regex (& insns[i]);
   1054  1.1  christos     }
   1055  1.1  christos   cd->macro_insn_table.init_entries = insns;
   1056  1.1  christos   cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
   1057  1.1  christos   cd->macro_insn_table.num_init_entries = num_macros;
   1058  1.1  christos 
   1059  1.1  christos   oc = & or1k_cgen_insn_opcode_table[0];
   1060  1.1  christos   insns = (CGEN_INSN *) cd->insn_table.init_entries;
   1061  1.1  christos   for (i = 0; i < MAX_INSNS; ++i)
   1062  1.1  christos     {
   1063  1.1  christos       insns[i].opcode = &oc[i];
   1064  1.1  christos       or1k_cgen_build_insn_regex (& insns[i]);
   1065  1.1  christos     }
   1066  1.1  christos 
   1067  1.1  christos   cd->sizeof_fields = sizeof (CGEN_FIELDS);
   1068  1.1  christos   cd->set_fields_bitsize = set_fields_bitsize;
   1069  1.1  christos 
   1070  1.1  christos   cd->asm_hash_p = asm_hash_insn_p;
   1071  1.1  christos   cd->asm_hash = asm_hash_insn;
   1072  1.1  christos   cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
   1073  1.1  christos 
   1074  1.1  christos   cd->dis_hash_p = dis_hash_insn_p;
   1075  1.1  christos   cd->dis_hash = dis_hash_insn;
   1076  1.1  christos   cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
   1077  1.1  christos }
   1078