xref: /openbsd-src/gnu/usr.bin/binutils/opcodes/i370-opc.c (revision cf2f2c5620d6d9a4fd01930983c4b9a1f76d7aa3)
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