1dc268d07Schristos /* DO NOT EDIT!  -*- buffer-read-only: t -*- vi:set ro:  */
2a1ba9ba4Schristos /* Instruction opcode table for mt.
3a1ba9ba4Schristos 
4a1ba9ba4Schristos THIS FILE IS MACHINE GENERATED WITH CGEN.
5a1ba9ba4Schristos 
6*184b2d41Schristos Copyright (C) 1996-2020 Free Software Foundation, Inc.
7a1ba9ba4Schristos 
8a1ba9ba4Schristos This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9a1ba9ba4Schristos 
10a1ba9ba4Schristos    This file is free software; you can redistribute it and/or modify
11a1ba9ba4Schristos    it under the terms of the GNU General Public License as published by
12a1ba9ba4Schristos    the Free Software Foundation; either version 3, or (at your option)
13a1ba9ba4Schristos    any later version.
14a1ba9ba4Schristos 
15a1ba9ba4Schristos    It is distributed in the hope that it will be useful, but WITHOUT
16a1ba9ba4Schristos    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17a1ba9ba4Schristos    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
18a1ba9ba4Schristos    License for more details.
19a1ba9ba4Schristos 
20a1ba9ba4Schristos    You should have received a copy of the GNU General Public License along
21a1ba9ba4Schristos    with this program; if not, write to the Free Software Foundation, Inc.,
22a1ba9ba4Schristos    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
23a1ba9ba4Schristos 
24a1ba9ba4Schristos */
25a1ba9ba4Schristos 
26a1ba9ba4Schristos #include "sysdep.h"
27a1ba9ba4Schristos #include "ansidecl.h"
28a1ba9ba4Schristos #include "bfd.h"
29a1ba9ba4Schristos #include "symcat.h"
30a1ba9ba4Schristos #include "mt-desc.h"
31a1ba9ba4Schristos #include "mt-opc.h"
32a1ba9ba4Schristos #include "libiberty.h"
33a1ba9ba4Schristos 
34a1ba9ba4Schristos /* -- opc.c */
35a1ba9ba4Schristos #include "safe-ctype.h"
36a1ba9ba4Schristos 
37a1ba9ba4Schristos /* Special check to ensure that instruction exists for given machine.  */
38a1ba9ba4Schristos 
39a1ba9ba4Schristos int
mt_cgen_insn_supported(CGEN_CPU_DESC cd,const CGEN_INSN * insn)40a1ba9ba4Schristos mt_cgen_insn_supported (CGEN_CPU_DESC cd, const CGEN_INSN *insn)
41a1ba9ba4Schristos {
42a1ba9ba4Schristos   int machs = CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_MACH);
43a1ba9ba4Schristos 
44a1ba9ba4Schristos   /* No mach attribute?  Assume it's supported for all machs.  */
45a1ba9ba4Schristos   if (machs == 0)
46a1ba9ba4Schristos     return 1;
47a1ba9ba4Schristos 
48a1ba9ba4Schristos   return ((machs & cd->machs) != 0);
49a1ba9ba4Schristos }
50a1ba9ba4Schristos 
51a1ba9ba4Schristos /* A better hash function for instruction mnemonics.  */
52a1ba9ba4Schristos 
53a1ba9ba4Schristos unsigned int
mt_asm_hash(const char * insn)54a1ba9ba4Schristos mt_asm_hash (const char* insn)
55a1ba9ba4Schristos {
56a1ba9ba4Schristos   unsigned int hash;
57a1ba9ba4Schristos   const char* m = insn;
58a1ba9ba4Schristos 
59a1ba9ba4Schristos   for (hash = 0; *m && ! ISSPACE (*m); m++)
60a1ba9ba4Schristos     hash = (hash * 23) ^ (0x1F & TOLOWER (*m));
61a1ba9ba4Schristos 
62a1ba9ba4Schristos   /* printf ("%s %d\n", insn, (hash % CGEN_ASM_HASH_SIZE)); */
63a1ba9ba4Schristos 
64a1ba9ba4Schristos   return hash % CGEN_ASM_HASH_SIZE;
65a1ba9ba4Schristos }
66a1ba9ba4Schristos 
67a1ba9ba4Schristos 
68a1ba9ba4Schristos /* -- asm.c */
69a1ba9ba4Schristos /* The hash functions are recorded here to help keep assembler code out of
70a1ba9ba4Schristos    the disassembler and vice versa.  */
71a1ba9ba4Schristos 
72a1ba9ba4Schristos static int asm_hash_insn_p        (const CGEN_INSN *);
73a1ba9ba4Schristos static unsigned int asm_hash_insn (const char *);
74a1ba9ba4Schristos static int dis_hash_insn_p        (const CGEN_INSN *);
75a1ba9ba4Schristos static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT);
76a1ba9ba4Schristos 
77a1ba9ba4Schristos /* Instruction formats.  */
78a1ba9ba4Schristos 
79a1ba9ba4Schristos #define F(f) & mt_cgen_ifld_table[MT_##f]
80a1ba9ba4Schristos static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
81a1ba9ba4Schristos   0, 0, 0x0, { { 0 } }
82a1ba9ba4Schristos };
83a1ba9ba4Schristos 
84a1ba9ba4Schristos static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = {
85a1ba9ba4Schristos   32, 32, 0xff000fff, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_DRRR) }, { F (F_UU12) }, { 0 } }
86a1ba9ba4Schristos };
87a1ba9ba4Schristos 
88a1ba9ba4Schristos static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = {
89a1ba9ba4Schristos   32, 32, 0xff000000, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_DR) }, { F (F_IMM16S) }, { 0 } }
90a1ba9ba4Schristos };
91a1ba9ba4Schristos 
92a1ba9ba4Schristos static const CGEN_IFMT ifmt_addui ATTRIBUTE_UNUSED = {
93a1ba9ba4Schristos   32, 32, 0xff000000, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_DR) }, { F (F_IMM16U) }, { 0 } }
94a1ba9ba4Schristos };
95a1ba9ba4Schristos 
96a1ba9ba4Schristos static const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = {
97a1ba9ba4Schristos   32, 32, 0xffffffff, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_UU24) }, { 0 } }
98a1ba9ba4Schristos };
99a1ba9ba4Schristos 
100a1ba9ba4Schristos static const CGEN_IFMT ifmt_ldui ATTRIBUTE_UNUSED = {
101a1ba9ba4Schristos   32, 32, 0xfff00000, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_UU4B) }, { F (F_DR) }, { F (F_IMM16U) }, { 0 } }
102a1ba9ba4Schristos };
103a1ba9ba4Schristos 
104a1ba9ba4Schristos static const CGEN_IFMT ifmt_brlt ATTRIBUTE_UNUSED = {
105a1ba9ba4Schristos   32, 32, 0xff000000, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_IMM16S) }, { 0 } }
106a1ba9ba4Schristos };
107a1ba9ba4Schristos 
108a1ba9ba4Schristos static const CGEN_IFMT ifmt_jmp ATTRIBUTE_UNUSED = {
109a1ba9ba4Schristos   32, 32, 0xffff0000, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_UU4B) }, { F (F_UU4A) }, { F (F_IMM16S) }, { 0 } }
110a1ba9ba4Schristos };
111a1ba9ba4Schristos 
112a1ba9ba4Schristos static const CGEN_IFMT ifmt_jal ATTRIBUTE_UNUSED = {
113a1ba9ba4Schristos   32, 32, 0xff0f0fff, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_UU4A) }, { F (F_DRRR) }, { F (F_UU12) }, { 0 } }
114a1ba9ba4Schristos };
115a1ba9ba4Schristos 
116a1ba9ba4Schristos static const CGEN_IFMT ifmt_dbnz ATTRIBUTE_UNUSED = {
117a1ba9ba4Schristos   32, 32, 0xff0f0000, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_UU4A) }, { F (F_IMM16S) }, { 0 } }
118a1ba9ba4Schristos };
119a1ba9ba4Schristos 
120a1ba9ba4Schristos static const CGEN_IFMT ifmt_ei ATTRIBUTE_UNUSED = {
121a1ba9ba4Schristos   32, 32, 0xffffffff, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_UU4B) }, { F (F_UU4A) }, { F (F_UU16) }, { 0 } }
122a1ba9ba4Schristos };
123a1ba9ba4Schristos 
124a1ba9ba4Schristos static const CGEN_IFMT ifmt_si ATTRIBUTE_UNUSED = {
125a1ba9ba4Schristos   32, 32, 0xffff0fff, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_UU4B) }, { F (F_UU4A) }, { F (F_DRRR) }, { F (F_UU12) }, { 0 } }
126a1ba9ba4Schristos };
127a1ba9ba4Schristos 
128a1ba9ba4Schristos static const CGEN_IFMT ifmt_reti ATTRIBUTE_UNUSED = {
129a1ba9ba4Schristos   32, 32, 0xff0fffff, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_UU4A) }, { F (F_UU16) }, { 0 } }
130a1ba9ba4Schristos };
131a1ba9ba4Schristos 
132a1ba9ba4Schristos static const CGEN_IFMT ifmt_stw ATTRIBUTE_UNUSED = {
133a1ba9ba4Schristos   32, 32, 0xff000000, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_IMM16S) }, { 0 } }
134a1ba9ba4Schristos };
135a1ba9ba4Schristos 
136a1ba9ba4Schristos static const CGEN_IFMT ifmt_ldctxt ATTRIBUTE_UNUSED = {
137a1ba9ba4Schristos   32, 32, 0xff000e00, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_UU_2_25) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_RC) }, { F (F_RCNUM) }, { F (F_UU_3_11) }, { F (F_CONTNUM) }, { 0 } }
138a1ba9ba4Schristos };
139a1ba9ba4Schristos 
140a1ba9ba4Schristos static const CGEN_IFMT ifmt_ldfb ATTRIBUTE_UNUSED = {
141a1ba9ba4Schristos   32, 32, 0xff000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_UU_2_25) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_IMM16U) }, { 0 } }
142a1ba9ba4Schristos };
143a1ba9ba4Schristos 
144a1ba9ba4Schristos static const CGEN_IFMT ifmt_fbcb ATTRIBUTE_UNUSED = {
145a1ba9ba4Schristos   32, 32, 0xfc00f000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RBBC) }, { F (F_SR1) }, { F (F_BALL) }, { F (F_BRC) }, { F (F_UU_4_15) }, { F (F_RC) }, { F (F_CBRB) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
146a1ba9ba4Schristos };
147a1ba9ba4Schristos 
148a1ba9ba4Schristos static const CGEN_IFMT ifmt_mfbcb ATTRIBUTE_UNUSED = {
149a1ba9ba4Schristos   32, 32, 0xfc00f000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RBBC) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_UU_4_15) }, { F (F_RC1) }, { F (F_CBRB) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
150a1ba9ba4Schristos };
151a1ba9ba4Schristos 
152a1ba9ba4Schristos static const CGEN_IFMT ifmt_fbcci ATTRIBUTE_UNUSED = {
153a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RBBC) }, { F (F_SR1) }, { F (F_BALL) }, { F (F_BRC) }, { F (F_FBDISP) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
154a1ba9ba4Schristos };
155a1ba9ba4Schristos 
156a1ba9ba4Schristos static const CGEN_IFMT ifmt_mfbcci ATTRIBUTE_UNUSED = {
157a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RBBC) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_FBDISP) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
158a1ba9ba4Schristos };
159a1ba9ba4Schristos 
160a1ba9ba4Schristos static const CGEN_IFMT ifmt_fbcbdr ATTRIBUTE_UNUSED = {
161a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RBBC) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_BALL2) }, { F (F_BRC2) }, { F (F_RC1) }, { F (F_CBRB) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
162a1ba9ba4Schristos };
163a1ba9ba4Schristos 
164a1ba9ba4Schristos static const CGEN_IFMT ifmt_rcfbcb ATTRIBUTE_UNUSED = {
165a1ba9ba4Schristos   32, 32, 0xfcc08000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RBBC) }, { F (F_UU_2_23) }, { F (F_TYPE) }, { F (F_BALL) }, { F (F_BRC) }, { F (F_UU_1_15) }, { F (F_ROWNUM) }, { F (F_RC1) }, { F (F_CBRB) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
166a1ba9ba4Schristos };
167a1ba9ba4Schristos 
168a1ba9ba4Schristos static const CGEN_IFMT ifmt_mrcfbcb ATTRIBUTE_UNUSED = {
169a1ba9ba4Schristos   32, 32, 0xfcc08000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RBBC) }, { F (F_UU_2_23) }, { F (F_TYPE) }, { F (F_SR2) }, { F (F_UU_1_15) }, { F (F_ROWNUM) }, { F (F_RC1) }, { F (F_CBRB) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
170a1ba9ba4Schristos };
171a1ba9ba4Schristos 
172a1ba9ba4Schristos static const CGEN_IFMT ifmt_cbcast ATTRIBUTE_UNUSED = {
173a1ba9ba4Schristos   32, 32, 0xfc000380, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_MASK) }, { F (F_UU_3_9) }, { F (F_RC2) }, { F (F_CTXDISP) }, { 0 } }
174a1ba9ba4Schristos };
175a1ba9ba4Schristos 
176a1ba9ba4Schristos static const CGEN_IFMT ifmt_dupcbcast ATTRIBUTE_UNUSED = {
177a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_MASK) }, { F (F_CELL) }, { F (F_RC2) }, { F (F_CTXDISP) }, { 0 } }
178a1ba9ba4Schristos };
179a1ba9ba4Schristos 
180a1ba9ba4Schristos static const CGEN_IFMT ifmt_wfbi ATTRIBUTE_UNUSED = {
181a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_BANKADDR) }, { F (F_ROWNUM1) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
182a1ba9ba4Schristos };
183a1ba9ba4Schristos 
184a1ba9ba4Schristos static const CGEN_IFMT ifmt_wfb ATTRIBUTE_UNUSED = {
185a1ba9ba4Schristos   32, 32, 0xff000040, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_UU_2_25) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_FBDISP) }, { F (F_ROWNUM2) }, { F (F_UU_1_6) }, { F (F_CTXDISP) }, { 0 } }
186a1ba9ba4Schristos };
187a1ba9ba4Schristos 
188a1ba9ba4Schristos static const CGEN_IFMT ifmt_rcrisc ATTRIBUTE_UNUSED = {
189a1ba9ba4Schristos   32, 32, 0xfc080000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RBBC) }, { F (F_SR1) }, { F (F_UU_1_19) }, { F (F_COLNUM) }, { F (F_DRRR) }, { F (F_RC1) }, { F (F_CBRB) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
190a1ba9ba4Schristos };
191a1ba9ba4Schristos 
192a1ba9ba4Schristos static const CGEN_IFMT ifmt_fbcbinc ATTRIBUTE_UNUSED = {
193a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RBBC) }, { F (F_SR1) }, { F (F_INCAMT) }, { F (F_RC1) }, { F (F_CBRB) }, { F (F_CELL) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
194a1ba9ba4Schristos };
195a1ba9ba4Schristos 
196a1ba9ba4Schristos static const CGEN_IFMT ifmt_rcxmode ATTRIBUTE_UNUSED = {
197a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RDA) }, { F (F_WR) }, { F (F_XMODE) }, { F (F_MASK1) }, { F (F_SR2) }, { F (F_FBDISP) }, { F (F_ROWNUM2) }, { F (F_RC2) }, { F (F_CTXDISP) }, { 0 } }
198a1ba9ba4Schristos };
199a1ba9ba4Schristos 
200a1ba9ba4Schristos static const CGEN_IFMT ifmt_interleaver ATTRIBUTE_UNUSED = {
201a1ba9ba4Schristos   32, 32, 0xfc008000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_MODE) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_UU_1_15) }, { F (F_ID) }, { F (F_SIZE) }, { 0 } }
202a1ba9ba4Schristos };
203a1ba9ba4Schristos 
204a1ba9ba4Schristos static const CGEN_IFMT ifmt_wfbinc ATTRIBUTE_UNUSED = {
205a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RDA) }, { F (F_WR) }, { F (F_FBINCR) }, { F (F_BALL) }, { F (F_COLNUM) }, { F (F_LENGTH) }, { F (F_ROWNUM1) }, { F (F_ROWNUM2) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
206a1ba9ba4Schristos };
207a1ba9ba4Schristos 
208a1ba9ba4Schristos static const CGEN_IFMT ifmt_mwfbinc ATTRIBUTE_UNUSED = {
209a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RDA) }, { F (F_WR) }, { F (F_FBINCR) }, { F (F_SR2) }, { F (F_LENGTH) }, { F (F_ROWNUM1) }, { F (F_ROWNUM2) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
210a1ba9ba4Schristos };
211a1ba9ba4Schristos 
212a1ba9ba4Schristos static const CGEN_IFMT ifmt_wfbincr ATTRIBUTE_UNUSED = {
213a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RDA) }, { F (F_WR) }, { F (F_SR1) }, { F (F_BALL) }, { F (F_COLNUM) }, { F (F_LENGTH) }, { F (F_ROWNUM1) }, { F (F_ROWNUM2) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
214a1ba9ba4Schristos };
215a1ba9ba4Schristos 
216a1ba9ba4Schristos static const CGEN_IFMT ifmt_mwfbincr ATTRIBUTE_UNUSED = {
217a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_RDA) }, { F (F_WR) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_LENGTH) }, { F (F_ROWNUM1) }, { F (F_ROWNUM2) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
218a1ba9ba4Schristos };
219a1ba9ba4Schristos 
220a1ba9ba4Schristos static const CGEN_IFMT ifmt_fbcbincs ATTRIBUTE_UNUSED = {
221a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_PERM) }, { F (F_A23) }, { F (F_CR) }, { F (F_CBS) }, { F (F_INCR) }, { F (F_CCB) }, { F (F_CDB) }, { F (F_ROWNUM2) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
222a1ba9ba4Schristos };
223a1ba9ba4Schristos 
224a1ba9ba4Schristos static const CGEN_IFMT ifmt_mfbcbincs ATTRIBUTE_UNUSED = {
225a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_PERM) }, { F (F_SR1) }, { F (F_CBS) }, { F (F_INCR) }, { F (F_CCB) }, { F (F_CDB) }, { F (F_ROWNUM2) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
226a1ba9ba4Schristos };
227a1ba9ba4Schristos 
228a1ba9ba4Schristos static const CGEN_IFMT ifmt_fbcbincrs ATTRIBUTE_UNUSED = {
229a1ba9ba4Schristos   32, 32, 0xfc008000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_PERM) }, { F (F_SR1) }, { F (F_BALL) }, { F (F_COLNUM) }, { F (F_UU_1_15) }, { F (F_CBX) }, { F (F_CCB) }, { F (F_CDB) }, { F (F_ROWNUM2) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
230a1ba9ba4Schristos };
231a1ba9ba4Schristos 
232a1ba9ba4Schristos static const CGEN_IFMT ifmt_mfbcbincrs ATTRIBUTE_UNUSED = {
233a1ba9ba4Schristos   32, 32, 0xfc008000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_PERM) }, { F (F_SR1) }, { F (F_SR2) }, { F (F_UU_1_15) }, { F (F_CBX) }, { F (F_CCB) }, { F (F_CDB) }, { F (F_ROWNUM2) }, { F (F_DUP) }, { F (F_CTXDISP) }, { 0 } }
234a1ba9ba4Schristos };
235a1ba9ba4Schristos 
236a1ba9ba4Schristos static const CGEN_IFMT ifmt_loop ATTRIBUTE_UNUSED = {
237a1ba9ba4Schristos   32, 32, 0xff0fff00, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_SR1) }, { F (F_UU4A) }, { F (F_UU8) }, { F (F_LOOPO) }, { 0 } }
238a1ba9ba4Schristos };
239a1ba9ba4Schristos 
240a1ba9ba4Schristos static const CGEN_IFMT ifmt_loopi ATTRIBUTE_UNUSED = {
241a1ba9ba4Schristos   32, 32, 0xff000000, { { F (F_MSYS) }, { F (F_OPC) }, { F (F_IMM) }, { F (F_IMM16L) }, { F (F_LOOPO) }, { 0 } }
242a1ba9ba4Schristos };
243a1ba9ba4Schristos 
244a1ba9ba4Schristos static const CGEN_IFMT ifmt_dfbc ATTRIBUTE_UNUSED = {
245a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_CB1SEL) }, { F (F_CB2SEL) }, { F (F_CB1INCR) }, { F (F_CB2INCR) }, { F (F_RC3) }, { F (F_RC2) }, { F (F_CTXDISP) }, { 0 } }
246a1ba9ba4Schristos };
247a1ba9ba4Schristos 
248a1ba9ba4Schristos static const CGEN_IFMT ifmt_dwfb ATTRIBUTE_UNUSED = {
249a1ba9ba4Schristos   32, 32, 0xfc000080, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_CB1SEL) }, { F (F_CB2SEL) }, { F (F_CB1INCR) }, { F (F_CB2INCR) }, { F (F_UU1) }, { F (F_RC2) }, { F (F_CTXDISP) }, { 0 } }
250a1ba9ba4Schristos };
251a1ba9ba4Schristos 
252a1ba9ba4Schristos static const CGEN_IFMT ifmt_dfbr ATTRIBUTE_UNUSED = {
253a1ba9ba4Schristos   32, 32, 0xfc000000, { { F (F_MSYS) }, { F (F_MSOPC) }, { F (F_CB1SEL) }, { F (F_CB2SEL) }, { F (F_SR2) }, { F (F_LENGTH) }, { F (F_ROWNUM1) }, { F (F_ROWNUM2) }, { F (F_RC2) }, { F (F_CTXDISP) }, { 0 } }
254a1ba9ba4Schristos };
255a1ba9ba4Schristos 
256a1ba9ba4Schristos #undef F
257a1ba9ba4Schristos 
258a1ba9ba4Schristos #define A(a) (1 << CGEN_INSN_##a)
259a1ba9ba4Schristos #define OPERAND(op) MT_OPERAND_##op
260a1ba9ba4Schristos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
261a1ba9ba4Schristos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
262a1ba9ba4Schristos 
263a1ba9ba4Schristos /* The instruction table.  */
264a1ba9ba4Schristos 
265a1ba9ba4Schristos static const CGEN_OPCODE mt_cgen_insn_opcode_table[MAX_INSNS] =
266a1ba9ba4Schristos {
267a1ba9ba4Schristos   /* Special null first entry.
268a1ba9ba4Schristos      A `num' value of zero is thus invalid.
269a1ba9ba4Schristos      Also, the special `invalid' insn resides here.  */
270a1ba9ba4Schristos   { { 0, 0, 0, 0 }, {{0}}, 0, {0}},
271a1ba9ba4Schristos /* add $frdrrr,$frsr1,$frsr2 */
272a1ba9ba4Schristos   {
273a1ba9ba4Schristos     { 0, 0, 0, 0 },
274a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
275a1ba9ba4Schristos     & ifmt_add, { 0x0 }
276a1ba9ba4Schristos   },
277a1ba9ba4Schristos /* addu $frdrrr,$frsr1,$frsr2 */
278a1ba9ba4Schristos   {
279a1ba9ba4Schristos     { 0, 0, 0, 0 },
280a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
281a1ba9ba4Schristos     & ifmt_add, { 0x2000000 }
282a1ba9ba4Schristos   },
283a1ba9ba4Schristos /* addi $frdr,$frsr1,#$imm16 */
284a1ba9ba4Schristos   {
285a1ba9ba4Schristos     { 0, 0, 0, 0 },
286a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16), 0 } },
287a1ba9ba4Schristos     & ifmt_addi, { 0x1000000 }
288a1ba9ba4Schristos   },
289a1ba9ba4Schristos /* addui $frdr,$frsr1,#$imm16z */
290a1ba9ba4Schristos   {
291a1ba9ba4Schristos     { 0, 0, 0, 0 },
292a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16Z), 0 } },
293a1ba9ba4Schristos     & ifmt_addui, { 0x3000000 }
294a1ba9ba4Schristos   },
295a1ba9ba4Schristos /* sub $frdrrr,$frsr1,$frsr2 */
296a1ba9ba4Schristos   {
297a1ba9ba4Schristos     { 0, 0, 0, 0 },
298a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
299a1ba9ba4Schristos     & ifmt_add, { 0x4000000 }
300a1ba9ba4Schristos   },
301a1ba9ba4Schristos /* subu $frdrrr,$frsr1,$frsr2 */
302a1ba9ba4Schristos   {
303a1ba9ba4Schristos     { 0, 0, 0, 0 },
304a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
305a1ba9ba4Schristos     & ifmt_add, { 0x6000000 }
306a1ba9ba4Schristos   },
307a1ba9ba4Schristos /* subi $frdr,$frsr1,#$imm16 */
308a1ba9ba4Schristos   {
309a1ba9ba4Schristos     { 0, 0, 0, 0 },
310a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16), 0 } },
311a1ba9ba4Schristos     & ifmt_addi, { 0x5000000 }
312a1ba9ba4Schristos   },
313a1ba9ba4Schristos /* subui $frdr,$frsr1,#$imm16z */
314a1ba9ba4Schristos   {
315a1ba9ba4Schristos     { 0, 0, 0, 0 },
316a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16Z), 0 } },
317a1ba9ba4Schristos     & ifmt_addui, { 0x7000000 }
318a1ba9ba4Schristos   },
319a1ba9ba4Schristos /* mul $frdrrr,$frsr1,$frsr2 */
320a1ba9ba4Schristos   {
321a1ba9ba4Schristos     { 0, 0, 0, 0 },
322a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
323a1ba9ba4Schristos     & ifmt_add, { 0x8000000 }
324a1ba9ba4Schristos   },
325a1ba9ba4Schristos /* muli $frdr,$frsr1,#$imm16 */
326a1ba9ba4Schristos   {
327a1ba9ba4Schristos     { 0, 0, 0, 0 },
328a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16), 0 } },
329a1ba9ba4Schristos     & ifmt_addi, { 0x9000000 }
330a1ba9ba4Schristos   },
331a1ba9ba4Schristos /* and $frdrrr,$frsr1,$frsr2 */
332a1ba9ba4Schristos   {
333a1ba9ba4Schristos     { 0, 0, 0, 0 },
334a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
335a1ba9ba4Schristos     & ifmt_add, { 0x10000000 }
336a1ba9ba4Schristos   },
337a1ba9ba4Schristos /* andi $frdr,$frsr1,#$imm16z */
338a1ba9ba4Schristos   {
339a1ba9ba4Schristos     { 0, 0, 0, 0 },
340a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16Z), 0 } },
341a1ba9ba4Schristos     & ifmt_addui, { 0x11000000 }
342a1ba9ba4Schristos   },
343a1ba9ba4Schristos /* or $frdrrr,$frsr1,$frsr2 */
344a1ba9ba4Schristos   {
345a1ba9ba4Schristos     { 0, 0, 0, 0 },
346a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
347a1ba9ba4Schristos     & ifmt_add, { 0x12000000 }
348a1ba9ba4Schristos   },
349a1ba9ba4Schristos /* nop */
350a1ba9ba4Schristos   {
351a1ba9ba4Schristos     { 0, 0, 0, 0 },
352a1ba9ba4Schristos     { { MNEM, 0 } },
353a1ba9ba4Schristos     & ifmt_nop, { 0x12000000 }
354a1ba9ba4Schristos   },
355a1ba9ba4Schristos /* ori $frdr,$frsr1,#$imm16z */
356a1ba9ba4Schristos   {
357a1ba9ba4Schristos     { 0, 0, 0, 0 },
358a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16Z), 0 } },
359a1ba9ba4Schristos     & ifmt_addui, { 0x13000000 }
360a1ba9ba4Schristos   },
361a1ba9ba4Schristos /* xor $frdrrr,$frsr1,$frsr2 */
362a1ba9ba4Schristos   {
363a1ba9ba4Schristos     { 0, 0, 0, 0 },
364a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
365a1ba9ba4Schristos     & ifmt_add, { 0x14000000 }
366a1ba9ba4Schristos   },
367a1ba9ba4Schristos /* xori $frdr,$frsr1,#$imm16z */
368a1ba9ba4Schristos   {
369a1ba9ba4Schristos     { 0, 0, 0, 0 },
370a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16Z), 0 } },
371a1ba9ba4Schristos     & ifmt_addui, { 0x15000000 }
372a1ba9ba4Schristos   },
373a1ba9ba4Schristos /* nand $frdrrr,$frsr1,$frsr2 */
374a1ba9ba4Schristos   {
375a1ba9ba4Schristos     { 0, 0, 0, 0 },
376a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
377a1ba9ba4Schristos     & ifmt_add, { 0x16000000 }
378a1ba9ba4Schristos   },
379a1ba9ba4Schristos /* nandi $frdr,$frsr1,#$imm16z */
380a1ba9ba4Schristos   {
381a1ba9ba4Schristos     { 0, 0, 0, 0 },
382a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16Z), 0 } },
383a1ba9ba4Schristos     & ifmt_addui, { 0x17000000 }
384a1ba9ba4Schristos   },
385a1ba9ba4Schristos /* nor $frdrrr,$frsr1,$frsr2 */
386a1ba9ba4Schristos   {
387a1ba9ba4Schristos     { 0, 0, 0, 0 },
388a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
389a1ba9ba4Schristos     & ifmt_add, { 0x18000000 }
390a1ba9ba4Schristos   },
391a1ba9ba4Schristos /* nori $frdr,$frsr1,#$imm16z */
392a1ba9ba4Schristos   {
393a1ba9ba4Schristos     { 0, 0, 0, 0 },
394a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16Z), 0 } },
395a1ba9ba4Schristos     & ifmt_addui, { 0x19000000 }
396a1ba9ba4Schristos   },
397a1ba9ba4Schristos /* xnor $frdrrr,$frsr1,$frsr2 */
398a1ba9ba4Schristos   {
399a1ba9ba4Schristos     { 0, 0, 0, 0 },
400a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
401a1ba9ba4Schristos     & ifmt_add, { 0x1a000000 }
402a1ba9ba4Schristos   },
403a1ba9ba4Schristos /* xnori $frdr,$frsr1,#$imm16z */
404a1ba9ba4Schristos   {
405a1ba9ba4Schristos     { 0, 0, 0, 0 },
406a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16Z), 0 } },
407a1ba9ba4Schristos     & ifmt_addui, { 0x1b000000 }
408a1ba9ba4Schristos   },
409a1ba9ba4Schristos /* ldui $frdr,#$imm16z */
410a1ba9ba4Schristos   {
411a1ba9ba4Schristos     { 0, 0, 0, 0 },
412a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', '#', OP (IMM16Z), 0 } },
413a1ba9ba4Schristos     & ifmt_ldui, { 0x1d000000 }
414a1ba9ba4Schristos   },
415a1ba9ba4Schristos /* lsl $frdrrr,$frsr1,$frsr2 */
416a1ba9ba4Schristos   {
417a1ba9ba4Schristos     { 0, 0, 0, 0 },
418a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
419a1ba9ba4Schristos     & ifmt_add, { 0x20000000 }
420a1ba9ba4Schristos   },
421a1ba9ba4Schristos /* lsli $frdr,$frsr1,#$imm16 */
422a1ba9ba4Schristos   {
423a1ba9ba4Schristos     { 0, 0, 0, 0 },
424a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16), 0 } },
425a1ba9ba4Schristos     & ifmt_addi, { 0x21000000 }
426a1ba9ba4Schristos   },
427a1ba9ba4Schristos /* lsr $frdrrr,$frsr1,$frsr2 */
428a1ba9ba4Schristos   {
429a1ba9ba4Schristos     { 0, 0, 0, 0 },
430a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
431a1ba9ba4Schristos     & ifmt_add, { 0x22000000 }
432a1ba9ba4Schristos   },
433a1ba9ba4Schristos /* lsri $frdr,$frsr1,#$imm16 */
434a1ba9ba4Schristos   {
435a1ba9ba4Schristos     { 0, 0, 0, 0 },
436a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16), 0 } },
437a1ba9ba4Schristos     & ifmt_addi, { 0x23000000 }
438a1ba9ba4Schristos   },
439a1ba9ba4Schristos /* asr $frdrrr,$frsr1,$frsr2 */
440a1ba9ba4Schristos   {
441a1ba9ba4Schristos     { 0, 0, 0, 0 },
442a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), ',', OP (FRSR2), 0 } },
443a1ba9ba4Schristos     & ifmt_add, { 0x24000000 }
444a1ba9ba4Schristos   },
445a1ba9ba4Schristos /* asri $frdr,$frsr1,#$imm16 */
446a1ba9ba4Schristos   {
447a1ba9ba4Schristos     { 0, 0, 0, 0 },
448a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16), 0 } },
449a1ba9ba4Schristos     & ifmt_addi, { 0x25000000 }
450a1ba9ba4Schristos   },
451a1ba9ba4Schristos /* brlt $frsr1,$frsr2,$imm16o */
452a1ba9ba4Schristos   {
453a1ba9ba4Schristos     { 0, 0, 0, 0 },
454a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', OP (IMM16O), 0 } },
455a1ba9ba4Schristos     & ifmt_brlt, { 0x31000000 }
456a1ba9ba4Schristos   },
457a1ba9ba4Schristos /* brle $frsr1,$frsr2,$imm16o */
458a1ba9ba4Schristos   {
459a1ba9ba4Schristos     { 0, 0, 0, 0 },
460a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', OP (IMM16O), 0 } },
461a1ba9ba4Schristos     & ifmt_brlt, { 0x33000000 }
462a1ba9ba4Schristos   },
463a1ba9ba4Schristos /* breq $frsr1,$frsr2,$imm16o */
464a1ba9ba4Schristos   {
465a1ba9ba4Schristos     { 0, 0, 0, 0 },
466a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', OP (IMM16O), 0 } },
467a1ba9ba4Schristos     & ifmt_brlt, { 0x35000000 }
468a1ba9ba4Schristos   },
469a1ba9ba4Schristos /* brne $frsr1,$frsr2,$imm16o */
470a1ba9ba4Schristos   {
471a1ba9ba4Schristos     { 0, 0, 0, 0 },
472a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', OP (IMM16O), 0 } },
473a1ba9ba4Schristos     & ifmt_brlt, { 0x3b000000 }
474a1ba9ba4Schristos   },
475a1ba9ba4Schristos /* jmp $imm16o */
476a1ba9ba4Schristos   {
477a1ba9ba4Schristos     { 0, 0, 0, 0 },
478a1ba9ba4Schristos     { { MNEM, ' ', OP (IMM16O), 0 } },
479a1ba9ba4Schristos     & ifmt_jmp, { 0x37000000 }
480a1ba9ba4Schristos   },
481a1ba9ba4Schristos /* jal $frdrrr,$frsr1 */
482a1ba9ba4Schristos   {
483a1ba9ba4Schristos     { 0, 0, 0, 0 },
484a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', OP (FRSR1), 0 } },
485a1ba9ba4Schristos     & ifmt_jal, { 0x38000000 }
486a1ba9ba4Schristos   },
487a1ba9ba4Schristos /* dbnz $frsr1,$imm16o */
488a1ba9ba4Schristos   {
489a1ba9ba4Schristos     { 0, 0, 0, 0 },
490a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (IMM16O), 0 } },
491a1ba9ba4Schristos     & ifmt_dbnz, { 0x3d000000 }
492a1ba9ba4Schristos   },
493a1ba9ba4Schristos /* ei */
494a1ba9ba4Schristos   {
495a1ba9ba4Schristos     { 0, 0, 0, 0 },
496a1ba9ba4Schristos     { { MNEM, 0 } },
497a1ba9ba4Schristos     & ifmt_ei, { 0x60000000 }
498a1ba9ba4Schristos   },
499a1ba9ba4Schristos /* di */
500a1ba9ba4Schristos   {
501a1ba9ba4Schristos     { 0, 0, 0, 0 },
502a1ba9ba4Schristos     { { MNEM, 0 } },
503a1ba9ba4Schristos     & ifmt_ei, { 0x62000000 }
504a1ba9ba4Schristos   },
505a1ba9ba4Schristos /* si $frdrrr */
506a1ba9ba4Schristos   {
507a1ba9ba4Schristos     { 0, 0, 0, 0 },
508a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), 0 } },
509a1ba9ba4Schristos     & ifmt_si, { 0x64000000 }
510a1ba9ba4Schristos   },
511a1ba9ba4Schristos /* reti $frsr1 */
512a1ba9ba4Schristos   {
513a1ba9ba4Schristos     { 0, 0, 0, 0 },
514a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), 0 } },
515a1ba9ba4Schristos     & ifmt_reti, { 0x66000000 }
516a1ba9ba4Schristos   },
517a1ba9ba4Schristos /* ldw $frdr,$frsr1,#$imm16 */
518a1ba9ba4Schristos   {
519a1ba9ba4Schristos     { 0, 0, 0, 0 },
520a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDR), ',', OP (FRSR1), ',', '#', OP (IMM16), 0 } },
521a1ba9ba4Schristos     & ifmt_addi, { 0x41000000 }
522a1ba9ba4Schristos   },
523a1ba9ba4Schristos /* stw $frsr2,$frsr1,#$imm16 */
524a1ba9ba4Schristos   {
525a1ba9ba4Schristos     { 0, 0, 0, 0 },
526a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR2), ',', OP (FRSR1), ',', '#', OP (IMM16), 0 } },
527a1ba9ba4Schristos     & ifmt_stw, { 0x43000000 }
528a1ba9ba4Schristos   },
529a1ba9ba4Schristos /* break */
530a1ba9ba4Schristos   {
531a1ba9ba4Schristos     { 0, 0, 0, 0 },
532a1ba9ba4Schristos     { { MNEM, 0 } },
533a1ba9ba4Schristos     & ifmt_nop, { 0x68000000 }
534a1ba9ba4Schristos   },
535a1ba9ba4Schristos /* iflush */
536a1ba9ba4Schristos   {
537a1ba9ba4Schristos     { 0, 0, 0, 0 },
538a1ba9ba4Schristos     { { MNEM, 0 } },
539a1ba9ba4Schristos     & ifmt_nop, { 0x6a000000 }
540a1ba9ba4Schristos   },
541a1ba9ba4Schristos /* ldctxt $frsr1,$frsr2,#$rc,#$rcnum,#$contnum */
542a1ba9ba4Schristos   {
543a1ba9ba4Schristos     { 0, 0, 0, 0 },
544a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', '#', OP (RC), ',', '#', OP (RCNUM), ',', '#', OP (CONTNUM), 0 } },
545a1ba9ba4Schristos     & ifmt_ldctxt, { 0x80000000 }
546a1ba9ba4Schristos   },
547a1ba9ba4Schristos /* ldfb $frsr1,$frsr2,#$imm16z */
548a1ba9ba4Schristos   {
549a1ba9ba4Schristos     { 0, 0, 0, 0 },
550a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', '#', OP (IMM16Z), 0 } },
551a1ba9ba4Schristos     & ifmt_ldfb, { 0x84000000 }
552a1ba9ba4Schristos   },
553a1ba9ba4Schristos /* stfb $frsr1,$frsr2,#$imm16z */
554a1ba9ba4Schristos   {
555a1ba9ba4Schristos     { 0, 0, 0, 0 },
556a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', '#', OP (IMM16Z), 0 } },
557a1ba9ba4Schristos     & ifmt_ldfb, { 0x88000000 }
558a1ba9ba4Schristos   },
559a1ba9ba4Schristos /* fbcb $frsr1,#$rbbc,#$ball,#$brc,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp */
560a1ba9ba4Schristos   {
561a1ba9ba4Schristos     { 0, 0, 0, 0 },
562a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', '#', OP (BALL), ',', '#', OP (BRC), ',', '#', OP (RC1), ',', '#', OP (CBRB), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
563a1ba9ba4Schristos     & ifmt_fbcb, { 0x8c000000 }
564a1ba9ba4Schristos   },
565a1ba9ba4Schristos /* mfbcb $frsr1,#$rbbc,$frsr2,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp */
566a1ba9ba4Schristos   {
567a1ba9ba4Schristos     { 0, 0, 0, 0 },
568a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', OP (FRSR2), ',', '#', OP (RC1), ',', '#', OP (CBRB), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
569a1ba9ba4Schristos     & ifmt_mfbcb, { 0x90000000 }
570a1ba9ba4Schristos   },
571a1ba9ba4Schristos /* fbcci $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp */
572a1ba9ba4Schristos   {
573a1ba9ba4Schristos     { 0, 0, 0, 0 },
574a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', '#', OP (BALL), ',', '#', OP (BRC), ',', '#', OP (FBDISP), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
575a1ba9ba4Schristos     & ifmt_fbcci, { 0x94000000 }
576a1ba9ba4Schristos   },
577a1ba9ba4Schristos /* fbrci $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp */
578a1ba9ba4Schristos   {
579a1ba9ba4Schristos     { 0, 0, 0, 0 },
580a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', '#', OP (BALL), ',', '#', OP (BRC), ',', '#', OP (FBDISP), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
581a1ba9ba4Schristos     & ifmt_fbcci, { 0x98000000 }
582a1ba9ba4Schristos   },
583a1ba9ba4Schristos /* fbcri $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp */
584a1ba9ba4Schristos   {
585a1ba9ba4Schristos     { 0, 0, 0, 0 },
586a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', '#', OP (BALL), ',', '#', OP (BRC), ',', '#', OP (FBDISP), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
587a1ba9ba4Schristos     & ifmt_fbcci, { 0x9c000000 }
588a1ba9ba4Schristos   },
589a1ba9ba4Schristos /* fbrri $frsr1,#$rbbc,#$ball,#$brc,#$fbdisp,#$cell,#$dup,#$ctxdisp */
590a1ba9ba4Schristos   {
591a1ba9ba4Schristos     { 0, 0, 0, 0 },
592a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', '#', OP (BALL), ',', '#', OP (BRC), ',', '#', OP (FBDISP), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
593a1ba9ba4Schristos     & ifmt_fbcci, { 0xa0000000 }
594a1ba9ba4Schristos   },
595a1ba9ba4Schristos /* mfbcci $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp */
596a1ba9ba4Schristos   {
597a1ba9ba4Schristos     { 0, 0, 0, 0 },
598a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', OP (FRSR2), ',', '#', OP (FBDISP), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
599a1ba9ba4Schristos     & ifmt_mfbcci, { 0xa4000000 }
600a1ba9ba4Schristos   },
601a1ba9ba4Schristos /* mfbrci $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp */
602a1ba9ba4Schristos   {
603a1ba9ba4Schristos     { 0, 0, 0, 0 },
604a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', OP (FRSR2), ',', '#', OP (FBDISP), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
605a1ba9ba4Schristos     & ifmt_mfbcci, { 0xa8000000 }
606a1ba9ba4Schristos   },
607a1ba9ba4Schristos /* mfbcri $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp */
608a1ba9ba4Schristos   {
609a1ba9ba4Schristos     { 0, 0, 0, 0 },
610a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', OP (FRSR2), ',', '#', OP (FBDISP), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
611a1ba9ba4Schristos     & ifmt_mfbcci, { 0xac000000 }
612a1ba9ba4Schristos   },
613a1ba9ba4Schristos /* mfbrri $frsr1,#$rbbc,$frsr2,#$fbdisp,#$cell,#$dup,#$ctxdisp */
614a1ba9ba4Schristos   {
615a1ba9ba4Schristos     { 0, 0, 0, 0 },
616a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', OP (FRSR2), ',', '#', OP (FBDISP), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
617a1ba9ba4Schristos     & ifmt_mfbcci, { 0xb0000000 }
618a1ba9ba4Schristos   },
619a1ba9ba4Schristos /* fbcbdr $frsr1,#$rbbc,$frsr2,#$ball2,#$brc2,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp */
620a1ba9ba4Schristos   {
621a1ba9ba4Schristos     { 0, 0, 0, 0 },
622a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', OP (FRSR2), ',', '#', OP (BALL2), ',', '#', OP (BRC2), ',', '#', OP (RC1), ',', '#', OP (CBRB), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
623a1ba9ba4Schristos     & ifmt_fbcbdr, { 0xb4000000 }
624a1ba9ba4Schristos   },
625a1ba9ba4Schristos /* rcfbcb #$rbbc,#$type,#$ball,#$brc,#$rownum,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp */
626a1ba9ba4Schristos   {
627a1ba9ba4Schristos     { 0, 0, 0, 0 },
628a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (RBBC), ',', '#', OP (TYPE), ',', '#', OP (BALL), ',', '#', OP (BRC), ',', '#', OP (ROWNUM), ',', '#', OP (RC1), ',', '#', OP (CBRB), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
629a1ba9ba4Schristos     & ifmt_rcfbcb, { 0xb8000000 }
630a1ba9ba4Schristos   },
631a1ba9ba4Schristos /* mrcfbcb $frsr2,#$rbbc,#$type,#$rownum,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp */
632a1ba9ba4Schristos   {
633a1ba9ba4Schristos     { 0, 0, 0, 0 },
634a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR2), ',', '#', OP (RBBC), ',', '#', OP (TYPE), ',', '#', OP (ROWNUM), ',', '#', OP (RC1), ',', '#', OP (CBRB), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
635a1ba9ba4Schristos     & ifmt_mrcfbcb, { 0xbc000000 }
636a1ba9ba4Schristos   },
637a1ba9ba4Schristos /* cbcast #$mask,#$rc2,#$ctxdisp */
638a1ba9ba4Schristos   {
639a1ba9ba4Schristos     { 0, 0, 0, 0 },
640a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (MASK), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } },
641a1ba9ba4Schristos     & ifmt_cbcast, { 0xc0000000 }
642a1ba9ba4Schristos   },
643a1ba9ba4Schristos /* dupcbcast #$mask,#$cell,#$rc2,#$ctxdisp */
644a1ba9ba4Schristos   {
645a1ba9ba4Schristos     { 0, 0, 0, 0 },
646a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (MASK), ',', '#', OP (CELL), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } },
647a1ba9ba4Schristos     & ifmt_dupcbcast, { 0xc4000000 }
648a1ba9ba4Schristos   },
649a1ba9ba4Schristos /* wfbi #$bankaddr,#$rownum1,#$cell,#$dup,#$ctxdisp */
650a1ba9ba4Schristos   {
651a1ba9ba4Schristos     { 0, 0, 0, 0 },
652a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (BANKADDR), ',', '#', OP (ROWNUM1), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
653a1ba9ba4Schristos     & ifmt_wfbi, { 0xc8000000 }
654a1ba9ba4Schristos   },
655a1ba9ba4Schristos /* wfb $frsr1,$frsr2,#$fbdisp,#$rownum2,#$ctxdisp */
656a1ba9ba4Schristos   {
657a1ba9ba4Schristos     { 0, 0, 0, 0 },
658a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', '#', OP (FBDISP), ',', '#', OP (ROWNUM2), ',', '#', OP (CTXDISP), 0 } },
659a1ba9ba4Schristos     & ifmt_wfb, { 0xcc000000 }
660a1ba9ba4Schristos   },
661a1ba9ba4Schristos /* rcrisc $frdrrr,#$rbbc,$frsr1,#$colnum,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp */
662a1ba9ba4Schristos   {
663a1ba9ba4Schristos     { 0, 0, 0, 0 },
664a1ba9ba4Schristos     { { MNEM, ' ', OP (FRDRRR), ',', '#', OP (RBBC), ',', OP (FRSR1), ',', '#', OP (COLNUM), ',', '#', OP (RC1), ',', '#', OP (CBRB), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
665a1ba9ba4Schristos     & ifmt_rcrisc, { 0xd0000000 }
666a1ba9ba4Schristos   },
667a1ba9ba4Schristos /* fbcbinc $frsr1,#$rbbc,#$incamt,#$rc1,#$cbrb,#$cell,#$dup,#$ctxdisp */
668a1ba9ba4Schristos   {
669a1ba9ba4Schristos     { 0, 0, 0, 0 },
670a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RBBC), ',', '#', OP (INCAMT), ',', '#', OP (RC1), ',', '#', OP (CBRB), ',', '#', OP (CELL), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
671a1ba9ba4Schristos     & ifmt_fbcbinc, { 0xd4000000 }
672a1ba9ba4Schristos   },
673a1ba9ba4Schristos /* rcxmode $frsr2,#$rda,#$wr,#$xmode,#$mask1,#$fbdisp,#$rownum2,#$rc2,#$ctxdisp */
674a1ba9ba4Schristos   {
675a1ba9ba4Schristos     { 0, 0, 0, 0 },
676a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR2), ',', '#', OP (RDA), ',', '#', OP (WR), ',', '#', OP (XMODE), ',', '#', OP (MASK1), ',', '#', OP (FBDISP), ',', '#', OP (ROWNUM2), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } },
677a1ba9ba4Schristos     & ifmt_rcxmode, { 0xd8000000 }
678a1ba9ba4Schristos   },
679a1ba9ba4Schristos /* intlvr $frsr1,#$mode,$frsr2,#$id,#$size */
680a1ba9ba4Schristos   {
681a1ba9ba4Schristos     { 0, 0, 0, 0 },
682a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (MODE), ',', OP (FRSR2), ',', '#', OP (ID), ',', '#', OP (SIZE), 0 } },
683a1ba9ba4Schristos     & ifmt_interleaver, { 0xdc000000 }
684a1ba9ba4Schristos   },
685a1ba9ba4Schristos /* wfbinc #$rda,#$wr,#$fbincr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp */
686a1ba9ba4Schristos   {
687a1ba9ba4Schristos     { 0, 0, 0, 0 },
688a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (RDA), ',', '#', OP (WR), ',', '#', OP (FBINCR), ',', '#', OP (BALL), ',', '#', OP (COLNUM), ',', '#', OP (LENGTH), ',', '#', OP (ROWNUM1), ',', '#', OP (ROWNUM2), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
689a1ba9ba4Schristos     & ifmt_wfbinc, { 0xe0000000 }
690a1ba9ba4Schristos   },
691a1ba9ba4Schristos /* mwfbinc $frsr2,#$rda,#$wr,#$fbincr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp */
692a1ba9ba4Schristos   {
693a1ba9ba4Schristos     { 0, 0, 0, 0 },
694a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR2), ',', '#', OP (RDA), ',', '#', OP (WR), ',', '#', OP (FBINCR), ',', '#', OP (LENGTH), ',', '#', OP (ROWNUM1), ',', '#', OP (ROWNUM2), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
695a1ba9ba4Schristos     & ifmt_mwfbinc, { 0xe4000000 }
696a1ba9ba4Schristos   },
697a1ba9ba4Schristos /* wfbincr $frsr1,#$rda,#$wr,#$ball,#$colnum,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp */
698a1ba9ba4Schristos   {
699a1ba9ba4Schristos     { 0, 0, 0, 0 },
700a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (RDA), ',', '#', OP (WR), ',', '#', OP (BALL), ',', '#', OP (COLNUM), ',', '#', OP (LENGTH), ',', '#', OP (ROWNUM1), ',', '#', OP (ROWNUM2), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
701a1ba9ba4Schristos     & ifmt_wfbincr, { 0xe8000000 }
702a1ba9ba4Schristos   },
703a1ba9ba4Schristos /* mwfbincr $frsr1,$frsr2,#$rda,#$wr,#$length,#$rownum1,#$rownum2,#$dup,#$ctxdisp */
704a1ba9ba4Schristos   {
705a1ba9ba4Schristos     { 0, 0, 0, 0 },
706a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', '#', OP (RDA), ',', '#', OP (WR), ',', '#', OP (LENGTH), ',', '#', OP (ROWNUM1), ',', '#', OP (ROWNUM2), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
707a1ba9ba4Schristos     & ifmt_mwfbincr, { 0xec000000 }
708a1ba9ba4Schristos   },
709a1ba9ba4Schristos /* fbcbincs #$perm,#$a23,#$cr,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp */
710a1ba9ba4Schristos   {
711a1ba9ba4Schristos     { 0, 0, 0, 0 },
712a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (PERM), ',', '#', OP (A23), ',', '#', OP (CR), ',', '#', OP (CBS), ',', '#', OP (INCR), ',', '#', OP (CCB), ',', '#', OP (CDB), ',', '#', OP (ROWNUM2), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
713a1ba9ba4Schristos     & ifmt_fbcbincs, { 0xf0000000 }
714a1ba9ba4Schristos   },
715a1ba9ba4Schristos /* mfbcbincs $frsr1,#$perm,#$cbs,#$incr,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp */
716a1ba9ba4Schristos   {
717a1ba9ba4Schristos     { 0, 0, 0, 0 },
718a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (PERM), ',', '#', OP (CBS), ',', '#', OP (INCR), ',', '#', OP (CCB), ',', '#', OP (CDB), ',', '#', OP (ROWNUM2), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
719a1ba9ba4Schristos     & ifmt_mfbcbincs, { 0xf4000000 }
720a1ba9ba4Schristos   },
721a1ba9ba4Schristos /* fbcbincrs $frsr1,#$perm,#$ball,#$colnum,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp */
722a1ba9ba4Schristos   {
723a1ba9ba4Schristos     { 0, 0, 0, 0 },
724a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', '#', OP (PERM), ',', '#', OP (BALL), ',', '#', OP (COLNUM), ',', '#', OP (CBX), ',', '#', OP (CCB), ',', '#', OP (CDB), ',', '#', OP (ROWNUM2), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
725a1ba9ba4Schristos     & ifmt_fbcbincrs, { 0xf8000000 }
726a1ba9ba4Schristos   },
727a1ba9ba4Schristos /* mfbcbincrs $frsr1,$frsr2,#$perm,#$cbx,#$ccb,#$cdb,#$rownum2,#$dup,#$ctxdisp */
728a1ba9ba4Schristos   {
729a1ba9ba4Schristos     { 0, 0, 0, 0 },
730a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (FRSR2), ',', '#', OP (PERM), ',', '#', OP (CBX), ',', '#', OP (CCB), ',', '#', OP (CDB), ',', '#', OP (ROWNUM2), ',', '#', OP (DUP), ',', '#', OP (CTXDISP), 0 } },
731a1ba9ba4Schristos     & ifmt_mfbcbincrs, { 0xfc000000 }
732a1ba9ba4Schristos   },
733a1ba9ba4Schristos /* loop $frsr1,$loopsize */
734a1ba9ba4Schristos   {
735a1ba9ba4Schristos     { 0, 0, 0, 0 },
736a1ba9ba4Schristos     { { MNEM, ' ', OP (FRSR1), ',', OP (LOOPSIZE), 0 } },
737a1ba9ba4Schristos     & ifmt_loop, { 0x3e000000 }
738a1ba9ba4Schristos   },
739a1ba9ba4Schristos /* loopi #$imm16l,$loopsize */
740a1ba9ba4Schristos   {
741a1ba9ba4Schristos     { 0, 0, 0, 0 },
742a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (IMM16L), ',', OP (LOOPSIZE), 0 } },
743a1ba9ba4Schristos     & ifmt_loopi, { 0x3f000000 }
744a1ba9ba4Schristos   },
745a1ba9ba4Schristos /* dfbc #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp */
746a1ba9ba4Schristos   {
747a1ba9ba4Schristos     { 0, 0, 0, 0 },
748a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (CB1SEL), ',', '#', OP (CB2SEL), ',', '#', OP (CB1INCR), ',', '#', OP (CB2INCR), ',', '#', OP (RC3), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } },
749a1ba9ba4Schristos     & ifmt_dfbc, { 0x80000000 }
750a1ba9ba4Schristos   },
751a1ba9ba4Schristos /* dwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc2,#$ctxdisp */
752a1ba9ba4Schristos   {
753a1ba9ba4Schristos     { 0, 0, 0, 0 },
754a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (CB1SEL), ',', '#', OP (CB2SEL), ',', '#', OP (CB1INCR), ',', '#', OP (CB2INCR), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } },
755a1ba9ba4Schristos     & ifmt_dwfb, { 0x84000000 }
756a1ba9ba4Schristos   },
757a1ba9ba4Schristos /* fbwfb #$cb1sel,#$cb2sel,#$cb1incr,#$cb2incr,#$rc3,#$rc2,#$ctxdisp */
758a1ba9ba4Schristos   {
759a1ba9ba4Schristos     { 0, 0, 0, 0 },
760a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (CB1SEL), ',', '#', OP (CB2SEL), ',', '#', OP (CB1INCR), ',', '#', OP (CB2INCR), ',', '#', OP (RC3), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } },
761a1ba9ba4Schristos     & ifmt_dfbc, { 0x88000000 }
762a1ba9ba4Schristos   },
763a1ba9ba4Schristos /* dfbr #$cb1sel,#$cb2sel,$frsr2,#$length,#$rownum1,#$rownum2,#$rc2,#$ctxdisp */
764a1ba9ba4Schristos   {
765a1ba9ba4Schristos     { 0, 0, 0, 0 },
766a1ba9ba4Schristos     { { MNEM, ' ', '#', OP (CB1SEL), ',', '#', OP (CB2SEL), ',', OP (FRSR2), ',', '#', OP (LENGTH), ',', '#', OP (ROWNUM1), ',', '#', OP (ROWNUM2), ',', '#', OP (RC2), ',', '#', OP (CTXDISP), 0 } },
767a1ba9ba4Schristos     & ifmt_dfbr, { 0x8c000000 }
768a1ba9ba4Schristos   },
769a1ba9ba4Schristos };
770a1ba9ba4Schristos 
771a1ba9ba4Schristos #undef A
772a1ba9ba4Schristos #undef OPERAND
773a1ba9ba4Schristos #undef MNEM
774a1ba9ba4Schristos #undef OP
775a1ba9ba4Schristos 
776a1ba9ba4Schristos /* Formats for ALIAS macro-insns.  */
777a1ba9ba4Schristos 
778a1ba9ba4Schristos #define F(f) & mt_cgen_ifld_table[MT_##f]
779a1ba9ba4Schristos #undef F
780a1ba9ba4Schristos 
781a1ba9ba4Schristos /* Each non-simple macro entry points to an array of expansion possibilities.  */
782a1ba9ba4Schristos 
783a1ba9ba4Schristos #define A(a) (1 << CGEN_INSN_##a)
784a1ba9ba4Schristos #define OPERAND(op) MT_OPERAND_##op
785a1ba9ba4Schristos #define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */
786a1ba9ba4Schristos #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
787a1ba9ba4Schristos 
788a1ba9ba4Schristos /* The macro instruction table.  */
789a1ba9ba4Schristos 
790a1ba9ba4Schristos static const CGEN_IBASE mt_cgen_macro_insn_table[] =
791a1ba9ba4Schristos {
792a1ba9ba4Schristos };
793a1ba9ba4Schristos 
794a1ba9ba4Schristos /* The macro instruction opcode table.  */
795a1ba9ba4Schristos 
796a1ba9ba4Schristos static const CGEN_OPCODE mt_cgen_macro_insn_opcode_table[] =
797a1ba9ba4Schristos {
798a1ba9ba4Schristos };
799a1ba9ba4Schristos 
800a1ba9ba4Schristos #undef A
801a1ba9ba4Schristos #undef OPERAND
802a1ba9ba4Schristos #undef MNEM
803a1ba9ba4Schristos #undef OP
804a1ba9ba4Schristos 
805a1ba9ba4Schristos #ifndef CGEN_ASM_HASH_P
806a1ba9ba4Schristos #define CGEN_ASM_HASH_P(insn) 1
807a1ba9ba4Schristos #endif
808a1ba9ba4Schristos 
809a1ba9ba4Schristos #ifndef CGEN_DIS_HASH_P
810a1ba9ba4Schristos #define CGEN_DIS_HASH_P(insn) 1
811a1ba9ba4Schristos #endif
812a1ba9ba4Schristos 
813a1ba9ba4Schristos /* Return non-zero if INSN is to be added to the hash table.
814a1ba9ba4Schristos    Targets are free to override CGEN_{ASM,DIS}_HASH_P in the .opc file.  */
815a1ba9ba4Schristos 
816a1ba9ba4Schristos static int
asm_hash_insn_p(const CGEN_INSN * insn ATTRIBUTE_UNUSED)817b2396a7bSchristos asm_hash_insn_p (const CGEN_INSN *insn ATTRIBUTE_UNUSED)
818a1ba9ba4Schristos {
819a1ba9ba4Schristos   return CGEN_ASM_HASH_P (insn);
820a1ba9ba4Schristos }
821a1ba9ba4Schristos 
822a1ba9ba4Schristos static int
dis_hash_insn_p(const CGEN_INSN * insn)823b2396a7bSchristos dis_hash_insn_p (const CGEN_INSN *insn)
824a1ba9ba4Schristos {
825a1ba9ba4Schristos   /* If building the hash table and the NO-DIS attribute is present,
826a1ba9ba4Schristos      ignore.  */
827a1ba9ba4Schristos   if (CGEN_INSN_ATTR_VALUE (insn, CGEN_INSN_NO_DIS))
828a1ba9ba4Schristos     return 0;
829a1ba9ba4Schristos   return CGEN_DIS_HASH_P (insn);
830a1ba9ba4Schristos }
831a1ba9ba4Schristos 
832a1ba9ba4Schristos #ifndef CGEN_ASM_HASH
833a1ba9ba4Schristos #define CGEN_ASM_HASH_SIZE 127
834a1ba9ba4Schristos #ifdef CGEN_MNEMONIC_OPERANDS
835a1ba9ba4Schristos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE)
836a1ba9ba4Schristos #else
837a1ba9ba4Schristos #define CGEN_ASM_HASH(mnem) (*(unsigned char *) (mnem) % CGEN_ASM_HASH_SIZE) /*FIXME*/
838a1ba9ba4Schristos #endif
839a1ba9ba4Schristos #endif
840a1ba9ba4Schristos 
841a1ba9ba4Schristos /* It doesn't make much sense to provide a default here,
842a1ba9ba4Schristos    but while this is under development we do.
843a1ba9ba4Schristos    BUFFER is a pointer to the bytes of the insn, target order.
844a1ba9ba4Schristos    VALUE is the first base_insn_bitsize bits as an int in host order.  */
845a1ba9ba4Schristos 
846a1ba9ba4Schristos #ifndef CGEN_DIS_HASH
847a1ba9ba4Schristos #define CGEN_DIS_HASH_SIZE 256
848a1ba9ba4Schristos #define CGEN_DIS_HASH(buf, value) (*(unsigned char *) (buf))
849a1ba9ba4Schristos #endif
850a1ba9ba4Schristos 
851a1ba9ba4Schristos /* The result is the hash value of the insn.
852a1ba9ba4Schristos    Targets are free to override CGEN_{ASM,DIS}_HASH in the .opc file.  */
853a1ba9ba4Schristos 
854a1ba9ba4Schristos static unsigned int
asm_hash_insn(const char * mnem)855b2396a7bSchristos asm_hash_insn (const char *mnem)
856a1ba9ba4Schristos {
857a1ba9ba4Schristos   return CGEN_ASM_HASH (mnem);
858a1ba9ba4Schristos }
859a1ba9ba4Schristos 
860a1ba9ba4Schristos /* BUF is a pointer to the bytes of the insn, target order.
861a1ba9ba4Schristos    VALUE is the first base_insn_bitsize bits as an int in host order.  */
862a1ba9ba4Schristos 
863a1ba9ba4Schristos static unsigned int
dis_hash_insn(const char * buf ATTRIBUTE_UNUSED,CGEN_INSN_INT value ATTRIBUTE_UNUSED)864b2396a7bSchristos dis_hash_insn (const char *buf ATTRIBUTE_UNUSED,
865b2396a7bSchristos 		     CGEN_INSN_INT value ATTRIBUTE_UNUSED)
866a1ba9ba4Schristos {
867a1ba9ba4Schristos   return CGEN_DIS_HASH (buf, value);
868a1ba9ba4Schristos }
869a1ba9ba4Schristos 
870a1ba9ba4Schristos /* Set the recorded length of the insn in the CGEN_FIELDS struct.  */
871a1ba9ba4Schristos 
872a1ba9ba4Schristos static void
set_fields_bitsize(CGEN_FIELDS * fields,int size)873a1ba9ba4Schristos set_fields_bitsize (CGEN_FIELDS *fields, int size)
874a1ba9ba4Schristos {
875a1ba9ba4Schristos   CGEN_FIELDS_BITSIZE (fields) = size;
876a1ba9ba4Schristos }
877a1ba9ba4Schristos 
878a1ba9ba4Schristos /* Function to call before using the operand instance table.
879a1ba9ba4Schristos    This plugs the opcode entries and macro instructions into the cpu table.  */
880a1ba9ba4Schristos 
881a1ba9ba4Schristos void
mt_cgen_init_opcode_table(CGEN_CPU_DESC cd)882a1ba9ba4Schristos mt_cgen_init_opcode_table (CGEN_CPU_DESC cd)
883a1ba9ba4Schristos {
884a1ba9ba4Schristos   int i;
885a1ba9ba4Schristos   int num_macros = (sizeof (mt_cgen_macro_insn_table) /
886a1ba9ba4Schristos 		    sizeof (mt_cgen_macro_insn_table[0]));
887a1ba9ba4Schristos   const CGEN_IBASE *ib = & mt_cgen_macro_insn_table[0];
888a1ba9ba4Schristos   const CGEN_OPCODE *oc = & mt_cgen_macro_insn_opcode_table[0];
889a1ba9ba4Schristos   CGEN_INSN *insns = xmalloc (num_macros * sizeof (CGEN_INSN));
890a1ba9ba4Schristos 
891a1ba9ba4Schristos   /* This test has been added to avoid a warning generated
892a1ba9ba4Schristos      if memset is called with a third argument of value zero.  */
893a1ba9ba4Schristos   if (num_macros >= 1)
894a1ba9ba4Schristos     memset (insns, 0, num_macros * sizeof (CGEN_INSN));
895a1ba9ba4Schristos   for (i = 0; i < num_macros; ++i)
896a1ba9ba4Schristos     {
897a1ba9ba4Schristos       insns[i].base = &ib[i];
898a1ba9ba4Schristos       insns[i].opcode = &oc[i];
899a1ba9ba4Schristos       mt_cgen_build_insn_regex (& insns[i]);
900a1ba9ba4Schristos     }
901a1ba9ba4Schristos   cd->macro_insn_table.init_entries = insns;
902a1ba9ba4Schristos   cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE);
903a1ba9ba4Schristos   cd->macro_insn_table.num_init_entries = num_macros;
904a1ba9ba4Schristos 
905a1ba9ba4Schristos   oc = & mt_cgen_insn_opcode_table[0];
906a1ba9ba4Schristos   insns = (CGEN_INSN *) cd->insn_table.init_entries;
907a1ba9ba4Schristos   for (i = 0; i < MAX_INSNS; ++i)
908a1ba9ba4Schristos     {
909a1ba9ba4Schristos       insns[i].opcode = &oc[i];
910a1ba9ba4Schristos       mt_cgen_build_insn_regex (& insns[i]);
911a1ba9ba4Schristos     }
912a1ba9ba4Schristos 
913a1ba9ba4Schristos   cd->sizeof_fields = sizeof (CGEN_FIELDS);
914a1ba9ba4Schristos   cd->set_fields_bitsize = set_fields_bitsize;
915a1ba9ba4Schristos 
916a1ba9ba4Schristos   cd->asm_hash_p = asm_hash_insn_p;
917a1ba9ba4Schristos   cd->asm_hash = asm_hash_insn;
918a1ba9ba4Schristos   cd->asm_hash_size = CGEN_ASM_HASH_SIZE;
919a1ba9ba4Schristos 
920a1ba9ba4Schristos   cd->dis_hash_p = dis_hash_insn_p;
921a1ba9ba4Schristos   cd->dis_hash = dis_hash_insn;
922a1ba9ba4Schristos   cd->dis_hash_size = CGEN_DIS_HASH_SIZE;
923a1ba9ba4Schristos }
924