1/* i860_opcode.h -- Table of opcodes for the i860.
2   Copyright (C) 1989 Free Software Foundation, Inc.
3
4This file is part of GAS, the GNU Assembler.
5
6GAS is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 1, or (at your option)
9any later version.
10
11GAS is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GAS; see the file COPYING.  If not, write to
18the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20#include <stdint.h>
21
22/* Assorted opcode bits used to diddle the instruction during operand processing */
23#define OP_PREFIX_MASK	0xFC000000
24#define PREFIX_FPU	0x48000000
25#define OP_FNOP		0xB0000000
26#define OP_NOP		0xA0000000
27#define DUAL_INSN_MODE_BIT	0x00000200
28
29#define LOGOP_MASK	0xC0000000
30#define IS_LOGOP(x)	(((x)&LOGOP_MASK) == LOGOP_MASK)
31
32/* Macros to fill in register fields of insns */
33#define SET_RS1(op, rval)	(op)=(((op) & ~(0x1F << 11)) | ((rval) & 0x1F) << 11)
34#define SET_RS2(op, rval)	(op)=(((op) & ~(0x1F << 21)) | ((rval) & 0x1F) << 21)
35#define SET_RD(op, rval)	(op)=(((op) & ~(0x1F << 16)) | ((rval) & 0x1F) << 16)
36
37#define GET_RS1(op)	(((op) >> 11) & 0x1F)
38#define GET_RS2(op)	(((op) >> 21) & 0x1F)
39#define GET_RD(op)	(((op) >> 16) & 0x1F)
40
41
42/*
43 * Structure of an opcode table entry.
44 */
45struct i860_opcode
46{
47    const char *name;
48    uint32_t mask;     /* used only for error checking */
49    uint32_t match;
50    const char *args;
51    unsigned int last;      /* used to simplify hashing */
52};
53
54/*
55   All i860 opcodes are 32 bits.
56
57   The match component is a mask saying which bits must match a
58   particular opcode in order for an instruction to be an instance
59   of that opcode.
60
61   The args component is a string containing one character
62   for each operand of the instruction.
63
64Kinds of operands:
65   #    Number used by optimizer.  It is ignored.
66   1    rs1 register, bits 11-15 of insn.
67   2    rs2 register, bits 21-25 of insn.
68   d    rd register, bits 16-20 of insn.
69   e    frs1 floating point register, bits 11-15 of insn.
70   f    frs2 floating point register, bits 21-25 of insn.
71   g    frsd floating point register, bits 16-20 of insn.
72   E	Same as e, f, g above, but requires an even reg number.
73   F
74   G
75   H	frsd floating point register, quad aligned! (f0, f4, f8....)
76   i	16 bit byte address low half, default of RELOC_LOW0
77   I	16 bit High portion of address, RELOC_HIGH.
78   j	16 bit short address, RELOC_LOW1
79   k	16 bit word/int	address low half, RELOC_LOW2
80   l	16 bit 8-byte address (double) low half, RELOC_LOW3
81   m	16 bit 16-byte address (quad) low half, RELOC_LOW4
82
83   n	16 bit byte aligned low half, split fields, RELOC_SPLIT0
84   o	16 bit short aligned low half, split fields, RELOC_SPLIT1
85   p	16 bit int/word aligned low half, split fields, RELOC_SPLIT2
86
87   J	16 bit High portion of address requiring adjustment, RELOC_HIGHADJ
88   K	26 bit branch displacement
89   L	16 bit split branch displacement
90   B	5 bit immediate, for bte and btne insn, RS1 field.
91   D	Immediate field constant, no label or reloc data permitted.
92   C    Control Register, one of fir, psr, epsr, dirbase, db, or fsr.
93   S    Special ops
94
95Literals used and matched in operand list:
96   ()	Used around indirect register ld and st operations.
97   ,	Arg separator.
98 */
99
100/*
101 *   The assembler requires that all instances of the same mnemonic must be
102 *   consecutive.  If they aren't, the assembler will bomb at runtime.
103 */
104
105static const struct i860_opcode i860_opcodes[] =
106{
107
108{ "adds",	0xFC000000, 0x90000000,	"1,2,d", 0 },
109{ "adds",	0xFC000000, 0x94000000,	"i,2,d", 1 },
110
111{ "addu",	0xFC000000, 0x80000000,	"1,2,d", 0 },
112{ "addu",	0xFC000000, 0x84000000,	"i,2,d", 1 },
113
114{ "and",	0xFC000000, 0xC0000000,	"1,2,d", 0 },
115{ "and",	0xFC000000, 0xC4000000,	"i,2,d", 1 },
116{ "andh",	0xFC000000, 0xCC000000,	"i,2,d", 1 },
117
118{ "andnot",	0xFC000000, 0xD0000000,	"1,2,d", 0 },
119{ "andnot",	0xFC000000, 0xD4000000,	"i,2,d", 1 },
120{ "andnoth",	0xFC000000, 0xDC000000,	"i,2,d", 1 },
121
122{ "bc",		0xFC000000, 0x70000000,	"K", 1 },
123{ "bc.t",	0xFC000000, 0x74000000,	"K", 1 },
124
125{ "bla",	0xFC000000, 0xB4000000,	"1,2,L", 1 },
126
127{ "bnc",	0xFC000000, 0x78000000,	"K", 1 },
128{ "bnc.t",	0xFC000000, 0x7C000000,	"K", 1 },
129
130{ "br",		0xFC000000, 0x68000000,	"K", 1 },
131
132{ "bri",	0xFC000000, 0x40000000,	"1", 1 },
133
134{ "bte",	0xFC000000, 0x58000000,	"1,2,L", 0 },
135{ "bte",	0xFC000000, 0x5C000000,	"B,2,L", 1 },
136
137{ "btne",	0xFC000000, 0x50000000,	"1,2,L", 0 },
138{ "btne",	0xFC000000, 0x54000000,	"B,2,L", 1 },
139
140{ "call",	0xFC000000, 0x6C000000,	"K", 1 },
141
142{ "calli",	0xFC00001F, 0x4C000002,	"1", 1 },
143
144{ "fadd.dd",	0xFC0007FF, 0x480001B0,	"E,F,G", 1 },
145{ "fadd.sd",	0xFC0007FF, 0x480000B0,	"e,f,G", 1 },
146{ "fadd.ss",	0xFC0007FF, 0x48000030,	"e,f,g", 1 },
147
148{ "faddp",	0xFC0007FF, 0x480001D0,	"E,F,G", 1 },
149
150{ "faddz",	0xFC0007FF, 0x480001D1,	"E,F,G", 1 },
151
152{ "fiadd.dd",	0xFC0007FF, 0x480001C9,	"E,F,G", 1 },
153{ "fiadd.ss",	0xFC0007FF, 0x48000049,	"e,f,g", 1 },
154
155{ "fisub.dd",	0xFC0007FF, 0x480001CD,	"E,F,G", 1 },
156{ "fisub.ss",	0xFC0007FF, 0x4800004D,	"e,f,g", 1 },
157
158{ "fix.dd",	0xFC0007FF, 0x480001B2,	"E,G", 1 },
159{ "fix.sd",	0xFC0007FF, 0x480000B2,	"e,G", 1 },
160/* { "fix.ss",	0xFC0007FF, 0x48000032,	"e,g", 1 }, */	/* Not supported by Intel */
161
162{ "fld.d",	0xFC000007, 0x20000000, "1(2),G", 0 },
163{ "fld.d",	0xFC000007, 0x20000001, "1(2)++,G", 0 },
164{ "fld.d",	0xFC000007, 0x24000000, "l(2),G", 0 },
165{ "fld.d",	0xFC000007, 0x24000001, "l(2)++,G", 1 },
166{ "fld.l",	0xFC000003, 0x20000002, "1(2),g", 0 },
167{ "fld.l",	0xFC000003, 0x20000003, "1(2)++,g", 0 },
168{ "fld.l",	0xFC000003, 0x24000002, "k(2),g", 0 },
169{ "fld.l",	0xFC000003, 0x24000003, "k(2)++,g", 1 },
170{ "fld.q",	0xFC000007, 0x20000004, "1(2),H", 0 },
171{ "fld.q",	0xFC000007, 0x20000005, "1(2)++,H", 0 },
172{ "fld.q",	0xFC000007, 0x24000004, "m(2),H", 0 },
173{ "fld.q",	0xFC000007, 0x24000005, "m(2)++,H", 1 },
174
175{ "flush",	0xFC000007, 0x34000000, "m(2)", 0 },
176{ "flush",	0xFC000007, 0x34000001, "m(2)++", 1 },
177
178{ "fmlow.dd",	0xFC0007FF, 0x480001A1,	"E,F,G", 1 },
179/* { "fmlow.sd",	0xFC0007FF, 0x480000A1,	"e,f,g", 1 }, */ /* Not supported... */
180/* { "fmlow.ss",	0xFC0007FF, 0x48000021,	"e,f,g", 1 }, */
181
182{ "fmov.dd",	0xFFE007FF, 0x480001C9,	"E,G", 1 },
183{ "fmov.ds",	0xFFE007FF, 0x48000133,	"E,g", 1 },	/* Update B.0 4.0 errata */
184{ "famov.ds",	0xFFE007FF, 0x48000133,	"E,g", 1 },	/* B.0 insn */
185{ "fmov.sd",	0xFFE007FF, 0x480000B3,	"e,G", 1 },	/* Update B.0 4.0 errata */
186{ "famov.sd",	0xFFE007FF, 0x480000B3,	"e,G", 1 },	/* B.0 insn */
187{ "famov.ss",	0xFFE007FF, 0x48000033,	"e,g", 1 },	/* B.0 insn */
188{ "famov.dd",	0xFFE007FF, 0x480001B3,	"E,G", 1 },	/* B.0 insn */
189{ "fmov.ss",	0xFFE007FF, 0x48000049,	"e,g", 1 },
190
191{ "fmul.dd",	0xFC0007FF, 0x480001A0,	"E,F,G", 1 },
192{ "fmul.sd",	0xFC0007FF, 0x480000A0,	"e,f,G", 1 },
193{ "fmul.ss",	0xFC0007FF, 0x48000020,	"e,f,g", 1 },
194
195{ "fnop",	0xFFFFFFFF, 0xB0000000, "", 1 },
196
197{ "form",	0xFC0007FF, 0x480001DA, "E,G", 1 },
198
199{ "frcp.dd",	0xFC0007FF, 0x480001A2,	"F,G", 1 },
200{ "frcp.sd",	0xFC0007FF, 0x480000A2,	"f,G", 1 },
201{ "frcp.ss",	0xFC0007FF, 0x48000022,	"f,g", 1 },
202
203{ "frsqr.dd",	0xFC0007FF, 0x480001A3,	"F,G", 1 },
204{ "frsqr.sd",	0xFC0007FF, 0x480000A3,	"f,G", 1 },
205{ "frsqr.ss",	0xFC0007FF, 0x48000023,	"f,g", 1 },
206
207{ "fst.d",	0xFC000007, 0x28000000, "G,1(2)", 0 },
208{ "fst.d",	0xFC000007, 0x28000001, "G,1(2)++", 0 },
209{ "fst.d",	0xFC000007, 0x2C000000, "G,l(2)", 0 },
210{ "fst.d",	0xFC000007, 0x2C000001, "G,l(2)++", 1 },
211{ "fst.l",	0xFC000003, 0x28000002, "g,1(2)", 0 },
212{ "fst.l",	0xFC000003, 0x28000003, "g,1(2)++", 0 },
213{ "fst.l",	0xFC000003, 0x2C000002, "g,k(2)", 0 },
214{ "fst.l",	0xFC000003, 0x2C000003, "g,k(2)++", 1 },
215{ "fst.q",	0xFC000007, 0x28000004, "H,1(2)", 0 },
216{ "fst.q",	0xFC000007, 0x28000005, "H,1(2)++", 0 },
217{ "fst.q",	0xFC000007, 0x2C000004, "H,m(2)", 0 },
218{ "fst.q",	0xFC000007, 0x2C000005, "H,m(2)++", 1 },
219
220{ "fsub.dd",	0xFC0007FF, 0x480001B1,	"E,F,G", 1 },
221{ "fsub.sd",	0xFC0007FF, 0x480000B1,	"e,f,G", 1 },
222{ "fsub.ss",	0xFC0007FF, 0x48000031,	"e,f,g", 1 },
223
224{ "ftrunc.dd",	0xFC0007FF, 0x480001BA,	"E,G", 1 },
225{ "ftrunc.sd",	0xFC0007FF, 0x480000BA,	"e,G", 1 },
226/* { "ftrunc.ss",	0xFC0007FF, 0x4800003A,	"e,g", 1 }, */  /* Not supported... */
227
228{ "fxfr",	0xFC0007FF, 0x48000040,	"e,d", 1 },
229
230{ "fzchkl",	0xFC0007FF, 0x480001D7, "E,F,G", 1 },
231
232{ "fzchks",	0xFC0007FF, 0x480001DF,	"E,F,G", 1 },
233
234{ "intovr",	0xFC00001F, 0x4C000004,	"", 1 },
235
236{ "ixfr",	0xFC000000, 0x08000000, "1,g", 1 },
237
238{ "ld.b",	0xFC000000, 0x00000000, "1(2),d", 0 },
239{ "ld.b",	0xFC000000, 0x04000000, "i(2),d", 1 },
240{ "ld.c",	0xFC000000, 0x30000000, "C,d", 1 },
241{ "ld.l",	0xFC000001, 0x10000001, "1(2),d", 0 },
242{ "ld.l",	0xFC000001, 0x14000001, "k(2),d", 1 },
243{ "ld.s",	0xFC000001, 0x10000000, "1(2),d", 0 },
244{ "ld.s",	0xFC000001, 0x14000000, "j(2),d", 1 },
245
246{ "lock",	0xFC00001F, 0x4C000001,	"", 1 },
247
248{ "nop",	0xFFFFFFFF, 0xA0000000, "", 1 },
249
250{ "mov",	0xFC00F800, 0xA0000000, "2,d", 1 },
251
252{ "or",		0xFC000000, 0xE0000000,	"1,2,d", 0 },
253{ "or",		0xFC000000, 0xE4000000,	"i,2,d", 1 },
254{ "orh",	0xFC000000, 0xEC000000,	"i,2,d", 1 },
255
256{ "pfadd.dd",	0xFC0007FF, 0x480005B0,	"E,F,G", 1 },
257{ "pfadd.sd",	0xFC0007FF, 0x480004B0,	"e,f,G", 1 },
258{ "pfadd.ss",	0xFC0007FF, 0x48000430,	"e,f,g", 1 },
259
260{ "pfaddp",	0xFC0007FF, 0x480005D0,	"E,F,G", 1 },
261
262{ "pfaddz",	0xFC0007FF, 0x480005D1,	"E,F,G", 1 },
263
264{ "pfeq.dd",	0xFC0007FF, 0x48000535, "E,F,G", 1 },
265{ "pfeq.ss",	0xFC0007FF, 0x48000435, "e,f,g", 1 },
266{ "pfeq.sd",	0xFC0007FF, 0x48000435, "e,f,G", 1 },
267
268{ "pfgt.dd",	0xFC0007FF, 0x48000534, "E,F,G", 1 },
269{ "pfgt.ss",	0xFC0007FF, 0x48000434, "e,f,g", 1 },
270{ "pfgt.sd",	0xFC0007FF, 0x48000434, "e,f,G", 1 },
271
272{ "pfiadd.dd",	0xFC0007FF, 0x480005C9,	"E,F,G", 1 },
273{ "pfiadd.ss",	0xFC0007FF, 0x48000449,	"e,f,g", 1 },
274
275{ "pfisub.dd",	0xFC0007FF, 0x480005CD,	"E,F,G", 1 },
276{ "pfisub.ss",	0xFC0007FF, 0x4800044D,	"e,f,g", 1 },
277
278{ "pfix.dd",	0xFC0007FF, 0x480005B2,	"E,G", 1 },
279{ "pfix.sd",	0xFC0007FF, 0x480004B2,	"e,G", 1 },
280/* { "pfix.ss",	0xFC0007FF, 0x48000432,	"e,g", 1 }, */  /* Not supported... */
281
282{ "pfld.d",	0xFC000007, 0x60000000, "1(2),G", 0 },
283{ "pfld.d",	0xFC000007, 0x60000001, "1(2)++,G", 0 },
284{ "pfld.d",	0xFC000007, 0x64000000, "l(2),G", 0 },
285{ "pfld.d",	0xFC000007, 0x64000001, "l(2)++,G", 1 },
286{ "pfld.l",	0xFC000003, 0x60000002, "1(2),g", 0 },
287{ "pfld.l",	0xFC000003, 0x60000003, "1(2)++,g", 0 },
288{ "pfld.l",	0xFC000003, 0x64000002, "k(2),g", 0 },
289{ "pfld.l",	0xFC000003, 0x64000003, "k(2)++,g", 1 },
290
291{ "pfle.dd",	0xFC0007FF, 0x480005b4, "E,F,G", 1 },
292{ "pfle.sd",	0xFC0007FF, 0x480004b4, "e,f,G", 1 },
293{ "pfle.ss",	0xFC0007FF, 0x480004b4, "e,f,g", 1 },
294
295{ "pfmov.dd",	0xFFE007FF, 0x480005C9,	"E,G", 1 },
296{ "pfmov.ds",	0xFFE007FF, 0x48000533,	"E,g", 1 },	/* Update B.0 4.0 errata */
297{ "pfamov.ds",	0xFFE007FF, 0x48000533,	"E,g", 1 },	/* B.0 insn */
298{ "pfmov.sd",	0xFFE007FF, 0x480004B3,	"e,G", 1 },	/* Update B.0 4.0 errata */
299{ "pfamov.sd",	0xFFE007FF, 0x480004B3,	"e,G", 1 },	/* B.0 insn */
300{ "pfamov.ss",	0xFFE007FF, 0x48000433,	"e,g", 1 },	/* B.0 insn */
301{ "pfamov.dd",	0xFFE007FF, 0x480005B3,	"E,G", 1 },	/* B.0 insn */
302{ "pfmov.ss",	0xFFE007FF, 0x48000449,	"e,g", 1 },
303
304{ "pfmul.dd",	0xFC0007FF, 0x480005A0,	"E,F,G", 1 },
305{ "pfmul.sd",	0xFC0007FF, 0x480004A0,	"e,f,G", 1 },
306{ "pfmul.ss",	0xFC0007FF, 0x48000420,	"e,f,g", 1 },
307
308{ "pfmul3.dd",	0xFC0007FF, 0x480005A4,	"E,F,G", 1 },
309/* { "pfmul3.sd",	0xFC0007FF, 0x480004A4,	"e,f,g", 1 }, */ /* Not supported... */
310/* { "pfmul3.ss",	0xFC0007FF, 0x48000424,	"e,f,g", 1 }, */
311
312{ "pform",	0xFC0007FF, 0x480005DA, "E,G", 1 },
313
314{ "pfsub.dd",	0xFC0007FF, 0x480005B1,	"E,F,G", 1 },
315{ "pfsub.sd",	0xFC0007FF, 0x480004B1,	"e,f,G", 1 },
316{ "pfsub.ss",	0xFC0007FF, 0x48000431,	"e,f,g", 1 },
317
318{ "pftrunc.dd",	0xFC0007FF, 0x480005BA,	"E,G", 1 },
319{ "pftrunc.sd",	0xFC0007FF, 0x480004BA,	"e,G", 1 },
320/* { "pftrunc.ss",	0xFC0007FF, 0x4800043A,	"e,g", 1 }, */  /* Not supported... */
321
322{ "pfzchkl",	0xFC0007FF, 0x480005D7, "E,F,G", 1 },
323
324{ "pfzchks",	0xFC0007FF, 0x480005DF,	"E,F,G", 1 },
325
326{ "pst.d",	0xFC000007, 0x3C000000, "G,l(2)", 0 },
327{ "pst.d",	0xFC000007, 0x3C000001, "G,l(2)++", 1 },
328
329{ "shl",	0xFC000000, 0xA0000000, "1,2,d", 0 },
330{ "shl",	0xFC000000, 0xA4000000, "D,2,d", 1 },
331
332{ "shr",	0xFC000000, 0xA8000000, "1,2,d", 0 },
333{ "shr",	0xFC000000, 0xAC000000, "D,2,d", 1 },
334{ "shra",	0xFC000000, 0xB8000000, "1,2,d", 0 },
335{ "shra",	0xFC000000, 0xBC000000, "D,2,d", 1 },
336{ "shrd",	0xFC000000, 0xB0000000, "1,2,d", 1 },
337
338{ "st.b",	0xFC000000, 0x0C000000, "1,n(2)", 1 },
339{ "st.c",	0xFC000000, 0x38000000, "1,C", 1 },
340{ "st.l",	0xFC000001, 0x1C000001, "1,p(2)", 1 },
341{ "st.s",	0xFC000001, 0x1C000000, "1,o(2)", 1 },
342
343{ "subs",	0xFC000000, 0x98000000,	"1,2,d", 0 },
344{ "subs",	0xFC000000, 0x9C000000,	"i,2,d", 1 },
345{ "subu",	0xFC000000, 0x88000000,	"1,2,d", 0 },
346{ "subu",	0xFC000000, 0x8C000000,	"i,2,d", 1 },
347
348{ "trap",	0xFC000000, 0x44000000, "1,2,d", 1 },
349
350{ "unlock",	0xFC00001F, 0x4C000007,	"", 1 },
351
352{ "xor",	0xFC000000, 0xF0000000,	"1,2,d", 0 },
353{ "xor",	0xFC000000, 0xF4000000,	"i,2,d", 1 },
354{ "xorh",	0xFC000000, 0xFC000000,	"i,2,d", 1 },
355
356
357/*
358 *	      Pipelined Accumulate/Multiply Operators
359 *
360 *		Abandon all hope, ye who enter here...
361 *
362 * PFAM operators.  There are 48 of these horrors.  Don't ask....
363 */
364{ "r2p1.dd",	0xFC0007FF, 0x48000580,	"E,F,G", 1 },
365{ "r2pt.dd",	0xFC0007FF, 0x48000581,	"E,F,G", 1 },
366{ "r2ap1.dd",	0xFC0007FF, 0x48000582,	"E,F,G", 1 },
367{ "r2apt.dd",	0xFC0007FF, 0x48000583,	"E,F,G", 1 },
368{ "i2p1.dd",	0xFC0007FF, 0x48000584,	"E,F,G", 1 },
369{ "i2pt.dd",	0xFC0007FF, 0x48000585,	"E,F,G", 1 },
370{ "i2ap1.dd",	0xFC0007FF, 0x48000586,	"E,F,G", 1 },
371{ "i2apt.dd",	0xFC0007FF, 0x48000587,	"E,F,G", 1 },
372{ "rat1p2.dd",	0xFC0007FF, 0x48000588,	"E,F,G", 1 },
373{ "m12apm.dd",	0xFC0007FF, 0x48000589,	"E,F,G", 1 },
374{ "ra1p2.dd",	0xFC0007FF, 0x4800058A,	"E,F,G", 1 },
375{ "m12ttpa.dd",	0xFC0007FF, 0x4800058B,	"E,F,G", 1 },
376{ "iat1p2.dd",	0xFC0007FF, 0x4800058C,	"E,F,G", 1 },
377{ "m12tpm.dd",	0xFC0007FF, 0x4800058D,	"E,F,G", 1 },
378{ "ia1p2.dd",	0xFC0007FF, 0x4800058E,	"E,F,G", 1 },
379{ "m12tpa.dd",	0xFC0007FF, 0x4800058F,	"E,F,G", 1 },
380
381{ "r2p1.sd",	0xFC0007FF, 0x48000480,	"e,f,G", 1 },
382{ "r2pt.sd",	0xFC0007FF, 0x48000481,	"e,f,G", 1 },
383{ "r2ap1.sd",	0xFC0007FF, 0x48000482,	"e,f,G", 1 },
384{ "r2apt.sd",	0xFC0007FF, 0x48000483,	"e,f,G", 1 },
385{ "i2p1.sd",	0xFC0007FF, 0x48000484,	"e,f,G", 1 },
386{ "i2pt.sd",	0xFC0007FF, 0x48000485,	"e,f,G", 1 },
387{ "i2ap1.sd",	0xFC0007FF, 0x48000486,	"e,f,G", 1 },
388{ "i2apt.sd",	0xFC0007FF, 0x48000487,	"e,f,G", 1 },
389{ "rat1p2.sd",	0xFC0007FF, 0x48000488,	"e,f,G", 1 },
390{ "m12apm.sd",	0xFC0007FF, 0x48000489,	"e,f,G", 1 },
391{ "ra1p2.sd",	0xFC0007FF, 0x4800048A,	"e,f,G", 1 },
392{ "m12ttpa.sd",	0xFC0007FF, 0x4800048B,	"e,f,G", 1 },
393{ "iat1p2.sd",	0xFC0007FF, 0x4800048C,	"e,f,G", 1 },
394{ "m12tpm.sd",	0xFC0007FF, 0x4800048D,	"e,f,G", 1 },
395{ "ia1p2.sd",	0xFC0007FF, 0x4800048E,	"e,f,G", 1 },
396{ "m12tpa.sd",	0xFC0007FF, 0x4800048F,	"e,f,G", 1 },
397
398{ "r2p1.ss",	0xFC0007FF, 0x48000400,	"e,f,g", 1 },
399{ "r2pt.ss",	0xFC0007FF, 0x48000401,	"e,f,g", 1 },
400{ "r2ap1.ss",	0xFC0007FF, 0x48000402,	"e,f,g", 1 },
401{ "r2apt.ss",	0xFC0007FF, 0x48000403,	"e,f,g", 1 },
402{ "i2p1.ss",	0xFC0007FF, 0x48000404,	"e,f,g", 1 },
403{ "i2pt.ss",	0xFC0007FF, 0x48000405,	"e,f,g", 1 },
404{ "i2ap1.ss",	0xFC0007FF, 0x48000406,	"e,f,g", 1 },
405{ "i2apt.ss",	0xFC0007FF, 0x48000407,	"e,f,g", 1 },
406{ "rat1p2.ss",	0xFC0007FF, 0x48000408,	"e,f,g", 1 },
407{ "m12apm.ss",	0xFC0007FF, 0x48000409,	"e,f,g", 1 },
408{ "ra1p2.ss",	0xFC0007FF, 0x4800040A,	"e,f,g", 1 },
409{ "m12ttpa.ss",	0xFC0007FF, 0x4800040B,	"e,f,g", 1 },
410{ "iat1p2.ss",	0xFC0007FF, 0x4800040C,	"e,f,g", 1 },
411{ "m12tpm.ss",	0xFC0007FF, 0x4800040D,	"e,f,g", 1 },
412{ "ia1p2.ss",	0xFC0007FF, 0x4800040E,	"e,f,g", 1 },
413{ "m12tpa.ss",	0xFC0007FF, 0x4800040F,	"e,f,g", 1 },
414
415/*
416 * PFMAM operators.  There are 48 of these.
417 */
418{ "mr2p1.dd",	0xFC0007FF, 0x48000180,	"E,F,G", 1 },
419{ "mr2pt.dd",	0xFC0007FF, 0x48000181,	"E,F,G", 1 },
420{ "mr2mp1.dd",	0xFC0007FF, 0x48000182,	"E,F,G", 1 },
421{ "mr2mpt.dd",	0xFC0007FF, 0x48000183,	"E,F,G", 1 },
422{ "mi2p1.dd",	0xFC0007FF, 0x48000184,	"E,F,G", 1 },
423{ "mi2pt.dd",	0xFC0007FF, 0x48000185,	"E,F,G", 1 },
424{ "mi2mp1.dd",	0xFC0007FF, 0x48000186,	"E,F,G", 1 },
425{ "mi2mpt.dd",	0xFC0007FF, 0x48000187,	"E,F,G", 1 },
426{ "mrmt1p2.dd",	0xFC0007FF, 0x48000188,	"E,F,G", 1 },
427{ "mm12mpm.dd",	0xFC0007FF, 0x48000189,	"E,F,G", 1 },
428{ "mrm1p2.dd",	0xFC0007FF, 0x4800018A,	"E,F,G", 1 },
429{ "mm12ttpm.dd",0xFC0007FF, 0x4800018B,	"E,F,G", 1 },
430{ "mimt1p2.dd",	0xFC0007FF, 0x4800018C,	"E,F,G", 1 },
431{ "mm12tpm.dd",	0xFC0007FF, 0x4800018D,	"E,F,G", 1 },
432{ "mim1p2.dd",	0xFC0007FF, 0x4800018E,	"E,F,G", 1 },
433/* { "mm12tpm.dd",	0xFC0007FF, 0x4800018F,	"E,F,G", 1 }, */  /* ??? */
434
435{ "mr2p1.sd",	0xFC0007FF, 0x48000080,	"e,f,G", 1 },
436{ "mr2pt.sd",	0xFC0007FF, 0x48000081,	"e,f,G", 1 },
437{ "mr2mp1.sd",	0xFC0007FF, 0x48000082,	"e,f,G", 1 },
438{ "mr2mpt.sd",	0xFC0007FF, 0x48000083,	"e,f,G", 1 },
439{ "mi2p1.sd",	0xFC0007FF, 0x48000084,	"e,f,G", 1 },
440{ "mi2pt.sd",	0xFC0007FF, 0x48000085,	"e,f,G", 1 },
441{ "mi2mp1.sd",	0xFC0007FF, 0x48000086,	"e,f,G", 1 },
442{ "mi2mpt.sd",	0xFC0007FF, 0x48000087,	"e,f,G", 1 },
443{ "mrmt1p2.sd",	0xFC0007FF, 0x48000088,	"e,f,G", 1 },
444{ "mm12mpm.sd",	0xFC0007FF, 0x48000089,	"e,f,G", 1 },
445{ "mrm1p2.sd",	0xFC0007FF, 0x4800008A,	"e,f,G", 1 },
446{ "mm12ttpm.sd",0xFC0007FF, 0x4800008B,	"e,f,G", 1 },
447{ "mimt1p2.sd",	0xFC0007FF, 0x4800008C,	"e,f,G", 1 },
448{ "mm12tpm.sd",	0xFC0007FF, 0x4800008D,	"e,f,G", 1 },
449{ "mim1p2.sd",	0xFC0007FF, 0x4800008E,	"e,f,G", 1 },
450/* { "mm12tpm.sd",	0xFC0007FF, 0x4800008F,	"e,f,G", 1 }, */   /* ??? */
451
452{ "mr2p1.ss",	0xFC0007FF, 0x48000000,	"e,f,g", 1 },
453{ "mr2pt.ss",	0xFC0007FF, 0x48000001,	"e,f,g", 1 },
454{ "mr2mp1.ss",	0xFC0007FF, 0x48000002,	"e,f,g", 1 },
455{ "mr2mpt.ss",	0xFC0007FF, 0x48000003,	"e,f,g", 1 },
456{ "mi2p1.ss",	0xFC0007FF, 0x48000004,	"e,f,g", 1 },
457{ "mi2pt.ss",	0xFC0007FF, 0x48000005,	"e,f,g", 1 },
458{ "mi2mp1.ss",	0xFC0007FF, 0x48000006,	"e,f,g", 1 },
459{ "mi2mpt.ss",	0xFC0007FF, 0x48000007,	"e,f,g", 1 },
460{ "mrmt1p2.ss",	0xFC0007FF, 0x48000008,	"e,f,g", 1 },
461{ "mm12mpm.ss",	0xFC0007FF, 0x48000009,	"e,f,g", 1 },
462{ "mrm1p2.ss",	0xFC0007FF, 0x4800000A,	"e,f,g", 1 },
463{ "mm12ttpm.ss",0xFC0007FF, 0x4800000B,	"e,f,g", 1 },
464{ "mimt1p2.ss",	0xFC0007FF, 0x4800000C,	"e,f,g", 1 },
465{ "mm12tpm.ss",	0xFC0007FF, 0x4800000D,	"e,f,g", 1 },
466{ "mim1p2.ss",	0xFC0007FF, 0x4800000E,	"e,f,g", 1 },
467/* { "mm12tpm.ss",	0xFC0007FF, 0x4800000F,	"e,f,g", 1 }, */  /* ??? */
468
469/*
470 * PFMSM operators.  There are 48 of these.
471 */
472{ "mr2s1.dd",	0xFC0007FF, 0x48000190,	"E,F,G", 1 },
473{ "mr2st.dd",	0xFC0007FF, 0x48000191,	"E,F,G", 1 },
474{ "mr2ms1.dd",	0xFC0007FF, 0x48000192,	"E,F,G", 1 },
475{ "mr2mst.dd",	0xFC0007FF, 0x48000193,	"E,F,G", 1 },
476{ "mi2s1.dd",	0xFC0007FF, 0x48000194,	"E,F,G", 1 },
477{ "mi2st.dd",	0xFC0007FF, 0x48000195,	"E,F,G", 1 },
478{ "mi2ms1.dd",	0xFC0007FF, 0x48000196,	"E,F,G", 1 },
479{ "mi2mst.dd",	0xFC0007FF, 0x48000197,	"E,F,G", 1 },
480{ "mrmt1s2.dd",	0xFC0007FF, 0x48000198,	"E,F,G", 1 },
481{ "mm12msm.dd",	0xFC0007FF, 0x48000199,	"E,F,G", 1 },
482{ "mrm1s2.dd",	0xFC0007FF, 0x4800019A,	"E,F,G", 1 },
483{ "mm12ttsm.dd",0xFC0007FF, 0x4800019B,	"E,F,G", 1 },
484{ "mimt1s2.dd",	0xFC0007FF, 0x4800019C,	"E,F,G", 1 },
485{ "mm12tsm.dd",	0xFC0007FF, 0x4800019D,	"E,F,G", 1 },
486{ "mim1s2.dd",	0xFC0007FF, 0x4800019E,	"E,F,G", 1 },
487/* { "mm12tsm.dd",	0xFC0007FF, 0x4800019F,	"E,F,G", 1 }, */  /* ??? */
488
489{ "mr2s1.sd",	0xFC0007FF, 0x48000090,	"e,f,G", 1 },
490{ "mr2st.sd",	0xFC0007FF, 0x48000091,	"e,f,G", 1 },
491{ "mr2ms1.sd",	0xFC0007FF, 0x48000092,	"e,f,G", 1 },
492{ "mr2mst.sd",	0xFC0007FF, 0x48000093,	"e,f,G", 1 },
493{ "mi2s1.sd",	0xFC0007FF, 0x48000094,	"e,f,G", 1 },
494{ "mi2st.sd",	0xFC0007FF, 0x48000095,	"e,f,G", 1 },
495{ "mi2ms1.sd",	0xFC0007FF, 0x48000096,	"e,f,G", 1 },
496{ "mi2mst.sd",	0xFC0007FF, 0x48000097,	"e,f,G", 1 },
497{ "mrmt1s2.sd",	0xFC0007FF, 0x48000098,	"e,f,G", 1 },
498{ "mm12msm.sd",	0xFC0007FF, 0x48000099,	"e,f,G", 1 },
499{ "mrm1s2.sd",	0xFC0007FF, 0x4800009A,	"e,f,G", 1 },
500{ "mm12ttsm.sd",0xFC0007FF, 0x4800009B,	"e,f,G", 1 },
501{ "mimt1s2.sd",	0xFC0007FF, 0x4800009C,	"e,f,G", 1 },
502{ "mm12tsm.sd",	0xFC0007FF, 0x4800009D,	"e,f,G", 1 },
503{ "mim1s2.sd",	0xFC0007FF, 0x4800009E,	"e,f,G", 1 },
504/* { "mm12tsm.sd",	0xFC0007FF, 0x4800009F,	"e,f,G", 1 }, */  /* ??? */
505
506{ "mr2s1.ss",	0xFC0007FF, 0x48000010,	"e,f,g", 1 },
507{ "mr2st.ss",	0xFC0007FF, 0x48000011,	"e,f,g", 1 },
508{ "mr2ms1.ss",	0xFC0007FF, 0x48000012,	"e,f,g", 1 },
509{ "mr2mst.ss",	0xFC0007FF, 0x48000013,	"e,f,g", 1 },
510{ "mi2s1.ss",	0xFC0007FF, 0x48000014,	"e,f,g", 1 },
511{ "mi2st.ss",	0xFC0007FF, 0x48000015,	"e,f,g", 1 },
512{ "mi2ms1.ss",	0xFC0007FF, 0x48000016,	"e,f,g", 1 },
513{ "mi2mst.ss",	0xFC0007FF, 0x48000017,	"e,f,g", 1 },
514{ "mrmt1s2.ss",	0xFC0007FF, 0x48000018,	"e,f,g", 1 },
515{ "mm12msm.ss",	0xFC0007FF, 0x48000019,	"e,f,g", 1 },
516{ "mrm1s2.ss",	0xFC0007FF, 0x4800001A,	"e,f,g", 1 },
517{ "mm12ttsm.ss",0xFC0007FF, 0x4800001B,	"e,f,g", 1 },
518{ "mimt1s2.ss",	0xFC0007FF, 0x4800001C,	"e,f,g", 1 },
519{ "mm12tsm.ss",	0xFC0007FF, 0x4800001D,	"e,f,g", 1 },
520{ "mim1s2.ss",	0xFC0007FF, 0x4800001E,	"e,f,g", 1 },
521/* { "mm12tsm.ss",	0xFC0007FF, 0x4800001F,	"e,f,g", 1 }, */  /* ??? */
522
523/*
524 * PFSM operators.  There are 48 of these.
525 */
526{ "r2s1.dd",	0xFC0007FF, 0x48000590,	"E,F,G", 1 },
527{ "r2st.dd",	0xFC0007FF, 0x48000591,	"E,F,G", 1 },
528{ "r2as1.dd",	0xFC0007FF, 0x48000592,	"E,F,G", 1 },
529{ "r2ast.dd",	0xFC0007FF, 0x48000593,	"E,F,G", 1 },
530{ "i2s1.dd",	0xFC0007FF, 0x48000594,	"E,F,G", 1 },
531{ "i2st.dd",	0xFC0007FF, 0x48000595,	"E,F,G", 1 },
532{ "i2as1.dd",	0xFC0007FF, 0x48000596,	"E,F,G", 1 },
533{ "i2ast.dd",	0xFC0007FF, 0x48000597,	"E,F,G", 1 },
534{ "rat1s2.dd",	0xFC0007FF, 0x48000598,	"E,F,G", 1 },
535{ "m12asm.dd",	0xFC0007FF, 0x48000599,	"E,F,G", 1 },
536{ "ra1s2.dd",	0xFC0007FF, 0x4800059A,	"E,F,G", 1 },
537{ "m12ttsa.dd",	0xFC0007FF, 0x4800059B,	"E,F,G", 1 },
538{ "iat1s2.dd",	0xFC0007FF, 0x4800059C,	"E,F,G", 1 },
539{ "m12tsm.dd",	0xFC0007FF, 0x4800059D,	"E,F,G", 1 },
540{ "ia1s2.dd",	0xFC0007FF, 0x4800059E,	"E,F,G", 1 },
541{ "m12tsa.dd",	0xFC0007FF, 0x4800059F,	"E,F,G", 1 },
542
543{ "r2s1.sd",	0xFC0007FF, 0x48000490,	"e,f,G", 1 },
544{ "r2st.sd",	0xFC0007FF, 0x48000491,	"e,f,G", 1 },
545{ "r2as1.sd",	0xFC0007FF, 0x48000492,	"e,f,G", 1 },
546{ "r2ast.sd",	0xFC0007FF, 0x48000493,	"e,f,G", 1 },
547{ "i2s1.sd",	0xFC0007FF, 0x48000494,	"e,f,G", 1 },
548{ "i2st.sd",	0xFC0007FF, 0x48000495,	"e,f,G", 1 },
549{ "i2as1.sd",	0xFC0007FF, 0x48000496,	"e,f,G", 1 },
550{ "i2ast.sd",	0xFC0007FF, 0x48000497,	"e,f,G", 1 },
551{ "rat1s2.sd",	0xFC0007FF, 0x48000498,	"e,f,G", 1 },
552{ "m12asm.sd",	0xFC0007FF, 0x48000499,	"e,f,G", 1 },
553{ "ra1s2.sd",	0xFC0007FF, 0x4800049A,	"e,f,G", 1 },
554{ "m12ttsa.sd",	0xFC0007FF, 0x4800049B,	"e,f,G", 1 },
555{ "iat1s2.sd",	0xFC0007FF, 0x4800049C,	"e,f,G", 1 },
556{ "m12tsm.sd",	0xFC0007FF, 0x4800049D,	"e,f,G", 1 },
557{ "ia1s2.sd",	0xFC0007FF, 0x4800049E,	"e,f,G", 1 },
558{ "m12tsa.sd",	0xFC0007FF, 0x4800049F,	"e,f,G", 1 },
559
560{ "r2s1.ss",	0xFC0007FF, 0x48000410,	"e,f,g", 1 },
561{ "r2st.ss",	0xFC0007FF, 0x48000411,	"e,f,g", 1 },
562{ "r2as1.ss",	0xFC0007FF, 0x48000412,	"e,f,g", 1 },
563{ "r2ast.ss",	0xFC0007FF, 0x48000413,	"e,f,g", 1 },
564{ "i2s1.ss",	0xFC0007FF, 0x48000414,	"e,f,g", 1 },
565{ "i2st.ss",	0xFC0007FF, 0x48000415,	"e,f,g", 1 },
566{ "i2as1.ss",	0xFC0007FF, 0x48000416,	"e,f,g", 1 },
567{ "i2ast.ss",	0xFC0007FF, 0x48000417,	"e,f,g", 1 },
568{ "rat1s2.ss",	0xFC0007FF, 0x48000418,	"e,f,g", 1 },
569{ "m12asm.ss",	0xFC0007FF, 0x48000419,	"e,f,g", 1 },
570{ "ra1s2.ss",	0xFC0007FF, 0x4800041A,	"e,f,g", 1 },
571{ "m12ttsa.ss",	0xFC0007FF, 0x4800041B,	"e,f,g", 1 },
572{ "iat1s2.ss",	0xFC0007FF, 0x4800041C,	"e,f,g", 1 },
573{ "m12tsm.ss",	0xFC0007FF, 0x4800041D,	"e,f,g", 1 },
574{ "ia1s2.ss",	0xFC0007FF, 0x4800041E,	"e,f,g", 1 },
575{ "m12tsa.ss",	0xFC0007FF, 0x4800041F,	"e,f,g", 1 },
576
577};
578
579#define NUMOPCODES ((sizeof i860_opcodes)/(sizeof *i860_opcodes))
580