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