1f7cc78ecSespie /* i370-opc.c -- Instruction 370 (ESA/390) architecture opcode list
2*cf2f2c56Smiod Copyright 1994, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
3f7cc78ecSespie PowerPC version written by Ian Lance Taylor, Cygnus Support
4f7cc78ecSespie Rewritten for i370 ESA/390 support by Linas Vepstas <linas@linas.org> 1998, 1999
5f7cc78ecSespie
6f7cc78ecSespie This file is part of GDB, GAS, and the GNU binutils.
7f7cc78ecSespie
8f7cc78ecSespie GDB, GAS, and the GNU binutils are free software; you can redistribute
9f7cc78ecSespie them and/or modify them under the terms of the GNU General Public
10f7cc78ecSespie License as published by the Free Software Foundation; either version
11f7cc78ecSespie 2, or (at your option) any later version.
12f7cc78ecSespie
13f7cc78ecSespie GDB, GAS, and the GNU binutils are distributed in the hope that they
14f7cc78ecSespie will be useful, but WITHOUT ANY WARRANTY; without even the implied
15f7cc78ecSespie warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
16f7cc78ecSespie the GNU General Public License for more details.
17f7cc78ecSespie
18f7cc78ecSespie You should have received a copy of the GNU General Public License
19f7cc78ecSespie along with this file; see the file COPYING. If not, write to the Free
20f7cc78ecSespie Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21f7cc78ecSespie 02111-1307, USA. */
22f7cc78ecSespie
23f7cc78ecSespie #include <stdio.h>
24f7cc78ecSespie #include "sysdep.h"
25f7cc78ecSespie #include "opcode/i370.h"
26f7cc78ecSespie
27f7cc78ecSespie /* This file holds the i370 opcode table. The opcode table
28f7cc78ecSespie includes almost all of the extended instruction mnemonics. This
29f7cc78ecSespie permits the disassembler to use them, and simplifies the assembler
30f7cc78ecSespie logic, at the cost of increasing the table size. The table is
31f7cc78ecSespie strictly constant data, so the compiler should be able to put it in
32f7cc78ecSespie the .text section.
33f7cc78ecSespie
34f7cc78ecSespie This file also holds the operand table. All knowledge about
35f7cc78ecSespie inserting operands into instructions and vice-versa is kept in this
36f7cc78ecSespie file. */
37f7cc78ecSespie
38f7cc78ecSespie /* Local insertion and extraction functions. */
39*cf2f2c56Smiod static i370_insn_t insert_ss_b2 (i370_insn_t, long, const char **);
40*cf2f2c56Smiod static i370_insn_t insert_ss_d2 (i370_insn_t, long, const char **);
41*cf2f2c56Smiod static i370_insn_t insert_rxf_r3 (i370_insn_t, long, const char **);
42*cf2f2c56Smiod static long extract_ss_b2 (i370_insn_t, int *);
43*cf2f2c56Smiod static long extract_ss_d2 (i370_insn_t, int *);
44*cf2f2c56Smiod static long extract_rxf_r3 (i370_insn_t, int *);
45f7cc78ecSespie
46f7cc78ecSespie
47f7cc78ecSespie /* The operands table.
48f7cc78ecSespie The fields are bits, shift, insert, extract, flags, name.
49f7cc78ecSespie The types:
50f7cc78ecSespie I370_OPERAND_GPR register, must name a register, must be present
51f7cc78ecSespie I370_OPERAND_RELATIVE displacement or legnth field, must be present
52f7cc78ecSespie I370_OPERAND_BASE base register; if present, must name a register
53f7cc78ecSespie if absent, should take value of zero
54f7cc78ecSespie I370_OPERAND_INDEX index register; if present, must name a register
55f7cc78ecSespie if absent, should take value of zero
56f7cc78ecSespie I370_OPERAND_OPTIONAL other optional operand (usuall reg?)
57f7cc78ecSespie */
58f7cc78ecSespie
59f7cc78ecSespie const struct i370_operand i370_operands[] =
60f7cc78ecSespie {
61f7cc78ecSespie /* The zero index is used to indicate the end of the list of
62f7cc78ecSespie operands. */
63f7cc78ecSespie #define UNUSED 0
64f7cc78ecSespie { 0, 0, 0, 0, 0, "unused" },
65f7cc78ecSespie
66f7cc78ecSespie /* The R1 register field in an RR form instruction. */
67f7cc78ecSespie #define RR_R1 (UNUSED + 1)
68f7cc78ecSespie #define RR_R1_MASK (0xf << 4)
69f7cc78ecSespie { 4, 4, 0, 0, I370_OPERAND_GPR, "RR R1" },
70f7cc78ecSespie
71f7cc78ecSespie /* The R2 register field in an RR form instruction. */
72f7cc78ecSespie #define RR_R2 (RR_R1 + 1)
73f7cc78ecSespie #define RR_R2_MASK (0xf)
74f7cc78ecSespie { 4, 0, 0, 0, I370_OPERAND_GPR, "RR R2" },
75f7cc78ecSespie
76f7cc78ecSespie /* The I field in an RR form SVC-style instruction. */
77f7cc78ecSespie #define RR_I (RR_R2 + 1)
78f7cc78ecSespie #define RR_I_MASK (0xff)
79f7cc78ecSespie { 8, 0, 0, 0, I370_OPERAND_RELATIVE, "RR I (svc)" },
80f7cc78ecSespie
81f7cc78ecSespie /* The R1 register field in an RRE form instruction. */
82f7cc78ecSespie #define RRE_R1 (RR_I + 1)
83f7cc78ecSespie #define RRE_R1_MASK (0xf << 4)
84f7cc78ecSespie { 4, 4, 0, 0, I370_OPERAND_GPR, "RRE R1" },
85f7cc78ecSespie
86f7cc78ecSespie /* The R2 register field in an RRE form instruction. */
87f7cc78ecSespie #define RRE_R2 (RRE_R1 + 1)
88f7cc78ecSespie #define RRE_R2_MASK (0xf)
89f7cc78ecSespie { 4, 0, 0, 0, I370_OPERAND_GPR, "RRE R2" },
90f7cc78ecSespie
91f7cc78ecSespie /* The R1 register field in an RRF form instruction. */
92f7cc78ecSespie #define RRF_R1 (RRE_R2 + 1)
93f7cc78ecSespie #define RRF_R1_MASK (0xf << 4)
94f7cc78ecSespie { 4, 4, 0, 0, I370_OPERAND_GPR, "RRF R1" },
95f7cc78ecSespie
96f7cc78ecSespie /* The R2 register field in an RRF form instruction. */
97f7cc78ecSespie #define RRF_R2 (RRF_R1 + 1)
98f7cc78ecSespie #define RRF_R2_MASK (0xf)
99f7cc78ecSespie { 4, 0, 0, 0, I370_OPERAND_GPR, "RRF R2" },
100f7cc78ecSespie
101f7cc78ecSespie /* The R3 register field in an RRF form instruction. */
102f7cc78ecSespie #define RRF_R3 (RRF_R2 + 1)
103f7cc78ecSespie #define RRF_R3_MASK (0xf << 12)
104f7cc78ecSespie { 4, 12, 0, 0, I370_OPERAND_GPR, "RRF R3" },
105f7cc78ecSespie
106f7cc78ecSespie /* The R1 register field in an RX or RS form instruction. */
107f7cc78ecSespie #define RX_R1 (RRF_R3 + 1)
108f7cc78ecSespie #define RX_R1_MASK (0xf << 20)
109f7cc78ecSespie { 4, 20, 0, 0, I370_OPERAND_GPR, "RX R1" },
110f7cc78ecSespie
111f7cc78ecSespie /* The X2 index field in an RX form instruction. */
112f7cc78ecSespie #define RX_X2 (RX_R1 + 1)
113f7cc78ecSespie #define RX_X2_MASK (0xf << 16)
114f7cc78ecSespie { 4, 16, 0, 0, I370_OPERAND_GPR | I370_OPERAND_INDEX, "RX X2"},
115f7cc78ecSespie
116f7cc78ecSespie /* The B2 base field in an RX form instruction. */
117f7cc78ecSespie #define RX_B2 (RX_X2 + 1)
118f7cc78ecSespie #define RX_B2_MASK (0xf << 12)
119f7cc78ecSespie { 4, 12, 0, 0, I370_OPERAND_GPR | I370_OPERAND_BASE, "RX B2"},
120f7cc78ecSespie
121f7cc78ecSespie /* The D2 displacement field in an RX form instruction. */
122f7cc78ecSespie #define RX_D2 (RX_B2 + 1)
123f7cc78ecSespie #define RX_D2_MASK (0xfff)
124f7cc78ecSespie { 12, 0, 0, 0, I370_OPERAND_RELATIVE, "RX D2"},
125f7cc78ecSespie
126f7cc78ecSespie /* The R3 register field in an RXF form instruction. */
127f7cc78ecSespie #define RXF_R3 (RX_D2 + 1)
128f7cc78ecSespie #define RXF_R3_MASK (0xf << 12)
129f7cc78ecSespie { 4, 12, insert_rxf_r3, extract_rxf_r3, I370_OPERAND_GPR, "RXF R3" },
130f7cc78ecSespie
131f7cc78ecSespie /* The D2 displacement field in an RS form instruction. */
132f7cc78ecSespie #define RS_D2 (RXF_R3 + 1)
133f7cc78ecSespie #define RS_D2_MASK (0xfff)
134f7cc78ecSespie { 12, 0, 0, 0, I370_OPERAND_RELATIVE, "RS D2"},
135f7cc78ecSespie
136f7cc78ecSespie /* The R3 register field in an RS form instruction. */
137f7cc78ecSespie #define RS_R3 (RS_D2 + 1)
138f7cc78ecSespie #define RS_R3_MASK (0xf << 16)
139f7cc78ecSespie { 4, 16, 0, 0, I370_OPERAND_GPR, "RS R3" },
140f7cc78ecSespie
141f7cc78ecSespie /* The B2 base field in an RS form instruction. */
142f7cc78ecSespie #define RS_B2 (RS_R3 + 1)
143f7cc78ecSespie #define RS_B2_MASK (0xf << 12)
144f7cc78ecSespie { 4, 12, 0, 0, I370_OPERAND_GPR | I370_OPERAND_BASE | I370_OPERAND_SBASE, "RS B2"},
145f7cc78ecSespie
146f7cc78ecSespie /* The optional B2 base field in an RS form instruction. */
147f7cc78ecSespie /* Note that this field will almost always be absent */
148f7cc78ecSespie #define RS_B2_OPT (RS_B2 + 1)
149f7cc78ecSespie #define RS_B2_OPT_MASK (0xf << 12)
150f7cc78ecSespie { 4, 12, 0, 0, I370_OPERAND_GPR | I370_OPERAND_OPTIONAL, "RS B2 OPT"},
151f7cc78ecSespie
152f7cc78ecSespie /* The R1 register field in an RSI form instruction. */
153f7cc78ecSespie #define RSI_R1 (RS_B2_OPT + 1)
154f7cc78ecSespie #define RSI_R1_MASK (0xf << 20)
155f7cc78ecSespie { 4, 20, 0, 0, I370_OPERAND_GPR, "RSI R1" },
156f7cc78ecSespie
157f7cc78ecSespie /* The R3 register field in an RSI form instruction. */
158f7cc78ecSespie #define RSI_R3 (RSI_R1 + 1)
159f7cc78ecSespie #define RSI_R3_MASK (0xf << 16)
160f7cc78ecSespie { 4, 16, 0, 0, I370_OPERAND_GPR, "RSI R3" },
161f7cc78ecSespie
162f7cc78ecSespie /* The I2 immediate field in an RSI form instruction. */
163f7cc78ecSespie #define RSI_I2 (RSI_R3 + 1)
164f7cc78ecSespie #define RSI_I2_MASK (0xffff)
165f7cc78ecSespie { 16, 0, 0, 0, I370_OPERAND_RELATIVE, "RSI I2" },
166f7cc78ecSespie
167f7cc78ecSespie /* The R1 register field in an RI form instruction. */
168f7cc78ecSespie #define RI_R1 (RSI_I2 + 1)
169f7cc78ecSespie #define RI_R1_MASK (0xf << 20)
170f7cc78ecSespie { 4, 20, 0, 0, I370_OPERAND_GPR, "RI R1" },
171f7cc78ecSespie
172f7cc78ecSespie /* The I2 immediate field in an RI form instruction. */
173f7cc78ecSespie #define RI_I2 (RI_R1 + 1)
174f7cc78ecSespie #define RI_I2_MASK (0xffff)
175f7cc78ecSespie { 16, 0, 0, 0, I370_OPERAND_RELATIVE, "RI I2" },
176f7cc78ecSespie
177f7cc78ecSespie /* The I2 index field in an SI form instruction. */
178f7cc78ecSespie #define SI_I2 (RI_I2 + 1)
179f7cc78ecSespie #define SI_I2_MASK (0xff << 16)
180f7cc78ecSespie { 8, 16, 0, 0, I370_OPERAND_RELATIVE, "SI I2"},
181f7cc78ecSespie
182f7cc78ecSespie /* The B1 base register field in an SI form instruction. */
183f7cc78ecSespie #define SI_B1 (SI_I2 + 1)
184f7cc78ecSespie #define SI_B1_MASK (0xf << 12)
185f7cc78ecSespie { 4, 12, 0, 0, I370_OPERAND_GPR, "SI B1" },
186f7cc78ecSespie
187f7cc78ecSespie /* The D1 displacement field in an SI form instruction. */
188f7cc78ecSespie #define SI_D1 (SI_B1 + 1)
189f7cc78ecSespie #define SI_D1_MASK (0xfff)
190f7cc78ecSespie { 12, 0, 0, 0, I370_OPERAND_RELATIVE, "SI D1" },
191f7cc78ecSespie
192f7cc78ecSespie /* The B2 base register field in an S form instruction. */
193f7cc78ecSespie #define S_B2 (SI_D1 + 1)
194f7cc78ecSespie #define S_B2_MASK (0xf << 12)
195f7cc78ecSespie { 4, 12, 0, 0, I370_OPERAND_GPR | I370_OPERAND_BASE | I370_OPERAND_SBASE, "S B2" },
196f7cc78ecSespie
197f7cc78ecSespie /* The D2 displacement field in an S form instruction. */
198f7cc78ecSespie #define S_D2 (S_B2 + 1)
199f7cc78ecSespie #define S_D2_MASK (0xfff)
200f7cc78ecSespie { 12, 0, 0, 0, I370_OPERAND_RELATIVE, "S D2" },
201f7cc78ecSespie
202f7cc78ecSespie /* The L length field in an SS form instruction. */
203f7cc78ecSespie #define SS_L (S_D2 + 1)
204f7cc78ecSespie #define SS_L_MASK (0xffff<<16)
205f7cc78ecSespie { 8, 16, 0, 0, I370_OPERAND_RELATIVE | I370_OPERAND_LENGTH, "SS L" },
206f7cc78ecSespie
207f7cc78ecSespie /* The B1 base register field in an SS form instruction. */
208f7cc78ecSespie #define SS_B1 (SS_L + 1)
209f7cc78ecSespie #define SS_B1_MASK (0xf << 12)
210f7cc78ecSespie { 4, 12, 0, 0, I370_OPERAND_GPR, "SS B1" },
211f7cc78ecSespie
212f7cc78ecSespie /* The D1 displacement field in an SS form instruction. */
213f7cc78ecSespie #define SS_D1 (SS_B1 + 1)
214f7cc78ecSespie #define SS_D1_MASK (0xfff)
215f7cc78ecSespie { 12, 0, 0, 0, I370_OPERAND_RELATIVE, "SS D1" },
216f7cc78ecSespie
217f7cc78ecSespie /* The B2 base register field in an SS form instruction. */
218f7cc78ecSespie #define SS_B2 (SS_D1 + 1)
219f7cc78ecSespie #define SS_B2_MASK (0xf << 12)
220f7cc78ecSespie { 4, 12, insert_ss_b2, extract_ss_b2, I370_OPERAND_GPR | I370_OPERAND_BASE | I370_OPERAND_SBASE, "SS B2" },
221f7cc78ecSespie
222f7cc78ecSespie /* The D2 displacement field in an SS form instruction. */
223f7cc78ecSespie #define SS_D2 (SS_B2 + 1)
224f7cc78ecSespie #define SS_D2_MASK (0xfff)
225f7cc78ecSespie { 12, 0, insert_ss_d2, extract_ss_d2, I370_OPERAND_RELATIVE, "SS D2" },
226f7cc78ecSespie
227f7cc78ecSespie
228f7cc78ecSespie };
229f7cc78ecSespie
230f7cc78ecSespie /* The functions used to insert and extract complicated operands. */
231f7cc78ecSespie
232f7cc78ecSespie static i370_insn_t
insert_ss_b2(i370_insn_t insn,long value,const char ** errmsg ATTRIBUTE_UNUSED)233*cf2f2c56Smiod insert_ss_b2 (i370_insn_t insn, long value,
234*cf2f2c56Smiod const char **errmsg ATTRIBUTE_UNUSED)
235f7cc78ecSespie {
236f7cc78ecSespie insn.i[1] |= (value & 0xf) << 28;
237f7cc78ecSespie return insn;
238f7cc78ecSespie }
239f7cc78ecSespie
240f7cc78ecSespie static i370_insn_t
insert_ss_d2(i370_insn_t insn,long value,const char ** errmsg ATTRIBUTE_UNUSED)241*cf2f2c56Smiod insert_ss_d2 (i370_insn_t insn, long value,
242*cf2f2c56Smiod const char **errmsg ATTRIBUTE_UNUSED)
243f7cc78ecSespie {
244f7cc78ecSespie insn.i[1] |= (value & 0xfff) << 16;
245f7cc78ecSespie return insn;
246f7cc78ecSespie }
247f7cc78ecSespie
248f7cc78ecSespie static i370_insn_t
insert_rxf_r3(i370_insn_t insn,long value,const char ** errmsg ATTRIBUTE_UNUSED)249*cf2f2c56Smiod insert_rxf_r3 (i370_insn_t insn, long value,
250*cf2f2c56Smiod const char **errmsg ATTRIBUTE_UNUSED)
251f7cc78ecSespie {
252f7cc78ecSespie insn.i[1] |= (value & 0xf) << 28;
253f7cc78ecSespie return insn;
254f7cc78ecSespie }
255f7cc78ecSespie
256f7cc78ecSespie static long
extract_ss_b2(i370_insn_t insn,int * invalid ATTRIBUTE_UNUSED)257*cf2f2c56Smiod extract_ss_b2 (i370_insn_t insn, int *invalid ATTRIBUTE_UNUSED)
258f7cc78ecSespie {
259f7cc78ecSespie return (insn.i[1] >>28) & 0xf;
260f7cc78ecSespie }
261f7cc78ecSespie
262f7cc78ecSespie static long
extract_ss_d2(i370_insn_t insn,int * invalid ATTRIBUTE_UNUSED)263*cf2f2c56Smiod extract_ss_d2 (i370_insn_t insn, int *invalid ATTRIBUTE_UNUSED)
264f7cc78ecSespie {
265f7cc78ecSespie return (insn.i[1] >>16) & 0xfff;
266f7cc78ecSespie }
267f7cc78ecSespie
268f7cc78ecSespie static long
extract_rxf_r3(i370_insn_t insn,int * invalid ATTRIBUTE_UNUSED)269*cf2f2c56Smiod extract_rxf_r3 (i370_insn_t insn, int *invalid ATTRIBUTE_UNUSED)
270f7cc78ecSespie {
271f7cc78ecSespie return (insn.i[1] >>28) & 0xf;
272f7cc78ecSespie }
273f7cc78ecSespie
274f7cc78ecSespie
275f7cc78ecSespie /* Macros used to form opcodes. */
276f7cc78ecSespie
277f7cc78ecSespie /* The short-instruction opcode. */
278f7cc78ecSespie #define OPS(x) ((((unsigned short)(x)) & 0xff) << 8)
279f7cc78ecSespie #define OPS_MASK OPS (0xff)
280f7cc78ecSespie
281f7cc78ecSespie /* the extended instruction opcode */
282f7cc78ecSespie #define XOPS(x) ((((unsigned short)(x)) & 0xff) << 24)
283f7cc78ecSespie #define XOPS_MASK XOPS (0xff)
284f7cc78ecSespie
285f7cc78ecSespie /* the S instruction opcode */
286f7cc78ecSespie #define SOPS(x) ((((unsigned short)(x)) & 0xffff) << 16)
287f7cc78ecSespie #define SOPS_MASK SOPS (0xffff)
288f7cc78ecSespie
289f7cc78ecSespie /* the E instruction opcode */
290f7cc78ecSespie #define EOPS(x) (((unsigned short)(x)) & 0xffff)
291f7cc78ecSespie #define EOPS_MASK EOPS (0xffff)
292f7cc78ecSespie
293f7cc78ecSespie /* the RI instruction opcode */
294f7cc78ecSespie #define ROPS(x) (((((unsigned short)(x)) & 0xff0) << 20) | \
295f7cc78ecSespie ((((unsigned short)(x)) & 0x00f) << 16))
296f7cc78ecSespie #define ROPS_MASK ROPS (0xfff)
297f7cc78ecSespie
298f7cc78ecSespie /* --------------------------------------------------------- */
299f7cc78ecSespie /* An E form instruction. */
300f7cc78ecSespie #define E(op) (EOPS (op))
301f7cc78ecSespie #define E_MASK E (0xffff)
302f7cc78ecSespie
303f7cc78ecSespie /* An RR form instruction. */
304f7cc78ecSespie #define RR(op, r1, r2) \
305f7cc78ecSespie (OPS (op) | ((((unsigned short)(r1)) & 0xf) << 4) | \
306f7cc78ecSespie ((((unsigned short)(r2)) & 0xf) ))
307f7cc78ecSespie
308f7cc78ecSespie #define RR_MASK RR (0xff, 0x0, 0x0)
309f7cc78ecSespie
310f7cc78ecSespie /* An SVC-style instruction. */
311f7cc78ecSespie #define SVC(op, i) \
312f7cc78ecSespie (OPS (op) | (((unsigned short)(i)) & 0xff))
313f7cc78ecSespie
314f7cc78ecSespie #define SVC_MASK SVC (0xff, 0x0)
315f7cc78ecSespie
316f7cc78ecSespie /* An RRE form instruction. */
317f7cc78ecSespie #define RRE(op, r1, r2) \
318f7cc78ecSespie (SOPS (op) | ((((unsigned short)(r1)) & 0xf) << 4) | \
319f7cc78ecSespie ((((unsigned short)(r2)) & 0xf) ))
320f7cc78ecSespie
321f7cc78ecSespie #define RRE_MASK RRE (0xffff, 0x0, 0x0)
322f7cc78ecSespie
323f7cc78ecSespie /* An RRF form instruction. */
324f7cc78ecSespie #define RRF(op, r3, r1, r2) \
325f7cc78ecSespie (SOPS (op) | ((((unsigned short)(r3)) & 0xf) << 12) | \
326f7cc78ecSespie ((((unsigned short)(r1)) & 0xf) << 4) | \
327f7cc78ecSespie ((((unsigned short)(r2)) & 0xf) ))
328f7cc78ecSespie
329f7cc78ecSespie #define RRF_MASK RRF (0xffff, 0x0, 0x0, 0x0)
330f7cc78ecSespie
331f7cc78ecSespie /* An RX form instruction. */
332f7cc78ecSespie #define RX(op, r1, x2, b2, d2) \
333f7cc78ecSespie (XOPS(op) | ((((unsigned short)(r1)) & 0xf) << 20) | \
334f7cc78ecSespie ((((unsigned short)(x2)) & 0xf) << 16) | \
335f7cc78ecSespie ((((unsigned short)(b2)) & 0xf) << 12) | \
336f7cc78ecSespie ((((unsigned short)(d2)) & 0xfff)))
337f7cc78ecSespie
338f7cc78ecSespie #define RX_MASK RX (0xff, 0x0, 0x0, 0x0, 0x0)
339f7cc78ecSespie
340f7cc78ecSespie /* An RXE form instruction high word. */
341f7cc78ecSespie #define RXEH(op, r1, x2, b2, d2) \
342f7cc78ecSespie (XOPS(op) | ((((unsigned short)(r1)) & 0xf) << 20) | \
343f7cc78ecSespie ((((unsigned short)(x2)) & 0xf) << 16) | \
344f7cc78ecSespie ((((unsigned short)(b2)) & 0xf) << 12) | \
345f7cc78ecSespie ((((unsigned short)(d2)) & 0xfff)))
346f7cc78ecSespie
347f7cc78ecSespie #define RXEH_MASK RXEH (0xff, 0, 0, 0, 0)
348f7cc78ecSespie
349f7cc78ecSespie /* An RXE form instruction low word. */
350f7cc78ecSespie #define RXEL(op) \
351f7cc78ecSespie ((((unsigned short)(op)) & 0xff) << 16 )
352f7cc78ecSespie
353f7cc78ecSespie #define RXEL_MASK RXEL (0xff)
354f7cc78ecSespie
355f7cc78ecSespie /* An RXF form instruction high word. */
356f7cc78ecSespie #define RXFH(op, r1, x2, b2, d2) \
357f7cc78ecSespie (XOPS(op) | ((((unsigned short)(r1)) & 0xf) << 20) | \
358f7cc78ecSespie ((((unsigned short)(x2)) & 0xf) << 16) | \
359f7cc78ecSespie ((((unsigned short)(b2)) & 0xf) << 12) | \
360f7cc78ecSespie ((((unsigned short)(d2)) & 0xfff)))
361f7cc78ecSespie
362f7cc78ecSespie #define RXFH_MASK RXFH (0xff, 0, 0, 0, 0)
363f7cc78ecSespie
364f7cc78ecSespie /* An RXF form instruction low word. */
365f7cc78ecSespie #define RXFL(op, r3) \
366f7cc78ecSespie (((((unsigned short)(r3)) & 0xf) << 28 ) | \
367f7cc78ecSespie ((((unsigned short)(op)) & 0xff) << 16 ))
368f7cc78ecSespie
369f7cc78ecSespie #define RXFL_MASK RXFL (0xff, 0)
370f7cc78ecSespie
371f7cc78ecSespie /* An RS form instruction. */
372f7cc78ecSespie #define RS(op, r1, b3, b2, d2) \
373f7cc78ecSespie (XOPS(op) | ((((unsigned short)(r1)) & 0xf) << 20) | \
374f7cc78ecSespie ((((unsigned short)(b3)) & 0xf) << 16) | \
375f7cc78ecSespie ((((unsigned short)(b2)) & 0xf) << 12) | \
376f7cc78ecSespie ((((unsigned short)(d2)) & 0xfff)))
377f7cc78ecSespie
378f7cc78ecSespie #define RS_MASK RS (0xff, 0x0, 0x0, 0x0, 0x0)
379f7cc78ecSespie
380f7cc78ecSespie /* An RSI form instruction. */
381f7cc78ecSespie #define RSI(op, r1, r3, i2) \
382f7cc78ecSespie (XOPS(op) | ((((unsigned short)(r1)) & 0xf) << 20) | \
383f7cc78ecSespie ((((unsigned short)(r3)) & 0xf) << 16) | \
384f7cc78ecSespie ((((unsigned short)(i2)) & 0xffff)))
385f7cc78ecSespie
386f7cc78ecSespie #define RSI_MASK RSI (0xff, 0x0, 0x0, 0x0)
387f7cc78ecSespie
388f7cc78ecSespie /* An RI form instruction. */
389f7cc78ecSespie #define RI(op, r1, i2) \
390f7cc78ecSespie (ROPS(op) | ((((unsigned short)(r1)) & 0xf) << 20) | \
391f7cc78ecSespie ((((unsigned short)(i2)) & 0xffff)))
392f7cc78ecSespie
393f7cc78ecSespie #define RI_MASK RI (0xfff, 0x0, 0x0)
394f7cc78ecSespie
395f7cc78ecSespie /* An SI form instruction. */
396f7cc78ecSespie #define SI(op, i2, b1, d1) \
397f7cc78ecSespie (XOPS(op) | ((((unsigned short)(i2)) & 0xff) << 16) | \
398f7cc78ecSespie ((((unsigned short)(b1)) & 0xf) << 12) | \
399f7cc78ecSespie ((((unsigned short)(d1)) & 0xfff)))
400f7cc78ecSespie
401f7cc78ecSespie #define SI_MASK SI (0xff, 0x0, 0x0, 0x0)
402f7cc78ecSespie
403f7cc78ecSespie /* An S form instruction. */
404f7cc78ecSespie #define S(op, b2, d2) \
405f7cc78ecSespie (SOPS(op) | ((((unsigned short)(b2)) & 0xf) << 12) | \
406f7cc78ecSespie ((((unsigned short)(d2)) & 0xfff)))
407f7cc78ecSespie
408f7cc78ecSespie #define S_MASK S (0xffff, 0x0, 0x0)
409f7cc78ecSespie
410f7cc78ecSespie /* An SS form instruction high word. */
411f7cc78ecSespie #define SSH(op, l, b1, d1) \
412f7cc78ecSespie (XOPS(op) | ((((unsigned short)(l)) & 0xff) << 16) | \
413f7cc78ecSespie ((((unsigned short)(b1)) & 0xf) << 12) | \
414f7cc78ecSespie ((((unsigned short)(d1)) & 0xfff)))
415f7cc78ecSespie
416f7cc78ecSespie /* An SS form instruction low word. */
417f7cc78ecSespie #define SSL(b2, d2) \
418f7cc78ecSespie ( ((((unsigned short)(b1)) & 0xf) << 28) | \
419f7cc78ecSespie ((((unsigned short)(d1)) & 0xfff) << 16 ))
420f7cc78ecSespie
421f7cc78ecSespie #define SS_MASK SSH (0xff, 0x0, 0x0, 0x0)
422f7cc78ecSespie
423f7cc78ecSespie /* An SSE form instruction high word. */
424f7cc78ecSespie #define SSEH(op, b1, d1) \
425f7cc78ecSespie (SOPS(op) | ((((unsigned short)(b1)) & 0xf) << 12) | \
426f7cc78ecSespie ((((unsigned short)(d1)) & 0xfff)))
427f7cc78ecSespie
428f7cc78ecSespie /* An SSE form instruction low word. */
429f7cc78ecSespie #define SSEL(b2, d2) \
430f7cc78ecSespie ( ((((unsigned short)(b1)) & 0xf) << 28) | \
431f7cc78ecSespie ((((unsigned short)(d1)) & 0xfff) << 16 ))
432f7cc78ecSespie
433f7cc78ecSespie #define SSE_MASK SSEH (0xffff, 0x0, 0x0)
434f7cc78ecSespie
435f7cc78ecSespie
436f7cc78ecSespie /* Smaller names for the flags so each entry in the opcodes table will
437f7cc78ecSespie fit on a single line. These flags are set up so that e.g. IXA means
438f7cc78ecSespie the insn is supported on the 370/XA or newer architecture.
439f7cc78ecSespie Note that 370 or older obsolete insn's are not supported ...
440f7cc78ecSespie */
441f7cc78ecSespie #define IBF I370_OPCODE_ESA390_BF
442f7cc78ecSespie #define IBS I370_OPCODE_ESA390_BS
443f7cc78ecSespie #define ICK I370_OPCODE_ESA390_CK
444f7cc78ecSespie #define ICM I370_OPCODE_ESA390_CM
445f7cc78ecSespie #define IFX I370_OPCODE_ESA390_FX
446f7cc78ecSespie #define IHX I370_OPCODE_ESA390_HX
447f7cc78ecSespie #define IIR I370_OPCODE_ESA390_IR
448f7cc78ecSespie #define IMI I370_OPCODE_ESA390_MI
449f7cc78ecSespie #define IPC I370_OPCODE_ESA390_PC
450f7cc78ecSespie #define IPL I370_OPCODE_ESA390_PL
451f7cc78ecSespie #define IQR I370_OPCODE_ESA390_QR
452f7cc78ecSespie #define IRP I370_OPCODE_ESA390_RP
453f7cc78ecSespie #define ISA I370_OPCODE_ESA390_SA
454f7cc78ecSespie #define ISG I370_OPCODE_ESA390_SG
455f7cc78ecSespie #define ISR I370_OPCODE_ESA390_SR
456f7cc78ecSespie #define ITR I370_OPCODE_ESA390_SR
457f7cc78ecSespie #define I390 IBF | IBS | ICK | ICM | IIR | IFX | IHX | IMI | IPC | IPL | IQR | IRP | ISA | ISG | ISR | ITR | I370_OPCODE_ESA390
458f7cc78ecSespie #define IESA I390 | I370_OPCODE_ESA370
459f7cc78ecSespie #define IXA IESA | I370_OPCODE_370_XA
460f7cc78ecSespie #define I370 IXA | I370_OPCODE_370
461f7cc78ecSespie #define I360 I370 | I370_OPCODE_360
462f7cc78ecSespie
463f7cc78ecSespie
464f7cc78ecSespie /* The opcode table.
465f7cc78ecSespie
466f7cc78ecSespie The format of the opcode table is:
467f7cc78ecSespie
468f7cc78ecSespie NAME LEN OPCODE_HI OPCODE_LO MASK_HI MASK_LO FLAGS { OPERANDS }
469f7cc78ecSespie
470f7cc78ecSespie NAME is the name of the instruction.
471f7cc78ecSespie OPCODE is the instruction opcode.
472f7cc78ecSespie MASK is the opcode mask; this is used to tell the disassembler
473f7cc78ecSespie which bits in the actual opcode must match OPCODE.
474f7cc78ecSespie FLAGS are flags indicated what processors support the instruction.
475f7cc78ecSespie OPERANDS is the list of operands.
476f7cc78ecSespie
477f7cc78ecSespie The disassembler reads the table in order and prints the first
478f7cc78ecSespie instruction which matches, so this table is sorted to put more
479f7cc78ecSespie specific instructions before more general instructions. It is also
480f7cc78ecSespie sorted by major opcode. */
481f7cc78ecSespie
482f7cc78ecSespie const struct i370_opcode i370_opcodes[] = {
483f7cc78ecSespie
484f7cc78ecSespie /* E form instructions */
485d2201f2fSdrahn { "pr", 2, {{E(0x0101), 0}}, {{E_MASK, 0}}, IESA, {0} },
486f7cc78ecSespie
487d2201f2fSdrahn { "trap2", 2, {{E(0x01FF), 0}}, {{E_MASK, 0}}, ITR, {0} },
488d2201f2fSdrahn { "upt", 2, {{E(0x0102), 0}}, {{E_MASK, 0}}, IXA, {0} },
489f7cc78ecSespie
490f7cc78ecSespie /* RR form instructions */
491d2201f2fSdrahn { "ar", 2, {{RR(0x1a,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
492d2201f2fSdrahn { "adr", 2, {{RR(0x2a,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
493d2201f2fSdrahn { "aer", 2, {{RR(0x3a,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
494d2201f2fSdrahn { "alr", 2, {{RR(0x1e,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
495d2201f2fSdrahn { "aur", 2, {{RR(0x2e,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
496d2201f2fSdrahn { "awr", 2, {{RR(0x3e,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
497d2201f2fSdrahn { "axr", 2, {{RR(0x36,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
498d2201f2fSdrahn { "balr", 2, {{RR(0x05,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
499d2201f2fSdrahn { "basr", 2, {{RR(0x0d,0,0), 0}}, {{RR_MASK, 0}}, IXA, {RR_R1, RR_R2} },
500d2201f2fSdrahn { "bassm", 2, {{RR(0x0c,0,0), 0}}, {{RR_MASK, 0}}, IXA, {RR_R1, RR_R2} },
501d2201f2fSdrahn { "bsm", 2, {{RR(0x0b,0,0), 0}}, {{RR_MASK, 0}}, IXA, {RR_R1, RR_R2} },
502d2201f2fSdrahn { "bcr", 2, {{RR(0x07,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
503d2201f2fSdrahn { "bctr", 2, {{RR(0x06,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
504d2201f2fSdrahn { "cdr", 2, {{RR(0x29,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
505d2201f2fSdrahn { "cer", 2, {{RR(0x39,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
506d2201f2fSdrahn { "clr", 2, {{RR(0x15,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
507d2201f2fSdrahn { "clcl", 2, {{RR(0x0f,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
508d2201f2fSdrahn { "cr", 2, {{RR(0x19,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
509d2201f2fSdrahn { "ddr", 2, {{RR(0x2d,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
510d2201f2fSdrahn { "der", 2, {{RR(0x3d,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
511d2201f2fSdrahn { "dr", 2, {{RR(0x1d,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
512d2201f2fSdrahn { "hdr", 2, {{RR(0x24,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
513d2201f2fSdrahn { "her", 2, {{RR(0x34,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
514d2201f2fSdrahn { "lcdr", 2, {{RR(0x23,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
515d2201f2fSdrahn { "lcer", 2, {{RR(0x33,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
516d2201f2fSdrahn { "lcr", 2, {{RR(0x13,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
517d2201f2fSdrahn { "ldr", 2, {{RR(0x28,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
518d2201f2fSdrahn { "ler", 2, {{RR(0x38,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
519d2201f2fSdrahn { "lndr", 2, {{RR(0x21,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
520d2201f2fSdrahn { "lner", 2, {{RR(0x31,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
521d2201f2fSdrahn { "lnr", 2, {{RR(0x11,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
522d2201f2fSdrahn { "lpdr", 2, {{RR(0x20,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
523d2201f2fSdrahn { "lper", 2, {{RR(0x30,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
524d2201f2fSdrahn { "lpr", 2, {{RR(0x10,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
525d2201f2fSdrahn { "lr", 2, {{RR(0x18,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
526d2201f2fSdrahn { "lrdr", 2, {{RR(0x25,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
527d2201f2fSdrahn { "lrer", 2, {{RR(0x35,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
528d2201f2fSdrahn { "ltdr", 2, {{RR(0x22,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
529d2201f2fSdrahn { "lter", 2, {{RR(0x32,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
530d2201f2fSdrahn { "ltr", 2, {{RR(0x12,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
531d2201f2fSdrahn { "mdr", 2, {{RR(0x2c,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
532d2201f2fSdrahn { "mer", 2, {{RR(0x3c,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
533d2201f2fSdrahn { "mr", 2, {{RR(0x1c,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
534d2201f2fSdrahn { "mvcl", 2, {{RR(0x0e,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
535d2201f2fSdrahn { "mxdr", 2, {{RR(0x27,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
536d2201f2fSdrahn { "mxr", 2, {{RR(0x26,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
537d2201f2fSdrahn { "nr", 2, {{RR(0x14,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
538d2201f2fSdrahn { "or", 2, {{RR(0x16,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
539d2201f2fSdrahn { "sdr", 2, {{RR(0x2b,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
540d2201f2fSdrahn { "ser", 2, {{RR(0x3b,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
541d2201f2fSdrahn { "slr", 2, {{RR(0x1f,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
542d2201f2fSdrahn { "spm", 2, {{RR(0x04,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1} },
543d2201f2fSdrahn { "sr", 2, {{RR(0x1b,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
544d2201f2fSdrahn { "sur", 2, {{RR(0x3f,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
545d2201f2fSdrahn { "swr", 2, {{RR(0x2f,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
546d2201f2fSdrahn { "sxr", 2, {{RR(0x37,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
547d2201f2fSdrahn { "xr", 2, {{RR(0x17,0,0), 0}}, {{RR_MASK, 0}}, I370, {RR_R1, RR_R2} },
548f7cc78ecSespie
549f7cc78ecSespie /* unusual RR formats */
550d2201f2fSdrahn { "svc", 2, {{SVC(0x0a,0), 0}}, {{SVC_MASK, 0}}, I370, {RR_I} },
551f7cc78ecSespie
552f7cc78ecSespie /* RRE form instructions */
553d2201f2fSdrahn { "adbr", 4, {{RRE(0xb31a,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
554d2201f2fSdrahn { "aebr", 4, {{RRE(0xb30a,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
555d2201f2fSdrahn { "axbr", 4, {{RRE(0xb34a,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
556d2201f2fSdrahn { "bakr", 4, {{RRE(0xb240,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
557d2201f2fSdrahn { "bsa", 4, {{RRE(0xb25a,0,0), 0}}, {{RRE_MASK, 0}}, IBS, {RRE_R1, RRE_R2} },
558d2201f2fSdrahn { "bsg", 4, {{RRE(0xb258,0,0), 0}}, {{RRE_MASK, 0}}, ISG, {RRE_R1, RRE_R2} },
559d2201f2fSdrahn { "cdbr", 4, {{RRE(0xb319,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
560d2201f2fSdrahn { "cdfbr", 4, {{RRE(0xb395,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
561d2201f2fSdrahn { "cdfr", 4, {{RRE(0xb3b5,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
562d2201f2fSdrahn { "cebr", 4, {{RRE(0xb309,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
563d2201f2fSdrahn { "cefbr", 4, {{RRE(0xb394,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
564d2201f2fSdrahn { "cefr", 4, {{RRE(0xb3b4,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
565d2201f2fSdrahn { "cksm", 4, {{RRE(0xb241,0,0), 0}}, {{RRE_MASK, 0}}, ICK, {RRE_R1, RRE_R2} },
566d2201f2fSdrahn { "clst", 4, {{RRE(0xb25d,0,0), 0}}, {{RRE_MASK, 0}}, ISR, {RRE_R1, RRE_R2} },
567d2201f2fSdrahn { "cpya", 4, {{RRE(0xb24d,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
568d2201f2fSdrahn { "cuse", 4, {{RRE(0xb257,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
569d2201f2fSdrahn { "cxbr", 4, {{RRE(0xb349,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
570d2201f2fSdrahn { "cxfbr", 4, {{RRE(0xb396,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
571d2201f2fSdrahn { "cxfr", 4, {{RRE(0xb3b6,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
572d2201f2fSdrahn { "cxr", 4, {{RRE(0xb369,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
573d2201f2fSdrahn { "ddbr", 4, {{RRE(0xb31d,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
574d2201f2fSdrahn { "debr", 4, {{RRE(0xb30d,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
575d2201f2fSdrahn { "dxbr", 4, {{RRE(0xb34d,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
576d2201f2fSdrahn { "dxr", 4, {{RRE(0xb22d,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1, RRE_R2} },
577d2201f2fSdrahn { "ear", 4, {{RRE(0xb24f,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
578d2201f2fSdrahn { "efpc", 4, {{RRE(0xb38c,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
579d2201f2fSdrahn { "epar", 4, {{RRE(0xb226,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1} },
580d2201f2fSdrahn { "ereg", 4, {{RRE(0xb249,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
581d2201f2fSdrahn { "esar", 4, {{RRE(0xb227,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1} },
582d2201f2fSdrahn { "esta", 4, {{RRE(0xb24a,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
583d2201f2fSdrahn { "fidr", 4, {{RRE(0xb37f,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
584d2201f2fSdrahn { "fier", 4, {{RRE(0xb377,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
585d2201f2fSdrahn { "fixr", 4, {{RRE(0xb367,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
586d2201f2fSdrahn { "iac", 4, {{RRE(0xb224,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1} },
587d2201f2fSdrahn { "ipm", 4, {{RRE(0xb222,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1} },
588d2201f2fSdrahn { "ipte", 4, {{RRE(0xb221,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1, RRE_R2} },
589d2201f2fSdrahn { "iske", 4, {{RRE(0xb229,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1, RRE_R2} },
590d2201f2fSdrahn { "ivsk", 4, {{RRE(0xb223,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1, RRE_R2} },
591d2201f2fSdrahn { "kdbr", 4, {{RRE(0xb318,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
592d2201f2fSdrahn { "kebr", 4, {{RRE(0xb308,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
593d2201f2fSdrahn { "kxbr", 4, {{RRE(0xb348,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
594d2201f2fSdrahn { "lcdbr", 4, {{RRE(0xb313,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
595d2201f2fSdrahn { "lcebr", 4, {{RRE(0xb303,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
596d2201f2fSdrahn { "lcxbr", 4, {{RRE(0xb343,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
597d2201f2fSdrahn { "lcxr", 4, {{RRE(0xb363,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
598d2201f2fSdrahn { "lder", 4, {{RRE(0xb324,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
599d2201f2fSdrahn { "ldxbr", 4, {{RRE(0xb345,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
600d2201f2fSdrahn { "ledbr", 4, {{RRE(0xb344,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
601d2201f2fSdrahn { "lexbr", 4, {{RRE(0xb346,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
602d2201f2fSdrahn { "lexr", 4, {{RRE(0xb366,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
603d2201f2fSdrahn { "lndbr", 4, {{RRE(0xb311,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
604d2201f2fSdrahn { "lnebr", 4, {{RRE(0xb301,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
605d2201f2fSdrahn { "lnxbr", 4, {{RRE(0xb341,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
606d2201f2fSdrahn { "lnxr", 4, {{RRE(0xb361,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
607d2201f2fSdrahn { "lpdbr", 4, {{RRE(0xb310,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
608d2201f2fSdrahn { "lpebr", 4, {{RRE(0xb300,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
609d2201f2fSdrahn { "lpxbr", 4, {{RRE(0xb340,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
610d2201f2fSdrahn { "lpxr", 4, {{RRE(0xb360,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
611d2201f2fSdrahn { "ltdbr", 4, {{RRE(0xb312,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
612d2201f2fSdrahn { "ltebr", 4, {{RRE(0xb302,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
613d2201f2fSdrahn { "ltxbr", 4, {{RRE(0xb342,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
614d2201f2fSdrahn { "ltxr", 4, {{RRE(0xb362,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
615d2201f2fSdrahn { "lura", 4, {{RRE(0xb24b,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
616d2201f2fSdrahn { "lxdr", 4, {{RRE(0xb325,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
617d2201f2fSdrahn { "lxer", 4, {{RRE(0xb326,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
618d2201f2fSdrahn { "lxr", 4, {{RRE(0xb365,0,0), 0}}, {{RRE_MASK, 0}}, IFX, {RRE_R1, RRE_R2} },
619d2201f2fSdrahn { "lzdr", 4, {{RRE(0xb375,0,0), 0}}, {{RRE_MASK, 0}}, IFX, {RRE_R1, RRE_R2} },
620d2201f2fSdrahn { "lzer", 4, {{RRE(0xb374,0,0), 0}}, {{RRE_MASK, 0}}, IFX, {RRE_R1, RRE_R2} },
621d2201f2fSdrahn { "lzxr", 4, {{RRE(0xb376,0,0), 0}}, {{RRE_MASK, 0}}, IFX, {RRE_R1, RRE_R2} },
622d2201f2fSdrahn { "mdbr", 4, {{RRE(0xb31c,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
623d2201f2fSdrahn { "mdebr", 4, {{RRE(0xb30c,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
624d2201f2fSdrahn { "meebr", 4, {{RRE(0xb317,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
625d2201f2fSdrahn { "meer", 4, {{RRE(0xb337,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
626d2201f2fSdrahn { "msr", 4, {{RRE(0xb252,0,0), 0}}, {{RRE_MASK, 0}}, IIR, {RRE_R1, RRE_R2} },
627d2201f2fSdrahn { "msta", 4, {{RRE(0xb247,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1} },
628d2201f2fSdrahn { "mvpg", 4, {{RRE(0xb254,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
629d2201f2fSdrahn { "mvst", 4, {{RRE(0xb255,0,0), 0}}, {{RRE_MASK, 0}}, ISR, {RRE_R1, RRE_R2} },
630d2201f2fSdrahn { "mxbr", 4, {{RRE(0xb34c,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
631d2201f2fSdrahn { "mxdbr", 4, {{RRE(0xb307,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
632d2201f2fSdrahn { "palb", 4, {{RRE(0xb248,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {0} },
633d2201f2fSdrahn { "prbe", 4, {{RRE(0xb22a,0,0), 0}}, {{RRE_MASK, 0}}, I370, {RRE_R1, RRE_R2} },
634d2201f2fSdrahn { "pt", 4, {{RRE(0xb228,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1, RRE_R2} },
635d2201f2fSdrahn { "rrbe", 4, {{RRE(0xb22a,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1, RRE_R2} },
636d2201f2fSdrahn { "sar", 4, {{RRE(0xb24e,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
637d2201f2fSdrahn { "sdbr", 4, {{RRE(0xb31b,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
638d2201f2fSdrahn { "sebr", 4, {{RRE(0xb30b,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
639d2201f2fSdrahn { "servc", 4, {{RRE(0xb220,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
640d2201f2fSdrahn { "sfpc", 4, {{RRE(0xb384,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
641d2201f2fSdrahn { "sqdbr", 4, {{RRE(0xb315,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
642d2201f2fSdrahn { "sqdr", 4, {{RRE(0xb244,0,0), 0}}, {{RRE_MASK, 0}}, IQR, {RRE_R1, RRE_R2} },
643d2201f2fSdrahn { "sqebr", 4, {{RRE(0xb314,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
644d2201f2fSdrahn { "sqer", 4, {{RRE(0xb245,0,0), 0}}, {{RRE_MASK, 0}}, IQR, {RRE_R1, RRE_R2} },
645d2201f2fSdrahn { "sqxbr", 4, {{RRE(0xb316,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
646d2201f2fSdrahn { "sqxr", 4, {{RRE(0xb336,0,0), 0}}, {{RRE_MASK, 0}}, IHX, {RRE_R1, RRE_R2} },
647d2201f2fSdrahn { "srst", 4, {{RRE(0xb25e,0,0), 0}}, {{RRE_MASK, 0}}, ISR, {RRE_R1, RRE_R2} },
648d2201f2fSdrahn { "ssar", 4, {{RRE(0xb225,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1} },
649d2201f2fSdrahn { "sske", 4, {{RRE(0xb22b,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1, RRE_R2} },
650d2201f2fSdrahn { "stura", 4, {{RRE(0xb246,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
651d2201f2fSdrahn { "sxbr", 4, {{RRE(0xb34b,0,0), 0}}, {{RRE_MASK, 0}}, IBF, {RRE_R1, RRE_R2} },
652d2201f2fSdrahn { "tar", 4, {{RRE(0xb24c,0,0), 0}}, {{RRE_MASK, 0}}, IESA, {RRE_R1, RRE_R2} },
653d2201f2fSdrahn { "tb", 4, {{RRE(0xb22c,0,0), 0}}, {{RRE_MASK, 0}}, IXA, {RRE_R1, RRE_R2} },
654d2201f2fSdrahn { "thdr", 4, {{RRE(0xb359,0,0), 0}}, {{RRE_MASK, 0}}, IFX, {RRE_R1, RRE_R2} },
655d2201f2fSdrahn { "thder", 4, {{RRE(0xb359,0,0), 0}}, {{RRE_MASK, 0}}, IFX, {RRE_R1, RRE_R2} },
656f7cc78ecSespie
657f7cc78ecSespie /* RRF form instructions */
658d2201f2fSdrahn { "cfdbr", 4, {{RRF(0xb399,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
659d2201f2fSdrahn { "cfdr", 4, {{RRF(0xb3b9,0,0,0), 0}}, {{RRF_MASK, 0}}, IHX, {RRF_R1, RRF_R3, RRF_R2} },
660d2201f2fSdrahn { "cfebr", 4, {{RRF(0xb398,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
661d2201f2fSdrahn { "cfer", 4, {{RRF(0xb3b8,0,0,0), 0}}, {{RRF_MASK, 0}}, IHX, {RRF_R1, RRF_R3, RRF_R2} },
662d2201f2fSdrahn { "cfxbr", 4, {{RRF(0xb39a,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
663d2201f2fSdrahn { "cfxr", 4, {{RRF(0xb3ba,0,0,0), 0}}, {{RRF_MASK, 0}}, IHX, {RRF_R1, RRF_R3, RRF_R2} },
664d2201f2fSdrahn { "didbr", 4, {{RRF(0xb35b,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
665d2201f2fSdrahn { "diebr", 4, {{RRF(0xb353,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
666d2201f2fSdrahn { "fidbr", 4, {{RRF(0xb35f,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
667d2201f2fSdrahn { "fiebr", 4, {{RRF(0xb357,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
668d2201f2fSdrahn { "fixbr", 4, {{RRF(0xb347,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
669d2201f2fSdrahn { "madbr", 4, {{RRF(0xb31e,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
670d2201f2fSdrahn { "maebr", 4, {{RRF(0xb30e,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
671d2201f2fSdrahn { "msdbr", 4, {{RRF(0xb31f,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
672d2201f2fSdrahn { "msebr", 4, {{RRF(0xb30f,0,0,0), 0}}, {{RRF_MASK, 0}}, IBF, {RRF_R1, RRF_R3, RRF_R2} },
673d2201f2fSdrahn { "tbdr", 4, {{RRF(0xb351,0,0,0), 0}}, {{RRF_MASK, 0}}, IFX, {RRF_R1, RRF_R3, RRF_R2} },
674d2201f2fSdrahn { "tbedr", 4, {{RRF(0xb350,0,0,0), 0}}, {{RRF_MASK, 0}}, IFX, {RRF_R1, RRF_R3, RRF_R2} },
675f7cc78ecSespie
676f7cc78ecSespie /* RX form instructions */
677d2201f2fSdrahn { "a", 4, {{RX(0x5a,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
678d2201f2fSdrahn { "ad", 4, {{RX(0x6a,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
679d2201f2fSdrahn { "ae", 4, {{RX(0x7a,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
680d2201f2fSdrahn { "ah", 4, {{RX(0x4a,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
681d2201f2fSdrahn { "al", 4, {{RX(0x5e,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
682d2201f2fSdrahn { "au", 4, {{RX(0x7e,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
683d2201f2fSdrahn { "aw", 4, {{RX(0x6e,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
684d2201f2fSdrahn { "bal", 4, {{RX(0x45,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
685d2201f2fSdrahn { "bas", 4, {{RX(0x4d,0,0,0,0), 0}}, {{RX_MASK, 0}}, IXA, {RX_R1, RX_D2, RX_X2, RX_B2} },
686d2201f2fSdrahn { "bc", 4, {{RX(0x47,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
687d2201f2fSdrahn { "bct", 4, {{RX(0x46,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
688d2201f2fSdrahn { "c", 4, {{RX(0x59,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
689d2201f2fSdrahn { "cd", 4, {{RX(0x69,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
690d2201f2fSdrahn { "ce", 4, {{RX(0x79,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
691d2201f2fSdrahn { "ch", 4, {{RX(0x49,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
692d2201f2fSdrahn { "cl", 4, {{RX(0x55,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
693d2201f2fSdrahn { "cvb", 4, {{RX(0x4f,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
694d2201f2fSdrahn { "cvd", 4, {{RX(0x4e,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
695d2201f2fSdrahn { "d", 4, {{RX(0x5d,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
696d2201f2fSdrahn { "dd", 4, {{RX(0x6d,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
697d2201f2fSdrahn { "de", 4, {{RX(0x7d,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
698d2201f2fSdrahn { "ex", 4, {{RX(0x44,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
699d2201f2fSdrahn { "ic", 4, {{RX(0x43,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
700d2201f2fSdrahn { "l", 4, {{RX(0x58,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
701d2201f2fSdrahn { "la", 4, {{RX(0x41,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
702d2201f2fSdrahn { "lae", 4, {{RX(0x51,0,0,0,0), 0}}, {{RX_MASK, 0}}, IESA, {RX_R1, RX_D2, RX_X2, RX_B2} },
703d2201f2fSdrahn { "ld", 4, {{RX(0x68,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
704d2201f2fSdrahn { "le", 4, {{RX(0x78,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
705d2201f2fSdrahn { "lh", 4, {{RX(0x48,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
706d2201f2fSdrahn { "lra", 4, {{RX(0xb1,0,0,0,0), 0}}, {{RX_MASK, 0}}, IXA, {RX_R1, RX_D2, RX_X2, RX_B2} },
707d2201f2fSdrahn { "m", 4, {{RX(0x5c,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
708d2201f2fSdrahn { "md", 4, {{RX(0x6c,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
709d2201f2fSdrahn { "me", 4, {{RX(0x7c,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
710d2201f2fSdrahn { "mh", 4, {{RX(0x4c,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
711d2201f2fSdrahn { "ms", 4, {{RX(0x71,0,0,0,0), 0}}, {{RX_MASK, 0}}, IIR, {RX_R1, RX_D2, RX_X2, RX_B2} },
712d2201f2fSdrahn { "mxd", 4, {{RX(0x67,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
713d2201f2fSdrahn { "n", 4, {{RX(0x54,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
714d2201f2fSdrahn { "o", 4, {{RX(0x56,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
715d2201f2fSdrahn { "s", 4, {{RX(0x5b,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
716d2201f2fSdrahn { "sd", 4, {{RX(0x6b,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
717d2201f2fSdrahn { "se", 4, {{RX(0x7b,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
718d2201f2fSdrahn { "sh", 4, {{RX(0x4b,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
719d2201f2fSdrahn { "sl", 4, {{RX(0x5f,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
720d2201f2fSdrahn { "st", 4, {{RX(0x50,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
721d2201f2fSdrahn { "stc", 4, {{RX(0x42,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
722d2201f2fSdrahn { "std", 4, {{RX(0x60,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
723d2201f2fSdrahn { "ste", 4, {{RX(0x70,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
724d2201f2fSdrahn { "sth", 4, {{RX(0x40,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
725d2201f2fSdrahn { "su", 4, {{RX(0x7f,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
726d2201f2fSdrahn { "sw", 4, {{RX(0x6f,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
727d2201f2fSdrahn { "x", 4, {{RX(0x57,0,0,0,0), 0}}, {{RX_MASK, 0}}, I370, {RX_R1, RX_D2, RX_X2, RX_B2} },
728f7cc78ecSespie
729f7cc78ecSespie /* RXE form instructions */
730d2201f2fSdrahn { "adb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x1a)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
731d2201f2fSdrahn { "aeb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x0a)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
732d2201f2fSdrahn { "cdb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x19)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
733d2201f2fSdrahn { "ceb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x09)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
734d2201f2fSdrahn { "ddb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x1d)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
735d2201f2fSdrahn { "deb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x0d)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
736d2201f2fSdrahn { "kdb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x18)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
737d2201f2fSdrahn { "keb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x08)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
738d2201f2fSdrahn { "lde", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x24)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
739d2201f2fSdrahn { "ldeb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x04)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
740d2201f2fSdrahn { "lxd", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x25)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
741d2201f2fSdrahn { "lxdb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x05)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
742d2201f2fSdrahn { "lxe", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x26)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
743d2201f2fSdrahn { "lxeb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x06)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
744d2201f2fSdrahn { "mdb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x1c)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
745d2201f2fSdrahn { "mdeb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x0c)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
746d2201f2fSdrahn { "mee", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x37)}}, {{RXEH_MASK, RXEL_MASK}}, IHX, {RX_R1, RX_D2, RX_X2, RX_B2} },
747d2201f2fSdrahn { "meeb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x17)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
748d2201f2fSdrahn { "mxdb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x07)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
749d2201f2fSdrahn { "sqd", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x35)}}, {{RXEH_MASK, RXEL_MASK}}, IHX, {RX_R1, RX_D2, RX_X2, RX_B2} },
750d2201f2fSdrahn { "sqdb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x15)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
751d2201f2fSdrahn { "sqe", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x34)}}, {{RXEH_MASK, RXEL_MASK}}, IHX, {RX_R1, RX_D2, RX_X2, RX_B2} },
752d2201f2fSdrahn { "sqeb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x14)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
753d2201f2fSdrahn { "sdb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x1b)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
754d2201f2fSdrahn { "seb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x0b)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
755d2201f2fSdrahn { "tcdb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x11)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
756d2201f2fSdrahn { "tceb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x10)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
757d2201f2fSdrahn { "tcxb", 6, {{RXEH(0xed,0,0,0,0), RXEL(0x12)}}, {{RXEH_MASK, RXEL_MASK}}, IBF, {RX_R1, RX_D2, RX_X2, RX_B2} },
758f7cc78ecSespie
759f7cc78ecSespie /* RXF form instructions */
760d2201f2fSdrahn { "madb", 6, {{RXFH(0xed,0,0,0,0), RXFL(0x1e,0)}}, {{RXFH_MASK, RXFL_MASK}}, IBF, {RX_R1, RXF_R3, RX_D2, RX_X2, RX_B2} },
761d2201f2fSdrahn { "maeb", 6, {{RXFH(0xed,0,0,0,0), RXFL(0x0e,0)}}, {{RXFH_MASK, RXFL_MASK}}, IBF, {RX_R1, RXF_R3, RX_D2, RX_X2, RX_B2} },
762d2201f2fSdrahn { "msdb", 6, {{RXFH(0xed,0,0,0,0), RXFL(0x1f,0)}}, {{RXFH_MASK, RXFL_MASK}}, IBF, {RX_R1, RXF_R3, RX_D2, RX_X2, RX_B2} },
763d2201f2fSdrahn { "mseb", 6, {{RXFH(0xed,0,0,0,0), RXFL(0x0f,0)}}, {{RXFH_MASK, RXFL_MASK}}, IBF, {RX_R1, RXF_R3, RX_D2, RX_X2, RX_B2} },
764f7cc78ecSespie
765f7cc78ecSespie /* RS form instructions */
766d2201f2fSdrahn { "bxh", 4, {{RS(0x86,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_R3, RS_D2, RS_B2} },
767d2201f2fSdrahn { "bxle", 4, {{RS(0x87,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_R3, RS_D2, RS_B2} },
768d2201f2fSdrahn { "cds", 4, {{RS(0xbb,0,0,0,0), 0}}, {{RS_MASK, 0}}, IXA, {RX_R1, RS_R3, RS_D2, RS_B2} },
769d2201f2fSdrahn { "clcle", 4, {{RS(0xa9,0,0,0,0), 0}}, {{RS_MASK, 0}}, ICM, {RX_R1, RS_R3, RS_D2, RS_B2} },
770d2201f2fSdrahn { "clm", 4, {{RS(0xbd,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_R3, RS_D2, RS_B2} },
771d2201f2fSdrahn { "cs", 4, {{RS(0xba,0,0,0,0), 0}}, {{RS_MASK, 0}}, IXA, {RX_R1, RS_R3, RS_D2, RS_B2} },
772d2201f2fSdrahn { "icm", 4, {{RS(0xbf,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_R3, RS_D2, RS_B2} },
773d2201f2fSdrahn { "lam", 4, {{RS(0x9a,0,0,0,0), 0}}, {{RS_MASK, 0}}, IESA, {RX_R1, RS_R3, RS_D2, RS_B2} },
774d2201f2fSdrahn { "lctl", 4, {{RS(0xb7,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_R3, RS_D2, RS_B2} },
775d2201f2fSdrahn { "lm", 4, {{RS(0x98,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_R3, RS_D2, RS_B2} },
776d2201f2fSdrahn { "mvcle", 4, {{RS(0xa8,0,0,0,0), 0}}, {{RS_MASK, 0}}, ICM, {RX_R1, RS_R3, RS_D2, RS_B2} },
777d2201f2fSdrahn { "sigp", 4, {{RS(0xae,0,0,0,0), 0}}, {{RS_MASK, 0}}, IXA, {RX_R1, RS_R3, RS_D2, RS_B2} },
778d2201f2fSdrahn { "stam", 4, {{RS(0x9b,0,0,0,0), 0}}, {{RS_MASK, 0}}, IESA, {RX_R1, RS_R3, RS_D2, RS_B2} },
779d2201f2fSdrahn { "stcm", 4, {{RS(0xbe,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_R3, RS_D2, RS_B2} },
780d2201f2fSdrahn { "stctl", 4, {{RS(0xb6,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_R3, RS_D2, RS_B2} },
781d2201f2fSdrahn { "stm", 4, {{RS(0x90,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_R3, RS_D2, RS_B2} },
782d2201f2fSdrahn { "trace", 4, {{RS(0x99,0,0,0,0), 0}}, {{RS_MASK, 0}}, IXA, {RX_R1, RS_R3, RS_D2, RS_B2} },
783f7cc78ecSespie
784f7cc78ecSespie /* RS form instructions with blank R3 and optional B2 (shift left/right) */
785d2201f2fSdrahn { "sla", 4, {{RS(0x8b,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_D2, RS_B2_OPT} },
786d2201f2fSdrahn { "slda", 4, {{RS(0x8f,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_D2, RS_B2_OPT} },
787d2201f2fSdrahn { "sldl", 4, {{RS(0x8d,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_D2, RS_B2_OPT} },
788d2201f2fSdrahn { "sll", 4, {{RS(0x89,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_D2, RS_B2_OPT} },
789d2201f2fSdrahn { "sra", 4, {{RS(0x8a,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_D2, RS_B2_OPT} },
790d2201f2fSdrahn { "srda", 4, {{RS(0x8e,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_D2, RS_B2_OPT} },
791d2201f2fSdrahn { "srdl", 4, {{RS(0x8c,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_D2, RS_B2_OPT} },
792d2201f2fSdrahn { "srl", 4, {{RS(0x88,0,0,0,0), 0}}, {{RS_MASK, 0}}, I370, {RX_R1, RS_D2, RS_B2_OPT} },
793f7cc78ecSespie
794f7cc78ecSespie /* RSI form instructions */
795d2201f2fSdrahn { "brxh", 4, {{RSI(0x84,0,0,0), 0}}, {{RSI_MASK, 0}}, IIR, {RSI_R1, RSI_R3, RSI_I2} },
796d2201f2fSdrahn { "brxle", 4, {{RSI(0x85,0,0,0), 0}}, {{RSI_MASK, 0}}, IIR, {RSI_R1, RSI_R3, RSI_I2} },
797f7cc78ecSespie
798f7cc78ecSespie /* RI form instructions */
799d2201f2fSdrahn { "ahi", 4, {{RI(0xa7a,0,0), 0}}, {{RI_MASK, 0}}, IIR, {RI_R1, RI_I2} },
800d2201f2fSdrahn { "bras", 4, {{RI(0xa75,0,0), 0}}, {{RI_MASK, 0}}, IIR, {RI_R1, RI_I2} },
801d2201f2fSdrahn { "brc", 4, {{RI(0xa74,0,0), 0}}, {{RI_MASK, 0}}, IIR, {RI_R1, RI_I2} },
802d2201f2fSdrahn { "brct", 4, {{RI(0xa76,0,0), 0}}, {{RI_MASK, 0}}, IIR, {RI_R1, RI_I2} },
803d2201f2fSdrahn { "chi", 4, {{RI(0xa7e,0,0), 0}}, {{RI_MASK, 0}}, IIR, {RI_R1, RI_I2} },
804d2201f2fSdrahn { "lhi", 4, {{RI(0xa78,0,0), 0}}, {{RI_MASK, 0}}, IIR, {RI_R1, RI_I2} },
805d2201f2fSdrahn { "mhi", 4, {{RI(0xa7c,0,0), 0}}, {{RI_MASK, 0}}, IIR, {RI_R1, RI_I2} },
806d2201f2fSdrahn { "tmh", 4, {{RI(0xa70,0,0), 0}}, {{RI_MASK, 0}}, IIR, {RI_R1, RI_I2} },
807d2201f2fSdrahn { "tml", 4, {{RI(0xa71,0,0), 0}}, {{RI_MASK, 0}}, IIR, {RI_R1, RI_I2} },
808f7cc78ecSespie
809f7cc78ecSespie /* SI form instructions */
810d2201f2fSdrahn { "cli", 4, {{SI(0x95,0,0,0), 0}}, {{SI_MASK, 0}}, I370, {SI_D1, SI_B1, SI_I2} },
811d2201f2fSdrahn { "mc", 4, {{SI(0xaf,0,0,0), 0}}, {{SI_MASK, 0}}, I370, {SI_D1, SI_B1, SI_I2} },
812d2201f2fSdrahn { "mvi", 4, {{SI(0x92,0,0,0), 0}}, {{SI_MASK, 0}}, I370, {SI_D1, SI_B1, SI_I2} },
813d2201f2fSdrahn { "ni", 4, {{SI(0x94,0,0,0), 0}}, {{SI_MASK, 0}}, I370, {SI_D1, SI_B1, SI_I2} },
814d2201f2fSdrahn { "oi", 4, {{SI(0x96,0,0,0), 0}}, {{SI_MASK, 0}}, I370, {SI_D1, SI_B1, SI_I2} },
815d2201f2fSdrahn { "stnsm", 4, {{SI(0xac,0,0,0), 0}}, {{SI_MASK, 0}}, IXA, {SI_D1, SI_B1, SI_I2} },
816d2201f2fSdrahn { "stosm", 4, {{SI(0xad,0,0,0), 0}}, {{SI_MASK, 0}}, IXA, {SI_D1, SI_B1, SI_I2} },
817d2201f2fSdrahn { "tm", 4, {{SI(0x91,0,0,0), 0}}, {{SI_MASK, 0}}, I370, {SI_D1, SI_B1, SI_I2} },
818d2201f2fSdrahn { "xi", 4, {{SI(0x97,0,0,0), 0}}, {{SI_MASK, 0}}, I370, {SI_D1, SI_B1, SI_I2} },
819f7cc78ecSespie
820f7cc78ecSespie /* S form instructions */
821d2201f2fSdrahn { "cfc", 4, {{S(0xb21a,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
822d2201f2fSdrahn { "csch", 4, {{S(0xb230,0,0), 0}}, {{S_MASK, 0}}, IXA, {0} },
823d2201f2fSdrahn { "hsch", 4, {{S(0xb231,0,0), 0}}, {{S_MASK, 0}}, IXA, {0} },
824d2201f2fSdrahn { "ipk", 4, {{S(0xb20b,0,0), 0}}, {{S_MASK, 0}}, IXA, {0} },
825d2201f2fSdrahn { "lfpc", 4, {{S(0xb29d,0,0), 0}}, {{S_MASK, 0}}, IBF, {S_D2, S_B2} },
826d2201f2fSdrahn { "lpsw", 4, {{S(0x8200,0,0), 0}}, {{S_MASK, 0}}, I370, {S_D2, S_B2} },
827d2201f2fSdrahn { "msch", 4, {{S(0xb232,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
828d2201f2fSdrahn { "pc", 4, {{S(0xb218,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
829d2201f2fSdrahn { "pcf", 4, {{S(0xb218,0,0), 0}}, {{S_MASK, 0}}, IPC, {S_D2, S_B2} },
830d2201f2fSdrahn { "ptlb", 4, {{S(0xb20d,0,0), 0}}, {{S_MASK, 0}}, IXA, {0} },
831d2201f2fSdrahn { "rchp", 4, {{S(0xb23b,0,0), 0}}, {{S_MASK, 0}}, IXA, {0} },
832d2201f2fSdrahn { "rp", 4, {{S(0xb277,0,0), 0}}, {{S_MASK, 0}}, IRP, {0} },
833d2201f2fSdrahn { "rsch", 4, {{S(0xb238,0,0), 0}}, {{S_MASK, 0}}, IXA, {0} },
834d2201f2fSdrahn { "sac", 4, {{S(0xb219,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
835d2201f2fSdrahn { "sacf", 4, {{S(0xb279,0,0), 0}}, {{S_MASK, 0}}, ISA, {S_D2, S_B2} },
836d2201f2fSdrahn { "sal", 4, {{S(0xb237,0,0), 0}}, {{S_MASK, 0}}, IXA, {0} },
837d2201f2fSdrahn { "schm", 4, {{S(0xb23c,0,0), 0}}, {{S_MASK, 0}}, IXA, {0} },
838d2201f2fSdrahn { "sck", 4, {{S(0xb204,0,0), 0}}, {{S_MASK, 0}}, I370, {S_D2, S_B2} },
839d2201f2fSdrahn { "sckc", 4, {{S(0xb206,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
840d2201f2fSdrahn { "spka", 4, {{S(0xb20a,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
841d2201f2fSdrahn { "spt", 4, {{S(0xb208,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
842d2201f2fSdrahn { "spx", 4, {{S(0xb210,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
843d2201f2fSdrahn { "srnm", 4, {{S(0xb299,0,0), 0}}, {{S_MASK, 0}}, IBF, {S_D2, S_B2} },
844d2201f2fSdrahn { "ssch", 4, {{S(0xb233,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
845d2201f2fSdrahn { "ssm", 4, {{S(0x8000,0,0), 0}}, {{S_MASK, 0}}, I370, {S_D2, S_B2} },
846d2201f2fSdrahn { "stap", 4, {{S(0xb212,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
847d2201f2fSdrahn { "stck", 4, {{S(0xb205,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
848d2201f2fSdrahn { "stckc", 4, {{S(0xb207,0,0), 0}}, {{S_MASK, 0}}, I370, {S_D2, S_B2} },
849d2201f2fSdrahn { "stcps", 4, {{S(0xb23a,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
850d2201f2fSdrahn { "stcrw", 4, {{S(0xb239,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
851d2201f2fSdrahn { "stfpc", 4, {{S(0xb29c,0,0), 0}}, {{S_MASK, 0}}, IBF, {S_D2, S_B2} },
852d2201f2fSdrahn { "stidp", 4, {{S(0xb202,0,0), 0}}, {{S_MASK, 0}}, I370, {S_D2, S_B2} },
853d2201f2fSdrahn { "stpt", 4, {{S(0xb209,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
854d2201f2fSdrahn { "stpx", 4, {{S(0xb211,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
855d2201f2fSdrahn { "stsch", 4, {{S(0xb234,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
856d2201f2fSdrahn { "tpi", 4, {{S(0xb236,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
857d2201f2fSdrahn { "trap4", 4, {{S(0xb2ff,0,0), 0}}, {{S_MASK, 0}}, ITR, {S_D2, S_B2} },
858d2201f2fSdrahn { "ts", 4, {{S(0x9300,0,0), 0}}, {{S_MASK, 0}}, I370, {S_D2, S_B2} },
859d2201f2fSdrahn { "tsch", 4, {{S(0xb235,0,0), 0}}, {{S_MASK, 0}}, IXA, {S_D2, S_B2} },
860f7cc78ecSespie
861f7cc78ecSespie /* SS form instructions */
862d2201f2fSdrahn { "ap", 6, {{SSH(0xfa,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
863d2201f2fSdrahn { "clc", 6, {{SSH(0xd5,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
864d2201f2fSdrahn { "cp", 6, {{SSH(0xf9,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
865d2201f2fSdrahn { "dp", 6, {{SSH(0xfd,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
866d2201f2fSdrahn { "ed", 6, {{SSH(0xde,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
867d2201f2fSdrahn { "edmk", 6, {{SSH(0xdf,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
868d2201f2fSdrahn { "mvc", 6, {{SSH(0xd2,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
869d2201f2fSdrahn { "mvcin", 6, {{SSH(0xe8,0,0,0), 0}}, {{SS_MASK, 0}}, IMI, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
870d2201f2fSdrahn { "mvck", 6, {{SSH(0xd9,0,0,0), 0}}, {{SS_MASK, 0}}, IXA, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
871d2201f2fSdrahn { "mvcp", 6, {{SSH(0xda,0,0,0), 0}}, {{SS_MASK, 0}}, IXA, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
872d2201f2fSdrahn { "mvcs", 6, {{SSH(0xdb,0,0,0), 0}}, {{SS_MASK, 0}}, IXA, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
873d2201f2fSdrahn { "mvn", 6, {{SSH(0xd1,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
874d2201f2fSdrahn { "mvo", 6, {{SSH(0xf1,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
875d2201f2fSdrahn { "mvz", 6, {{SSH(0xd3,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
876d2201f2fSdrahn { "nc", 6, {{SSH(0xd4,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
877d2201f2fSdrahn { "oc", 6, {{SSH(0xd6,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
878d2201f2fSdrahn { "pack", 6, {{SSH(0xf2,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
879d2201f2fSdrahn { "plo", 6, {{SSH(0xee,0,0,0), 0}}, {{SS_MASK, 0}}, IPL, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
880d2201f2fSdrahn { "sp", 6, {{SSH(0xfb,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
881d2201f2fSdrahn { "srp", 6, {{SSH(0xf0,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
882d2201f2fSdrahn { "tr", 6, {{SSH(0xdc,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
883d2201f2fSdrahn { "trt", 6, {{SSH(0xdd,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
884d2201f2fSdrahn { "unpk", 6, {{SSH(0xf3,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
885d2201f2fSdrahn { "xc", 6, {{SSH(0xd7,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
886d2201f2fSdrahn { "zap", 6, {{SSH(0xf8,0,0,0), 0}}, {{SS_MASK, 0}}, I370, {SS_D1,SS_L,SS_B1,SS_D2,SS_B2} },
887f7cc78ecSespie
888f7cc78ecSespie /* SSE form instructions */
889d2201f2fSdrahn { "lasp", 6, {{SSEH(0xe500,0,0), 0}}, {{SSE_MASK, 0}}, IXA, {SS_D1, SS_B1, SS_D2, SS_B2} },
890d2201f2fSdrahn { "mvcdk", 6, {{SSEH(0xe50f,0,0), 0}}, {{SSE_MASK, 0}}, IESA, {SS_D1, SS_B1, SS_D2, SS_B2} },
891d2201f2fSdrahn { "mvcsk", 6, {{SSEH(0xe50e,0,0), 0}}, {{SSE_MASK, 0}}, IESA, {SS_D1, SS_B1, SS_D2, SS_B2} },
892d2201f2fSdrahn { "tprot", 6, {{SSEH(0xe501,0,0), 0}}, {{SSE_MASK, 0}}, IXA, {SS_D1, SS_B1, SS_D2, SS_B2} },
893f7cc78ecSespie
894f7cc78ecSespie /* */
895f7cc78ecSespie };
896f7cc78ecSespie
897f7cc78ecSespie const int i370_num_opcodes =
898f7cc78ecSespie sizeof (i370_opcodes) / sizeof (i370_opcodes[0]);
899f7cc78ecSespie
900f7cc78ecSespie /* The macro table. This is only used by the assembler. */
901f7cc78ecSespie
902f7cc78ecSespie const struct i370_macro i370_macros[] = {
903f7cc78ecSespie { "b", 1, I370, "bc 15,%0" },
904f7cc78ecSespie { "br", 1, I370, "bcr 15,%0" },
905f7cc78ecSespie
906f7cc78ecSespie { "nop", 1, I370, "bc 0,%0" },
907f7cc78ecSespie { "nopr", 1, I370, "bcr 0,%0" },
908f7cc78ecSespie
909f7cc78ecSespie { "bh", 1, I370, "bc 2,%0" },
910f7cc78ecSespie { "bhr", 1, I370, "bcr 2,%0" },
911f7cc78ecSespie { "bl", 1, I370, "bc 4,%0" },
912f7cc78ecSespie { "blr", 1, I370, "bcr 4,%0" },
913f7cc78ecSespie { "be", 1, I370, "bc 8,%0" },
914f7cc78ecSespie { "ber", 1, I370, "bcr 8,%0" },
915f7cc78ecSespie
916f7cc78ecSespie { "bnh", 1, I370, "bc 13,%0" },
917f7cc78ecSespie { "bnhr", 1, I370, "bcr 13,%0" },
918f7cc78ecSespie { "bnl", 1, I370, "bc 11,%0" },
919f7cc78ecSespie { "bnlr", 1, I370, "bcr 11,%0" },
920f7cc78ecSespie { "bne", 1, I370, "bc 7,%0" },
921f7cc78ecSespie { "bner", 1, I370, "bcr 7,%0" },
922f7cc78ecSespie
923f7cc78ecSespie { "bp", 1, I370, "bc 2,%0" },
924f7cc78ecSespie { "bpr", 1, I370, "bcr 2,%0" },
925f7cc78ecSespie { "bm", 1, I370, "bc 4,%0" },
926f7cc78ecSespie { "bmr", 1, I370, "bcr 4,%0" },
927f7cc78ecSespie { "bz", 1, I370, "bc 8,%0" },
928f7cc78ecSespie { "bzr", 1, I370, "bcr 8,%0" },
929f7cc78ecSespie { "bo", 1, I370, "bc 1,%0" },
930f7cc78ecSespie { "bor", 1, I370, "bcr 1,%0" },
931f7cc78ecSespie
932f7cc78ecSespie { "bnp", 1, I370, "bc 13,%0" },
933f7cc78ecSespie { "bnpr", 1, I370, "bcr 13,%0" },
934f7cc78ecSespie { "bnm", 1, I370, "bc 11,%0" },
935f7cc78ecSespie { "bnmr", 1, I370, "bcr 11,%0" },
936f7cc78ecSespie { "bnz", 1, I370, "bc 7,%0" },
937f7cc78ecSespie { "bnzr", 1, I370, "bcr 7,%0" },
938f7cc78ecSespie { "bno", 1, I370, "bc 14,%0" },
939f7cc78ecSespie { "bnor", 1, I370, "bcr 14,%0" },
940f7cc78ecSespie
941f7cc78ecSespie { "sync", 0, I370, "bcr 15,0" },
942f7cc78ecSespie
943f7cc78ecSespie };
944f7cc78ecSespie
945f7cc78ecSespie const int i370_num_macros =
946f7cc78ecSespie sizeof (i370_macros) / sizeof (i370_macros[0]);
947