xref: /netbsd-src/external/gpl3/binutils.old/dist/opcodes/m32r-opc.c (revision e992f068c547fd6e84b3f104dc2340adcc955732)
1ede78133Schristos /* DO NOT EDIT!  -*- buffer-read-only: t -*- vi:set ro:  */
275fd0b74Schristos /* Instruction opcode table for m32r.
375fd0b74Schristos 
475fd0b74Schristos THIS FILE IS MACHINE GENERATED WITH CGEN.
575fd0b74Schristos 
6*e992f068Schristos Copyright (C) 1996-2022 Free Software Foundation, Inc.
775fd0b74Schristos 
875fd0b74Schristos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
975fd0b74Schristos 
1075fd0b74Schristos    This file is free software; you can redistribute it and/or modify
1175fd0b74Schristos    it under the terms of the GNU General Public License as published by
1275fd0b74Schristos    the Free Software Foundation; either version 3, or (at your option)
1375fd0b74Schristos    any later version.
1475fd0b74Schristos 
1575fd0b74Schristos    It is distributed in the hope that it will be useful, but WITHOUT
1675fd0b74Schristos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
1775fd0b74Schristos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
1875fd0b74Schristos    License for more details.
1975fd0b74Schristos 
2075fd0b74Schristos    You should have received a copy of the GNU General Public License along
2175fd0b74Schristos    with this program; if not, write to the Free Software Foundation, Inc.,
2275fd0b74Schristos    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
2375fd0b74Schristos 
2475fd0b74Schristos */
2575fd0b74Schristos 
2675fd0b74Schristos #include "sysdep.h"
2775fd0b74Schristos #include "ansidecl.h"
2875fd0b74Schristos #include "bfd.h"
2975fd0b74Schristos #include "symcat.h"
3075fd0b74Schristos #include "m32r-desc.h"
3175fd0b74Schristos #include "m32r-opc.h"
3275fd0b74Schristos #include "libiberty.h"
3375fd0b74Schristos 
3475fd0b74Schristos /* -- opc.c */
3575fd0b74Schristos unsigned int
m32r_cgen_dis_hash(const char * buf ATTRIBUTE_UNUSED,CGEN_INSN_INT value)3675fd0b74Schristos m32r_cgen_dis_hash (const char * buf ATTRIBUTE_UNUSED, CGEN_INSN_INT value)
3775fd0b74Schristos {
3875fd0b74Schristos   unsigned int x;
3975fd0b74Schristos 
4075fd0b74Schristos   if (value & 0xffff0000) /* 32bit instructions.  */
4175fd0b74Schristos     value = (value >> 16) & 0xffff;
4275fd0b74Schristos 
4375fd0b74Schristos   x = (value >> 8) & 0xf0;
4475fd0b74Schristos   if (x == 0x40 || x == 0xe0 || x == 0x60 || x == 0x50)
4575fd0b74Schristos     return x;
4675fd0b74Schristos 
4775fd0b74Schristos   if (x == 0x70 || x == 0xf0)
4875fd0b74Schristos     return x | ((value >> 8) & 0x0f);
4975fd0b74Schristos 
5075fd0b74Schristos   if (x == 0x30)
5175fd0b74Schristos     return x | ((value & 0x70) >> 4);
5275fd0b74Schristos   else
5375fd0b74Schristos     return x | ((value & 0xf0) >> 4);
5475fd0b74Schristos }
5575fd0b74Schristos 
5675fd0b74Schristos /* -- */
5775fd0b74Schristos /* The hash functions are recorded here to help keep assembler code out of
5875fd0b74Schristos    the disassembler and vice versa.  */
5975fd0b74Schristos 
6075fd0b74Schristos static int asm_hash_insn_p        (const CGEN_INSN *);
6175fd0b74Schristos static unsigned int asm_hash_insn (const char *);
6275fd0b74Schristos static int dis_hash_insn_p        (const CGEN_INSN *);
6375fd0b74Schristos static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
6475fd0b74Schristos 
6575fd0b74Schristos /* Instruction formats.  */
6675fd0b74Schristos 
6775fd0b74Schristos #define F(f) & m32r_cgen_ifld_table[M32R_##f]
6875fd0b74Schristos static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
6975fd0b74Schristos   0, 0, 0x0, { { 0 } }
7075fd0b74Schristos };
7175fd0b74Schristos 
7275fd0b74Schristos static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
7375fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
7475fd0b74Schristos };
7575fd0b74Schristos 
7675fd0b74Schristos static const CGEN_IFMT ifmt_add3 ATTRIBUTE_UNUSED = {
7775fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
7875fd0b74Schristos };
7975fd0b74Schristos 
8075fd0b74Schristos static const CGEN_IFMT ifmt_and3 ATTRIBUTE_UNUSED = {
8175fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } }
8275fd0b74Schristos };
8375fd0b74Schristos 
8475fd0b74Schristos static const CGEN_IFMT ifmt_or3 ATTRIBUTE_UNUSED = {
8575fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } }
8675fd0b74Schristos };
8775fd0b74Schristos 
8875fd0b74Schristos static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = {
8975fd0b74Schristos   16, 16, 0xf000, { { F (F_OP1) }, { F (F_R1) }, { F (F_SIMM8) }, { 0 } }
9075fd0b74Schristos };
9175fd0b74Schristos 
9275fd0b74Schristos static const CGEN_IFMT ifmt_addv3 ATTRIBUTE_UNUSED = {
9375fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
9475fd0b74Schristos };
9575fd0b74Schristos 
9675fd0b74Schristos static const CGEN_IFMT ifmt_bc8 ATTRIBUTE_UNUSED = {
9775fd0b74Schristos   16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
9875fd0b74Schristos };
9975fd0b74Schristos 
10075fd0b74Schristos static const CGEN_IFMT ifmt_bc24 ATTRIBUTE_UNUSED = {
10175fd0b74Schristos   32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
10275fd0b74Schristos };
10375fd0b74Schristos 
10475fd0b74Schristos static const CGEN_IFMT ifmt_beq ATTRIBUTE_UNUSED = {
10575fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_DISP16) }, { 0 } }
10675fd0b74Schristos };
10775fd0b74Schristos 
10875fd0b74Schristos static const CGEN_IFMT ifmt_beqz ATTRIBUTE_UNUSED = {
10975fd0b74Schristos   32, 32, 0xfff00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_DISP16) }, { 0 } }
11075fd0b74Schristos };
11175fd0b74Schristos 
11275fd0b74Schristos static const CGEN_IFMT ifmt_cmp ATTRIBUTE_UNUSED = {
11375fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
11475fd0b74Schristos };
11575fd0b74Schristos 
11675fd0b74Schristos static const CGEN_IFMT ifmt_cmpi ATTRIBUTE_UNUSED = {
11775fd0b74Schristos   32, 32, 0xfff00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
11875fd0b74Schristos };
11975fd0b74Schristos 
12075fd0b74Schristos static const CGEN_IFMT ifmt_cmpz ATTRIBUTE_UNUSED = {
12175fd0b74Schristos   16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
12275fd0b74Schristos };
12375fd0b74Schristos 
12475fd0b74Schristos static const CGEN_IFMT ifmt_div ATTRIBUTE_UNUSED = {
12575fd0b74Schristos   32, 32, 0xf0f0ffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
12675fd0b74Schristos };
12775fd0b74Schristos 
12875fd0b74Schristos static const CGEN_IFMT ifmt_jc ATTRIBUTE_UNUSED = {
12975fd0b74Schristos   16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
13075fd0b74Schristos };
13175fd0b74Schristos 
13275fd0b74Schristos static const CGEN_IFMT ifmt_ld24 ATTRIBUTE_UNUSED = {
13375fd0b74Schristos   32, 32, 0xf0000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_UIMM24) }, { 0 } }
13475fd0b74Schristos };
13575fd0b74Schristos 
13675fd0b74Schristos static const CGEN_IFMT ifmt_ldi16 ATTRIBUTE_UNUSED = {
13775fd0b74Schristos   32, 32, 0xf0ff0000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
13875fd0b74Schristos };
13975fd0b74Schristos 
14075fd0b74Schristos static const CGEN_IFMT ifmt_machi_a ATTRIBUTE_UNUSED = {
14175fd0b74Schristos   16, 16, 0xf070, { { F (F_OP1) }, { F (F_R1) }, { F (F_ACC) }, { F (F_OP23) }, { F (F_R2) }, { 0 } }
14275fd0b74Schristos };
14375fd0b74Schristos 
14475fd0b74Schristos static const CGEN_IFMT ifmt_mvfachi ATTRIBUTE_UNUSED = {
14575fd0b74Schristos   16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
14675fd0b74Schristos };
14775fd0b74Schristos 
14875fd0b74Schristos static const CGEN_IFMT ifmt_mvfachi_a ATTRIBUTE_UNUSED = {
14975fd0b74Schristos   16, 16, 0xf0f3, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_OP3) }, { 0 } }
15075fd0b74Schristos };
15175fd0b74Schristos 
15275fd0b74Schristos static const CGEN_IFMT ifmt_mvfc ATTRIBUTE_UNUSED = {
15375fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
15475fd0b74Schristos };
15575fd0b74Schristos 
15675fd0b74Schristos static const CGEN_IFMT ifmt_mvtachi ATTRIBUTE_UNUSED = {
15775fd0b74Schristos   16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
15875fd0b74Schristos };
15975fd0b74Schristos 
16075fd0b74Schristos static const CGEN_IFMT ifmt_mvtachi_a ATTRIBUTE_UNUSED = {
16175fd0b74Schristos   16, 16, 0xf0f3, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_OP3) }, { 0 } }
16275fd0b74Schristos };
16375fd0b74Schristos 
16475fd0b74Schristos static const CGEN_IFMT ifmt_mvtc ATTRIBUTE_UNUSED = {
16575fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
16675fd0b74Schristos };
16775fd0b74Schristos 
16875fd0b74Schristos static const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = {
16975fd0b74Schristos   16, 16, 0xffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
17075fd0b74Schristos };
17175fd0b74Schristos 
17275fd0b74Schristos static const CGEN_IFMT ifmt_rac_dsi ATTRIBUTE_UNUSED = {
17375fd0b74Schristos   16, 16, 0xf3f2, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
17475fd0b74Schristos };
17575fd0b74Schristos 
17675fd0b74Schristos static const CGEN_IFMT ifmt_seth ATTRIBUTE_UNUSED = {
17775fd0b74Schristos   32, 32, 0xf0ff0000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_HI16) }, { 0 } }
17875fd0b74Schristos };
17975fd0b74Schristos 
18075fd0b74Schristos static const CGEN_IFMT ifmt_slli ATTRIBUTE_UNUSED = {
18175fd0b74Schristos   16, 16, 0xf0e0, { { F (F_OP1) }, { F (F_R1) }, { F (F_SHIFT_OP2) }, { F (F_UIMM5) }, { 0 } }
18275fd0b74Schristos };
18375fd0b74Schristos 
18475fd0b74Schristos static const CGEN_IFMT ifmt_st_d ATTRIBUTE_UNUSED = {
18575fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
18675fd0b74Schristos };
18775fd0b74Schristos 
18875fd0b74Schristos static const CGEN_IFMT ifmt_trap ATTRIBUTE_UNUSED = {
18975fd0b74Schristos   16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_UIMM4) }, { 0 } }
19075fd0b74Schristos };
19175fd0b74Schristos 
19275fd0b74Schristos static const CGEN_IFMT ifmt_satb ATTRIBUTE_UNUSED = {
19375fd0b74Schristos   32, 32, 0xf0f0ffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } }
19475fd0b74Schristos };
19575fd0b74Schristos 
19675fd0b74Schristos static const CGEN_IFMT ifmt_clrpsw ATTRIBUTE_UNUSED = {
19775fd0b74Schristos   16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_UIMM8) }, { 0 } }
19875fd0b74Schristos };
19975fd0b74Schristos 
20075fd0b74Schristos static const CGEN_IFMT ifmt_bset ATTRIBUTE_UNUSED = {
20175fd0b74Schristos   32, 32, 0xf8f00000, { { F (F_OP1) }, { F (F_BIT4) }, { F (F_UIMM3) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
20275fd0b74Schristos };
20375fd0b74Schristos 
20475fd0b74Schristos static const CGEN_IFMT ifmt_btst ATTRIBUTE_UNUSED = {
20575fd0b74Schristos   16, 16, 0xf8f0, { { F (F_OP1) }, { F (F_BIT4) }, { F (F_UIMM3) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
20675fd0b74Schristos };
20775fd0b74Schristos 
20875fd0b74Schristos #undef F
20975fd0b74Schristos 
21075fd0b74Schristos #define A(a) (1 << CGEN_INSN_##a)
21175fd0b74Schristos #define OPERAND(op) M32R_OPERAND_##op
21275fd0b74Schristos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
21375fd0b74Schristos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
21475fd0b74Schristos 
21575fd0b74Schristos /* The instruction table.  */
21675fd0b74Schristos 
21775fd0b74Schristos static const CGEN_OPCODE m32r_cgen_insn_opcode_table[MAX_INSNS] =
21875fd0b74Schristos {
21975fd0b74Schristos   /* Special null first entry.
22075fd0b74Schristos      A `num' value of zero is thus invalid.
22175fd0b74Schristos      Also, the special `invalid' insn resides here.  */
22275fd0b74Schristos   { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
22375fd0b74Schristos /* add $dr,$sr */
22475fd0b74Schristos   {
22575fd0b74Schristos     { 0, 0, 0, 0 },
22675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
22775fd0b74Schristos     & ifmt_add, { 0xa0 }
22875fd0b74Schristos   },
22975fd0b74Schristos /* add3 $dr,$sr,$hash$slo16 */
23075fd0b74Schristos   {
23175fd0b74Schristos     { 0, 0, 0, 0 },
23275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (SLO16), 0 } },
23375fd0b74Schristos     & ifmt_add3, { 0x80a00000 }
23475fd0b74Schristos   },
23575fd0b74Schristos /* and $dr,$sr */
23675fd0b74Schristos   {
23775fd0b74Schristos     { 0, 0, 0, 0 },
23875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
23975fd0b74Schristos     & ifmt_add, { 0xc0 }
24075fd0b74Schristos   },
24175fd0b74Schristos /* and3 $dr,$sr,$uimm16 */
24275fd0b74Schristos   {
24375fd0b74Schristos     { 0, 0, 0, 0 },
24475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } },
24575fd0b74Schristos     & ifmt_and3, { 0x80c00000 }
24675fd0b74Schristos   },
24775fd0b74Schristos /* or $dr,$sr */
24875fd0b74Schristos   {
24975fd0b74Schristos     { 0, 0, 0, 0 },
25075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
25175fd0b74Schristos     & ifmt_add, { 0xe0 }
25275fd0b74Schristos   },
25375fd0b74Schristos /* or3 $dr,$sr,$hash$ulo16 */
25475fd0b74Schristos   {
25575fd0b74Schristos     { 0, 0, 0, 0 },
25675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (ULO16), 0 } },
25775fd0b74Schristos     & ifmt_or3, { 0x80e00000 }
25875fd0b74Schristos   },
25975fd0b74Schristos /* xor $dr,$sr */
26075fd0b74Schristos   {
26175fd0b74Schristos     { 0, 0, 0, 0 },
26275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
26375fd0b74Schristos     & ifmt_add, { 0xd0 }
26475fd0b74Schristos   },
26575fd0b74Schristos /* xor3 $dr,$sr,$uimm16 */
26675fd0b74Schristos   {
26775fd0b74Schristos     { 0, 0, 0, 0 },
26875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } },
26975fd0b74Schristos     & ifmt_and3, { 0x80d00000 }
27075fd0b74Schristos   },
27175fd0b74Schristos /* addi $dr,$simm8 */
27275fd0b74Schristos   {
27375fd0b74Schristos     { 0, 0, 0, 0 },
27475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },
27575fd0b74Schristos     & ifmt_addi, { 0x4000 }
27675fd0b74Schristos   },
27775fd0b74Schristos /* addv $dr,$sr */
27875fd0b74Schristos   {
27975fd0b74Schristos     { 0, 0, 0, 0 },
28075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
28175fd0b74Schristos     & ifmt_add, { 0x80 }
28275fd0b74Schristos   },
28375fd0b74Schristos /* addv3 $dr,$sr,$simm16 */
28475fd0b74Schristos   {
28575fd0b74Schristos     { 0, 0, 0, 0 },
28675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
28775fd0b74Schristos     & ifmt_addv3, { 0x80800000 }
28875fd0b74Schristos   },
28975fd0b74Schristos /* addx $dr,$sr */
29075fd0b74Schristos   {
29175fd0b74Schristos     { 0, 0, 0, 0 },
29275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
29375fd0b74Schristos     & ifmt_add, { 0x90 }
29475fd0b74Schristos   },
29575fd0b74Schristos /* bc.s $disp8 */
29675fd0b74Schristos   {
29775fd0b74Schristos     { 0, 0, 0, 0 },
29875fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
29975fd0b74Schristos     & ifmt_bc8, { 0x7c00 }
30075fd0b74Schristos   },
30175fd0b74Schristos /* bc.l $disp24 */
30275fd0b74Schristos   {
30375fd0b74Schristos     { 0, 0, 0, 0 },
30475fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
30575fd0b74Schristos     & ifmt_bc24, { 0xfc000000 }
30675fd0b74Schristos   },
30775fd0b74Schristos /* beq $src1,$src2,$disp16 */
30875fd0b74Schristos   {
30975fd0b74Schristos     { 0, 0, 0, 0 },
31075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } },
31175fd0b74Schristos     & ifmt_beq, { 0xb0000000 }
31275fd0b74Schristos   },
31375fd0b74Schristos /* beqz $src2,$disp16 */
31475fd0b74Schristos   {
31575fd0b74Schristos     { 0, 0, 0, 0 },
31675fd0b74Schristos     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
31775fd0b74Schristos     & ifmt_beqz, { 0xb0800000 }
31875fd0b74Schristos   },
31975fd0b74Schristos /* bgez $src2,$disp16 */
32075fd0b74Schristos   {
32175fd0b74Schristos     { 0, 0, 0, 0 },
32275fd0b74Schristos     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
32375fd0b74Schristos     & ifmt_beqz, { 0xb0b00000 }
32475fd0b74Schristos   },
32575fd0b74Schristos /* bgtz $src2,$disp16 */
32675fd0b74Schristos   {
32775fd0b74Schristos     { 0, 0, 0, 0 },
32875fd0b74Schristos     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
32975fd0b74Schristos     & ifmt_beqz, { 0xb0d00000 }
33075fd0b74Schristos   },
33175fd0b74Schristos /* blez $src2,$disp16 */
33275fd0b74Schristos   {
33375fd0b74Schristos     { 0, 0, 0, 0 },
33475fd0b74Schristos     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
33575fd0b74Schristos     & ifmt_beqz, { 0xb0c00000 }
33675fd0b74Schristos   },
33775fd0b74Schristos /* bltz $src2,$disp16 */
33875fd0b74Schristos   {
33975fd0b74Schristos     { 0, 0, 0, 0 },
34075fd0b74Schristos     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
34175fd0b74Schristos     & ifmt_beqz, { 0xb0a00000 }
34275fd0b74Schristos   },
34375fd0b74Schristos /* bnez $src2,$disp16 */
34475fd0b74Schristos   {
34575fd0b74Schristos     { 0, 0, 0, 0 },
34675fd0b74Schristos     { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },
34775fd0b74Schristos     & ifmt_beqz, { 0xb0900000 }
34875fd0b74Schristos   },
34975fd0b74Schristos /* bl.s $disp8 */
35075fd0b74Schristos   {
35175fd0b74Schristos     { 0, 0, 0, 0 },
35275fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
35375fd0b74Schristos     & ifmt_bc8, { 0x7e00 }
35475fd0b74Schristos   },
35575fd0b74Schristos /* bl.l $disp24 */
35675fd0b74Schristos   {
35775fd0b74Schristos     { 0, 0, 0, 0 },
35875fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
35975fd0b74Schristos     & ifmt_bc24, { 0xfe000000 }
36075fd0b74Schristos   },
36175fd0b74Schristos /* bcl.s $disp8 */
36275fd0b74Schristos   {
36375fd0b74Schristos     { 0, 0, 0, 0 },
36475fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
36575fd0b74Schristos     & ifmt_bc8, { 0x7800 }
36675fd0b74Schristos   },
36775fd0b74Schristos /* bcl.l $disp24 */
36875fd0b74Schristos   {
36975fd0b74Schristos     { 0, 0, 0, 0 },
37075fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
37175fd0b74Schristos     & ifmt_bc24, { 0xf8000000 }
37275fd0b74Schristos   },
37375fd0b74Schristos /* bnc.s $disp8 */
37475fd0b74Schristos   {
37575fd0b74Schristos     { 0, 0, 0, 0 },
37675fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
37775fd0b74Schristos     & ifmt_bc8, { 0x7d00 }
37875fd0b74Schristos   },
37975fd0b74Schristos /* bnc.l $disp24 */
38075fd0b74Schristos   {
38175fd0b74Schristos     { 0, 0, 0, 0 },
38275fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
38375fd0b74Schristos     & ifmt_bc24, { 0xfd000000 }
38475fd0b74Schristos   },
38575fd0b74Schristos /* bne $src1,$src2,$disp16 */
38675fd0b74Schristos   {
38775fd0b74Schristos     { 0, 0, 0, 0 },
38875fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } },
38975fd0b74Schristos     & ifmt_beq, { 0xb0100000 }
39075fd0b74Schristos   },
39175fd0b74Schristos /* bra.s $disp8 */
39275fd0b74Schristos   {
39375fd0b74Schristos     { 0, 0, 0, 0 },
39475fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
39575fd0b74Schristos     & ifmt_bc8, { 0x7f00 }
39675fd0b74Schristos   },
39775fd0b74Schristos /* bra.l $disp24 */
39875fd0b74Schristos   {
39975fd0b74Schristos     { 0, 0, 0, 0 },
40075fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
40175fd0b74Schristos     & ifmt_bc24, { 0xff000000 }
40275fd0b74Schristos   },
40375fd0b74Schristos /* bncl.s $disp8 */
40475fd0b74Schristos   {
40575fd0b74Schristos     { 0, 0, 0, 0 },
40675fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
40775fd0b74Schristos     & ifmt_bc8, { 0x7900 }
40875fd0b74Schristos   },
40975fd0b74Schristos /* bncl.l $disp24 */
41075fd0b74Schristos   {
41175fd0b74Schristos     { 0, 0, 0, 0 },
41275fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
41375fd0b74Schristos     & ifmt_bc24, { 0xf9000000 }
41475fd0b74Schristos   },
41575fd0b74Schristos /* cmp $src1,$src2 */
41675fd0b74Schristos   {
41775fd0b74Schristos     { 0, 0, 0, 0 },
41875fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
41975fd0b74Schristos     & ifmt_cmp, { 0x40 }
42075fd0b74Schristos   },
42175fd0b74Schristos /* cmpi $src2,$simm16 */
42275fd0b74Schristos   {
42375fd0b74Schristos     { 0, 0, 0, 0 },
42475fd0b74Schristos     { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } },
42575fd0b74Schristos     & ifmt_cmpi, { 0x80400000 }
42675fd0b74Schristos   },
42775fd0b74Schristos /* cmpu $src1,$src2 */
42875fd0b74Schristos   {
42975fd0b74Schristos     { 0, 0, 0, 0 },
43075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
43175fd0b74Schristos     & ifmt_cmp, { 0x50 }
43275fd0b74Schristos   },
43375fd0b74Schristos /* cmpui $src2,$simm16 */
43475fd0b74Schristos   {
43575fd0b74Schristos     { 0, 0, 0, 0 },
43675fd0b74Schristos     { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } },
43775fd0b74Schristos     & ifmt_cmpi, { 0x80500000 }
43875fd0b74Schristos   },
43975fd0b74Schristos /* cmpeq $src1,$src2 */
44075fd0b74Schristos   {
44175fd0b74Schristos     { 0, 0, 0, 0 },
44275fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
44375fd0b74Schristos     & ifmt_cmp, { 0x60 }
44475fd0b74Schristos   },
44575fd0b74Schristos /* cmpz $src2 */
44675fd0b74Schristos   {
44775fd0b74Schristos     { 0, 0, 0, 0 },
44875fd0b74Schristos     { { MNEM, ' ', OP (SRC2), 0 } },
44975fd0b74Schristos     & ifmt_cmpz, { 0x70 }
45075fd0b74Schristos   },
45175fd0b74Schristos /* div $dr,$sr */
45275fd0b74Schristos   {
45375fd0b74Schristos     { 0, 0, 0, 0 },
45475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
45575fd0b74Schristos     & ifmt_div, { 0x90000000 }
45675fd0b74Schristos   },
45775fd0b74Schristos /* divu $dr,$sr */
45875fd0b74Schristos   {
45975fd0b74Schristos     { 0, 0, 0, 0 },
46075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
46175fd0b74Schristos     & ifmt_div, { 0x90100000 }
46275fd0b74Schristos   },
46375fd0b74Schristos /* rem $dr,$sr */
46475fd0b74Schristos   {
46575fd0b74Schristos     { 0, 0, 0, 0 },
46675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
46775fd0b74Schristos     & ifmt_div, { 0x90200000 }
46875fd0b74Schristos   },
46975fd0b74Schristos /* remu $dr,$sr */
47075fd0b74Schristos   {
47175fd0b74Schristos     { 0, 0, 0, 0 },
47275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
47375fd0b74Schristos     & ifmt_div, { 0x90300000 }
47475fd0b74Schristos   },
47575fd0b74Schristos /* remh $dr,$sr */
47675fd0b74Schristos   {
47775fd0b74Schristos     { 0, 0, 0, 0 },
47875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
47975fd0b74Schristos     & ifmt_div, { 0x90200010 }
48075fd0b74Schristos   },
48175fd0b74Schristos /* remuh $dr,$sr */
48275fd0b74Schristos   {
48375fd0b74Schristos     { 0, 0, 0, 0 },
48475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
48575fd0b74Schristos     & ifmt_div, { 0x90300010 }
48675fd0b74Schristos   },
48775fd0b74Schristos /* remb $dr,$sr */
48875fd0b74Schristos   {
48975fd0b74Schristos     { 0, 0, 0, 0 },
49075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
49175fd0b74Schristos     & ifmt_div, { 0x90200018 }
49275fd0b74Schristos   },
49375fd0b74Schristos /* remub $dr,$sr */
49475fd0b74Schristos   {
49575fd0b74Schristos     { 0, 0, 0, 0 },
49675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
49775fd0b74Schristos     & ifmt_div, { 0x90300018 }
49875fd0b74Schristos   },
49975fd0b74Schristos /* divuh $dr,$sr */
50075fd0b74Schristos   {
50175fd0b74Schristos     { 0, 0, 0, 0 },
50275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
50375fd0b74Schristos     & ifmt_div, { 0x90100010 }
50475fd0b74Schristos   },
50575fd0b74Schristos /* divb $dr,$sr */
50675fd0b74Schristos   {
50775fd0b74Schristos     { 0, 0, 0, 0 },
50875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
50975fd0b74Schristos     & ifmt_div, { 0x90000018 }
51075fd0b74Schristos   },
51175fd0b74Schristos /* divub $dr,$sr */
51275fd0b74Schristos   {
51375fd0b74Schristos     { 0, 0, 0, 0 },
51475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
51575fd0b74Schristos     & ifmt_div, { 0x90100018 }
51675fd0b74Schristos   },
51775fd0b74Schristos /* divh $dr,$sr */
51875fd0b74Schristos   {
51975fd0b74Schristos     { 0, 0, 0, 0 },
52075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
52175fd0b74Schristos     & ifmt_div, { 0x90000010 }
52275fd0b74Schristos   },
52375fd0b74Schristos /* jc $sr */
52475fd0b74Schristos   {
52575fd0b74Schristos     { 0, 0, 0, 0 },
52675fd0b74Schristos     { { MNEM, ' ', OP (SR), 0 } },
52775fd0b74Schristos     & ifmt_jc, { 0x1cc0 }
52875fd0b74Schristos   },
52975fd0b74Schristos /* jnc $sr */
53075fd0b74Schristos   {
53175fd0b74Schristos     { 0, 0, 0, 0 },
53275fd0b74Schristos     { { MNEM, ' ', OP (SR), 0 } },
53375fd0b74Schristos     & ifmt_jc, { 0x1dc0 }
53475fd0b74Schristos   },
53575fd0b74Schristos /* jl $sr */
53675fd0b74Schristos   {
53775fd0b74Schristos     { 0, 0, 0, 0 },
53875fd0b74Schristos     { { MNEM, ' ', OP (SR), 0 } },
53975fd0b74Schristos     & ifmt_jc, { 0x1ec0 }
54075fd0b74Schristos   },
54175fd0b74Schristos /* jmp $sr */
54275fd0b74Schristos   {
54375fd0b74Schristos     { 0, 0, 0, 0 },
54475fd0b74Schristos     { { MNEM, ' ', OP (SR), 0 } },
54575fd0b74Schristos     & ifmt_jc, { 0x1fc0 }
54675fd0b74Schristos   },
54775fd0b74Schristos /* ld $dr,@$sr */
54875fd0b74Schristos   {
54975fd0b74Schristos     { 0, 0, 0, 0 },
55075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
55175fd0b74Schristos     & ifmt_add, { 0x20c0 }
55275fd0b74Schristos   },
55375fd0b74Schristos /* ld $dr,@($slo16,$sr) */
55475fd0b74Schristos   {
55575fd0b74Schristos     { 0, 0, 0, 0 },
55675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
55775fd0b74Schristos     & ifmt_add3, { 0xa0c00000 }
55875fd0b74Schristos   },
55975fd0b74Schristos /* ldb $dr,@$sr */
56075fd0b74Schristos   {
56175fd0b74Schristos     { 0, 0, 0, 0 },
56275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
56375fd0b74Schristos     & ifmt_add, { 0x2080 }
56475fd0b74Schristos   },
56575fd0b74Schristos /* ldb $dr,@($slo16,$sr) */
56675fd0b74Schristos   {
56775fd0b74Schristos     { 0, 0, 0, 0 },
56875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
56975fd0b74Schristos     & ifmt_add3, { 0xa0800000 }
57075fd0b74Schristos   },
57175fd0b74Schristos /* ldh $dr,@$sr */
57275fd0b74Schristos   {
57375fd0b74Schristos     { 0, 0, 0, 0 },
57475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
57575fd0b74Schristos     & ifmt_add, { 0x20a0 }
57675fd0b74Schristos   },
57775fd0b74Schristos /* ldh $dr,@($slo16,$sr) */
57875fd0b74Schristos   {
57975fd0b74Schristos     { 0, 0, 0, 0 },
58075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
58175fd0b74Schristos     & ifmt_add3, { 0xa0a00000 }
58275fd0b74Schristos   },
58375fd0b74Schristos /* ldub $dr,@$sr */
58475fd0b74Schristos   {
58575fd0b74Schristos     { 0, 0, 0, 0 },
58675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
58775fd0b74Schristos     & ifmt_add, { 0x2090 }
58875fd0b74Schristos   },
58975fd0b74Schristos /* ldub $dr,@($slo16,$sr) */
59075fd0b74Schristos   {
59175fd0b74Schristos     { 0, 0, 0, 0 },
59275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
59375fd0b74Schristos     & ifmt_add3, { 0xa0900000 }
59475fd0b74Schristos   },
59575fd0b74Schristos /* lduh $dr,@$sr */
59675fd0b74Schristos   {
59775fd0b74Schristos     { 0, 0, 0, 0 },
59875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
59975fd0b74Schristos     & ifmt_add, { 0x20b0 }
60075fd0b74Schristos   },
60175fd0b74Schristos /* lduh $dr,@($slo16,$sr) */
60275fd0b74Schristos   {
60375fd0b74Schristos     { 0, 0, 0, 0 },
60475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
60575fd0b74Schristos     & ifmt_add3, { 0xa0b00000 }
60675fd0b74Schristos   },
60775fd0b74Schristos /* ld $dr,@$sr+ */
60875fd0b74Schristos   {
60975fd0b74Schristos     { 0, 0, 0, 0 },
61075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), '+', 0 } },
61175fd0b74Schristos     & ifmt_add, { 0x20e0 }
61275fd0b74Schristos   },
61375fd0b74Schristos /* ld24 $dr,$uimm24 */
61475fd0b74Schristos   {
61575fd0b74Schristos     { 0, 0, 0, 0 },
61675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (UIMM24), 0 } },
61775fd0b74Schristos     & ifmt_ld24, { 0xe0000000 }
61875fd0b74Schristos   },
61975fd0b74Schristos /* ldi8 $dr,$simm8 */
62075fd0b74Schristos   {
62175fd0b74Schristos     { 0, 0, 0, 0 },
62275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },
62375fd0b74Schristos     & ifmt_addi, { 0x6000 }
62475fd0b74Schristos   },
62575fd0b74Schristos /* ldi16 $dr,$hash$slo16 */
62675fd0b74Schristos   {
62775fd0b74Schristos     { 0, 0, 0, 0 },
62875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (SLO16), 0 } },
62975fd0b74Schristos     & ifmt_ldi16, { 0x90f00000 }
63075fd0b74Schristos   },
63175fd0b74Schristos /* lock $dr,@$sr */
63275fd0b74Schristos   {
63375fd0b74Schristos     { 0, 0, 0, 0 },
63475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },
63575fd0b74Schristos     & ifmt_add, { 0x20d0 }
63675fd0b74Schristos   },
63775fd0b74Schristos /* machi $src1,$src2 */
63875fd0b74Schristos   {
63975fd0b74Schristos     { 0, 0, 0, 0 },
64075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
64175fd0b74Schristos     & ifmt_cmp, { 0x3040 }
64275fd0b74Schristos   },
64375fd0b74Schristos /* machi $src1,$src2,$acc */
64475fd0b74Schristos   {
64575fd0b74Schristos     { 0, 0, 0, 0 },
64675fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
64775fd0b74Schristos     & ifmt_machi_a, { 0x3040 }
64875fd0b74Schristos   },
64975fd0b74Schristos /* maclo $src1,$src2 */
65075fd0b74Schristos   {
65175fd0b74Schristos     { 0, 0, 0, 0 },
65275fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
65375fd0b74Schristos     & ifmt_cmp, { 0x3050 }
65475fd0b74Schristos   },
65575fd0b74Schristos /* maclo $src1,$src2,$acc */
65675fd0b74Schristos   {
65775fd0b74Schristos     { 0, 0, 0, 0 },
65875fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
65975fd0b74Schristos     & ifmt_machi_a, { 0x3050 }
66075fd0b74Schristos   },
66175fd0b74Schristos /* macwhi $src1,$src2 */
66275fd0b74Schristos   {
66375fd0b74Schristos     { 0, 0, 0, 0 },
66475fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
66575fd0b74Schristos     & ifmt_cmp, { 0x3060 }
66675fd0b74Schristos   },
66775fd0b74Schristos /* macwhi $src1,$src2,$acc */
66875fd0b74Schristos   {
66975fd0b74Schristos     { 0, 0, 0, 0 },
67075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
67175fd0b74Schristos     & ifmt_machi_a, { 0x3060 }
67275fd0b74Schristos   },
67375fd0b74Schristos /* macwlo $src1,$src2 */
67475fd0b74Schristos   {
67575fd0b74Schristos     { 0, 0, 0, 0 },
67675fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
67775fd0b74Schristos     & ifmt_cmp, { 0x3070 }
67875fd0b74Schristos   },
67975fd0b74Schristos /* macwlo $src1,$src2,$acc */
68075fd0b74Schristos   {
68175fd0b74Schristos     { 0, 0, 0, 0 },
68275fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
68375fd0b74Schristos     & ifmt_machi_a, { 0x3070 }
68475fd0b74Schristos   },
68575fd0b74Schristos /* mul $dr,$sr */
68675fd0b74Schristos   {
68775fd0b74Schristos     { 0, 0, 0, 0 },
68875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
68975fd0b74Schristos     & ifmt_add, { 0x1060 }
69075fd0b74Schristos   },
69175fd0b74Schristos /* mulhi $src1,$src2 */
69275fd0b74Schristos   {
69375fd0b74Schristos     { 0, 0, 0, 0 },
69475fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
69575fd0b74Schristos     & ifmt_cmp, { 0x3000 }
69675fd0b74Schristos   },
69775fd0b74Schristos /* mulhi $src1,$src2,$acc */
69875fd0b74Schristos   {
69975fd0b74Schristos     { 0, 0, 0, 0 },
70075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
70175fd0b74Schristos     & ifmt_machi_a, { 0x3000 }
70275fd0b74Schristos   },
70375fd0b74Schristos /* mullo $src1,$src2 */
70475fd0b74Schristos   {
70575fd0b74Schristos     { 0, 0, 0, 0 },
70675fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
70775fd0b74Schristos     & ifmt_cmp, { 0x3010 }
70875fd0b74Schristos   },
70975fd0b74Schristos /* mullo $src1,$src2,$acc */
71075fd0b74Schristos   {
71175fd0b74Schristos     { 0, 0, 0, 0 },
71275fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
71375fd0b74Schristos     & ifmt_machi_a, { 0x3010 }
71475fd0b74Schristos   },
71575fd0b74Schristos /* mulwhi $src1,$src2 */
71675fd0b74Schristos   {
71775fd0b74Schristos     { 0, 0, 0, 0 },
71875fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
71975fd0b74Schristos     & ifmt_cmp, { 0x3020 }
72075fd0b74Schristos   },
72175fd0b74Schristos /* mulwhi $src1,$src2,$acc */
72275fd0b74Schristos   {
72375fd0b74Schristos     { 0, 0, 0, 0 },
72475fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
72575fd0b74Schristos     & ifmt_machi_a, { 0x3020 }
72675fd0b74Schristos   },
72775fd0b74Schristos /* mulwlo $src1,$src2 */
72875fd0b74Schristos   {
72975fd0b74Schristos     { 0, 0, 0, 0 },
73075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
73175fd0b74Schristos     & ifmt_cmp, { 0x3030 }
73275fd0b74Schristos   },
73375fd0b74Schristos /* mulwlo $src1,$src2,$acc */
73475fd0b74Schristos   {
73575fd0b74Schristos     { 0, 0, 0, 0 },
73675fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } },
73775fd0b74Schristos     & ifmt_machi_a, { 0x3030 }
73875fd0b74Schristos   },
73975fd0b74Schristos /* mv $dr,$sr */
74075fd0b74Schristos   {
74175fd0b74Schristos     { 0, 0, 0, 0 },
74275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
74375fd0b74Schristos     & ifmt_add, { 0x1080 }
74475fd0b74Schristos   },
74575fd0b74Schristos /* mvfachi $dr */
74675fd0b74Schristos   {
74775fd0b74Schristos     { 0, 0, 0, 0 },
74875fd0b74Schristos     { { MNEM, ' ', OP (DR), 0 } },
74975fd0b74Schristos     & ifmt_mvfachi, { 0x50f0 }
75075fd0b74Schristos   },
75175fd0b74Schristos /* mvfachi $dr,$accs */
75275fd0b74Schristos   {
75375fd0b74Schristos     { 0, 0, 0, 0 },
75475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } },
75575fd0b74Schristos     & ifmt_mvfachi_a, { 0x50f0 }
75675fd0b74Schristos   },
75775fd0b74Schristos /* mvfaclo $dr */
75875fd0b74Schristos   {
75975fd0b74Schristos     { 0, 0, 0, 0 },
76075fd0b74Schristos     { { MNEM, ' ', OP (DR), 0 } },
76175fd0b74Schristos     & ifmt_mvfachi, { 0x50f1 }
76275fd0b74Schristos   },
76375fd0b74Schristos /* mvfaclo $dr,$accs */
76475fd0b74Schristos   {
76575fd0b74Schristos     { 0, 0, 0, 0 },
76675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } },
76775fd0b74Schristos     & ifmt_mvfachi_a, { 0x50f1 }
76875fd0b74Schristos   },
76975fd0b74Schristos /* mvfacmi $dr */
77075fd0b74Schristos   {
77175fd0b74Schristos     { 0, 0, 0, 0 },
77275fd0b74Schristos     { { MNEM, ' ', OP (DR), 0 } },
77375fd0b74Schristos     & ifmt_mvfachi, { 0x50f2 }
77475fd0b74Schristos   },
77575fd0b74Schristos /* mvfacmi $dr,$accs */
77675fd0b74Schristos   {
77775fd0b74Schristos     { 0, 0, 0, 0 },
77875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } },
77975fd0b74Schristos     & ifmt_mvfachi_a, { 0x50f2 }
78075fd0b74Schristos   },
78175fd0b74Schristos /* mvfc $dr,$scr */
78275fd0b74Schristos   {
78375fd0b74Schristos     { 0, 0, 0, 0 },
78475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SCR), 0 } },
78575fd0b74Schristos     & ifmt_mvfc, { 0x1090 }
78675fd0b74Schristos   },
78775fd0b74Schristos /* mvtachi $src1 */
78875fd0b74Schristos   {
78975fd0b74Schristos     { 0, 0, 0, 0 },
79075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), 0 } },
79175fd0b74Schristos     & ifmt_mvtachi, { 0x5070 }
79275fd0b74Schristos   },
79375fd0b74Schristos /* mvtachi $src1,$accs */
79475fd0b74Schristos   {
79575fd0b74Schristos     { 0, 0, 0, 0 },
79675fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (ACCS), 0 } },
79775fd0b74Schristos     & ifmt_mvtachi_a, { 0x5070 }
79875fd0b74Schristos   },
79975fd0b74Schristos /* mvtaclo $src1 */
80075fd0b74Schristos   {
80175fd0b74Schristos     { 0, 0, 0, 0 },
80275fd0b74Schristos     { { MNEM, ' ', OP (SRC1), 0 } },
80375fd0b74Schristos     & ifmt_mvtachi, { 0x5071 }
80475fd0b74Schristos   },
80575fd0b74Schristos /* mvtaclo $src1,$accs */
80675fd0b74Schristos   {
80775fd0b74Schristos     { 0, 0, 0, 0 },
80875fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (ACCS), 0 } },
80975fd0b74Schristos     & ifmt_mvtachi_a, { 0x5071 }
81075fd0b74Schristos   },
81175fd0b74Schristos /* mvtc $sr,$dcr */
81275fd0b74Schristos   {
81375fd0b74Schristos     { 0, 0, 0, 0 },
81475fd0b74Schristos     { { MNEM, ' ', OP (SR), ',', OP (DCR), 0 } },
81575fd0b74Schristos     & ifmt_mvtc, { 0x10a0 }
81675fd0b74Schristos   },
81775fd0b74Schristos /* neg $dr,$sr */
81875fd0b74Schristos   {
81975fd0b74Schristos     { 0, 0, 0, 0 },
82075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
82175fd0b74Schristos     & ifmt_add, { 0x30 }
82275fd0b74Schristos   },
82375fd0b74Schristos /* nop */
82475fd0b74Schristos   {
82575fd0b74Schristos     { 0, 0, 0, 0 },
82675fd0b74Schristos     { { MNEM, 0 } },
82775fd0b74Schristos     & ifmt_nop, { 0x7000 }
82875fd0b74Schristos   },
82975fd0b74Schristos /* not $dr,$sr */
83075fd0b74Schristos   {
83175fd0b74Schristos     { 0, 0, 0, 0 },
83275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
83375fd0b74Schristos     & ifmt_add, { 0xb0 }
83475fd0b74Schristos   },
83575fd0b74Schristos /* rac */
83675fd0b74Schristos   {
83775fd0b74Schristos     { 0, 0, 0, 0 },
83875fd0b74Schristos     { { MNEM, 0 } },
83975fd0b74Schristos     & ifmt_nop, { 0x5090 }
84075fd0b74Schristos   },
84175fd0b74Schristos /* rac $accd,$accs,$imm1 */
84275fd0b74Schristos   {
84375fd0b74Schristos     { 0, 0, 0, 0 },
84475fd0b74Schristos     { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), ',', OP (IMM1), 0 } },
84575fd0b74Schristos     & ifmt_rac_dsi, { 0x5090 }
84675fd0b74Schristos   },
84775fd0b74Schristos /* rach */
84875fd0b74Schristos   {
84975fd0b74Schristos     { 0, 0, 0, 0 },
85075fd0b74Schristos     { { MNEM, 0 } },
85175fd0b74Schristos     & ifmt_nop, { 0x5080 }
85275fd0b74Schristos   },
85375fd0b74Schristos /* rach $accd,$accs,$imm1 */
85475fd0b74Schristos   {
85575fd0b74Schristos     { 0, 0, 0, 0 },
85675fd0b74Schristos     { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), ',', OP (IMM1), 0 } },
85775fd0b74Schristos     & ifmt_rac_dsi, { 0x5080 }
85875fd0b74Schristos   },
85975fd0b74Schristos /* rte */
86075fd0b74Schristos   {
86175fd0b74Schristos     { 0, 0, 0, 0 },
86275fd0b74Schristos     { { MNEM, 0 } },
86375fd0b74Schristos     & ifmt_nop, { 0x10d6 }
86475fd0b74Schristos   },
86575fd0b74Schristos /* seth $dr,$hash$hi16 */
86675fd0b74Schristos   {
86775fd0b74Schristos     { 0, 0, 0, 0 },
86875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (HI16), 0 } },
86975fd0b74Schristos     & ifmt_seth, { 0xd0c00000 }
87075fd0b74Schristos   },
87175fd0b74Schristos /* sll $dr,$sr */
87275fd0b74Schristos   {
87375fd0b74Schristos     { 0, 0, 0, 0 },
87475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
87575fd0b74Schristos     & ifmt_add, { 0x1040 }
87675fd0b74Schristos   },
87775fd0b74Schristos /* sll3 $dr,$sr,$simm16 */
87875fd0b74Schristos   {
87975fd0b74Schristos     { 0, 0, 0, 0 },
88075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
88175fd0b74Schristos     & ifmt_addv3, { 0x90c00000 }
88275fd0b74Schristos   },
88375fd0b74Schristos /* slli $dr,$uimm5 */
88475fd0b74Schristos   {
88575fd0b74Schristos     { 0, 0, 0, 0 },
88675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } },
88775fd0b74Schristos     & ifmt_slli, { 0x5040 }
88875fd0b74Schristos   },
88975fd0b74Schristos /* sra $dr,$sr */
89075fd0b74Schristos   {
89175fd0b74Schristos     { 0, 0, 0, 0 },
89275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
89375fd0b74Schristos     & ifmt_add, { 0x1020 }
89475fd0b74Schristos   },
89575fd0b74Schristos /* sra3 $dr,$sr,$simm16 */
89675fd0b74Schristos   {
89775fd0b74Schristos     { 0, 0, 0, 0 },
89875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
89975fd0b74Schristos     & ifmt_addv3, { 0x90a00000 }
90075fd0b74Schristos   },
90175fd0b74Schristos /* srai $dr,$uimm5 */
90275fd0b74Schristos   {
90375fd0b74Schristos     { 0, 0, 0, 0 },
90475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } },
90575fd0b74Schristos     & ifmt_slli, { 0x5020 }
90675fd0b74Schristos   },
90775fd0b74Schristos /* srl $dr,$sr */
90875fd0b74Schristos   {
90975fd0b74Schristos     { 0, 0, 0, 0 },
91075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
91175fd0b74Schristos     & ifmt_add, { 0x1000 }
91275fd0b74Schristos   },
91375fd0b74Schristos /* srl3 $dr,$sr,$simm16 */
91475fd0b74Schristos   {
91575fd0b74Schristos     { 0, 0, 0, 0 },
91675fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },
91775fd0b74Schristos     & ifmt_addv3, { 0x90800000 }
91875fd0b74Schristos   },
91975fd0b74Schristos /* srli $dr,$uimm5 */
92075fd0b74Schristos   {
92175fd0b74Schristos     { 0, 0, 0, 0 },
92275fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } },
92375fd0b74Schristos     & ifmt_slli, { 0x5000 }
92475fd0b74Schristos   },
92575fd0b74Schristos /* st $src1,@$src2 */
92675fd0b74Schristos   {
92775fd0b74Schristos     { 0, 0, 0, 0 },
92875fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
92975fd0b74Schristos     & ifmt_cmp, { 0x2040 }
93075fd0b74Schristos   },
93175fd0b74Schristos /* st $src1,@($slo16,$src2) */
93275fd0b74Schristos   {
93375fd0b74Schristos     { 0, 0, 0, 0 },
93475fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } },
93575fd0b74Schristos     & ifmt_st_d, { 0xa0400000 }
93675fd0b74Schristos   },
93775fd0b74Schristos /* stb $src1,@$src2 */
93875fd0b74Schristos   {
93975fd0b74Schristos     { 0, 0, 0, 0 },
94075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
94175fd0b74Schristos     & ifmt_cmp, { 0x2000 }
94275fd0b74Schristos   },
94375fd0b74Schristos /* stb $src1,@($slo16,$src2) */
94475fd0b74Schristos   {
94575fd0b74Schristos     { 0, 0, 0, 0 },
94675fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } },
94775fd0b74Schristos     & ifmt_st_d, { 0xa0000000 }
94875fd0b74Schristos   },
94975fd0b74Schristos /* sth $src1,@$src2 */
95075fd0b74Schristos   {
95175fd0b74Schristos     { 0, 0, 0, 0 },
95275fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
95375fd0b74Schristos     & ifmt_cmp, { 0x2020 }
95475fd0b74Schristos   },
95575fd0b74Schristos /* sth $src1,@($slo16,$src2) */
95675fd0b74Schristos   {
95775fd0b74Schristos     { 0, 0, 0, 0 },
95875fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } },
95975fd0b74Schristos     & ifmt_st_d, { 0xa0200000 }
96075fd0b74Schristos   },
96175fd0b74Schristos /* st $src1,@+$src2 */
96275fd0b74Schristos   {
96375fd0b74Schristos     { 0, 0, 0, 0 },
96475fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '+', OP (SRC2), 0 } },
96575fd0b74Schristos     & ifmt_cmp, { 0x2060 }
96675fd0b74Schristos   },
96775fd0b74Schristos /* sth $src1,@$src2+ */
96875fd0b74Schristos   {
96975fd0b74Schristos     { 0, 0, 0, 0 },
97075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), '+', 0 } },
97175fd0b74Schristos     & ifmt_cmp, { 0x2030 }
97275fd0b74Schristos   },
97375fd0b74Schristos /* stb $src1,@$src2+ */
97475fd0b74Schristos   {
97575fd0b74Schristos     { 0, 0, 0, 0 },
97675fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), '+', 0 } },
97775fd0b74Schristos     & ifmt_cmp, { 0x2010 }
97875fd0b74Schristos   },
97975fd0b74Schristos /* st $src1,@-$src2 */
98075fd0b74Schristos   {
98175fd0b74Schristos     { 0, 0, 0, 0 },
98275fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '-', OP (SRC2), 0 } },
98375fd0b74Schristos     & ifmt_cmp, { 0x2070 }
98475fd0b74Schristos   },
98575fd0b74Schristos /* sub $dr,$sr */
98675fd0b74Schristos   {
98775fd0b74Schristos     { 0, 0, 0, 0 },
98875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
98975fd0b74Schristos     & ifmt_add, { 0x20 }
99075fd0b74Schristos   },
99175fd0b74Schristos /* subv $dr,$sr */
99275fd0b74Schristos   {
99375fd0b74Schristos     { 0, 0, 0, 0 },
99475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
99575fd0b74Schristos     & ifmt_add, { 0x0 }
99675fd0b74Schristos   },
99775fd0b74Schristos /* subx $dr,$sr */
99875fd0b74Schristos   {
99975fd0b74Schristos     { 0, 0, 0, 0 },
100075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
100175fd0b74Schristos     & ifmt_add, { 0x10 }
100275fd0b74Schristos   },
100375fd0b74Schristos /* trap $uimm4 */
100475fd0b74Schristos   {
100575fd0b74Schristos     { 0, 0, 0, 0 },
100675fd0b74Schristos     { { MNEM, ' ', OP (UIMM4), 0 } },
100775fd0b74Schristos     & ifmt_trap, { 0x10f0 }
100875fd0b74Schristos   },
100975fd0b74Schristos /* unlock $src1,@$src2 */
101075fd0b74Schristos   {
101175fd0b74Schristos     { 0, 0, 0, 0 },
101275fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } },
101375fd0b74Schristos     & ifmt_cmp, { 0x2050 }
101475fd0b74Schristos   },
101575fd0b74Schristos /* satb $dr,$sr */
101675fd0b74Schristos   {
101775fd0b74Schristos     { 0, 0, 0, 0 },
101875fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
101975fd0b74Schristos     & ifmt_satb, { 0x80600300 }
102075fd0b74Schristos   },
102175fd0b74Schristos /* sath $dr,$sr */
102275fd0b74Schristos   {
102375fd0b74Schristos     { 0, 0, 0, 0 },
102475fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
102575fd0b74Schristos     & ifmt_satb, { 0x80600200 }
102675fd0b74Schristos   },
102775fd0b74Schristos /* sat $dr,$sr */
102875fd0b74Schristos   {
102975fd0b74Schristos     { 0, 0, 0, 0 },
103075fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },
103175fd0b74Schristos     & ifmt_satb, { 0x80600000 }
103275fd0b74Schristos   },
103375fd0b74Schristos /* pcmpbz $src2 */
103475fd0b74Schristos   {
103575fd0b74Schristos     { 0, 0, 0, 0 },
103675fd0b74Schristos     { { MNEM, ' ', OP (SRC2), 0 } },
103775fd0b74Schristos     & ifmt_cmpz, { 0x370 }
103875fd0b74Schristos   },
103975fd0b74Schristos /* sadd */
104075fd0b74Schristos   {
104175fd0b74Schristos     { 0, 0, 0, 0 },
104275fd0b74Schristos     { { MNEM, 0 } },
104375fd0b74Schristos     & ifmt_nop, { 0x50e4 }
104475fd0b74Schristos   },
104575fd0b74Schristos /* macwu1 $src1,$src2 */
104675fd0b74Schristos   {
104775fd0b74Schristos     { 0, 0, 0, 0 },
104875fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
104975fd0b74Schristos     & ifmt_cmp, { 0x50b0 }
105075fd0b74Schristos   },
105175fd0b74Schristos /* msblo $src1,$src2 */
105275fd0b74Schristos   {
105375fd0b74Schristos     { 0, 0, 0, 0 },
105475fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
105575fd0b74Schristos     & ifmt_cmp, { 0x50d0 }
105675fd0b74Schristos   },
105775fd0b74Schristos /* mulwu1 $src1,$src2 */
105875fd0b74Schristos   {
105975fd0b74Schristos     { 0, 0, 0, 0 },
106075fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
106175fd0b74Schristos     & ifmt_cmp, { 0x50a0 }
106275fd0b74Schristos   },
106375fd0b74Schristos /* maclh1 $src1,$src2 */
106475fd0b74Schristos   {
106575fd0b74Schristos     { 0, 0, 0, 0 },
106675fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },
106775fd0b74Schristos     & ifmt_cmp, { 0x50c0 }
106875fd0b74Schristos   },
106975fd0b74Schristos /* sc */
107075fd0b74Schristos   {
107175fd0b74Schristos     { 0, 0, 0, 0 },
107275fd0b74Schristos     { { MNEM, 0 } },
107375fd0b74Schristos     & ifmt_nop, { 0x7401 }
107475fd0b74Schristos   },
107575fd0b74Schristos /* snc */
107675fd0b74Schristos   {
107775fd0b74Schristos     { 0, 0, 0, 0 },
107875fd0b74Schristos     { { MNEM, 0 } },
107975fd0b74Schristos     & ifmt_nop, { 0x7501 }
108075fd0b74Schristos   },
108175fd0b74Schristos /* clrpsw $uimm8 */
108275fd0b74Schristos   {
108375fd0b74Schristos     { 0, 0, 0, 0 },
108475fd0b74Schristos     { { MNEM, ' ', OP (UIMM8), 0 } },
108575fd0b74Schristos     & ifmt_clrpsw, { 0x7200 }
108675fd0b74Schristos   },
108775fd0b74Schristos /* setpsw $uimm8 */
108875fd0b74Schristos   {
108975fd0b74Schristos     { 0, 0, 0, 0 },
109075fd0b74Schristos     { { MNEM, ' ', OP (UIMM8), 0 } },
109175fd0b74Schristos     & ifmt_clrpsw, { 0x7100 }
109275fd0b74Schristos   },
109375fd0b74Schristos /* bset $uimm3,@($slo16,$sr) */
109475fd0b74Schristos   {
109575fd0b74Schristos     { 0, 0, 0, 0 },
109675fd0b74Schristos     { { MNEM, ' ', OP (UIMM3), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
109775fd0b74Schristos     & ifmt_bset, { 0xa0600000 }
109875fd0b74Schristos   },
109975fd0b74Schristos /* bclr $uimm3,@($slo16,$sr) */
110075fd0b74Schristos   {
110175fd0b74Schristos     { 0, 0, 0, 0 },
110275fd0b74Schristos     { { MNEM, ' ', OP (UIMM3), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },
110375fd0b74Schristos     & ifmt_bset, { 0xa0700000 }
110475fd0b74Schristos   },
110575fd0b74Schristos /* btst $uimm3,$sr */
110675fd0b74Schristos   {
110775fd0b74Schristos     { 0, 0, 0, 0 },
110875fd0b74Schristos     { { MNEM, ' ', OP (UIMM3), ',', OP (SR), 0 } },
110975fd0b74Schristos     & ifmt_btst, { 0xf0 }
111075fd0b74Schristos   },
111175fd0b74Schristos };
111275fd0b74Schristos 
111375fd0b74Schristos #undef A
111475fd0b74Schristos #undef OPERAND
111575fd0b74Schristos #undef MNEM
111675fd0b74Schristos #undef OP
111775fd0b74Schristos 
111875fd0b74Schristos /* Formats for ALIAS macro-insns.  */
111975fd0b74Schristos 
112075fd0b74Schristos #define F(f) & m32r_cgen_ifld_table[M32R_##f]
112175fd0b74Schristos static const CGEN_IFMT ifmt_bc8r ATTRIBUTE_UNUSED = {
112275fd0b74Schristos   16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
112375fd0b74Schristos };
112475fd0b74Schristos 
112575fd0b74Schristos static const CGEN_IFMT ifmt_bc24r ATTRIBUTE_UNUSED = {
112675fd0b74Schristos   32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
112775fd0b74Schristos };
112875fd0b74Schristos 
112975fd0b74Schristos static const CGEN_IFMT ifmt_bl8r ATTRIBUTE_UNUSED = {
113075fd0b74Schristos   16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
113175fd0b74Schristos };
113275fd0b74Schristos 
113375fd0b74Schristos static const CGEN_IFMT ifmt_bl24r ATTRIBUTE_UNUSED = {
113475fd0b74Schristos   32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
113575fd0b74Schristos };
113675fd0b74Schristos 
113775fd0b74Schristos static const CGEN_IFMT ifmt_bcl8r ATTRIBUTE_UNUSED = {
113875fd0b74Schristos   16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
113975fd0b74Schristos };
114075fd0b74Schristos 
114175fd0b74Schristos static const CGEN_IFMT ifmt_bcl24r ATTRIBUTE_UNUSED = {
114275fd0b74Schristos   32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
114375fd0b74Schristos };
114475fd0b74Schristos 
114575fd0b74Schristos static const CGEN_IFMT ifmt_bnc8r ATTRIBUTE_UNUSED = {
114675fd0b74Schristos   16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
114775fd0b74Schristos };
114875fd0b74Schristos 
114975fd0b74Schristos static const CGEN_IFMT ifmt_bnc24r ATTRIBUTE_UNUSED = {
115075fd0b74Schristos   32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
115175fd0b74Schristos };
115275fd0b74Schristos 
115375fd0b74Schristos static const CGEN_IFMT ifmt_bra8r ATTRIBUTE_UNUSED = {
115475fd0b74Schristos   16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
115575fd0b74Schristos };
115675fd0b74Schristos 
115775fd0b74Schristos static const CGEN_IFMT ifmt_bra24r ATTRIBUTE_UNUSED = {
115875fd0b74Schristos   32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
115975fd0b74Schristos };
116075fd0b74Schristos 
116175fd0b74Schristos static const CGEN_IFMT ifmt_bncl8r ATTRIBUTE_UNUSED = {
116275fd0b74Schristos   16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }
116375fd0b74Schristos };
116475fd0b74Schristos 
116575fd0b74Schristos static const CGEN_IFMT ifmt_bncl24r ATTRIBUTE_UNUSED = {
116675fd0b74Schristos   32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }
116775fd0b74Schristos };
116875fd0b74Schristos 
116975fd0b74Schristos static const CGEN_IFMT ifmt_ld_2 ATTRIBUTE_UNUSED = {
117075fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
117175fd0b74Schristos };
117275fd0b74Schristos 
117375fd0b74Schristos static const CGEN_IFMT ifmt_ld_d2 ATTRIBUTE_UNUSED = {
117475fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
117575fd0b74Schristos };
117675fd0b74Schristos 
117775fd0b74Schristos static const CGEN_IFMT ifmt_ldb_2 ATTRIBUTE_UNUSED = {
117875fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
117975fd0b74Schristos };
118075fd0b74Schristos 
118175fd0b74Schristos static const CGEN_IFMT ifmt_ldb_d2 ATTRIBUTE_UNUSED = {
118275fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
118375fd0b74Schristos };
118475fd0b74Schristos 
118575fd0b74Schristos static const CGEN_IFMT ifmt_ldh_2 ATTRIBUTE_UNUSED = {
118675fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
118775fd0b74Schristos };
118875fd0b74Schristos 
118975fd0b74Schristos static const CGEN_IFMT ifmt_ldh_d2 ATTRIBUTE_UNUSED = {
119075fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
119175fd0b74Schristos };
119275fd0b74Schristos 
119375fd0b74Schristos static const CGEN_IFMT ifmt_ldub_2 ATTRIBUTE_UNUSED = {
119475fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
119575fd0b74Schristos };
119675fd0b74Schristos 
119775fd0b74Schristos static const CGEN_IFMT ifmt_ldub_d2 ATTRIBUTE_UNUSED = {
119875fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
119975fd0b74Schristos };
120075fd0b74Schristos 
120175fd0b74Schristos static const CGEN_IFMT ifmt_lduh_2 ATTRIBUTE_UNUSED = {
120275fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
120375fd0b74Schristos };
120475fd0b74Schristos 
120575fd0b74Schristos static const CGEN_IFMT ifmt_lduh_d2 ATTRIBUTE_UNUSED = {
120675fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
120775fd0b74Schristos };
120875fd0b74Schristos 
120975fd0b74Schristos static const CGEN_IFMT ifmt_pop ATTRIBUTE_UNUSED = {
121075fd0b74Schristos   16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }
121175fd0b74Schristos };
121275fd0b74Schristos 
121375fd0b74Schristos static const CGEN_IFMT ifmt_ldi8a ATTRIBUTE_UNUSED = {
121475fd0b74Schristos   16, 16, 0xf000, { { F (F_OP1) }, { F (F_R1) }, { F (F_SIMM8) }, { 0 } }
121575fd0b74Schristos };
121675fd0b74Schristos 
121775fd0b74Schristos static const CGEN_IFMT ifmt_ldi16a ATTRIBUTE_UNUSED = {
121875fd0b74Schristos   32, 32, 0xf0ff0000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_R1) }, { F (F_SIMM16) }, { 0 } }
121975fd0b74Schristos };
122075fd0b74Schristos 
122175fd0b74Schristos static const CGEN_IFMT ifmt_rac_d ATTRIBUTE_UNUSED = {
122275fd0b74Schristos   16, 16, 0xf3ff, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
122375fd0b74Schristos };
122475fd0b74Schristos 
122575fd0b74Schristos static const CGEN_IFMT ifmt_rac_ds ATTRIBUTE_UNUSED = {
122675fd0b74Schristos   16, 16, 0xf3f3, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
122775fd0b74Schristos };
122875fd0b74Schristos 
122975fd0b74Schristos static const CGEN_IFMT ifmt_rach_d ATTRIBUTE_UNUSED = {
123075fd0b74Schristos   16, 16, 0xf3ff, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
123175fd0b74Schristos };
123275fd0b74Schristos 
123375fd0b74Schristos static const CGEN_IFMT ifmt_rach_ds ATTRIBUTE_UNUSED = {
123475fd0b74Schristos   16, 16, 0xf3f3, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } }
123575fd0b74Schristos };
123675fd0b74Schristos 
123775fd0b74Schristos static const CGEN_IFMT ifmt_st_2 ATTRIBUTE_UNUSED = {
123875fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
123975fd0b74Schristos };
124075fd0b74Schristos 
124175fd0b74Schristos static const CGEN_IFMT ifmt_st_d2 ATTRIBUTE_UNUSED = {
124275fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
124375fd0b74Schristos };
124475fd0b74Schristos 
124575fd0b74Schristos static const CGEN_IFMT ifmt_stb_2 ATTRIBUTE_UNUSED = {
124675fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
124775fd0b74Schristos };
124875fd0b74Schristos 
124975fd0b74Schristos static const CGEN_IFMT ifmt_stb_d2 ATTRIBUTE_UNUSED = {
125075fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
125175fd0b74Schristos };
125275fd0b74Schristos 
125375fd0b74Schristos static const CGEN_IFMT ifmt_sth_2 ATTRIBUTE_UNUSED = {
125475fd0b74Schristos   16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
125575fd0b74Schristos };
125675fd0b74Schristos 
125775fd0b74Schristos static const CGEN_IFMT ifmt_sth_d2 ATTRIBUTE_UNUSED = {
125875fd0b74Schristos   32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } }
125975fd0b74Schristos };
126075fd0b74Schristos 
126175fd0b74Schristos static const CGEN_IFMT ifmt_push ATTRIBUTE_UNUSED = {
126275fd0b74Schristos   16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } }
126375fd0b74Schristos };
126475fd0b74Schristos 
126575fd0b74Schristos #undef F
126675fd0b74Schristos 
126775fd0b74Schristos /* Each non-simple macro entry points to an array of expansion possibilities.  */
126875fd0b74Schristos 
126975fd0b74Schristos #define A(a) (1 << CGEN_INSN_##a)
127075fd0b74Schristos #define OPERAND(op) M32R_OPERAND_##op
127175fd0b74Schristos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
127275fd0b74Schristos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
127375fd0b74Schristos 
127475fd0b74Schristos /* The macro instruction table.  */
127575fd0b74Schristos 
127675fd0b74Schristos static const CGEN_IBASE m32r_cgen_macro_insn_table[] =
127775fd0b74Schristos {
127875fd0b74Schristos /* bc $disp8 */
127975fd0b74Schristos   {
128075fd0b74Schristos     -1, "bc8r", "bc", 16,
128175fd0b74Schristos     { 0|A(RELAXABLE)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
128275fd0b74Schristos   },
128375fd0b74Schristos /* bc $disp24 */
128475fd0b74Schristos   {
128575fd0b74Schristos     -1, "bc24r", "bc", 32,
128675fd0b74Schristos     { 0|A(RELAXED)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
128775fd0b74Schristos   },
128875fd0b74Schristos /* bl $disp8 */
128975fd0b74Schristos   {
129075fd0b74Schristos     -1, "bl8r", "bl", 16,
129175fd0b74Schristos     { 0|A(RELAXABLE)|A(FILL_SLOT)|A(UNCOND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
129275fd0b74Schristos   },
129375fd0b74Schristos /* bl $disp24 */
129475fd0b74Schristos   {
129575fd0b74Schristos     -1, "bl24r", "bl", 32,
129675fd0b74Schristos     { 0|A(RELAXED)|A(UNCOND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
129775fd0b74Schristos   },
129875fd0b74Schristos /* bcl $disp8 */
129975fd0b74Schristos   {
130075fd0b74Schristos     -1, "bcl8r", "bcl", 16,
130175fd0b74Schristos     { 0|A(RELAXABLE)|A(FILL_SLOT)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
130275fd0b74Schristos   },
130375fd0b74Schristos /* bcl $disp24 */
130475fd0b74Schristos   {
130575fd0b74Schristos     -1, "bcl24r", "bcl", 32,
130675fd0b74Schristos     { 0|A(RELAXED)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
130775fd0b74Schristos   },
130875fd0b74Schristos /* bnc $disp8 */
130975fd0b74Schristos   {
131075fd0b74Schristos     -1, "bnc8r", "bnc", 16,
131175fd0b74Schristos     { 0|A(RELAXABLE)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
131275fd0b74Schristos   },
131375fd0b74Schristos /* bnc $disp24 */
131475fd0b74Schristos   {
131575fd0b74Schristos     -1, "bnc24r", "bnc", 32,
131675fd0b74Schristos     { 0|A(RELAXED)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
131775fd0b74Schristos   },
131875fd0b74Schristos /* bra $disp8 */
131975fd0b74Schristos   {
132075fd0b74Schristos     -1, "bra8r", "bra", 16,
132175fd0b74Schristos     { 0|A(RELAXABLE)|A(FILL_SLOT)|A(UNCOND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
132275fd0b74Schristos   },
132375fd0b74Schristos /* bra $disp24 */
132475fd0b74Schristos   {
132575fd0b74Schristos     -1, "bra24r", "bra", 32,
132675fd0b74Schristos     { 0|A(RELAXED)|A(UNCOND_CTI)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
132775fd0b74Schristos   },
132875fd0b74Schristos /* bncl $disp8 */
132975fd0b74Schristos   {
133075fd0b74Schristos     -1, "bncl8r", "bncl", 16,
133175fd0b74Schristos     { 0|A(RELAXABLE)|A(FILL_SLOT)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_O, 0 } } } }
133275fd0b74Schristos   },
133375fd0b74Schristos /* bncl $disp24 */
133475fd0b74Schristos   {
133575fd0b74Schristos     -1, "bncl24r", "bncl", 32,
133675fd0b74Schristos     { 0|A(RELAXED)|A(COND_CTI)|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_NONE, 0 } } } }
133775fd0b74Schristos   },
133875fd0b74Schristos /* ld $dr,@($sr) */
133975fd0b74Schristos   {
134075fd0b74Schristos     -1, "ld-2", "ld", 16,
134175fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
134275fd0b74Schristos   },
134375fd0b74Schristos /* ld $dr,@($sr,$slo16) */
134475fd0b74Schristos   {
134575fd0b74Schristos     -1, "ld-d2", "ld", 32,
134675fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
134775fd0b74Schristos   },
134875fd0b74Schristos /* ldb $dr,@($sr) */
134975fd0b74Schristos   {
135075fd0b74Schristos     -1, "ldb-2", "ldb", 16,
135175fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
135275fd0b74Schristos   },
135375fd0b74Schristos /* ldb $dr,@($sr,$slo16) */
135475fd0b74Schristos   {
135575fd0b74Schristos     -1, "ldb-d2", "ldb", 32,
135675fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
135775fd0b74Schristos   },
135875fd0b74Schristos /* ldh $dr,@($sr) */
135975fd0b74Schristos   {
136075fd0b74Schristos     -1, "ldh-2", "ldh", 16,
136175fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
136275fd0b74Schristos   },
136375fd0b74Schristos /* ldh $dr,@($sr,$slo16) */
136475fd0b74Schristos   {
136575fd0b74Schristos     -1, "ldh-d2", "ldh", 32,
136675fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
136775fd0b74Schristos   },
136875fd0b74Schristos /* ldub $dr,@($sr) */
136975fd0b74Schristos   {
137075fd0b74Schristos     -1, "ldub-2", "ldub", 16,
137175fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
137275fd0b74Schristos   },
137375fd0b74Schristos /* ldub $dr,@($sr,$slo16) */
137475fd0b74Schristos   {
137575fd0b74Schristos     -1, "ldub-d2", "ldub", 32,
137675fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
137775fd0b74Schristos   },
137875fd0b74Schristos /* lduh $dr,@($sr) */
137975fd0b74Schristos   {
138075fd0b74Schristos     -1, "lduh-2", "lduh", 16,
138175fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
138275fd0b74Schristos   },
138375fd0b74Schristos /* lduh $dr,@($sr,$slo16) */
138475fd0b74Schristos   {
138575fd0b74Schristos     -1, "lduh-d2", "lduh", 32,
138675fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
138775fd0b74Schristos   },
138875fd0b74Schristos /* pop $dr */
138975fd0b74Schristos   {
139075fd0b74Schristos     -1, "pop", "pop", 16,
139175fd0b74Schristos     { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
139275fd0b74Schristos   },
139375fd0b74Schristos /* ldi $dr,$simm8 */
139475fd0b74Schristos   {
139575fd0b74Schristos     -1, "ldi8a", "ldi", 16,
139675fd0b74Schristos     { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_OS, 0 } } } }
139775fd0b74Schristos   },
139875fd0b74Schristos /* ldi $dr,$hash$slo16 */
139975fd0b74Schristos   {
140075fd0b74Schristos     -1, "ldi16a", "ldi", 32,
140175fd0b74Schristos     { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
140275fd0b74Schristos   },
140375fd0b74Schristos /* rac $accd */
140475fd0b74Schristos   {
140575fd0b74Schristos     -1, "rac-d", "rac", 16,
140675fd0b74Schristos     { 0|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
140775fd0b74Schristos   },
140875fd0b74Schristos /* rac $accd,$accs */
140975fd0b74Schristos   {
141075fd0b74Schristos     -1, "rac-ds", "rac", 16,
141175fd0b74Schristos     { 0|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
141275fd0b74Schristos   },
141375fd0b74Schristos /* rach $accd */
141475fd0b74Schristos   {
141575fd0b74Schristos     -1, "rach-d", "rach", 16,
141675fd0b74Schristos     { 0|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
141775fd0b74Schristos   },
141875fd0b74Schristos /* rach $accd,$accs */
141975fd0b74Schristos   {
142075fd0b74Schristos     -1, "rach-ds", "rach", 16,
142175fd0b74Schristos     { 0|A(ALIAS), { { { (1<<MACH_M32RX)|(1<<MACH_M32R2), 0 } }, { { PIPE_S, 0 } } } }
142275fd0b74Schristos   },
142375fd0b74Schristos /* st $src1,@($src2) */
142475fd0b74Schristos   {
142575fd0b74Schristos     -1, "st-2", "st", 16,
142675fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
142775fd0b74Schristos   },
142875fd0b74Schristos /* st $src1,@($src2,$slo16) */
142975fd0b74Schristos   {
143075fd0b74Schristos     -1, "st-d2", "st", 32,
143175fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
143275fd0b74Schristos   },
143375fd0b74Schristos /* stb $src1,@($src2) */
143475fd0b74Schristos   {
143575fd0b74Schristos     -1, "stb-2", "stb", 16,
143675fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
143775fd0b74Schristos   },
143875fd0b74Schristos /* stb $src1,@($src2,$slo16) */
143975fd0b74Schristos   {
144075fd0b74Schristos     -1, "stb-d2", "stb", 32,
144175fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
144275fd0b74Schristos   },
144375fd0b74Schristos /* sth $src1,@($src2) */
144475fd0b74Schristos   {
144575fd0b74Schristos     -1, "sth-2", "sth", 16,
144675fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
144775fd0b74Schristos   },
144875fd0b74Schristos /* sth $src1,@($src2,$slo16) */
144975fd0b74Schristos   {
145075fd0b74Schristos     -1, "sth-d2", "sth", 32,
145175fd0b74Schristos     { 0|A(NO_DIS)|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_NONE, 0 } } } }
145275fd0b74Schristos   },
145375fd0b74Schristos /* push $src1 */
145475fd0b74Schristos   {
145575fd0b74Schristos     -1, "push", "push", 16,
145675fd0b74Schristos     { 0|A(ALIAS), { { { (1<<MACH_BASE), 0 } }, { { PIPE_O, 0 } } } }
145775fd0b74Schristos   },
145875fd0b74Schristos };
145975fd0b74Schristos 
146075fd0b74Schristos /* The macro instruction opcode table.  */
146175fd0b74Schristos 
146275fd0b74Schristos static const CGEN_OPCODE m32r_cgen_macro_insn_opcode_table[] =
146375fd0b74Schristos {
146475fd0b74Schristos /* bc $disp8 */
146575fd0b74Schristos   {
146675fd0b74Schristos     { 0, 0, 0, 0 },
146775fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
146875fd0b74Schristos     & ifmt_bc8r, { 0x7c00 }
146975fd0b74Schristos   },
147075fd0b74Schristos /* bc $disp24 */
147175fd0b74Schristos   {
147275fd0b74Schristos     { 0, 0, 0, 0 },
147375fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
147475fd0b74Schristos     & ifmt_bc24r, { 0xfc000000 }
147575fd0b74Schristos   },
147675fd0b74Schristos /* bl $disp8 */
147775fd0b74Schristos   {
147875fd0b74Schristos     { 0, 0, 0, 0 },
147975fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
148075fd0b74Schristos     & ifmt_bl8r, { 0x7e00 }
148175fd0b74Schristos   },
148275fd0b74Schristos /* bl $disp24 */
148375fd0b74Schristos   {
148475fd0b74Schristos     { 0, 0, 0, 0 },
148575fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
148675fd0b74Schristos     & ifmt_bl24r, { 0xfe000000 }
148775fd0b74Schristos   },
148875fd0b74Schristos /* bcl $disp8 */
148975fd0b74Schristos   {
149075fd0b74Schristos     { 0, 0, 0, 0 },
149175fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
149275fd0b74Schristos     & ifmt_bcl8r, { 0x7800 }
149375fd0b74Schristos   },
149475fd0b74Schristos /* bcl $disp24 */
149575fd0b74Schristos   {
149675fd0b74Schristos     { 0, 0, 0, 0 },
149775fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
149875fd0b74Schristos     & ifmt_bcl24r, { 0xf8000000 }
149975fd0b74Schristos   },
150075fd0b74Schristos /* bnc $disp8 */
150175fd0b74Schristos   {
150275fd0b74Schristos     { 0, 0, 0, 0 },
150375fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
150475fd0b74Schristos     & ifmt_bnc8r, { 0x7d00 }
150575fd0b74Schristos   },
150675fd0b74Schristos /* bnc $disp24 */
150775fd0b74Schristos   {
150875fd0b74Schristos     { 0, 0, 0, 0 },
150975fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
151075fd0b74Schristos     & ifmt_bnc24r, { 0xfd000000 }
151175fd0b74Schristos   },
151275fd0b74Schristos /* bra $disp8 */
151375fd0b74Schristos   {
151475fd0b74Schristos     { 0, 0, 0, 0 },
151575fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
151675fd0b74Schristos     & ifmt_bra8r, { 0x7f00 }
151775fd0b74Schristos   },
151875fd0b74Schristos /* bra $disp24 */
151975fd0b74Schristos   {
152075fd0b74Schristos     { 0, 0, 0, 0 },
152175fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
152275fd0b74Schristos     & ifmt_bra24r, { 0xff000000 }
152375fd0b74Schristos   },
152475fd0b74Schristos /* bncl $disp8 */
152575fd0b74Schristos   {
152675fd0b74Schristos     { 0, 0, 0, 0 },
152775fd0b74Schristos     { { MNEM, ' ', OP (DISP8), 0 } },
152875fd0b74Schristos     & ifmt_bncl8r, { 0x7900 }
152975fd0b74Schristos   },
153075fd0b74Schristos /* bncl $disp24 */
153175fd0b74Schristos   {
153275fd0b74Schristos     { 0, 0, 0, 0 },
153375fd0b74Schristos     { { MNEM, ' ', OP (DISP24), 0 } },
153475fd0b74Schristos     & ifmt_bncl24r, { 0xf9000000 }
153575fd0b74Schristos   },
153675fd0b74Schristos /* ld $dr,@($sr) */
153775fd0b74Schristos   {
153875fd0b74Schristos     { 0, 0, 0, 0 },
153975fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
154075fd0b74Schristos     & ifmt_ld_2, { 0x20c0 }
154175fd0b74Schristos   },
154275fd0b74Schristos /* ld $dr,@($sr,$slo16) */
154375fd0b74Schristos   {
154475fd0b74Schristos     { 0, 0, 0, 0 },
154575fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
154675fd0b74Schristos     & ifmt_ld_d2, { 0xa0c00000 }
154775fd0b74Schristos   },
154875fd0b74Schristos /* ldb $dr,@($sr) */
154975fd0b74Schristos   {
155075fd0b74Schristos     { 0, 0, 0, 0 },
155175fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
155275fd0b74Schristos     & ifmt_ldb_2, { 0x2080 }
155375fd0b74Schristos   },
155475fd0b74Schristos /* ldb $dr,@($sr,$slo16) */
155575fd0b74Schristos   {
155675fd0b74Schristos     { 0, 0, 0, 0 },
155775fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
155875fd0b74Schristos     & ifmt_ldb_d2, { 0xa0800000 }
155975fd0b74Schristos   },
156075fd0b74Schristos /* ldh $dr,@($sr) */
156175fd0b74Schristos   {
156275fd0b74Schristos     { 0, 0, 0, 0 },
156375fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
156475fd0b74Schristos     & ifmt_ldh_2, { 0x20a0 }
156575fd0b74Schristos   },
156675fd0b74Schristos /* ldh $dr,@($sr,$slo16) */
156775fd0b74Schristos   {
156875fd0b74Schristos     { 0, 0, 0, 0 },
156975fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
157075fd0b74Schristos     & ifmt_ldh_d2, { 0xa0a00000 }
157175fd0b74Schristos   },
157275fd0b74Schristos /* ldub $dr,@($sr) */
157375fd0b74Schristos   {
157475fd0b74Schristos     { 0, 0, 0, 0 },
157575fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
157675fd0b74Schristos     & ifmt_ldub_2, { 0x2090 }
157775fd0b74Schristos   },
157875fd0b74Schristos /* ldub $dr,@($sr,$slo16) */
157975fd0b74Schristos   {
158075fd0b74Schristos     { 0, 0, 0, 0 },
158175fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
158275fd0b74Schristos     & ifmt_ldub_d2, { 0xa0900000 }
158375fd0b74Schristos   },
158475fd0b74Schristos /* lduh $dr,@($sr) */
158575fd0b74Schristos   {
158675fd0b74Schristos     { 0, 0, 0, 0 },
158775fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ')', 0 } },
158875fd0b74Schristos     & ifmt_lduh_2, { 0x20b0 }
158975fd0b74Schristos   },
159075fd0b74Schristos /* lduh $dr,@($sr,$slo16) */
159175fd0b74Schristos   {
159275fd0b74Schristos     { 0, 0, 0, 0 },
159375fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SR), ',', OP (SLO16), ')', 0 } },
159475fd0b74Schristos     & ifmt_lduh_d2, { 0xa0b00000 }
159575fd0b74Schristos   },
159675fd0b74Schristos /* pop $dr */
159775fd0b74Schristos   {
159875fd0b74Schristos     { 0, 0, 0, 0 },
159975fd0b74Schristos     { { MNEM, ' ', OP (DR), 0 } },
160075fd0b74Schristos     & ifmt_pop, { 0x20ef }
160175fd0b74Schristos   },
160275fd0b74Schristos /* ldi $dr,$simm8 */
160375fd0b74Schristos   {
160475fd0b74Schristos     { 0, 0, 0, 0 },
160575fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },
160675fd0b74Schristos     & ifmt_ldi8a, { 0x6000 }
160775fd0b74Schristos   },
160875fd0b74Schristos /* ldi $dr,$hash$slo16 */
160975fd0b74Schristos   {
161075fd0b74Schristos     { 0, 0, 0, 0 },
161175fd0b74Schristos     { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (SLO16), 0 } },
161275fd0b74Schristos     & ifmt_ldi16a, { 0x90f00000 }
161375fd0b74Schristos   },
161475fd0b74Schristos /* rac $accd */
161575fd0b74Schristos   {
161675fd0b74Schristos     { 0, 0, 0, 0 },
161775fd0b74Schristos     { { MNEM, ' ', OP (ACCD), 0 } },
161875fd0b74Schristos     & ifmt_rac_d, { 0x5090 }
161975fd0b74Schristos   },
162075fd0b74Schristos /* rac $accd,$accs */
162175fd0b74Schristos   {
162275fd0b74Schristos     { 0, 0, 0, 0 },
162375fd0b74Schristos     { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), 0 } },
162475fd0b74Schristos     & ifmt_rac_ds, { 0x5090 }
162575fd0b74Schristos   },
162675fd0b74Schristos /* rach $accd */
162775fd0b74Schristos   {
162875fd0b74Schristos     { 0, 0, 0, 0 },
162975fd0b74Schristos     { { MNEM, ' ', OP (ACCD), 0 } },
163075fd0b74Schristos     & ifmt_rach_d, { 0x5080 }
163175fd0b74Schristos   },
163275fd0b74Schristos /* rach $accd,$accs */
163375fd0b74Schristos   {
163475fd0b74Schristos     { 0, 0, 0, 0 },
163575fd0b74Schristos     { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), 0 } },
163675fd0b74Schristos     & ifmt_rach_ds, { 0x5080 }
163775fd0b74Schristos   },
163875fd0b74Schristos /* st $src1,@($src2) */
163975fd0b74Schristos   {
164075fd0b74Schristos     { 0, 0, 0, 0 },
164175fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ')', 0 } },
164275fd0b74Schristos     & ifmt_st_2, { 0x2040 }
164375fd0b74Schristos   },
164475fd0b74Schristos /* st $src1,@($src2,$slo16) */
164575fd0b74Schristos   {
164675fd0b74Schristos     { 0, 0, 0, 0 },
164775fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ',', OP (SLO16), ')', 0 } },
164875fd0b74Schristos     & ifmt_st_d2, { 0xa0400000 }
164975fd0b74Schristos   },
165075fd0b74Schristos /* stb $src1,@($src2) */
165175fd0b74Schristos   {
165275fd0b74Schristos     { 0, 0, 0, 0 },
165375fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ')', 0 } },
165475fd0b74Schristos     & ifmt_stb_2, { 0x2000 }
165575fd0b74Schristos   },
165675fd0b74Schristos /* stb $src1,@($src2,$slo16) */
165775fd0b74Schristos   {
165875fd0b74Schristos     { 0, 0, 0, 0 },
165975fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ',', OP (SLO16), ')', 0 } },
166075fd0b74Schristos     & ifmt_stb_d2, { 0xa0000000 }
166175fd0b74Schristos   },
166275fd0b74Schristos /* sth $src1,@($src2) */
166375fd0b74Schristos   {
166475fd0b74Schristos     { 0, 0, 0, 0 },
166575fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ')', 0 } },
166675fd0b74Schristos     & ifmt_sth_2, { 0x2020 }
166775fd0b74Schristos   },
166875fd0b74Schristos /* sth $src1,@($src2,$slo16) */
166975fd0b74Schristos   {
167075fd0b74Schristos     { 0, 0, 0, 0 },
167175fd0b74Schristos     { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SRC2), ',', OP (SLO16), ')', 0 } },
167275fd0b74Schristos     & ifmt_sth_d2, { 0xa0200000 }
167375fd0b74Schristos   },
167475fd0b74Schristos /* push $src1 */
167575fd0b74Schristos   {
167675fd0b74Schristos     { 0, 0, 0, 0 },
167775fd0b74Schristos     { { MNEM, ' ', OP (SRC1), 0 } },
167875fd0b74Schristos     & ifmt_push, { 0x207f }
167975fd0b74Schristos   },
168075fd0b74Schristos };
168175fd0b74Schristos 
168275fd0b74Schristos #undef A
168375fd0b74Schristos #undef OPERAND
168475fd0b74Schristos #undef MNEM
168575fd0b74Schristos #undef OP
168675fd0b74Schristos 
168775fd0b74Schristos #ifndef CGEN_ASM_HASH_P
168875fd0b74Schristos #define CGEN_ASM_HASH_P(insn) 1
168975fd0b74Schristos #endif
169075fd0b74Schristos 
169175fd0b74Schristos #ifndef CGEN_DIS_HASH_P
169275fd0b74Schristos #define CGEN_DIS_HASH_P(insn) 1
169375fd0b74Schristos #endif
169475fd0b74Schristos 
169575fd0b74Schristos /* Return non-zero if INSN is to be added to the hash table.
169675fd0b74Schristos    Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file.  */
169775fd0b74Schristos 
169875fd0b74Schristos static int
asm_hash_insn_p(const CGEN_INSN * insn ATTRIBUTE_UNUSED)169975fd0b74Schristos asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED)
170075fd0b74Schristos {
170175fd0b74Schristos   return CGEN_ASM_HASH_P (insn);
170275fd0b74Schristos }
170375fd0b74Schristos 
170475fd0b74Schristos static int
dis_hash_insn_p(const CGEN_INSN * insn)170575fd0b74Schristos dis_hash_insn_p (const CGEN_INSN *insn)
170675fd0b74Schristos {
170775fd0b74Schristos   /* If building the hash table and the NO-DIS attribute is present,
170875fd0b74Schristos      ignore.  */
170975fd0b74Schristos   if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
171075fd0b74Schristos     return 0;
171175fd0b74Schristos   return CGEN_DIS_HASH_P (insn);
171275fd0b74Schristos }
171375fd0b74Schristos 
171475fd0b74Schristos #ifndef CGEN_ASM_HASH
171575fd0b74Schristos #define CGEN_ASM_HASH_SIZE 127
171675fd0b74Schristos #ifdef CGEN_MNEMONIC_OPERANDS
171775fd0b74Schristos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
171875fd0b74Schristos #else
171975fd0b74Schristos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
172075fd0b74Schristos #endif
172175fd0b74Schristos #endif
172275fd0b74Schristos 
172375fd0b74Schristos /* It doesn't make much sense to provide a default here,
172475fd0b74Schristos    but while this is under development we do.
172575fd0b74Schristos    BUFFER is a pointer to the bytes of the insn, target order.
172675fd0b74Schristos    VALUE is the first base_insn_bitsize bits as an int in host order.  */
172775fd0b74Schristos 
172875fd0b74Schristos #ifndef CGEN_DIS_HASH
172975fd0b74Schristos #define CGEN_DIS_HASH_SIZE 256
173075fd0b74Schristos #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
173175fd0b74Schristos #endif
173275fd0b74Schristos 
173375fd0b74Schristos /* The result is the hash value of the insn.
173475fd0b74Schristos    Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file.  */
173575fd0b74Schristos 
173675fd0b74Schristos static unsigned int
asm_hash_insn(const char * mnem)173775fd0b74Schristos asm_hash_insn (const char *mnem)
173875fd0b74Schristos {
173975fd0b74Schristos   return CGEN_ASM_HASH (mnem);
174075fd0b74Schristos }
174175fd0b74Schristos 
174275fd0b74Schristos /* BUF is a pointer to the bytes of the insn, target order.
174375fd0b74Schristos    VALUE is the first base_insn_bitsize bits as an int in host order.  */
174475fd0b74Schristos 
174575fd0b74Schristos static unsigned int
dis_hash_insn(const char * buf ATTRIBUTE_UNUSED,CGEN_INSN_INT value ATTRIBUTE_UNUSED)174675fd0b74Schristos dis_hash_insn (const char *buf ATTRIBUTE_UNUSED,
174775fd0b74Schristos 		     CGEN_INSN_INT value ATTRIBUTE_UNUSED)
174875fd0b74Schristos {
174975fd0b74Schristos   return CGEN_DIS_HASH (buf, value);
175075fd0b74Schristos }
175175fd0b74Schristos 
175275fd0b74Schristos /* Set the recorded length of the insn in the CGEN_FIELDS struct.  */
175375fd0b74Schristos 
175475fd0b74Schristos static void
set_fields_bitsize(CGEN_FIELDS * fields,int size)175575fd0b74Schristos set_fields_bitsize (CGEN_FIELDS *fields, int size)
175675fd0b74Schristos {
175775fd0b74Schristos   CGEN_FIELDS_BITSIZE (fields) = size;
175875fd0b74Schristos }
175975fd0b74Schristos 
176075fd0b74Schristos /* Function to call before using the operand instance table.
176175fd0b74Schristos    This plugs the opcode entries and macro instructions into the cpu table.  */
176275fd0b74Schristos 
176375fd0b74Schristos void
m32r_cgen_init_opcode_table(CGEN_CPU_DESC cd)176475fd0b74Schristos m32r_cgen_init_opcode_table (CGEN_CPU_DESC cd)
176575fd0b74Schristos {
176675fd0b74Schristos   int i;
176775fd0b74Schristos   int num_macros = (sizeof (m32r_cgen_macro_insn_table) /
176875fd0b74Schristos 		    sizeof (m32r_cgen_macro_insn_table[0]));
176975fd0b74Schristos   const CGEN_IBASE *ib = & m32r_cgen_macro_insn_table[0];
177075fd0b74Schristos   const CGEN_OPCODE *oc = & m32r_cgen_macro_insn_opcode_table[0];
177175fd0b74Schristos   CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
177275fd0b74Schristos 
177375fd0b74Schristos   /* This test has been added to avoid a warning generated
177475fd0b74Schristos      if memset is called with a third argument of value zero.  */
177575fd0b74Schristos   if (num_macros >= 1)
177675fd0b74Schristos     memset (insns, 0, num_macros * sizeof (CGEN_INSN));
177775fd0b74Schristos   for (i = 0; i < num_macros; ++i)
177875fd0b74Schristos     {
177975fd0b74Schristos       insns[i].base = &ib[i];
178075fd0b74Schristos       insns[i].opcode = &oc[i];
178175fd0b74Schristos       m32r_cgen_build_insn_regex (& insns[i]);
178275fd0b74Schristos     }
178375fd0b74Schristos   cd->macro_insn_table.init_entries = insns;
178475fd0b74Schristos   cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
178575fd0b74Schristos   cd->macro_insn_table.num_init_entries = num_macros;
178675fd0b74Schristos 
178775fd0b74Schristos   oc = & m32r_cgen_insn_opcode_table[0];
178875fd0b74Schristos   insns = (CGEN_INSN *) cd->insn_table.init_entries;
178975fd0b74Schristos   for (i = 0; i < MAX_INSNS; ++i)
179075fd0b74Schristos     {
179175fd0b74Schristos       insns[i].opcode = &oc[i];
179275fd0b74Schristos       m32r_cgen_build_insn_regex (& insns[i]);
179375fd0b74Schristos     }
179475fd0b74Schristos 
179575fd0b74Schristos   cd->sizeof_fields = sizeof (CGEN_FIELDS);
179675fd0b74Schristos   cd->set_fields_bitsize = set_fields_bitsize;
179775fd0b74Schristos 
179875fd0b74Schristos   cd->asm_hash_p = asm_hash_insn_p;
179975fd0b74Schristos   cd->asm_hash = asm_hash_insn;
180075fd0b74Schristos   cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
180175fd0b74Schristos 
180275fd0b74Schristos   cd->dis_hash_p = dis_hash_insn_p;
180375fd0b74Schristos   cd->dis_hash = dis_hash_insn;
180475fd0b74Schristos   cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
180575fd0b74Schristos }
1806