xref: /openbsd-src/gnu/usr.bin/binutils-2.17/include/opcode/i960.h (revision 3d8817e467ea46cf4772788d6804dd293abfb01a)
1*3d8817e4Smiod /* Basic 80960 instruction formats.
2*3d8817e4Smiod 
3*3d8817e4Smiod    Copyright 2001 Free Software Foundation, Inc.
4*3d8817e4Smiod 
5*3d8817e4Smiod    This program is free software; you can redistribute it and/or modify
6*3d8817e4Smiod    it under the terms of the GNU General Public License as published by
7*3d8817e4Smiod    the Free Software Foundation; either version 2, or (at your option)
8*3d8817e4Smiod    any later version.
9*3d8817e4Smiod 
10*3d8817e4Smiod    This program is distributed in the hope that it will be useful,
11*3d8817e4Smiod    but WITHOUT ANY WARRANTY; without even the implied warranty of
12*3d8817e4Smiod    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*3d8817e4Smiod    GNU General Public License for more details.
14*3d8817e4Smiod 
15*3d8817e4Smiod    You should have received a copy of the GNU General Public License
16*3d8817e4Smiod    along with this program; if not, write to the Free Software
17*3d8817e4Smiod    Foundation, Inc., 51 Franklin Street - Fifth Floor,
18*3d8817e4Smiod    Boston, MA 02110-1301, USA.
19*3d8817e4Smiod 
20*3d8817e4Smiod   The 'COJ' instructions are actually COBR instructions with the 'b' in
21*3d8817e4Smiod   the mnemonic replaced by a 'j';  they are ALWAYS "de-optimized" if necessary:
22*3d8817e4Smiod   if the displacement will not fit in 13 bits, the assembler will replace them
23*3d8817e4Smiod   with the corresponding compare and branch instructions.
24*3d8817e4Smiod 
25*3d8817e4Smiod   All of the 'MEMn' instructions are the same format; the 'n' in the name
26*3d8817e4Smiod   indicates the default index scale factor (the size of the datum operated on).
27*3d8817e4Smiod 
28*3d8817e4Smiod   The FBRA formats are not actually an instruction format.  They are the
29*3d8817e4Smiod   "convenience directives" for branching on floating-point comparisons,
30*3d8817e4Smiod   each of which generates 2 instructions (a 'bno' and one other branch).
31*3d8817e4Smiod 
32*3d8817e4Smiod   The CALLJ format is not actually an instruction format.  It indicates that
33*3d8817e4Smiod   the instruction generated (a CTRL-format 'call') should have its relocation
34*3d8817e4Smiod   specially flagged for link-time replacement with a 'bal' or 'calls' if
35*3d8817e4Smiod   appropriate.  */
36*3d8817e4Smiod 
37*3d8817e4Smiod #define CTRL	0
38*3d8817e4Smiod #define COBR	1
39*3d8817e4Smiod #define COJ	2
40*3d8817e4Smiod #define REG	3
41*3d8817e4Smiod #define MEM1	4
42*3d8817e4Smiod #define MEM2	5
43*3d8817e4Smiod #define MEM4	6
44*3d8817e4Smiod #define MEM8	7
45*3d8817e4Smiod #define MEM12	8
46*3d8817e4Smiod #define MEM16	9
47*3d8817e4Smiod #define FBRA	10
48*3d8817e4Smiod #define CALLJ	11
49*3d8817e4Smiod 
50*3d8817e4Smiod /* Masks for the mode bits in REG format instructions */
51*3d8817e4Smiod #define M1		0x0800
52*3d8817e4Smiod #define M2		0x1000
53*3d8817e4Smiod #define M3		0x2000
54*3d8817e4Smiod 
55*3d8817e4Smiod /* Generate the 12-bit opcode for a REG format instruction by placing the
56*3d8817e4Smiod  * high 8 bits in instruction bits 24-31, the low 4 bits in instruction bits
57*3d8817e4Smiod  * 7-10.
58*3d8817e4Smiod  */
59*3d8817e4Smiod 
60*3d8817e4Smiod #define REG_OPC(opc)	((opc & 0xff0) << 20) | ((opc & 0xf) << 7)
61*3d8817e4Smiod 
62*3d8817e4Smiod /* Generate a template for a REG format instruction:  place the opcode bits
63*3d8817e4Smiod  * in the appropriate fields and OR in mode bits for the operands that will not
64*3d8817e4Smiod  * be used.  I.e.,
65*3d8817e4Smiod  *		set m1=1, if src1 will not be used
66*3d8817e4Smiod  *		set m2=1, if src2 will not be used
67*3d8817e4Smiod  *		set m3=1, if dst  will not be used
68*3d8817e4Smiod  *
69*3d8817e4Smiod  * Setting the "unused" mode bits to 1 speeds up instruction execution(!).
70*3d8817e4Smiod  * The information is also useful to us because some 1-operand REG instructions
71*3d8817e4Smiod  * use the src1 field, others the dst field; and some 2-operand REG instructions
72*3d8817e4Smiod  * use src1/src2, others src1/dst.  The set mode bits enable us to distinguish.
73*3d8817e4Smiod  */
74*3d8817e4Smiod #define R_0(opc)	( REG_OPC(opc) | M1 | M2 | M3 )	/* No operands      */
75*3d8817e4Smiod #define R_1(opc)	( REG_OPC(opc) | M2 | M3 )	/* 1 operand: src1  */
76*3d8817e4Smiod #define R_1D(opc)	( REG_OPC(opc) | M1 | M2 )	/* 1 operand: dst   */
77*3d8817e4Smiod #define R_2(opc)	( REG_OPC(opc) | M3 )		/* 2 ops: src1/src2 */
78*3d8817e4Smiod #define R_2D(opc)	( REG_OPC(opc) | M2 )		/* 2 ops: src1/dst  */
79*3d8817e4Smiod #define R_3(opc)	( REG_OPC(opc) )		/* 3 operands       */
80*3d8817e4Smiod 
81*3d8817e4Smiod /* DESCRIPTOR BYTES FOR REGISTER OPERANDS
82*3d8817e4Smiod  *
83*3d8817e4Smiod  * Interpret names as follows:
84*3d8817e4Smiod  *	R:   global or local register only
85*3d8817e4Smiod  *	RS:  global, local, or (if target allows) special-function register only
86*3d8817e4Smiod  *	RL:  global or local register, or integer literal
87*3d8817e4Smiod  *	RSL: global, local, or (if target allows) special-function register;
88*3d8817e4Smiod  *		or integer literal
89*3d8817e4Smiod  *	F:   global, local, or floating-point register
90*3d8817e4Smiod  *	FL:  global, local, or floating-point register; or literal (including
91*3d8817e4Smiod  *		floating point)
92*3d8817e4Smiod  *
93*3d8817e4Smiod  * A number appended to a name indicates that registers must be aligned,
94*3d8817e4Smiod  * as follows:
95*3d8817e4Smiod  *	2: register number must be multiple of 2
96*3d8817e4Smiod  *	4: register number must be multiple of 4
97*3d8817e4Smiod  */
98*3d8817e4Smiod 
99*3d8817e4Smiod #define SFR	0x10		/* Mask for the "sfr-OK" bit */
100*3d8817e4Smiod #define LIT	0x08		/* Mask for the "literal-OK" bit */
101*3d8817e4Smiod #define FP	0x04		/* Mask for "floating-point-OK" bit */
102*3d8817e4Smiod 
103*3d8817e4Smiod /* This macro ors the bits together.  Note that 'align' is a mask
104*3d8817e4Smiod  * for the low 0, 1, or 2 bits of the register number, as appropriate.
105*3d8817e4Smiod  */
106*3d8817e4Smiod #define OP(align,lit,fp,sfr)	( align | lit | fp | sfr )
107*3d8817e4Smiod 
108*3d8817e4Smiod #define R	OP( 0, 0,   0,  0   )
109*3d8817e4Smiod #define RS	OP( 0, 0,   0,  SFR )
110*3d8817e4Smiod #define RL	OP( 0, LIT, 0,  0   )
111*3d8817e4Smiod #define RSL	OP( 0, LIT, 0,  SFR )
112*3d8817e4Smiod #define F	OP( 0, 0,   FP, 0   )
113*3d8817e4Smiod #define FL	OP( 0, LIT, FP, 0   )
114*3d8817e4Smiod #define R2	OP( 1, 0,   0,  0   )
115*3d8817e4Smiod #define RL2	OP( 1, LIT, 0,  0   )
116*3d8817e4Smiod #define F2	OP( 1, 0,   FP, 0   )
117*3d8817e4Smiod #define FL2	OP( 1, LIT, FP, 0   )
118*3d8817e4Smiod #define R4	OP( 3, 0,   0,  0   )
119*3d8817e4Smiod #define RL4	OP( 3, LIT, 0,  0   )
120*3d8817e4Smiod #define F4	OP( 3, 0,   FP, 0   )
121*3d8817e4Smiod #define FL4	OP( 3, LIT, FP, 0   )
122*3d8817e4Smiod 
123*3d8817e4Smiod #define M	0x7f	/* Memory operand (MEMA & MEMB format instructions) */
124*3d8817e4Smiod 
125*3d8817e4Smiod /* Macros to extract info from the register operand descriptor byte 'od'.
126*3d8817e4Smiod  */
127*3d8817e4Smiod #define SFR_OK(od)	(od & SFR)	/* TRUE if sfr operand allowed */
128*3d8817e4Smiod #define LIT_OK(od)	(od & LIT)	/* TRUE if literal operand allowed */
129*3d8817e4Smiod #define FP_OK(od)	(od & FP)	/* TRUE if floating-point op allowed */
130*3d8817e4Smiod #define REG_ALIGN(od,n)	((od & 0x3 & n) == 0)
131*3d8817e4Smiod 					/* TRUE if reg #n is properly aligned */
132*3d8817e4Smiod #define MEMOP(od)	(od == M)	/* TRUE if operand is a memory operand*/
133*3d8817e4Smiod 
134*3d8817e4Smiod /* Description of a single i80960 instruction */
135*3d8817e4Smiod struct i960_opcode {
136*3d8817e4Smiod 	long opcode;	/* 32 bits, constant fields filled in, rest zeroed */
137*3d8817e4Smiod 	char *name;	/* Assembler mnemonic				   */
138*3d8817e4Smiod 	short iclass;	/* Class: see #defines below			   */
139*3d8817e4Smiod 	char format;	/* REG, COBR, CTRL, MEMn, COJ, FBRA, or CALLJ	   */
140*3d8817e4Smiod 	char num_ops;	/* Number of operands				   */
141*3d8817e4Smiod 	char operand[3];/* Operand descriptors; same order as assembler instr */
142*3d8817e4Smiod };
143*3d8817e4Smiod 
144*3d8817e4Smiod /* Classes of 960 intructions:
145*3d8817e4Smiod  *	- each instruction falls into one class.
146*3d8817e4Smiod  *	- each target architecture supports one or more classes.
147*3d8817e4Smiod  *
148*3d8817e4Smiod  * EACH CONSTANT MUST CONTAIN 1 AND ONLY 1 SET BIT!:  see targ_has_iclass().
149*3d8817e4Smiod  */
150*3d8817e4Smiod #define I_BASE	0x01	/* 80960 base instruction set	*/
151*3d8817e4Smiod #define I_CX	0x02	/* 80960Cx instruction		*/
152*3d8817e4Smiod #define I_DEC	0x04	/* Decimal instruction		*/
153*3d8817e4Smiod #define I_FP	0x08	/* Floating point instruction	*/
154*3d8817e4Smiod #define I_KX	0x10	/* 80960Kx instruction		*/
155*3d8817e4Smiod #define I_MIL	0x20	/* Military instruction		*/
156*3d8817e4Smiod #define I_CASIM	0x40	/* CA simulator instruction	*/
157*3d8817e4Smiod #define I_CX2	0x80	/* Cx/Jx/Hx instructions	*/
158*3d8817e4Smiod #define I_JX	0x100	/* Jx/Hx instruction		*/
159*3d8817e4Smiod #define I_HX	0x200	/* Hx instructions		*/
160*3d8817e4Smiod 
161*3d8817e4Smiod /******************************************************************************
162*3d8817e4Smiod  *
163*3d8817e4Smiod  *		TABLE OF i960 INSTRUCTION DESCRIPTIONS
164*3d8817e4Smiod  *
165*3d8817e4Smiod  ******************************************************************************/
166*3d8817e4Smiod 
167*3d8817e4Smiod const struct i960_opcode i960_opcodes[] = {
168*3d8817e4Smiod 
169*3d8817e4Smiod 	/* if a CTRL instruction has an operand, it's always a displacement */
170*3d8817e4Smiod 
171*3d8817e4Smiod 	/* callj default=='call' */
172*3d8817e4Smiod 	{ 0x09000000,	"callj",	I_BASE,	CALLJ, 	1, { 0, 0, 0 } },
173*3d8817e4Smiod 	{ 0x08000000,	"b",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
174*3d8817e4Smiod 	{ 0x09000000,	"call",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
175*3d8817e4Smiod 	{ 0x0a000000,	"ret",		I_BASE,	CTRL, 	0, { 0, 0, 0 } },
176*3d8817e4Smiod 	{ 0x0b000000,	"bal",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
177*3d8817e4Smiod 	{ 0x10000000,	"bno",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
178*3d8817e4Smiod 	/* bf same as bno */
179*3d8817e4Smiod 	{ 0x10000000,	"bf",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
180*3d8817e4Smiod 	/* bru same as bno */
181*3d8817e4Smiod 	{ 0x10000000,	"bru",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
182*3d8817e4Smiod 	{ 0x11000000,	"bg",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
183*3d8817e4Smiod 	/* brg same as bg */
184*3d8817e4Smiod 	{ 0x11000000,	"brg",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
185*3d8817e4Smiod 	{ 0x12000000,	"be",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
186*3d8817e4Smiod 	/* bre same as be */
187*3d8817e4Smiod 	{ 0x12000000,	"bre",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
188*3d8817e4Smiod 	{ 0x13000000,	"bge",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
189*3d8817e4Smiod 	/* brge same as bge */
190*3d8817e4Smiod 	{ 0x13000000,	"brge",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
191*3d8817e4Smiod 	{ 0x14000000,	"bl",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
192*3d8817e4Smiod 	/* brl same as bl */
193*3d8817e4Smiod 	{ 0x14000000,	"brl",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
194*3d8817e4Smiod 	{ 0x15000000,	"bne",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
195*3d8817e4Smiod 	/* brlg same as bne */
196*3d8817e4Smiod 	{ 0x15000000,	"brlg",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
197*3d8817e4Smiod 	{ 0x16000000,	"ble",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
198*3d8817e4Smiod 	/* brle same as ble */
199*3d8817e4Smiod 	{ 0x16000000,	"brle",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
200*3d8817e4Smiod 	{ 0x17000000,	"bo",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
201*3d8817e4Smiod 	/* bt same as bo */
202*3d8817e4Smiod 	{ 0x17000000,	"bt",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
203*3d8817e4Smiod 	/* bro same as bo */
204*3d8817e4Smiod 	{ 0x17000000,	"bro",		I_BASE,	CTRL, 	1, { 0, 0, 0 } },
205*3d8817e4Smiod 	{ 0x18000000,	"faultno",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
206*3d8817e4Smiod 	/* faultf same as faultno */
207*3d8817e4Smiod 	{ 0x18000000,	"faultf",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
208*3d8817e4Smiod 	{ 0x19000000,	"faultg",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
209*3d8817e4Smiod 	{ 0x1a000000,	"faulte",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
210*3d8817e4Smiod 	{ 0x1b000000,	"faultge",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
211*3d8817e4Smiod 	{ 0x1c000000,	"faultl",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
212*3d8817e4Smiod 	{ 0x1d000000,	"faultne",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
213*3d8817e4Smiod 	{ 0x1e000000,	"faultle",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
214*3d8817e4Smiod 	{ 0x1f000000,	"faulto",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
215*3d8817e4Smiod 	/* faultt syn for faulto */
216*3d8817e4Smiod 	{ 0x1f000000,	"faultt",	I_BASE,	CTRL, 	0, { 0, 0, 0 } },
217*3d8817e4Smiod 
218*3d8817e4Smiod 	{ 0x01000000,	"syscall",	I_CASIM,CTRL, 	0, { 0, 0, 0 } },
219*3d8817e4Smiod 
220*3d8817e4Smiod 	/* If a COBR (or COJ) has 3 operands, the last one is always a
221*3d8817e4Smiod 	 * displacement and does not appear explicitly in the table.
222*3d8817e4Smiod 	 */
223*3d8817e4Smiod 
224*3d8817e4Smiod 	{ 0x20000000,	"testno",	I_BASE,	COBR,	1, { R, 0, 0 }	},
225*3d8817e4Smiod 	{ 0x21000000,	"testg",	I_BASE,	COBR,	1, { R, 0, 0 }	},
226*3d8817e4Smiod 	{ 0x22000000,	"teste",	I_BASE,	COBR,	1, { R, 0, 0 }	},
227*3d8817e4Smiod 	{ 0x23000000,	"testge",	I_BASE,	COBR,	1, { R, 0, 0 }	},
228*3d8817e4Smiod 	{ 0x24000000,	"testl",	I_BASE,	COBR,	1, { R, 0, 0 }	},
229*3d8817e4Smiod 	{ 0x25000000,	"testne",	I_BASE,	COBR,	1, { R, 0, 0 }	},
230*3d8817e4Smiod 	{ 0x26000000,	"testle",	I_BASE,	COBR,	1, { R, 0, 0 }	},
231*3d8817e4Smiod 	{ 0x27000000,	"testo",	I_BASE,	COBR,	1, { R, 0, 0 }	},
232*3d8817e4Smiod 	{ 0x30000000,	"bbc",		I_BASE,	COBR,	3, { RL, RS, 0 } },
233*3d8817e4Smiod 	{ 0x31000000,	"cmpobg",	I_BASE,	COBR,	3, { RL, RS, 0 } },
234*3d8817e4Smiod 	{ 0x32000000,	"cmpobe",	I_BASE,	COBR,	3, { RL, RS, 0 } },
235*3d8817e4Smiod 	{ 0x33000000,	"cmpobge",	I_BASE,	COBR,	3, { RL, RS, 0 } },
236*3d8817e4Smiod 	{ 0x34000000,	"cmpobl",	I_BASE,	COBR,	3, { RL, RS, 0 } },
237*3d8817e4Smiod 	{ 0x35000000,	"cmpobne",	I_BASE,	COBR,	3, { RL, RS, 0 } },
238*3d8817e4Smiod 	{ 0x36000000,	"cmpoble",	I_BASE,	COBR,	3, { RL, RS, 0 } },
239*3d8817e4Smiod 	{ 0x37000000,	"bbs",		I_BASE,	COBR,	3, { RL, RS, 0 } },
240*3d8817e4Smiod 	{ 0x38000000,	"cmpibno",	I_BASE,	COBR,	3, { RL, RS, 0 } },
241*3d8817e4Smiod 	{ 0x39000000,	"cmpibg",	I_BASE,	COBR,	3, { RL, RS, 0 } },
242*3d8817e4Smiod 	{ 0x3a000000,	"cmpibe",	I_BASE,	COBR,	3, { RL, RS, 0 } },
243*3d8817e4Smiod 	{ 0x3b000000,	"cmpibge",	I_BASE,	COBR,	3, { RL, RS, 0 } },
244*3d8817e4Smiod 	{ 0x3c000000,	"cmpibl",	I_BASE,	COBR,	3, { RL, RS, 0 } },
245*3d8817e4Smiod 	{ 0x3d000000,	"cmpibne",	I_BASE,	COBR,	3, { RL, RS, 0 } },
246*3d8817e4Smiod 	{ 0x3e000000,	"cmpible",	I_BASE,	COBR,	3, { RL, RS, 0 } },
247*3d8817e4Smiod 	{ 0x3f000000,	"cmpibo",	I_BASE,	COBR,	3, { RL, RS, 0 } },
248*3d8817e4Smiod 	{ 0x31000000,	"cmpojg",	I_BASE,	COJ,	3, { RL, RS, 0 } },
249*3d8817e4Smiod 	{ 0x32000000,	"cmpoje",	I_BASE,	COJ,	3, { RL, RS, 0 } },
250*3d8817e4Smiod 	{ 0x33000000,	"cmpojge",	I_BASE,	COJ,	3, { RL, RS, 0 } },
251*3d8817e4Smiod 	{ 0x34000000,	"cmpojl",	I_BASE,	COJ,	3, { RL, RS, 0 } },
252*3d8817e4Smiod 	{ 0x35000000,	"cmpojne",	I_BASE,	COJ,	3, { RL, RS, 0 } },
253*3d8817e4Smiod 	{ 0x36000000,	"cmpojle",	I_BASE,	COJ,	3, { RL, RS, 0 } },
254*3d8817e4Smiod 	{ 0x38000000,	"cmpijno",	I_BASE,	COJ,	3, { RL, RS, 0 } },
255*3d8817e4Smiod 	{ 0x39000000,	"cmpijg",	I_BASE,	COJ,	3, { RL, RS, 0 } },
256*3d8817e4Smiod 	{ 0x3a000000,	"cmpije",	I_BASE,	COJ,	3, { RL, RS, 0 } },
257*3d8817e4Smiod 	{ 0x3b000000,	"cmpijge",	I_BASE,	COJ,	3, { RL, RS, 0 } },
258*3d8817e4Smiod 	{ 0x3c000000,	"cmpijl",	I_BASE,	COJ,	3, { RL, RS, 0 } },
259*3d8817e4Smiod 	{ 0x3d000000,	"cmpijne",	I_BASE,	COJ,	3, { RL, RS, 0 } },
260*3d8817e4Smiod 	{ 0x3e000000,	"cmpijle",	I_BASE,	COJ,	3, { RL, RS, 0 } },
261*3d8817e4Smiod 	{ 0x3f000000,	"cmpijo",	I_BASE,	COJ,	3, { RL, RS, 0 } },
262*3d8817e4Smiod 
263*3d8817e4Smiod 	{ 0x80000000,	"ldob",		I_BASE,	MEM1,	2, { M,  R,  0 } },
264*3d8817e4Smiod 	{ 0x82000000,	"stob",		I_BASE,	MEM1,	2, { R,  M,  0 } },
265*3d8817e4Smiod 	{ 0x84000000,	"bx",		I_BASE,	MEM1,	1, { M,  0,  0 } },
266*3d8817e4Smiod 	{ 0x85000000,	"balx",		I_BASE,	MEM1,	2, { M,  R,  0 } },
267*3d8817e4Smiod 	{ 0x86000000,	"callx",	I_BASE,	MEM1,	1, { M,  0,  0 } },
268*3d8817e4Smiod 	{ 0x88000000,	"ldos",		I_BASE,	MEM2,	2, { M,  R,  0 } },
269*3d8817e4Smiod 	{ 0x8a000000,	"stos",		I_BASE,	MEM2,	2, { R,  M,  0 } },
270*3d8817e4Smiod 	{ 0x8c000000,	"lda",		I_BASE,	MEM1,	2, { M,  R,  0 } },
271*3d8817e4Smiod 	{ 0x90000000,	"ld",		I_BASE,	MEM4,	2, { M,  R,  0 } },
272*3d8817e4Smiod 	{ 0x92000000,	"st",		I_BASE,	MEM4,	2, { R,  M,  0 } },
273*3d8817e4Smiod 	{ 0x98000000,	"ldl",		I_BASE,	MEM8,	2, { M,  R2, 0 } },
274*3d8817e4Smiod 	{ 0x9a000000,	"stl",		I_BASE,	MEM8,	2, { R2, M,  0 } },
275*3d8817e4Smiod 	{ 0xa0000000,	"ldt",		I_BASE,	MEM12,	2, { M,  R4, 0 } },
276*3d8817e4Smiod 	{ 0xa2000000,	"stt",		I_BASE,	MEM12,	2, { R4, M,  0 } },
277*3d8817e4Smiod 	{ 0xb0000000,	"ldq",		I_BASE,	MEM16,	2, { M,  R4, 0 } },
278*3d8817e4Smiod 	{ 0xb2000000,	"stq",		I_BASE,	MEM16,	2, { R4, M,  0 } },
279*3d8817e4Smiod 	{ 0xc0000000,	"ldib",		I_BASE,	MEM1,	2, { M,  R,  0 } },
280*3d8817e4Smiod 	{ 0xc2000000,	"stib",		I_BASE,	MEM1,	2, { R,  M,  0 } },
281*3d8817e4Smiod 	{ 0xc8000000,	"ldis",		I_BASE,	MEM2,	2, { M,  R,  0 } },
282*3d8817e4Smiod 	{ 0xca000000,	"stis",		I_BASE,	MEM2,	2, { R,  M,  0 } },
283*3d8817e4Smiod 
284*3d8817e4Smiod 	{ R_3(0x580),	"notbit",	I_BASE,	REG,	3, { RSL,RSL,RS } },
285*3d8817e4Smiod 	{ R_3(0x581),	"and",		I_BASE,	REG,	3, { RSL,RSL,RS } },
286*3d8817e4Smiod 	{ R_3(0x582),	"andnot",	I_BASE,	REG,	3, { RSL,RSL,RS } },
287*3d8817e4Smiod 	{ R_3(0x583),	"setbit",	I_BASE,	REG,	3, { RSL,RSL,RS } },
288*3d8817e4Smiod 	{ R_3(0x584),	"notand",	I_BASE,	REG,	3, { RSL,RSL,RS } },
289*3d8817e4Smiod 	{ R_3(0x586),	"xor",		I_BASE,	REG,	3, { RSL,RSL,RS } },
290*3d8817e4Smiod 	{ R_3(0x587),	"or",		I_BASE,	REG,	3, { RSL,RSL,RS } },
291*3d8817e4Smiod 	{ R_3(0x588),	"nor",		I_BASE,	REG,	3, { RSL,RSL,RS } },
292*3d8817e4Smiod 	{ R_3(0x589),	"xnor",		I_BASE,	REG,	3, { RSL,RSL,RS } },
293*3d8817e4Smiod 	{ R_2D(0x58a),	"not",		I_BASE,	REG,	2, { RSL,RS, 0 } },
294*3d8817e4Smiod 	{ R_3(0x58b),	"ornot",	I_BASE,	REG,	3, { RSL,RSL,RS } },
295*3d8817e4Smiod 	{ R_3(0x58c),	"clrbit",	I_BASE,	REG,	3, { RSL,RSL,RS } },
296*3d8817e4Smiod 	{ R_3(0x58d),	"notor",	I_BASE,	REG,	3, { RSL,RSL,RS } },
297*3d8817e4Smiod 	{ R_3(0x58e),	"nand",		I_BASE,	REG,	3, { RSL,RSL,RS } },
298*3d8817e4Smiod 	{ R_3(0x58f),	"alterbit",	I_BASE,	REG,	3, { RSL,RSL,RS } },
299*3d8817e4Smiod 	{ R_3(0x590),	"addo",		I_BASE,	REG,	3, { RSL,RSL,RS } },
300*3d8817e4Smiod 	{ R_3(0x591),	"addi",		I_BASE,	REG,	3, { RSL,RSL,RS } },
301*3d8817e4Smiod 	{ R_3(0x592),	"subo",		I_BASE,	REG,	3, { RSL,RSL,RS } },
302*3d8817e4Smiod 	{ R_3(0x593),	"subi",		I_BASE,	REG,	3, { RSL,RSL,RS } },
303*3d8817e4Smiod 	{ R_3(0x598),	"shro",		I_BASE,	REG,	3, { RSL,RSL,RS } },
304*3d8817e4Smiod 	{ R_3(0x59a),	"shrdi",	I_BASE,	REG,	3, { RSL,RSL,RS } },
305*3d8817e4Smiod 	{ R_3(0x59b),	"shri",		I_BASE,	REG,	3, { RSL,RSL,RS } },
306*3d8817e4Smiod 	{ R_3(0x59c),	"shlo",		I_BASE,	REG,	3, { RSL,RSL,RS } },
307*3d8817e4Smiod 	{ R_3(0x59d),	"rotate",	I_BASE,	REG,	3, { RSL,RSL,RS } },
308*3d8817e4Smiod 	{ R_3(0x59e),	"shli",		I_BASE,	REG,	3, { RSL,RSL,RS } },
309*3d8817e4Smiod 	{ R_2(0x5a0),	"cmpo",		I_BASE,	REG,	2, { RSL,RSL, 0 } },
310*3d8817e4Smiod 	{ R_2(0x5a1),	"cmpi",		I_BASE,	REG,	2, { RSL,RSL, 0 } },
311*3d8817e4Smiod 	{ R_2(0x5a2),	"concmpo",	I_BASE,	REG,	2, { RSL,RSL, 0 } },
312*3d8817e4Smiod 	{ R_2(0x5a3),	"concmpi",	I_BASE,	REG,	2, { RSL,RSL, 0 } },
313*3d8817e4Smiod 	{ R_3(0x5a4),	"cmpinco",	I_BASE,	REG,	3, { RSL,RSL,RS } },
314*3d8817e4Smiod 	{ R_3(0x5a5),	"cmpinci",	I_BASE,	REG,	3, { RSL,RSL,RS } },
315*3d8817e4Smiod 	{ R_3(0x5a6),	"cmpdeco",	I_BASE,	REG,	3, { RSL,RSL,RS } },
316*3d8817e4Smiod 	{ R_3(0x5a7),	"cmpdeci",	I_BASE,	REG,	3, { RSL,RSL,RS } },
317*3d8817e4Smiod 	{ R_2(0x5ac),	"scanbyte",	I_BASE,	REG,	2, { RSL,RSL, 0 } },
318*3d8817e4Smiod 	{ R_2(0x5ae),	"chkbit",	I_BASE,	REG,	2, { RSL,RSL, 0 } },
319*3d8817e4Smiod 	{ R_3(0x5b0),	"addc",		I_BASE,	REG,	3, { RSL,RSL,RS } },
320*3d8817e4Smiod 	{ R_3(0x5b2),	"subc",		I_BASE,	REG,	3, { RSL,RSL,RS } },
321*3d8817e4Smiod 	{ R_2D(0x5cc),	"mov",		I_BASE,	REG,	2, { RSL,RS, 0 } },
322*3d8817e4Smiod 	{ R_2D(0x5dc),	"movl",		I_BASE,	REG,	2, { RL2,R2, 0 } },
323*3d8817e4Smiod 	{ R_2D(0x5ec),	"movt",		I_BASE,	REG,	2, { RL4,R4, 0 } },
324*3d8817e4Smiod 	{ R_2D(0x5fc),	"movq",		I_BASE,	REG,	2, { RL4,R4, 0 } },
325*3d8817e4Smiod 	{ R_3(0x610),	"atmod",	I_BASE,	REG,	3, { RS, RSL,R } },
326*3d8817e4Smiod 	{ R_3(0x612),	"atadd",	I_BASE,	REG,	3, { RS, RSL,RS } },
327*3d8817e4Smiod 	{ R_2D(0x640),	"spanbit",	I_BASE,	REG,	2, { RSL,RS, 0 } },
328*3d8817e4Smiod 	{ R_2D(0x641),	"scanbit",	I_BASE,	REG,	2, { RSL,RS, 0 } },
329*3d8817e4Smiod 	{ R_3(0x645),	"modac",	I_BASE,	REG,	3, { RSL,RSL,RS } },
330*3d8817e4Smiod 	{ R_3(0x650),	"modify",	I_BASE,	REG,	3, { RSL,RSL,R } },
331*3d8817e4Smiod 	{ R_3(0x651),	"extract",	I_BASE,	REG,	3, { RSL,RSL,R } },
332*3d8817e4Smiod 	{ R_3(0x654),	"modtc",	I_BASE,	REG,	3, { RSL,RSL,RS } },
333*3d8817e4Smiod 	{ R_3(0x655),	"modpc",	I_BASE,	REG,	3, { RSL,RSL,R } },
334*3d8817e4Smiod 	{ R_1(0x660),	"calls",	I_BASE,	REG,	1, { RSL, 0, 0 } },
335*3d8817e4Smiod 	{ R_0(0x66b),	"mark",		I_BASE,	REG,	0, { 0, 0, 0 }	},
336*3d8817e4Smiod 	{ R_0(0x66c),	"fmark",	I_BASE,	REG,	0, { 0, 0, 0 }	},
337*3d8817e4Smiod 	{ R_0(0x66d),	"flushreg",	I_BASE,	REG,	0, { 0, 0, 0 }	},
338*3d8817e4Smiod 	{ R_0(0x66f),	"syncf",	I_BASE,	REG,	0, { 0, 0, 0 }	},
339*3d8817e4Smiod 	{ R_3(0x670),	"emul",		I_BASE,	REG,	3, { RSL,RSL,R2 } },
340*3d8817e4Smiod 	{ R_3(0x671),	"ediv",		I_BASE,	REG,	3, { RSL,RL2,RS } },
341*3d8817e4Smiod 	{ R_2D(0x672),	"cvtadr",	I_CASIM,REG, 	2, { RL, R2, 0 } },
342*3d8817e4Smiod 	{ R_3(0x701),	"mulo",		I_BASE,	REG,	3, { RSL,RSL,RS } },
343*3d8817e4Smiod 	{ R_3(0x708),	"remo",		I_BASE,	REG,	3, { RSL,RSL,RS } },
344*3d8817e4Smiod 	{ R_3(0x70b),	"divo",		I_BASE,	REG,	3, { RSL,RSL,RS } },
345*3d8817e4Smiod 	{ R_3(0x741),	"muli",		I_BASE,	REG,	3, { RSL,RSL,RS } },
346*3d8817e4Smiod 	{ R_3(0x748),	"remi",		I_BASE,	REG,	3, { RSL,RSL,RS } },
347*3d8817e4Smiod 	{ R_3(0x749),	"modi",		I_BASE,	REG,	3, { RSL,RSL,RS } },
348*3d8817e4Smiod 	{ R_3(0x74b),	"divi",		I_BASE,	REG,	3, { RSL,RSL,RS } },
349*3d8817e4Smiod 
350*3d8817e4Smiod 	/* Floating-point instructions */
351*3d8817e4Smiod 
352*3d8817e4Smiod 	{ R_2D(0x674),	"cvtir",	I_FP,	REG,	2, { RL, F, 0 } },
353*3d8817e4Smiod 	{ R_2D(0x675),	"cvtilr",	I_FP,	REG,	2, { RL, F, 0 } },
354*3d8817e4Smiod 	{ R_3(0x676),	"scalerl",	I_FP,	REG,	3, { RL, FL2,F2 } },
355*3d8817e4Smiod 	{ R_3(0x677),	"scaler",	I_FP,	REG,	3, { RL, FL, F } },
356*3d8817e4Smiod 	{ R_3(0x680),	"atanr",	I_FP,	REG,	3, { FL, FL, F } },
357*3d8817e4Smiod 	{ R_3(0x681),	"logepr",	I_FP,	REG,	3, { FL, FL, F } },
358*3d8817e4Smiod 	{ R_3(0x682),	"logr",		I_FP,	REG,	3, { FL, FL, F } },
359*3d8817e4Smiod 	{ R_3(0x683),	"remr",		I_FP,	REG,	3, { FL, FL, F } },
360*3d8817e4Smiod 	{ R_2(0x684),	"cmpor",	I_FP,	REG,	2, { FL, FL, 0 } },
361*3d8817e4Smiod 	{ R_2(0x685),	"cmpr",		I_FP,	REG,	2, { FL, FL, 0 } },
362*3d8817e4Smiod 	{ R_2D(0x688),	"sqrtr",	I_FP,	REG,	2, { FL, F, 0 } },
363*3d8817e4Smiod 	{ R_2D(0x689),	"expr",		I_FP,	REG,	2, { FL, F, 0 } },
364*3d8817e4Smiod 	{ R_2D(0x68a),	"logbnr",	I_FP,	REG,	2, { FL, F, 0 } },
365*3d8817e4Smiod 	{ R_2D(0x68b),	"roundr",	I_FP,	REG,	2, { FL, F, 0 } },
366*3d8817e4Smiod 	{ R_2D(0x68c),	"sinr",		I_FP,	REG,	2, { FL, F, 0 } },
367*3d8817e4Smiod 	{ R_2D(0x68d),	"cosr",		I_FP,	REG,	2, { FL, F, 0 } },
368*3d8817e4Smiod 	{ R_2D(0x68e),	"tanr",		I_FP,	REG,	2, { FL, F, 0 } },
369*3d8817e4Smiod 	{ R_1(0x68f),	"classr",	I_FP,	REG,	1, { FL, 0, 0 }	},
370*3d8817e4Smiod 	{ R_3(0x690),	"atanrl",	I_FP,	REG,	3, { FL2,FL2,F2 } },
371*3d8817e4Smiod 	{ R_3(0x691),	"logeprl",	I_FP,	REG,	3, { FL2,FL2,F2 } },
372*3d8817e4Smiod 	{ R_3(0x692),	"logrl",	I_FP,	REG,	3, { FL2,FL2,F2 } },
373*3d8817e4Smiod 	{ R_3(0x693),	"remrl",	I_FP,	REG,	3, { FL2,FL2,F2 } },
374*3d8817e4Smiod 	{ R_2(0x694),	"cmporl",	I_FP,	REG,	2, { FL2,FL2, 0 } },
375*3d8817e4Smiod 	{ R_2(0x695),	"cmprl",	I_FP,	REG,	2, { FL2,FL2, 0 } },
376*3d8817e4Smiod 	{ R_2D(0x698),	"sqrtrl",	I_FP,	REG,	2, { FL2,F2, 0 } },
377*3d8817e4Smiod 	{ R_2D(0x699),	"exprl",	I_FP,	REG,	2, { FL2,F2, 0 } },
378*3d8817e4Smiod 	{ R_2D(0x69a),	"logbnrl",	I_FP,	REG,	2, { FL2,F2, 0 } },
379*3d8817e4Smiod 	{ R_2D(0x69b),	"roundrl",	I_FP,	REG,	2, { FL2,F2, 0 } },
380*3d8817e4Smiod 	{ R_2D(0x69c),	"sinrl",	I_FP,	REG,	2, { FL2,F2, 0 } },
381*3d8817e4Smiod 	{ R_2D(0x69d),	"cosrl",	I_FP,	REG,	2, { FL2,F2, 0 } },
382*3d8817e4Smiod 	{ R_2D(0x69e),	"tanrl",	I_FP,	REG,	2, { FL2,F2, 0 } },
383*3d8817e4Smiod 	{ R_1(0x69f),	"classrl",	I_FP,	REG,	1, { FL2, 0, 0 } },
384*3d8817e4Smiod 	{ R_2D(0x6c0),	"cvtri",	I_FP,	REG,	2, { FL, R, 0 } },
385*3d8817e4Smiod 	{ R_2D(0x6c1),	"cvtril",	I_FP,	REG,	2, { FL, R2, 0 } },
386*3d8817e4Smiod 	{ R_2D(0x6c2),	"cvtzri",	I_FP,	REG,	2, { FL, R, 0 } },
387*3d8817e4Smiod 	{ R_2D(0x6c3),	"cvtzril",	I_FP,	REG,	2, { FL, R2, 0 } },
388*3d8817e4Smiod 	{ R_2D(0x6c9),	"movr",		I_FP,	REG,	2, { FL, F, 0 } },
389*3d8817e4Smiod 	{ R_2D(0x6d9),	"movrl",	I_FP,	REG,	2, { FL2,F2, 0 } },
390*3d8817e4Smiod 	{ R_2D(0x6e1),	"movre",	I_FP,	REG,	2, { FL4,F4, 0 } },
391*3d8817e4Smiod 	{ R_3(0x6e2),	"cpysre",	I_FP,	REG,	3, { FL4,FL4,F4 } },
392*3d8817e4Smiod 	{ R_3(0x6e3),	"cpyrsre",	I_FP,	REG,	3, { FL4,FL4,F4 } },
393*3d8817e4Smiod 	{ R_3(0x78b),	"divr",		I_FP,	REG,	3, { FL, FL, F } },
394*3d8817e4Smiod 	{ R_3(0x78c),	"mulr",		I_FP,	REG,	3, { FL, FL, F } },
395*3d8817e4Smiod 	{ R_3(0x78d),	"subr",		I_FP,	REG,	3, { FL, FL, F } },
396*3d8817e4Smiod 	{ R_3(0x78f),	"addr",		I_FP,	REG,	3, { FL, FL, F } },
397*3d8817e4Smiod 	{ R_3(0x79b),	"divrl",	I_FP,	REG,	3, { FL2,FL2,F2 } },
398*3d8817e4Smiod 	{ R_3(0x79c),	"mulrl",	I_FP,	REG,	3, { FL2,FL2,F2 } },
399*3d8817e4Smiod 	{ R_3(0x79d),	"subrl",	I_FP,	REG,	3, { FL2,FL2,F2 } },
400*3d8817e4Smiod 	{ R_3(0x79f),	"addrl",	I_FP,	REG,	3, { FL2,FL2,F2 } },
401*3d8817e4Smiod 
402*3d8817e4Smiod 	/* These are the floating point branch instructions.  Each actually
403*3d8817e4Smiod 	 * generates 2 branch instructions:  the first a CTRL instruction with
404*3d8817e4Smiod 	 * the indicated opcode, and the second a 'bno'.
405*3d8817e4Smiod 	 */
406*3d8817e4Smiod 
407*3d8817e4Smiod 	{ 0x12000000,	"brue",		I_FP,	FBRA, 	1, { 0, 0, 0 }	},
408*3d8817e4Smiod 	{ 0x11000000,	"brug",		I_FP,	FBRA, 	1, { 0, 0, 0 }	},
409*3d8817e4Smiod 	{ 0x13000000,	"bruge",	I_FP,	FBRA, 	1, { 0, 0, 0 }	},
410*3d8817e4Smiod 	{ 0x14000000,	"brul",		I_FP,	FBRA, 	1, { 0, 0, 0 }	},
411*3d8817e4Smiod 	{ 0x16000000,	"brule",	I_FP,	FBRA, 	1, { 0, 0, 0 }	},
412*3d8817e4Smiod 	{ 0x15000000,	"brulg",	I_FP,	FBRA, 	1, { 0, 0, 0 }	},
413*3d8817e4Smiod 
414*3d8817e4Smiod 
415*3d8817e4Smiod 	/* Decimal instructions */
416*3d8817e4Smiod 
417*3d8817e4Smiod 	{ R_3(0x642),	"daddc",	I_DEC,	REG,	3, { RSL,RSL,RS } },
418*3d8817e4Smiod 	{ R_3(0x643),	"dsubc",	I_DEC,	REG,	3, { RSL,RSL,RS } },
419*3d8817e4Smiod 	{ R_2D(0x644),	"dmovt",	I_DEC,	REG,	2, { RSL,RS, 0 } },
420*3d8817e4Smiod 
421*3d8817e4Smiod 
422*3d8817e4Smiod 	/* KX extensions */
423*3d8817e4Smiod 
424*3d8817e4Smiod 	{ R_2(0x600),	"synmov",	I_KX,	REG,	2, { R,  R, 0 } },
425*3d8817e4Smiod 	{ R_2(0x601),	"synmovl",	I_KX,	REG,	2, { R,  R, 0 } },
426*3d8817e4Smiod 	{ R_2(0x602),	"synmovq",	I_KX,	REG,	2, { R,  R, 0 } },
427*3d8817e4Smiod 	{ R_2D(0x615),	"synld",	I_KX,	REG,	2, { R,  R, 0 } },
428*3d8817e4Smiod 
429*3d8817e4Smiod 
430*3d8817e4Smiod 	/* MC extensions */
431*3d8817e4Smiod 
432*3d8817e4Smiod 	{ R_3(0x603),	"cmpstr",	I_MIL,	REG,	3, { R,  R,  RL } },
433*3d8817e4Smiod 	{ R_3(0x604),	"movqstr",	I_MIL,	REG,	3, { R,  R,  RL } },
434*3d8817e4Smiod 	{ R_3(0x605),	"movstr",	I_MIL,	REG,	3, { R,  R,  RL } },
435*3d8817e4Smiod 	{ R_2D(0x613),	"inspacc",	I_MIL,	REG,	2, { R,  R, 0 } },
436*3d8817e4Smiod 	{ R_2D(0x614),	"ldphy",	I_MIL,	REG,	2, { R,  R, 0 } },
437*3d8817e4Smiod 	{ R_3(0x617),	"fill",		I_MIL,	REG,	3, { R,  RL, RL } },
438*3d8817e4Smiod 	{ R_2D(0x646),	"condrec",	I_MIL,	REG,	2, { R,  R, 0 } },
439*3d8817e4Smiod 	{ R_2D(0x656),	"receive",	I_MIL,	REG,	2, { R,  R, 0 } },
440*3d8817e4Smiod 	{ R_3(0x662),	"send",		I_MIL,	REG,	3, { R,  RL, R } },
441*3d8817e4Smiod 	{ R_1(0x663),	"sendserv",	I_MIL,	REG,	1, { R, 0, 0 }	},
442*3d8817e4Smiod 	{ R_1(0x664),	"resumprcs",	I_MIL,	REG,	1, { R, 0, 0 }	},
443*3d8817e4Smiod 	{ R_1(0x665),	"schedprcs",	I_MIL,	REG,	1, { R, 0, 0 }	},
444*3d8817e4Smiod 	{ R_0(0x666),	"saveprcs",	I_MIL,	REG,	0, { 0, 0, 0 }	},
445*3d8817e4Smiod 	{ R_1(0x668),	"condwait",	I_MIL,	REG,	1, { R, 0, 0 }	},
446*3d8817e4Smiod 	{ R_1(0x669),	"wait",		I_MIL,	REG,	1, { R, 0, 0 }	},
447*3d8817e4Smiod 	{ R_1(0x66a),	"signal",	I_MIL,	REG,	1, { R, 0, 0 }	},
448*3d8817e4Smiod 	{ R_1D(0x673),	"ldtime",	I_MIL,	REG,	1, { R2, 0, 0 }	},
449*3d8817e4Smiod 
450*3d8817e4Smiod 
451*3d8817e4Smiod 	/* CX extensions */
452*3d8817e4Smiod 
453*3d8817e4Smiod 	{ R_3(0x5d8),	"eshro",	I_CX2,	REG,	3, { RSL,RSL,RS } },
454*3d8817e4Smiod 	{ R_3(0x630),	"sdma",		I_CX,	REG,	3, { RSL,RSL,RL } },
455*3d8817e4Smiod 	{ R_3(0x631),	"udma",		I_CX,	REG,	0, { 0, 0, 0 }	},
456*3d8817e4Smiod 	{ R_3(0x659),	"sysctl",	I_CX2,	REG,	3, { RSL,RSL,RL } },
457*3d8817e4Smiod 
458*3d8817e4Smiod 
459*3d8817e4Smiod 	/* Jx extensions.  */
460*3d8817e4Smiod 	{ R_3(0x780),	"addono",	I_JX,	REG,	3, { RSL,RSL,RS } },
461*3d8817e4Smiod 	{ R_3(0x790),	"addog",	I_JX,	REG,	3, { RSL,RSL,RS } },
462*3d8817e4Smiod 	{ R_3(0x7a0),	"addoe",	I_JX,	REG,	3, { RSL,RSL,RS } },
463*3d8817e4Smiod 	{ R_3(0x7b0),	"addoge",	I_JX,	REG,	3, { RSL,RSL,RS } },
464*3d8817e4Smiod 	{ R_3(0x7c0),	"addol",	I_JX,	REG,	3, { RSL,RSL,RS } },
465*3d8817e4Smiod 	{ R_3(0x7d0),	"addone",	I_JX,	REG,	3, { RSL,RSL,RS } },
466*3d8817e4Smiod 	{ R_3(0x7e0),	"addole",	I_JX,	REG,	3, { RSL,RSL,RS } },
467*3d8817e4Smiod 	{ R_3(0x7f0),	"addoo",	I_JX,	REG,	3, { RSL,RSL,RS } },
468*3d8817e4Smiod 	{ R_3(0x781),	"addino",	I_JX,	REG,	3, { RSL,RSL,RS } },
469*3d8817e4Smiod 	{ R_3(0x791),	"addig",	I_JX,	REG,	3, { RSL,RSL,RS } },
470*3d8817e4Smiod 	{ R_3(0x7a1),	"addie",	I_JX,	REG,	3, { RSL,RSL,RS } },
471*3d8817e4Smiod 	{ R_3(0x7b1),	"addige",	I_JX,	REG,	3, { RSL,RSL,RS } },
472*3d8817e4Smiod 	{ R_3(0x7c1),	"addil",	I_JX,	REG,	3, { RSL,RSL,RS } },
473*3d8817e4Smiod 	{ R_3(0x7d1),	"addine",	I_JX,	REG,	3, { RSL,RSL,RS } },
474*3d8817e4Smiod 	{ R_3(0x7e1),	"addile",	I_JX,	REG,	3, { RSL,RSL,RS } },
475*3d8817e4Smiod 	{ R_3(0x7f1),	"addio",	I_JX,	REG,	3, { RSL,RSL,RS } },
476*3d8817e4Smiod 
477*3d8817e4Smiod 	{ R_2D(0x5ad),	"bswap",	I_JX,	REG,	2, { RSL, RS, 0 } },
478*3d8817e4Smiod 
479*3d8817e4Smiod 	{ R_2(0x594),	"cmpob",	I_JX,	REG,	2, { RSL,RSL, 0 } },
480*3d8817e4Smiod 	{ R_2(0x595),	"cmpib",	I_JX,	REG,	2, { RSL,RSL, 0 } },
481*3d8817e4Smiod 	{ R_2(0x596),	"cmpos",	I_JX,	REG,	2, { RSL,RSL, 0 } },
482*3d8817e4Smiod 	{ R_2(0x597),	"cmpis",	I_JX,	REG,	2, { RSL,RSL, 0 } },
483*3d8817e4Smiod 
484*3d8817e4Smiod 	{ R_3(0x784),	"selno",	I_JX,	REG,	3, { RSL,RSL,RS } },
485*3d8817e4Smiod 	{ R_3(0x794),	"selg",		I_JX,	REG,	3, { RSL,RSL,RS } },
486*3d8817e4Smiod 	{ R_3(0x7a4),	"sele",		I_JX,	REG,	3, { RSL,RSL,RS } },
487*3d8817e4Smiod 	{ R_3(0x7b4),	"selge",	I_JX,	REG,	3, { RSL,RSL,RS } },
488*3d8817e4Smiod 	{ R_3(0x7c4),	"sell",		I_JX,	REG,	3, { RSL,RSL,RS } },
489*3d8817e4Smiod 	{ R_3(0x7d4),	"selne",	I_JX,	REG,	3, { RSL,RSL,RS } },
490*3d8817e4Smiod 	{ R_3(0x7e4),	"selle",	I_JX,	REG,	3, { RSL,RSL,RS } },
491*3d8817e4Smiod 	{ R_3(0x7f4),	"selo",		I_JX,	REG,	3, { RSL,RSL,RS } },
492*3d8817e4Smiod 
493*3d8817e4Smiod 	{ R_3(0x782),	"subono",	I_JX,	REG,	3, { RSL,RSL,RS } },
494*3d8817e4Smiod 	{ R_3(0x792),	"subog",	I_JX,	REG,	3, { RSL,RSL,RS } },
495*3d8817e4Smiod 	{ R_3(0x7a2),	"suboe",	I_JX,	REG,	3, { RSL,RSL,RS } },
496*3d8817e4Smiod 	{ R_3(0x7b2),	"suboge",	I_JX,	REG,	3, { RSL,RSL,RS } },
497*3d8817e4Smiod 	{ R_3(0x7c2),	"subol",	I_JX,	REG,	3, { RSL,RSL,RS } },
498*3d8817e4Smiod 	{ R_3(0x7d2),	"subone",	I_JX,	REG,	3, { RSL,RSL,RS } },
499*3d8817e4Smiod 	{ R_3(0x7e2),	"subole",	I_JX,	REG,	3, { RSL,RSL,RS } },
500*3d8817e4Smiod 	{ R_3(0x7f2),	"suboo",	I_JX,	REG,	3, { RSL,RSL,RS } },
501*3d8817e4Smiod 	{ R_3(0x783),	"subino",	I_JX,	REG,	3, { RSL,RSL,RS } },
502*3d8817e4Smiod 	{ R_3(0x793),	"subig",	I_JX,	REG,	3, { RSL,RSL,RS } },
503*3d8817e4Smiod 	{ R_3(0x7a3),	"subie",	I_JX,	REG,	3, { RSL,RSL,RS } },
504*3d8817e4Smiod 	{ R_3(0x7b3),	"subige",	I_JX,	REG,	3, { RSL,RSL,RS } },
505*3d8817e4Smiod 	{ R_3(0x7c3),	"subil",	I_JX,	REG,	3, { RSL,RSL,RS } },
506*3d8817e4Smiod 	{ R_3(0x7d3),	"subine",	I_JX,	REG,	3, { RSL,RSL,RS } },
507*3d8817e4Smiod 	{ R_3(0x7e3),	"subile",	I_JX,	REG,	3, { RSL,RSL,RS } },
508*3d8817e4Smiod 	{ R_3(0x7f3),	"subio",	I_JX,	REG,	3, { RSL,RSL,RS } },
509*3d8817e4Smiod 
510*3d8817e4Smiod 	{ R_3(0x65c),	"dcctl",	I_JX,	REG,	3, { RSL,RSL,RL } },
511*3d8817e4Smiod 	{ R_3(0x65b),	"icctl",	I_JX,	REG,	3, { RSL,RSL,RS } },
512*3d8817e4Smiod 	{ R_2D(0x658),	"intctl",	I_JX,	REG,	2, { RSL, RS, 0 } },
513*3d8817e4Smiod 	{ R_0(0x5b4),	"intdis",	I_JX,	REG,	0, {   0,  0, 0 } },
514*3d8817e4Smiod 	{ R_0(0x5b5),	"inten",	I_JX,	REG,	0, {   0,  0, 0 } },
515*3d8817e4Smiod 	{ R_0(0x65d),	"halt",		I_JX,	REG,	1, { RSL,  0, 0 } },
516*3d8817e4Smiod 
517*3d8817e4Smiod 	/* Hx extensions.  */
518*3d8817e4Smiod 	{ 0xac000000,	"dcinva",	I_HX,	MEM1,	1, {   M,  0, 0 } },
519*3d8817e4Smiod 
520*3d8817e4Smiod 	/* END OF TABLE */
521*3d8817e4Smiod 
522*3d8817e4Smiod 	{ 0,		NULL,		0,	0,	0, { 0, 0, 0 }	}
523*3d8817e4Smiod };
524*3d8817e4Smiod 
525*3d8817e4Smiod  /* end of i960-opcode.h */
526