|
|
1.1 root 1: /* This file is composed of several different files from the upstream
2: sourceware.org CVS. Original file boundaries marked with **** */
3:
4: #include <string.h>
5: #include <math.h>
6: #include <stdio.h>
7:
8: #include "dis-asm.h"
9:
1.1.1.3 root 10: /* **** floatformat.h from sourceware.org CVS 2005-08-14. */
1.1 root 11: /* IEEE floating point support declarations, for GDB, the GNU Debugger.
12: Copyright 1991, 1994, 1995, 1997, 2000, 2003 Free Software Foundation, Inc.
13:
14: This file is part of GDB.
15:
16: This program is free software; you can redistribute it and/or modify
17: it under the terms of the GNU General Public License as published by
18: the Free Software Foundation; either version 2 of the License, or
19: (at your option) any later version.
20:
21: This program is distributed in the hope that it will be useful,
22: but WITHOUT ANY WARRANTY; without even the implied warranty of
23: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24: GNU General Public License for more details.
25:
26: You should have received a copy of the GNU General Public License
1.1.1.4 root 27: along with this program; if not, see <http://www.gnu.org/licenses/>. */
1.1 root 28:
29: #if !defined (FLOATFORMAT_H)
30: #define FLOATFORMAT_H 1
31:
32: /*#include "ansidecl.h" */
33:
34: /* A floatformat consists of a sign bit, an exponent and a mantissa. Once the
35: bytes are concatenated according to the byteorder flag, then each of those
36: fields is contiguous. We number the bits with 0 being the most significant
37: (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field
38: contains with the *_start and *_len fields. */
39:
40: /* What is the order of the bytes. */
41:
42: enum floatformat_byteorders {
43:
44: /* Standard little endian byte order.
45: EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */
46:
47: floatformat_little,
48:
49: /* Standard big endian byte order.
50: EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */
51:
52: floatformat_big,
53:
54: /* Little endian byte order but big endian word order.
55: EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */
56:
57: floatformat_littlebyte_bigword
58:
59: };
60:
61: enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
62:
63: struct floatformat
64: {
65: enum floatformat_byteorders byteorder;
66: unsigned int totalsize; /* Total size of number in bits */
67:
68: /* Sign bit is always one bit long. 1 means negative, 0 means positive. */
69: unsigned int sign_start;
70:
71: unsigned int exp_start;
72: unsigned int exp_len;
73: /* Bias added to a "true" exponent to form the biased exponent. It
74: is intentionally signed as, otherwize, -exp_bias can turn into a
75: very large number (e.g., given the exp_bias of 0x3fff and a 64
76: bit long, the equation (long)(1 - exp_bias) evaluates to
77: 4294950914) instead of -16382). */
78: int exp_bias;
79: /* Exponent value which indicates NaN. This is the actual value stored in
80: the float, not adjusted by the exp_bias. This usually consists of all
81: one bits. */
82: unsigned int exp_nan;
83:
84: unsigned int man_start;
85: unsigned int man_len;
86:
87: /* Is the integer bit explicit or implicit? */
88: enum floatformat_intbit intbit;
89:
90: /* Internal name for debugging. */
91: const char *name;
92:
93: /* Validator method. */
94: int (*is_valid) (const struct floatformat *fmt, const char *from);
95: };
96:
97: /* floatformats for IEEE single and double, big and little endian. */
98:
99: extern const struct floatformat floatformat_ieee_single_big;
100: extern const struct floatformat floatformat_ieee_single_little;
101: extern const struct floatformat floatformat_ieee_double_big;
102: extern const struct floatformat floatformat_ieee_double_little;
103:
104: /* floatformat for ARM IEEE double, little endian bytes and big endian words */
105:
106: extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
107:
108: /* floatformats for various extendeds. */
109:
110: extern const struct floatformat floatformat_i387_ext;
111: extern const struct floatformat floatformat_m68881_ext;
112: extern const struct floatformat floatformat_i960_ext;
113: extern const struct floatformat floatformat_m88110_ext;
114: extern const struct floatformat floatformat_m88110_harris_ext;
115: extern const struct floatformat floatformat_arm_ext_big;
116: extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
117: /* IA-64 Floating Point register spilt into memory. */
118: extern const struct floatformat floatformat_ia64_spill_big;
119: extern const struct floatformat floatformat_ia64_spill_little;
120: extern const struct floatformat floatformat_ia64_quad_big;
121: extern const struct floatformat floatformat_ia64_quad_little;
122:
123: /* Convert from FMT to a double.
124: FROM is the address of the extended float.
125: Store the double in *TO. */
126:
127: extern void
128: floatformat_to_double (const struct floatformat *, const char *, double *);
129:
130: /* The converse: convert the double *FROM to FMT
131: and store where TO points. */
132:
133: extern void
134: floatformat_from_double (const struct floatformat *, const double *, char *);
135:
136: /* Return non-zero iff the data at FROM is a valid number in format FMT. */
137:
138: extern int
139: floatformat_is_valid (const struct floatformat *fmt, const char *from);
140:
141: #endif /* defined (FLOATFORMAT_H) */
142: /* **** End of floatformat.h */
143: /* **** m68k-dis.h from sourceware.org CVS 2005-08-14. */
144: /* Opcode table header for m680[01234]0/m6888[12]/m68851.
145: Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001,
146: 2003, 2004 Free Software Foundation, Inc.
147:
148: This file is part of GDB, GAS, and the GNU binutils.
149:
150: GDB, GAS, and the GNU binutils are free software; you can redistribute
151: them and/or modify them under the terms of the GNU General Public
152: License as published by the Free Software Foundation; either version
153: 1, or (at your option) any later version.
154:
155: GDB, GAS, and the GNU binutils are distributed in the hope that they
156: will be useful, but WITHOUT ANY WARRANTY; without even the implied
157: warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
158: the GNU General Public License for more details.
159:
160: You should have received a copy of the GNU General Public License
1.1.1.4 root 161: along with this file; see the file COPYING. If not,
162: see <http://www.gnu.org/licenses/>. */
1.1 root 163:
164: /* These are used as bit flags for the arch field in the m68k_opcode
165: structure. */
166: #define _m68k_undef 0
167: #define m68000 0x001
168: #define m68008 m68000 /* Synonym for -m68000. otherwise unused. */
169: #define m68010 0x002
170: #define m68020 0x004
171: #define m68030 0x008
172: #define m68ec030 m68030 /* Similar enough to -m68030 to ignore differences;
173: gas will deal with the few differences. */
174: #define m68040 0x010
175: /* There is no 68050. */
176: #define m68060 0x020
177: #define m68881 0x040
178: #define m68882 m68881 /* Synonym for -m68881. otherwise unused. */
179: #define m68851 0x080
180: #define cpu32 0x100 /* e.g., 68332 */
181:
182: #define mcfmac 0x200 /* ColdFire MAC. */
183: #define mcfemac 0x400 /* ColdFire EMAC. */
184: #define cfloat 0x800 /* ColdFire FPU. */
185: #define mcfhwdiv 0x1000 /* ColdFire hardware divide. */
186:
187: #define mcfisa_a 0x2000 /* ColdFire ISA_A. */
188: #define mcfisa_aa 0x4000 /* ColdFire ISA_A+. */
189: #define mcfisa_b 0x8000 /* ColdFire ISA_B. */
190: #define mcfusp 0x10000 /* ColdFire USP instructions. */
191:
192: #define mcf5200 0x20000
193: #define mcf5206e 0x40000
194: #define mcf521x 0x80000
195: #define mcf5249 0x100000
196: #define mcf528x 0x200000
197: #define mcf5307 0x400000
198: #define mcf5407 0x800000
199: #define mcf5470 0x1000000
200: #define mcf5480 0x2000000
201:
202: /* Handy aliases. */
203: #define m68040up (m68040 | m68060)
204: #define m68030up (m68030 | m68040up)
205: #define m68020up (m68020 | m68030up)
206: #define m68010up (m68010 | cpu32 | m68020up)
207: #define m68000up (m68000 | m68010up)
208:
209: #define mfloat (m68881 | m68882 | m68040 | m68060)
210: #define mmmu (m68851 | m68030 | m68040 | m68060)
211:
212: /* The structure used to hold information for an opcode. */
213:
214: struct m68k_opcode
215: {
216: /* The opcode name. */
217: const char *name;
218: /* The pseudo-size of the instruction(in bytes). Used to determine
219: number of bytes necessary to disassemble the instruction. */
220: unsigned int size;
221: /* The opcode itself. */
222: unsigned long opcode;
223: /* The mask used by the disassembler. */
224: unsigned long match;
225: /* The arguments. */
226: const char *args;
227: /* The architectures which support this opcode. */
228: unsigned int arch;
229: };
230:
231: /* The structure used to hold information for an opcode alias. */
232:
233: struct m68k_opcode_alias
234: {
235: /* The alias name. */
236: const char *alias;
237: /* The instruction for which this is an alias. */
238: const char *primary;
239: };
240:
241: /* We store four bytes of opcode for all opcodes because that is the
242: most any of them need. The actual length of an instruction is
243: always at least 2 bytes, and is as much longer as necessary to hold
244: the operands it has.
245:
246: The match field is a mask saying which bits must match particular
247: opcode in order for an instruction to be an instance of that
248: opcode.
249:
250: The args field is a string containing two characters for each
251: operand of the instruction. The first specifies the kind of
252: operand; the second, the place it is stored. */
253:
254: /* Kinds of operands:
255: Characters used: AaBbCcDdEeFfGgHIiJkLlMmnOopQqRrSsTtU VvWwXxYyZz01234|*~%;@!&$?/<>#^+-
256:
257: D data register only. Stored as 3 bits.
258: A address register only. Stored as 3 bits.
259: a address register indirect only. Stored as 3 bits.
260: R either kind of register. Stored as 4 bits.
261: r either kind of register indirect only. Stored as 4 bits.
262: At the moment, used only for cas2 instruction.
263: F floating point coprocessor register only. Stored as 3 bits.
264: O an offset (or width): immediate data 0-31 or data register.
265: Stored as 6 bits in special format for BF... insns.
266: + autoincrement only. Stored as 3 bits (number of the address register).
267: - autodecrement only. Stored as 3 bits (number of the address register).
268: Q quick immediate data. Stored as 3 bits.
269: This matches an immediate operand only when value is in range 1 .. 8.
270: M moveq immediate data. Stored as 8 bits.
271: This matches an immediate operand only when value is in range -128..127
272: T trap vector immediate data. Stored as 4 bits.
273:
274: k K-factor for fmove.p instruction. Stored as a 7-bit constant or
275: a three bit register offset, depending on the field type.
276:
277: # immediate data. Stored in special places (b, w or l)
278: which say how many bits to store.
279: ^ immediate data for floating point instructions. Special places
280: are offset by 2 bytes from '#'...
281: B pc-relative address, converted to an offset
282: that is treated as immediate data.
283: d displacement and register. Stores the register as 3 bits
284: and stores the displacement in the entire second word.
285:
286: C the CCR. No need to store it; this is just for filtering validity.
287: S the SR. No need to store, just as with CCR.
288: U the USP. No need to store, just as with CCR.
289: E the MAC ACC. No need to store, just as with CCR.
290: e the EMAC ACC[0123].
291: G the MAC/EMAC MACSR. No need to store, just as with CCR.
292: g the EMAC ACCEXT{01,23}.
293: H the MASK. No need to store, just as with CCR.
294: i the MAC/EMAC scale factor.
295:
296: I Coprocessor ID. Not printed if 1. The Coprocessor ID is always
297: extracted from the 'd' field of word one, which means that an extended
298: coprocessor opcode can be skipped using the 'i' place, if needed.
299:
300: s System Control register for the floating point coprocessor.
301:
302: J Misc register for movec instruction, stored in 'j' format.
303: Possible values:
304: 0x000 SFC Source Function Code reg [60, 40, 30, 20, 10]
305: 0x001 DFC Data Function Code reg [60, 40, 30, 20, 10]
306: 0x002 CACR Cache Control Register [60, 40, 30, 20, mcf]
307: 0x003 TC MMU Translation Control [60, 40]
308: 0x004 ITT0 Instruction Transparent
309: Translation reg 0 [60, 40]
310: 0x005 ITT1 Instruction Transparent
311: Translation reg 1 [60, 40]
312: 0x006 DTT0 Data Transparent
313: Translation reg 0 [60, 40]
314: 0x007 DTT1 Data Transparent
315: Translation reg 1 [60, 40]
316: 0x008 BUSCR Bus Control Register [60]
317: 0x800 USP User Stack Pointer [60, 40, 30, 20, 10]
318: 0x801 VBR Vector Base reg [60, 40, 30, 20, 10, mcf]
319: 0x802 CAAR Cache Address Register [ 30, 20]
320: 0x803 MSP Master Stack Pointer [ 40, 30, 20]
321: 0x804 ISP Interrupt Stack Pointer [ 40, 30, 20]
322: 0x805 MMUSR MMU Status reg [ 40]
323: 0x806 URP User Root Pointer [60, 40]
324: 0x807 SRP Supervisor Root Pointer [60, 40]
325: 0x808 PCR Processor Configuration reg [60]
326: 0xC00 ROMBAR ROM Base Address Register [520X]
327: 0xC04 RAMBAR0 RAM Base Address Register 0 [520X]
328: 0xC05 RAMBAR1 RAM Base Address Register 0 [520X]
329: 0xC0F MBAR0 RAM Base Address Register 0 [520X]
330: 0xC04 FLASHBAR FLASH Base Address Register [mcf528x]
331: 0xC05 RAMBAR Static RAM Base Address Register [mcf528x]
332:
333: L Register list of the type d0-d7/a0-a7 etc.
334: (New! Improved! Can also hold fp0-fp7, as well!)
335: The assembler tries to see if the registers match the insn by
336: looking at where the insn wants them stored.
337:
338: l Register list like L, but with all the bits reversed.
339: Used for going the other way. . .
340:
341: c cache identifier which may be "nc" for no cache, "ic"
342: for instruction cache, "dc" for data cache, or "bc"
343: for both caches. Used in cinv and cpush. Always
344: stored in position "d".
345:
346: u Any register, with ``upper'' or ``lower'' specification. Used
347: in the mac instructions with size word.
348:
349: The remainder are all stored as 6 bits using an address mode and a
350: register number; they differ in which addressing modes they match.
351:
352: * all (modes 0-6,7.0-4)
353: ~ alterable memory (modes 2-6,7.0,7.1)
354: (not 0,1,7.2-4)
355: % alterable (modes 0-6,7.0,7.1)
356: (not 7.2-4)
357: ; data (modes 0,2-6,7.0-4)
358: (not 1)
359: @ data, but not immediate (modes 0,2-6,7.0-3)
360: (not 1,7.4)
361: ! control (modes 2,5,6,7.0-3)
362: (not 0,1,3,4,7.4)
363: & alterable control (modes 2,5,6,7.0,7.1)
364: (not 0,1,3,4,7.2-4)
365: $ alterable data (modes 0,2-6,7.0,7.1)
366: (not 1,7.2-4)
367: ? alterable control, or data register (modes 0,2,5,6,7.0,7.1)
368: (not 1,3,4,7.2-4)
369: / control, or data register (modes 0,2,5,6,7.0-3)
370: (not 1,3,4,7.4)
371: > *save operands (modes 2,4,5,6,7.0,7.1)
372: (not 0,1,3,7.2-4)
373: < *restore operands (modes 2,3,5,6,7.0-3)
374: (not 0,1,4,7.4)
375:
376: coldfire move operands:
377: m (modes 0-4)
378: n (modes 5,7.2)
379: o (modes 6,7.0,7.1,7.3,7.4)
380: p (modes 0-5)
381:
382: coldfire bset/bclr/btst/mulsl/mulul operands:
383: q (modes 0,2-5)
384: v (modes 0,2-5,7.0,7.1)
385: b (modes 0,2-5,7.2)
386: w (modes 2-5,7.2)
387: y (modes 2,5)
388: z (modes 2,5,7.2)
389: x mov3q immediate operand.
390: 4 (modes 2,3,4,5)
391: */
392:
393: /* For the 68851: */
394: /* I didn't use much imagination in choosing the
395: following codes, so many of them aren't very
396: mnemonic. -rab
397:
398: 0 32 bit pmmu register
399: Possible values:
400: 000 TC Translation Control Register (68030, 68851)
401:
402: 1 16 bit pmmu register
403: 111 AC Access Control (68851)
404:
405: 2 8 bit pmmu register
406: 100 CAL Current Access Level (68851)
407: 101 VAL Validate Access Level (68851)
408: 110 SCC Stack Change Control (68851)
409:
410: 3 68030-only pmmu registers (32 bit)
411: 010 TT0 Transparent Translation reg 0
412: (aka Access Control reg 0 -- AC0 -- on 68ec030)
413: 011 TT1 Transparent Translation reg 1
414: (aka Access Control reg 1 -- AC1 -- on 68ec030)
415:
416: W wide pmmu registers
417: Possible values:
418: 001 DRP Dma Root Pointer (68851)
419: 010 SRP Supervisor Root Pointer (68030, 68851)
420: 011 CRP Cpu Root Pointer (68030, 68851)
421:
422: f function code register (68030, 68851)
423: 0 SFC
424: 1 DFC
425:
426: V VAL register only (68851)
427:
428: X BADx, BACx (16 bit)
429: 100 BAD Breakpoint Acknowledge Data (68851)
430: 101 BAC Breakpoint Acknowledge Control (68851)
431:
432: Y PSR (68851) (MMUSR on 68030) (ACUSR on 68ec030)
433: Z PCSR (68851)
434:
435: | memory (modes 2-6, 7.*)
436:
437: t address test level (68030 only)
438: Stored as 3 bits, range 0-7.
439: Also used for breakpoint instruction now.
440:
441: */
442:
443: /* Places to put an operand, for non-general operands:
444: Characters used: BbCcDdFfGgHhIijkLlMmNnostWw123456789/
445:
446: s source, low bits of first word.
447: d dest, shifted 9 in first word
448: 1 second word, shifted 12
449: 2 second word, shifted 6
450: 3 second word, shifted 0
451: 4 third word, shifted 12
452: 5 third word, shifted 6
453: 6 third word, shifted 0
454: 7 second word, shifted 7
455: 8 second word, shifted 10
456: 9 second word, shifted 5
457: D store in both place 1 and place 3; for divul and divsl.
458: B first word, low byte, for branch displacements
459: W second word (entire), for branch displacements
460: L second and third words (entire), for branch displacements
461: (also overloaded for move16)
462: b second word, low byte
463: w second word (entire) [variable word/long branch offset for dbra]
464: W second word (entire) (must be signed 16 bit value)
465: l second and third word (entire)
466: g variable branch offset for bra and similar instructions.
467: The place to store depends on the magnitude of offset.
468: t store in both place 7 and place 8; for floating point operations
469: c branch offset for cpBcc operations.
470: The place to store is word two if bit six of word one is zero,
471: and words two and three if bit six of word one is one.
472: i Increment by two, to skip over coprocessor extended operands. Only
473: works with the 'I' format.
474: k Dynamic K-factor field. Bits 6-4 of word 2, used as a register number.
475: Also used for dynamic fmovem instruction.
476: C floating point coprocessor constant - 7 bits. Also used for static
477: K-factors...
478: j Movec register #, stored in 12 low bits of second word.
479: m For M[S]ACx; 4 bits split with MSB shifted 6 bits in first word
480: and remaining 3 bits of register shifted 9 bits in first word.
481: Indicate upper/lower in 1 bit shifted 7 bits in second word.
482: Use with `R' or `u' format.
483: n `m' withouth upper/lower indication. (For M[S]ACx; 4 bits split
484: with MSB shifted 6 bits in first word and remaining 3 bits of
485: register shifted 9 bits in first word. No upper/lower
486: indication is done.) Use with `R' or `u' format.
487: o For M[S]ACw; 4 bits shifted 12 in second word (like `1').
488: Indicate upper/lower in 1 bit shifted 7 bits in second word.
489: Use with `R' or `u' format.
490: M For M[S]ACw; 4 bits in low bits of first word. Indicate
491: upper/lower in 1 bit shifted 6 bits in second word. Use with
492: `R' or `u' format.
493: N For M[S]ACw; 4 bits in low bits of second word. Indicate
494: upper/lower in 1 bit shifted 6 bits in second word. Use with
495: `R' or `u' format.
496: h shift indicator (scale factor), 1 bit shifted 10 in second word
497:
498: Places to put operand, for general operands:
499: d destination, shifted 6 bits in first word
500: b source, at low bit of first word, and immediate uses one byte
501: w source, at low bit of first word, and immediate uses two bytes
502: l source, at low bit of first word, and immediate uses four bytes
503: s source, at low bit of first word.
504: Used sometimes in contexts where immediate is not allowed anyway.
505: f single precision float, low bit of 1st word, immediate uses 4 bytes
506: F double precision float, low bit of 1st word, immediate uses 8 bytes
507: x extended precision float, low bit of 1st word, immediate uses 12 bytes
508: p packed float, low bit of 1st word, immediate uses 12 bytes
509: G EMAC accumulator, load (bit 4 2nd word, !bit8 first word)
510: H EMAC accumulator, non load (bit 4 2nd word, bit 8 first word)
511: F EMAC ACCx
512: f EMAC ACCy
513: I MAC/EMAC scale factor
514: / Like 's', but set 2nd word, bit 5 if trailing_ampersand set
515: ] first word, bit 10
516: */
517:
518: extern const struct m68k_opcode m68k_opcodes[];
519: extern const struct m68k_opcode_alias m68k_opcode_aliases[];
520:
521: extern const int m68k_numopcodes, m68k_numaliases;
522:
523: /* **** End of m68k-opcode.h */
524: /* **** m68k-dis.c from sourceware.org CVS 2005-08-14. */
525: /* Print Motorola 68k instructions.
526: Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
527: 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
528: Free Software Foundation, Inc.
529:
530: This file is free software; you can redistribute it and/or modify
531: it under the terms of the GNU General Public License as published by
532: the Free Software Foundation; either version 2 of the License, or
533: (at your option) any later version.
534:
535: This program is distributed in the hope that it will be useful,
536: but WITHOUT ANY WARRANTY; without even the implied warranty of
537: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
538: GNU General Public License for more details.
539:
540: You should have received a copy of the GNU General Public License
1.1.1.4 root 541: along with this program; if not, see <http://www.gnu.org/licenses/>. */
1.1 root 542:
543: /* Local function prototypes. */
544:
1.1.1.3 root 545: static const char * const fpcr_names[] =
1.1 root 546: {
547: "", "%fpiar", "%fpsr", "%fpiar/%fpsr", "%fpcr",
548: "%fpiar/%fpcr", "%fpsr/%fpcr", "%fpiar/%fpsr/%fpcr"
549: };
550:
1.1.1.3 root 551: static const char *const reg_names[] =
1.1 root 552: {
553: "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
554: "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp",
555: "%ps", "%pc"
556: };
557:
558: /* Name of register halves for MAC/EMAC.
1.1.1.2 root 559: Separate from reg_names since 'spu', 'fpl' look weird. */
1.1.1.3 root 560: static const char *const reg_half_names[] =
1.1 root 561: {
562: "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
563: "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7",
564: "%ps", "%pc"
565: };
566:
567: /* Sign-extend an (unsigned char). */
568: #if __STDC__ == 1
569: #define COERCE_SIGNED_CHAR(ch) ((signed char) (ch))
570: #else
571: #define COERCE_SIGNED_CHAR(ch) ((int) (((ch) ^ 0x80) & 0xFF) - 128)
572: #endif
573:
574: /* Get a 1 byte signed integer. */
1.1.1.5 ! root 575: #define NEXTBYTE(p) (p += 2, fetch_data(info, p), COERCE_SIGNED_CHAR(p[-1]))
1.1 root 576:
577: /* Get a 2 byte signed integer. */
578: #define COERCE16(x) ((int) (((x) ^ 0x8000) - 0x8000))
579: #define NEXTWORD(p) \
1.1.1.5 ! root 580: (p += 2, fetch_data(info, p), \
1.1 root 581: COERCE16 ((p[-2] << 8) + p[-1]))
582:
583: /* Get a 4 byte signed integer. */
584: #define COERCE32(x) ((bfd_signed_vma) ((x) ^ 0x80000000) - 0x80000000)
585: #define NEXTLONG(p) \
1.1.1.5 ! root 586: (p += 4, fetch_data(info, p), \
1.1 root 587: (COERCE32 ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1])))
588:
589: /* Get a 4 byte unsigned integer. */
590: #define NEXTULONG(p) \
1.1.1.5 ! root 591: (p += 4, fetch_data(info, p), \
1.1 root 592: (unsigned int) ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1]))
593:
594: /* Get a single precision float. */
595: #define NEXTSINGLE(val, p) \
1.1.1.5 ! root 596: (p += 4, fetch_data(info, p), \
1.1 root 597: floatformat_to_double (&floatformat_ieee_single_big, (char *) p - 4, &val))
598:
599: /* Get a double precision float. */
600: #define NEXTDOUBLE(val, p) \
1.1.1.5 ! root 601: (p += 8, fetch_data(info, p), \
1.1 root 602: floatformat_to_double (&floatformat_ieee_double_big, (char *) p - 8, &val))
603:
604: /* Get an extended precision float. */
605: #define NEXTEXTEND(val, p) \
1.1.1.5 ! root 606: (p += 12, fetch_data(info, p), \
1.1 root 607: floatformat_to_double (&floatformat_m68881_ext, (char *) p - 12, &val))
608:
609: /* Need a function to convert from packed to double
610: precision. Actually, it's easier to print a
611: packed number than a double anyway, so maybe
612: there should be a special case to handle this... */
613: #define NEXTPACKED(p) \
1.1.1.5 ! root 614: (p += 12, fetch_data(info, p), 0.0)
1.1 root 615:
616: /* Maximum length of an instruction. */
617: #define MAXLEN 22
618:
619: #include <setjmp.h>
620:
621: struct private
622: {
623: /* Points to first byte not fetched. */
624: bfd_byte *max_fetched;
625: bfd_byte the_buffer[MAXLEN];
626: bfd_vma insn_start;
627: jmp_buf bailout;
628: };
629:
630: /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
631: to ADDR (exclusive) are valid. Returns 1 for success, longjmps
632: on error. */
633: static int
1.1.1.5 ! root 634: fetch_data2(struct disassemble_info *info, bfd_byte *addr)
1.1 root 635: {
636: int status;
637: struct private *priv = (struct private *)info->private_data;
638: bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
639:
640: status = (*info->read_memory_func) (start,
641: priv->max_fetched,
642: addr - priv->max_fetched,
643: info);
644: if (status != 0)
645: {
646: (*info->memory_error_func) (status, start, info);
647: longjmp (priv->bailout, 1);
648: }
649: else
650: priv->max_fetched = addr;
651: return 1;
652: }
1.1.1.5 ! root 653:
! 654: static int
! 655: fetch_data(struct disassemble_info *info, bfd_byte *addr)
! 656: {
! 657: if (addr <= ((struct private *) (info->private_data))->max_fetched) {
! 658: return 1;
! 659: } else {
! 660: return fetch_data2(info, addr);
! 661: }
! 662: }
! 663:
1.1 root 664: /* This function is used to print to the bit-bucket. */
665: static int
666: dummy_printer (FILE *file ATTRIBUTE_UNUSED,
667: const char *format ATTRIBUTE_UNUSED,
668: ...)
669: {
670: return 0;
671: }
672:
673: static void
674: dummy_print_address (bfd_vma vma ATTRIBUTE_UNUSED,
675: struct disassemble_info *info ATTRIBUTE_UNUSED)
676: {
677: }
678:
679: /* Fetch BITS bits from a position in the instruction specified by CODE.
680: CODE is a "place to put an argument", or 'x' for a destination
681: that is a general address (mode and register).
682: BUFFER contains the instruction. */
683:
684: static int
685: fetch_arg (unsigned char *buffer,
686: int code,
687: int bits,
688: disassemble_info *info)
689: {
690: int val = 0;
691:
692: switch (code)
693: {
694: case '/': /* MAC/EMAC mask bit. */
695: val = buffer[3] >> 5;
696: break;
697:
698: case 'G': /* EMAC ACC load. */
699: val = ((buffer[3] >> 3) & 0x2) | ((~buffer[1] >> 7) & 0x1);
700: break;
701:
702: case 'H': /* EMAC ACC !load. */
703: val = ((buffer[3] >> 3) & 0x2) | ((buffer[1] >> 7) & 0x1);
704: break;
705:
706: case ']': /* EMAC ACCEXT bit. */
707: val = buffer[0] >> 2;
708: break;
709:
710: case 'I': /* MAC/EMAC scale factor. */
711: val = buffer[2] >> 1;
712: break;
713:
714: case 'F': /* EMAC ACCx. */
715: val = buffer[0] >> 1;
716: break;
717:
718: case 'f':
719: val = buffer[1];
720: break;
721:
722: case 's':
723: val = buffer[1];
724: break;
725:
726: case 'd': /* Destination, for register or quick. */
727: val = (buffer[0] << 8) + buffer[1];
728: val >>= 9;
729: break;
730:
731: case 'x': /* Destination, for general arg. */
732: val = (buffer[0] << 8) + buffer[1];
733: val >>= 6;
734: break;
735:
736: case 'k':
1.1.1.5 ! root 737: fetch_data(info, buffer + 3);
1.1 root 738: val = (buffer[3] >> 4);
739: break;
740:
741: case 'C':
1.1.1.5 ! root 742: fetch_data(info, buffer + 3);
1.1 root 743: val = buffer[3];
744: break;
745:
746: case '1':
1.1.1.5 ! root 747: fetch_data(info, buffer + 3);
1.1 root 748: val = (buffer[2] << 8) + buffer[3];
749: val >>= 12;
750: break;
751:
752: case '2':
1.1.1.5 ! root 753: fetch_data(info, buffer + 3);
1.1 root 754: val = (buffer[2] << 8) + buffer[3];
755: val >>= 6;
756: break;
757:
758: case '3':
759: case 'j':
1.1.1.5 ! root 760: fetch_data(info, buffer + 3);
1.1 root 761: val = (buffer[2] << 8) + buffer[3];
762: break;
763:
764: case '4':
1.1.1.5 ! root 765: fetch_data(info, buffer + 5);
1.1 root 766: val = (buffer[4] << 8) + buffer[5];
767: val >>= 12;
768: break;
769:
770: case '5':
1.1.1.5 ! root 771: fetch_data(info, buffer + 5);
1.1 root 772: val = (buffer[4] << 8) + buffer[5];
773: val >>= 6;
774: break;
775:
776: case '6':
1.1.1.5 ! root 777: fetch_data(info, buffer + 5);
1.1 root 778: val = (buffer[4] << 8) + buffer[5];
779: break;
780:
781: case '7':
1.1.1.5 ! root 782: fetch_data(info, buffer + 3);
1.1 root 783: val = (buffer[2] << 8) + buffer[3];
784: val >>= 7;
785: break;
786:
787: case '8':
1.1.1.5 ! root 788: fetch_data(info, buffer + 3);
1.1 root 789: val = (buffer[2] << 8) + buffer[3];
790: val >>= 10;
791: break;
792:
793: case '9':
1.1.1.5 ! root 794: fetch_data(info, buffer + 3);
1.1 root 795: val = (buffer[2] << 8) + buffer[3];
796: val >>= 5;
797: break;
798:
799: case 'e':
800: val = (buffer[1] >> 6);
801: break;
802:
803: case 'm':
804: val = (buffer[1] & 0x40 ? 0x8 : 0)
805: | ((buffer[0] >> 1) & 0x7)
806: | (buffer[3] & 0x80 ? 0x10 : 0);
807: break;
808:
809: case 'n':
810: val = (buffer[1] & 0x40 ? 0x8 : 0) | ((buffer[0] >> 1) & 0x7);
811: break;
812:
813: case 'o':
814: val = (buffer[2] >> 4) | (buffer[3] & 0x80 ? 0x10 : 0);
815: break;
816:
817: case 'M':
818: val = (buffer[1] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0);
819: break;
820:
821: case 'N':
822: val = (buffer[3] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0);
823: break;
824:
825: case 'h':
826: val = buffer[2] >> 2;
827: break;
828:
829: default:
830: abort ();
831: }
832:
833: switch (bits)
834: {
835: case 1:
836: return val & 1;
837: case 2:
838: return val & 3;
839: case 3:
840: return val & 7;
841: case 4:
842: return val & 017;
843: case 5:
844: return val & 037;
845: case 6:
846: return val & 077;
847: case 7:
848: return val & 0177;
849: case 8:
850: return val & 0377;
851: case 12:
852: return val & 07777;
853: default:
854: abort ();
855: }
856: }
857:
858: /* Check if an EA is valid for a particular code. This is required
859: for the EMAC instructions since the type of source address determines
860: if it is a EMAC-load instruciton if the EA is mode 2-5, otherwise it
861: is a non-load EMAC instruction and the bits mean register Ry.
862: A similar case exists for the movem instructions where the register
863: mask is interpreted differently for different EAs. */
864:
865: static bfd_boolean
866: m68k_valid_ea (char code, int val)
867: {
868: int mode, mask;
869: #define M(n0,n1,n2,n3,n4,n5,n6,n70,n71,n72,n73,n74) \
870: (n0 | n1 << 1 | n2 << 2 | n3 << 3 | n4 << 4 | n5 << 5 | n6 << 6 \
871: | n70 << 7 | n71 << 8 | n72 << 9 | n73 << 10 | n74 << 11)
872:
873: switch (code)
874: {
875: case '*':
876: mask = M (1,1,1,1,1,1,1,1,1,1,1,1);
877: break;
878: case '~':
879: mask = M (0,0,1,1,1,1,1,1,1,0,0,0);
880: break;
881: case '%':
882: mask = M (1,1,1,1,1,1,1,1,1,0,0,0);
883: break;
884: case ';':
885: mask = M (1,0,1,1,1,1,1,1,1,1,1,1);
886: break;
887: case '@':
888: mask = M (1,0,1,1,1,1,1,1,1,1,1,0);
889: break;
890: case '!':
891: mask = M (0,0,1,0,0,1,1,1,1,1,1,0);
892: break;
893: case '&':
894: mask = M (0,0,1,0,0,1,1,1,1,0,0,0);
895: break;
896: case '$':
897: mask = M (1,0,1,1,1,1,1,1,1,0,0,0);
898: break;
899: case '?':
900: mask = M (1,0,1,0,0,1,1,1,1,0,0,0);
901: break;
902: case '/':
903: mask = M (1,0,1,0,0,1,1,1,1,1,1,0);
904: break;
905: case '|':
906: mask = M (0,0,1,0,0,1,1,1,1,1,1,0);
907: break;
908: case '>':
909: mask = M (0,0,1,0,1,1,1,1,1,0,0,0);
910: break;
911: case '<':
912: mask = M (0,0,1,1,0,1,1,1,1,1,1,0);
913: break;
914: case 'm':
915: mask = M (1,1,1,1,1,0,0,0,0,0,0,0);
916: break;
917: case 'n':
918: mask = M (0,0,0,0,0,1,0,0,0,1,0,0);
919: break;
920: case 'o':
921: mask = M (0,0,0,0,0,0,1,1,1,0,1,1);
922: break;
923: case 'p':
924: mask = M (1,1,1,1,1,1,0,0,0,0,0,0);
925: break;
926: case 'q':
927: mask = M (1,0,1,1,1,1,0,0,0,0,0,0);
928: break;
929: case 'v':
930: mask = M (1,0,1,1,1,1,0,1,1,0,0,0);
931: break;
932: case 'b':
933: mask = M (1,0,1,1,1,1,0,0,0,1,0,0);
934: break;
935: case 'w':
936: mask = M (0,0,1,1,1,1,0,0,0,1,0,0);
937: break;
938: case 'y':
939: mask = M (0,0,1,0,0,1,0,0,0,0,0,0);
940: break;
941: case 'z':
942: mask = M (0,0,1,0,0,1,0,0,0,1,0,0);
943: break;
944: case '4':
945: mask = M (0,0,1,1,1,1,0,0,0,0,0,0);
946: break;
947: default:
948: abort ();
949: }
950: #undef M
951:
952: mode = (val >> 3) & 7;
953: if (mode == 7)
954: mode += val & 7;
955: return (mask & (1 << mode)) != 0;
956: }
957:
958: /* Print a base register REGNO and displacement DISP, on INFO->STREAM.
959: REGNO = -1 for pc, -2 for none (suppressed). */
960:
961: static void
962: print_base (int regno, bfd_vma disp, disassemble_info *info)
963: {
964: if (regno == -1)
965: {
966: (*info->fprintf_func) (info->stream, "%%pc@(");
967: (*info->print_address_func) (disp, info);
968: }
969: else
970: {
971: char buf[50];
972:
973: if (regno == -2)
974: (*info->fprintf_func) (info->stream, "@(");
975: else if (regno == -3)
976: (*info->fprintf_func) (info->stream, "%%zpc@(");
977: else
978: (*info->fprintf_func) (info->stream, "%s@(", reg_names[regno]);
979:
980: sprintf_vma (buf, disp);
981: (*info->fprintf_func) (info->stream, "%s", buf);
982: }
983: }
984:
985: /* Print an indexed argument. The base register is BASEREG (-1 for pc).
986: P points to extension word, in buffer.
987: ADDR is the nominal core address of that extension word. */
988:
989: static unsigned char *
990: print_indexed (int basereg,
991: unsigned char *p,
992: bfd_vma addr,
993: disassemble_info *info)
994: {
995: int word;
1.1.1.3 root 996: static const char *const scales[] = { "", ":2", ":4", ":8" };
1.1 root 997: bfd_vma base_disp;
998: bfd_vma outer_disp;
999: char buf[40];
1000: char vmabuf[50];
1001:
1002: word = NEXTWORD (p);
1003:
1004: /* Generate the text for the index register.
1005: Where this will be output is not yet determined. */
1006: sprintf (buf, "%s:%c%s",
1007: reg_names[(word >> 12) & 0xf],
1008: (word & 0x800) ? 'l' : 'w',
1009: scales[(word >> 9) & 3]);
1010:
1011: /* Handle the 68000 style of indexing. */
1012:
1013: if ((word & 0x100) == 0)
1014: {
1015: base_disp = word & 0xff;
1016: if ((base_disp & 0x80) != 0)
1017: base_disp -= 0x100;
1018: if (basereg == -1)
1019: base_disp += addr;
1020: print_base (basereg, base_disp, info);
1021: (*info->fprintf_func) (info->stream, ",%s)", buf);
1022: return p;
1023: }
1024:
1025: /* Handle the generalized kind. */
1026: /* First, compute the displacement to add to the base register. */
1027: if (word & 0200)
1028: {
1029: if (basereg == -1)
1030: basereg = -3;
1031: else
1032: basereg = -2;
1033: }
1034: if (word & 0100)
1035: buf[0] = '\0';
1036: base_disp = 0;
1037: switch ((word >> 4) & 3)
1038: {
1039: case 2:
1040: base_disp = NEXTWORD (p);
1041: break;
1042: case 3:
1043: base_disp = NEXTLONG (p);
1044: }
1045: if (basereg == -1)
1046: base_disp += addr;
1047:
1048: /* Handle single-level case (not indirect). */
1049: if ((word & 7) == 0)
1050: {
1051: print_base (basereg, base_disp, info);
1052: if (buf[0] != '\0')
1053: (*info->fprintf_func) (info->stream, ",%s", buf);
1054: (*info->fprintf_func) (info->stream, ")");
1055: return p;
1056: }
1057:
1058: /* Two level. Compute displacement to add after indirection. */
1059: outer_disp = 0;
1060: switch (word & 3)
1061: {
1062: case 2:
1063: outer_disp = NEXTWORD (p);
1064: break;
1065: case 3:
1066: outer_disp = NEXTLONG (p);
1067: }
1068:
1069: print_base (basereg, base_disp, info);
1070: if ((word & 4) == 0 && buf[0] != '\0')
1071: {
1072: (*info->fprintf_func) (info->stream, ",%s", buf);
1073: buf[0] = '\0';
1074: }
1075: sprintf_vma (vmabuf, outer_disp);
1076: (*info->fprintf_func) (info->stream, ")@(%s", vmabuf);
1077: if (buf[0] != '\0')
1078: (*info->fprintf_func) (info->stream, ",%s", buf);
1079: (*info->fprintf_func) (info->stream, ")");
1080:
1081: return p;
1082: }
1083:
1084: /* Returns number of bytes "eaten" by the operand, or
1085: return -1 if an invalid operand was found, or -2 if
1086: an opcode tabe error was found.
1087: ADDR is the pc for this arg to be relative to. */
1088:
1089: static int
1090: print_insn_arg (const char *d,
1091: unsigned char *buffer,
1092: unsigned char *p0,
1093: bfd_vma addr,
1094: disassemble_info *info)
1095: {
1096: int val = 0;
1097: int place = d[1];
1098: unsigned char *p = p0;
1099: int regno;
1100: const char *regname;
1101: unsigned char *p1;
1102: double flval;
1103: int flt_p;
1104: bfd_signed_vma disp;
1105: unsigned int uval;
1106:
1107: switch (*d)
1108: {
1109: case 'c': /* Cache identifier. */
1110: {
1.1.1.3 root 1111: static const char *const cacheFieldName[] = { "nc", "dc", "ic", "bc" };
1.1 root 1112: val = fetch_arg (buffer, place, 2, info);
1.1.1.5 ! root 1113: (*info->fprintf_func) (info->stream, "%s", cacheFieldName[val]);
1.1 root 1114: break;
1115: }
1116:
1117: case 'a': /* Address register indirect only. Cf. case '+'. */
1118: {
1119: (*info->fprintf_func)
1120: (info->stream,
1121: "%s@",
1122: reg_names[fetch_arg (buffer, place, 3, info) + 8]);
1123: break;
1124: }
1125:
1126: case '_': /* 32-bit absolute address for move16. */
1127: {
1128: uval = NEXTULONG (p);
1129: (*info->print_address_func) (uval, info);
1130: break;
1131: }
1132:
1133: case 'C':
1134: (*info->fprintf_func) (info->stream, "%%ccr");
1135: break;
1136:
1137: case 'S':
1138: (*info->fprintf_func) (info->stream, "%%sr");
1139: break;
1140:
1141: case 'U':
1142: (*info->fprintf_func) (info->stream, "%%usp");
1143: break;
1144:
1145: case 'E':
1146: (*info->fprintf_func) (info->stream, "%%acc");
1147: break;
1148:
1149: case 'G':
1150: (*info->fprintf_func) (info->stream, "%%macsr");
1151: break;
1152:
1153: case 'H':
1154: (*info->fprintf_func) (info->stream, "%%mask");
1155: break;
1156:
1157: case 'J':
1158: {
1159: /* FIXME: There's a problem here, different m68k processors call the
1160: same address different names. This table can't get it right
1161: because it doesn't know which processor it's disassembling for. */
1.1.1.3 root 1162: static const struct { const char *name; int value; } names[]
1.1 root 1163: = {{"%sfc", 0x000}, {"%dfc", 0x001}, {"%cacr", 0x002},
1164: {"%tc", 0x003}, {"%itt0",0x004}, {"%itt1", 0x005},
1165: {"%dtt0",0x006}, {"%dtt1",0x007}, {"%buscr",0x008},
1166: {"%usp", 0x800}, {"%vbr", 0x801}, {"%caar", 0x802},
1167: {"%msp", 0x803}, {"%isp", 0x804},
1168: {"%flashbar", 0xc04}, {"%rambar", 0xc05}, /* mcf528x added these. */
1169:
1170: /* Should we be calling this psr like we do in case 'Y'? */
1171: {"%mmusr",0x805},
1172:
1173: {"%urp", 0x806}, {"%srp", 0x807}, {"%pcr", 0x808}};
1174:
1175: val = fetch_arg (buffer, place, 12, info);
1176: for (regno = sizeof names / sizeof names[0] - 1; regno >= 0; regno--)
1177: if (names[regno].value == val)
1178: {
1179: (*info->fprintf_func) (info->stream, "%s", names[regno].name);
1180: break;
1181: }
1182: if (regno < 0)
1183: (*info->fprintf_func) (info->stream, "%d", val);
1184: }
1185: break;
1186:
1187: case 'Q':
1188: val = fetch_arg (buffer, place, 3, info);
1189: /* 0 means 8, except for the bkpt instruction... */
1190: if (val == 0 && d[1] != 's')
1191: val = 8;
1192: (*info->fprintf_func) (info->stream, "#%d", val);
1193: break;
1194:
1195: case 'x':
1196: val = fetch_arg (buffer, place, 3, info);
1197: /* 0 means -1. */
1198: if (val == 0)
1199: val = -1;
1200: (*info->fprintf_func) (info->stream, "#%d", val);
1201: break;
1202:
1203: case 'M':
1204: if (place == 'h')
1205: {
1.1.1.3 root 1206: static const char *const scalefactor_name[] = { "<<", ">>" };
1.1 root 1207: val = fetch_arg (buffer, place, 1, info);
1.1.1.5 ! root 1208: (*info->fprintf_func) (info->stream, "%s", scalefactor_name[val]);
1.1 root 1209: }
1210: else
1211: {
1212: val = fetch_arg (buffer, place, 8, info);
1213: if (val & 0x80)
1214: val = val - 0x100;
1215: (*info->fprintf_func) (info->stream, "#%d", val);
1216: }
1217: break;
1218:
1219: case 'T':
1220: val = fetch_arg (buffer, place, 4, info);
1221: (*info->fprintf_func) (info->stream, "#%d", val);
1222: break;
1223:
1224: case 'D':
1225: (*info->fprintf_func) (info->stream, "%s",
1226: reg_names[fetch_arg (buffer, place, 3, info)]);
1227: break;
1228:
1229: case 'A':
1230: (*info->fprintf_func)
1231: (info->stream, "%s",
1232: reg_names[fetch_arg (buffer, place, 3, info) + 010]);
1233: break;
1234:
1235: case 'R':
1236: (*info->fprintf_func)
1237: (info->stream, "%s",
1238: reg_names[fetch_arg (buffer, place, 4, info)]);
1239: break;
1240:
1241: case 'r':
1242: regno = fetch_arg (buffer, place, 4, info);
1243: if (regno > 7)
1244: (*info->fprintf_func) (info->stream, "%s@", reg_names[regno]);
1245: else
1246: (*info->fprintf_func) (info->stream, "@(%s)", reg_names[regno]);
1247: break;
1248:
1249: case 'F':
1250: (*info->fprintf_func)
1251: (info->stream, "%%fp%d",
1252: fetch_arg (buffer, place, 3, info));
1253: break;
1254:
1255: case 'O':
1256: val = fetch_arg (buffer, place, 6, info);
1257: if (val & 0x20)
1258: (*info->fprintf_func) (info->stream, "%s", reg_names[val & 7]);
1259: else
1260: (*info->fprintf_func) (info->stream, "%d", val);
1261: break;
1262:
1263: case '+':
1264: (*info->fprintf_func)
1265: (info->stream, "%s@+",
1266: reg_names[fetch_arg (buffer, place, 3, info) + 8]);
1267: break;
1268:
1269: case '-':
1270: (*info->fprintf_func)
1271: (info->stream, "%s@-",
1272: reg_names[fetch_arg (buffer, place, 3, info) + 8]);
1273: break;
1274:
1275: case 'k':
1276: if (place == 'k')
1277: (*info->fprintf_func)
1278: (info->stream, "{%s}",
1279: reg_names[fetch_arg (buffer, place, 3, info)]);
1280: else if (place == 'C')
1281: {
1282: val = fetch_arg (buffer, place, 7, info);
1283: if (val > 63) /* This is a signed constant. */
1284: val -= 128;
1285: (*info->fprintf_func) (info->stream, "{#%d}", val);
1286: }
1287: else
1288: return -2;
1289: break;
1290:
1291: case '#':
1292: case '^':
1293: p1 = buffer + (*d == '#' ? 2 : 4);
1294: if (place == 's')
1295: val = fetch_arg (buffer, place, 4, info);
1296: else if (place == 'C')
1297: val = fetch_arg (buffer, place, 7, info);
1298: else if (place == '8')
1299: val = fetch_arg (buffer, place, 3, info);
1300: else if (place == '3')
1301: val = fetch_arg (buffer, place, 8, info);
1302: else if (place == 'b')
1303: val = NEXTBYTE (p1);
1304: else if (place == 'w' || place == 'W')
1305: val = NEXTWORD (p1);
1306: else if (place == 'l')
1307: val = NEXTLONG (p1);
1308: else
1309: return -2;
1310: (*info->fprintf_func) (info->stream, "#%d", val);
1311: break;
1312:
1313: case 'B':
1314: if (place == 'b')
1315: disp = NEXTBYTE (p);
1316: else if (place == 'B')
1317: disp = COERCE_SIGNED_CHAR (buffer[1]);
1318: else if (place == 'w' || place == 'W')
1319: disp = NEXTWORD (p);
1320: else if (place == 'l' || place == 'L' || place == 'C')
1321: disp = NEXTLONG (p);
1322: else if (place == 'g')
1323: {
1324: disp = NEXTBYTE (buffer);
1325: if (disp == 0)
1326: disp = NEXTWORD (p);
1327: else if (disp == -1)
1328: disp = NEXTLONG (p);
1329: }
1330: else if (place == 'c')
1331: {
1332: if (buffer[1] & 0x40) /* If bit six is one, long offset. */
1333: disp = NEXTLONG (p);
1334: else
1335: disp = NEXTWORD (p);
1336: }
1337: else
1338: return -2;
1339:
1340: (*info->print_address_func) (addr + disp, info);
1341: break;
1342:
1343: case 'd':
1344: val = NEXTWORD (p);
1345: (*info->fprintf_func)
1346: (info->stream, "%s@(%d)",
1347: reg_names[fetch_arg (buffer, place, 3, info) + 8], val);
1348: break;
1349:
1350: case 's':
1351: (*info->fprintf_func) (info->stream, "%s",
1352: fpcr_names[fetch_arg (buffer, place, 3, info)]);
1353: break;
1354:
1355: case 'e':
1356: val = fetch_arg(buffer, place, 2, info);
1357: (*info->fprintf_func) (info->stream, "%%acc%d", val);
1358: break;
1359:
1360: case 'g':
1361: val = fetch_arg(buffer, place, 1, info);
1362: (*info->fprintf_func) (info->stream, "%%accext%s", val==0 ? "01" : "23");
1363: break;
1364:
1365: case 'i':
1366: val = fetch_arg(buffer, place, 2, info);
1367: if (val == 1)
1368: (*info->fprintf_func) (info->stream, "<<");
1369: else if (val == 3)
1370: (*info->fprintf_func) (info->stream, ">>");
1371: else
1372: return -1;
1373: break;
1374:
1375: case 'I':
1376: /* Get coprocessor ID... */
1377: val = fetch_arg (buffer, 'd', 3, info);
1378:
1379: if (val != 1) /* Unusual coprocessor ID? */
1380: (*info->fprintf_func) (info->stream, "(cpid=%d) ", val);
1381: break;
1382:
1383: case '4':
1384: case '*':
1385: case '~':
1386: case '%':
1387: case ';':
1388: case '@':
1389: case '!':
1390: case '$':
1391: case '?':
1392: case '/':
1393: case '&':
1394: case '|':
1395: case '<':
1396: case '>':
1397: case 'm':
1398: case 'n':
1399: case 'o':
1400: case 'p':
1401: case 'q':
1402: case 'v':
1403: case 'b':
1404: case 'w':
1405: case 'y':
1406: case 'z':
1407: if (place == 'd')
1408: {
1409: val = fetch_arg (buffer, 'x', 6, info);
1410: val = ((val & 7) << 3) + ((val >> 3) & 7);
1411: }
1412: else
1413: val = fetch_arg (buffer, 's', 6, info);
1414:
1415: /* If the <ea> is invalid for *d, then reject this match. */
1416: if (!m68k_valid_ea (*d, val))
1417: return -1;
1418:
1419: /* Get register number assuming address register. */
1420: regno = (val & 7) + 8;
1421: regname = reg_names[regno];
1422: switch (val >> 3)
1423: {
1424: case 0:
1425: (*info->fprintf_func) (info->stream, "%s", reg_names[val]);
1426: break;
1427:
1428: case 1:
1429: (*info->fprintf_func) (info->stream, "%s", regname);
1430: break;
1431:
1432: case 2:
1433: (*info->fprintf_func) (info->stream, "%s@", regname);
1434: break;
1435:
1436: case 3:
1437: (*info->fprintf_func) (info->stream, "%s@+", regname);
1438: break;
1439:
1440: case 4:
1441: (*info->fprintf_func) (info->stream, "%s@-", regname);
1442: break;
1443:
1444: case 5:
1445: val = NEXTWORD (p);
1446: (*info->fprintf_func) (info->stream, "%s@(%d)", regname, val);
1447: break;
1448:
1449: case 6:
1450: p = print_indexed (regno, p, addr, info);
1451: break;
1452:
1453: case 7:
1454: switch (val & 7)
1455: {
1456: case 0:
1457: val = NEXTWORD (p);
1458: (*info->print_address_func) (val, info);
1459: break;
1460:
1461: case 1:
1462: uval = NEXTULONG (p);
1463: (*info->print_address_func) (uval, info);
1464: break;
1465:
1466: case 2:
1467: val = NEXTWORD (p);
1468: (*info->fprintf_func) (info->stream, "%%pc@(");
1469: (*info->print_address_func) (addr + val, info);
1470: (*info->fprintf_func) (info->stream, ")");
1471: break;
1472:
1473: case 3:
1474: p = print_indexed (-1, p, addr, info);
1475: break;
1476:
1477: case 4:
1478: flt_p = 1; /* Assume it's a float... */
1479: switch (place)
1480: {
1481: case 'b':
1482: val = NEXTBYTE (p);
1483: flt_p = 0;
1484: break;
1485:
1486: case 'w':
1487: val = NEXTWORD (p);
1488: flt_p = 0;
1489: break;
1490:
1491: case 'l':
1492: val = NEXTLONG (p);
1493: flt_p = 0;
1494: break;
1495:
1496: case 'f':
1497: NEXTSINGLE (flval, p);
1498: break;
1499:
1500: case 'F':
1501: NEXTDOUBLE (flval, p);
1502: break;
1503:
1504: case 'x':
1505: NEXTEXTEND (flval, p);
1506: break;
1507:
1508: case 'p':
1509: flval = NEXTPACKED (p);
1510: break;
1511:
1512: default:
1513: return -1;
1514: }
1515: if (flt_p) /* Print a float? */
1516: (*info->fprintf_func) (info->stream, "#%g", flval);
1517: else
1518: (*info->fprintf_func) (info->stream, "#%d", val);
1519: break;
1520:
1521: default:
1522: return -1;
1523: }
1524: }
1525:
1526: /* If place is '/', then this is the case of the mask bit for
1527: mac/emac loads. Now that the arg has been printed, grab the
1528: mask bit and if set, add a '&' to the arg. */
1529: if (place == '/')
1530: {
1531: val = fetch_arg (buffer, place, 1, info);
1532: if (val)
1533: info->fprintf_func (info->stream, "&");
1534: }
1535: break;
1536:
1537: case 'L':
1538: case 'l':
1539: if (place == 'w')
1540: {
1541: char doneany;
1542: p1 = buffer + 2;
1543: val = NEXTWORD (p1);
1544: /* Move the pointer ahead if this point is farther ahead
1545: than the last. */
1546: p = p1 > p ? p1 : p;
1547: if (val == 0)
1548: {
1549: (*info->fprintf_func) (info->stream, "#0");
1550: break;
1551: }
1552: if (*d == 'l')
1553: {
1554: int newval = 0;
1555:
1556: for (regno = 0; regno < 16; ++regno)
1557: if (val & (0x8000 >> regno))
1558: newval |= 1 << regno;
1559: val = newval;
1560: }
1561: val &= 0xffff;
1562: doneany = 0;
1563: for (regno = 0; regno < 16; ++regno)
1564: if (val & (1 << regno))
1565: {
1566: int first_regno;
1567:
1568: if (doneany)
1569: (*info->fprintf_func) (info->stream, "/");
1570: doneany = 1;
1571: (*info->fprintf_func) (info->stream, "%s", reg_names[regno]);
1572: first_regno = regno;
1573: while (val & (1 << (regno + 1)))
1574: ++regno;
1575: if (regno > first_regno)
1576: (*info->fprintf_func) (info->stream, "-%s",
1577: reg_names[regno]);
1578: }
1579: }
1580: else if (place == '3')
1581: {
1582: /* `fmovem' insn. */
1583: char doneany;
1584: val = fetch_arg (buffer, place, 8, info);
1585: if (val == 0)
1586: {
1587: (*info->fprintf_func) (info->stream, "#0");
1588: break;
1589: }
1590: if (*d == 'l')
1591: {
1592: int newval = 0;
1593:
1594: for (regno = 0; regno < 8; ++regno)
1595: if (val & (0x80 >> regno))
1596: newval |= 1 << regno;
1597: val = newval;
1598: }
1599: val &= 0xff;
1600: doneany = 0;
1601: for (regno = 0; regno < 8; ++regno)
1602: if (val & (1 << regno))
1603: {
1604: int first_regno;
1605: if (doneany)
1606: (*info->fprintf_func) (info->stream, "/");
1607: doneany = 1;
1608: (*info->fprintf_func) (info->stream, "%%fp%d", regno);
1609: first_regno = regno;
1610: while (val & (1 << (regno + 1)))
1611: ++regno;
1612: if (regno > first_regno)
1613: (*info->fprintf_func) (info->stream, "-%%fp%d", regno);
1614: }
1615: }
1616: else if (place == '8')
1617: {
1618: /* fmoveml for FP status registers. */
1619: (*info->fprintf_func) (info->stream, "%s",
1620: fpcr_names[fetch_arg (buffer, place, 3,
1621: info)]);
1622: }
1623: else
1624: return -2;
1625: break;
1626:
1627: case 'X':
1628: place = '8';
1629: case 'Y':
1630: case 'Z':
1631: case 'W':
1632: case '0':
1633: case '1':
1634: case '2':
1635: case '3':
1636: {
1637: int val = fetch_arg (buffer, place, 5, info);
1.1.1.3 root 1638: const char *name = 0;
1.1 root 1639:
1640: switch (val)
1641: {
1642: case 2: name = "%tt0"; break;
1643: case 3: name = "%tt1"; break;
1644: case 0x10: name = "%tc"; break;
1645: case 0x11: name = "%drp"; break;
1646: case 0x12: name = "%srp"; break;
1647: case 0x13: name = "%crp"; break;
1648: case 0x14: name = "%cal"; break;
1649: case 0x15: name = "%val"; break;
1650: case 0x16: name = "%scc"; break;
1651: case 0x17: name = "%ac"; break;
1652: case 0x18: name = "%psr"; break;
1653: case 0x19: name = "%pcsr"; break;
1654: case 0x1c:
1655: case 0x1d:
1656: {
1657: int break_reg = ((buffer[3] >> 2) & 7);
1658:
1659: (*info->fprintf_func)
1660: (info->stream, val == 0x1c ? "%%bad%d" : "%%bac%d",
1661: break_reg);
1662: }
1663: break;
1664: default:
1665: (*info->fprintf_func) (info->stream, "<mmu register %d>", val);
1666: }
1667: if (name)
1668: (*info->fprintf_func) (info->stream, "%s", name);
1669: }
1670: break;
1671:
1672: case 'f':
1673: {
1674: int fc = fetch_arg (buffer, place, 5, info);
1675:
1676: if (fc == 1)
1677: (*info->fprintf_func) (info->stream, "%%dfc");
1678: else if (fc == 0)
1679: (*info->fprintf_func) (info->stream, "%%sfc");
1680: else
1681: /* xgettext:c-format */
1682: (*info->fprintf_func) (info->stream, _("<function code %d>"), fc);
1683: }
1684: break;
1685:
1686: case 'V':
1687: (*info->fprintf_func) (info->stream, "%%val");
1688: break;
1689:
1690: case 't':
1691: {
1692: int level = fetch_arg (buffer, place, 3, info);
1693:
1694: (*info->fprintf_func) (info->stream, "%d", level);
1695: }
1696: break;
1697:
1698: case 'u':
1699: {
1700: short is_upper = 0;
1701: int reg = fetch_arg (buffer, place, 5, info);
1702:
1703: if (reg & 0x10)
1704: {
1705: is_upper = 1;
1706: reg &= 0xf;
1707: }
1708: (*info->fprintf_func) (info->stream, "%s%s",
1709: reg_half_names[reg],
1710: is_upper ? "u" : "l");
1711: }
1712: break;
1713:
1714: default:
1715: return -2;
1716: }
1717:
1718: return p - p0;
1719: }
1720:
1721: /* Try to match the current instruction to best and if so, return the
1722: number of bytes consumed from the instruction stream, else zero. */
1723:
1724: static int
1725: match_insn_m68k (bfd_vma memaddr,
1726: disassemble_info * info,
1727: const struct m68k_opcode * best,
1728: struct private * priv)
1729: {
1730: unsigned char *save_p;
1731: unsigned char *p;
1732: const char *d;
1733:
1734: bfd_byte *buffer = priv->the_buffer;
1735: fprintf_ftype save_printer = info->fprintf_func;
1736: void (* save_print_address) (bfd_vma, struct disassemble_info *)
1737: = info->print_address_func;
1738:
1739: /* Point at first word of argument data,
1740: and at descriptor for first argument. */
1741: p = buffer + 2;
1742:
1743: /* Figure out how long the fixed-size portion of the instruction is.
1744: The only place this is stored in the opcode table is
1745: in the arguments--look for arguments which specify fields in the 2nd
1746: or 3rd words of the instruction. */
1747: for (d = best->args; *d; d += 2)
1748: {
1749: /* I don't think it is necessary to be checking d[0] here;
1750: I suspect all this could be moved to the case statement below. */
1751: if (d[0] == '#')
1752: {
1753: if (d[1] == 'l' && p - buffer < 6)
1754: p = buffer + 6;
1755: else if (p - buffer < 4 && d[1] != 'C' && d[1] != '8')
1756: p = buffer + 4;
1757: }
1758:
1759: if ((d[0] == 'L' || d[0] == 'l') && d[1] == 'w' && p - buffer < 4)
1760: p = buffer + 4;
1761:
1762: switch (d[1])
1763: {
1764: case '1':
1765: case '2':
1766: case '3':
1767: case '7':
1768: case '8':
1769: case '9':
1770: case 'i':
1771: if (p - buffer < 4)
1772: p = buffer + 4;
1773: break;
1774: case '4':
1775: case '5':
1776: case '6':
1777: if (p - buffer < 6)
1778: p = buffer + 6;
1779: break;
1780: default:
1781: break;
1782: }
1783: }
1784:
1785: /* pflusha is an exceptions. It takes no arguments but is two words
1786: long. Recognize it by looking at the lower 16 bits of the mask. */
1787: if (p - buffer < 4 && (best->match & 0xFFFF) != 0)
1788: p = buffer + 4;
1789:
1790: /* lpstop is another exception. It takes a one word argument but is
1791: three words long. */
1792: if (p - buffer < 6
1793: && (best->match & 0xffff) == 0xffff
1794: && best->args[0] == '#'
1795: && best->args[1] == 'w')
1796: {
1797: /* Copy the one word argument into the usual location for a one
1798: word argument, to simplify printing it. We can get away with
1799: this because we know exactly what the second word is, and we
1800: aren't going to print anything based on it. */
1801: p = buffer + 6;
1.1.1.5 ! root 1802: fetch_data(info, p);
1.1 root 1803: buffer[2] = buffer[4];
1804: buffer[3] = buffer[5];
1805: }
1806:
1.1.1.5 ! root 1807: fetch_data(info, p);
1.1 root 1808:
1809: d = best->args;
1810:
1811: save_p = p;
1812: info->print_address_func = dummy_print_address;
1.1.1.5 ! root 1813: info->fprintf_func = dummy_printer;
1.1 root 1814:
1815: /* We scan the operands twice. The first time we don't print anything,
1816: but look for errors. */
1817: for (; *d; d += 2)
1818: {
1819: int eaten = print_insn_arg (d, buffer, p, memaddr + (p - buffer), info);
1820:
1821: if (eaten >= 0)
1822: p += eaten;
1823: else if (eaten == -1)
1824: {
1825: info->fprintf_func = save_printer;
1826: info->print_address_func = save_print_address;
1827: return 0;
1828: }
1829: else
1830: {
1831: info->fprintf_func (info->stream,
1832: /* xgettext:c-format */
1833: _("<internal error in opcode table: %s %s>\n"),
1834: best->name, best->args);
1835: info->fprintf_func = save_printer;
1836: info->print_address_func = save_print_address;
1837: return 2;
1838: }
1839: }
1840:
1841: p = save_p;
1842: info->fprintf_func = save_printer;
1843: info->print_address_func = save_print_address;
1844:
1845: d = best->args;
1846:
1847: info->fprintf_func (info->stream, "%s", best->name);
1848:
1849: if (*d)
1850: info->fprintf_func (info->stream, " ");
1851:
1852: while (*d)
1853: {
1854: p += print_insn_arg (d, buffer, p, memaddr + (p - buffer), info);
1855: d += 2;
1856:
1857: if (*d && *(d - 2) != 'I' && *d != 'k')
1858: info->fprintf_func (info->stream, ",");
1859: }
1860:
1861: return p - buffer;
1862: }
1863:
1864: /* Print the m68k instruction at address MEMADDR in debugged memory,
1865: on INFO->STREAM. Returns length of the instruction, in bytes. */
1866:
1867: int
1868: print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
1869: {
1870: int i;
1871: const char *d;
1872: unsigned int arch_mask;
1873: struct private priv;
1874: bfd_byte *buffer = priv.the_buffer;
1875: int major_opcode;
1876: static int numopcodes[16];
1877: static const struct m68k_opcode **opcodes[16];
1878: int val;
1879:
1880: if (!opcodes[0])
1881: {
1882: /* Speed up the matching by sorting the opcode
1883: table on the upper four bits of the opcode. */
1884: const struct m68k_opcode **opc_pointer[16];
1885:
1886: /* First count how many opcodes are in each of the sixteen buckets. */
1887: for (i = 0; i < m68k_numopcodes; i++)
1888: numopcodes[(m68k_opcodes[i].opcode >> 28) & 15]++;
1889:
1890: /* Then create a sorted table of pointers
1891: that point into the unsorted table. */
1892: opc_pointer[0] = malloc (sizeof (struct m68k_opcode *)
1893: * m68k_numopcodes);
1894: opcodes[0] = opc_pointer[0];
1895:
1896: for (i = 1; i < 16; i++)
1897: {
1898: opc_pointer[i] = opc_pointer[i - 1] + numopcodes[i - 1];
1899: opcodes[i] = opc_pointer[i];
1900: }
1901:
1902: for (i = 0; i < m68k_numopcodes; i++)
1903: *opc_pointer[(m68k_opcodes[i].opcode >> 28) & 15]++ = &m68k_opcodes[i];
1904: }
1905:
1906: info->private_data = (PTR) &priv;
1907: /* Tell objdump to use two bytes per chunk
1908: and six bytes per line for displaying raw data. */
1909: info->bytes_per_chunk = 2;
1910: info->bytes_per_line = 6;
1911: info->display_endian = BFD_ENDIAN_BIG;
1912: priv.max_fetched = priv.the_buffer;
1913: priv.insn_start = memaddr;
1914:
1915: if (setjmp (priv.bailout) != 0)
1916: /* Error return. */
1917: return -1;
1918:
1919: switch (info->mach)
1920: {
1921: default:
1922: case 0:
1923: arch_mask = (unsigned int) -1;
1924: break;
1925: case bfd_mach_m68000:
1926: arch_mask = m68000|m68881|m68851;
1927: break;
1928: case bfd_mach_m68008:
1929: arch_mask = m68008|m68881|m68851;
1930: break;
1931: case bfd_mach_m68010:
1932: arch_mask = m68010|m68881|m68851;
1933: break;
1934: case bfd_mach_m68020:
1935: arch_mask = m68020|m68881|m68851;
1936: break;
1937: case bfd_mach_m68030:
1938: arch_mask = m68030|m68881|m68851;
1939: break;
1940: case bfd_mach_m68040:
1941: arch_mask = m68040|m68881|m68851;
1942: break;
1943: case bfd_mach_m68060:
1944: arch_mask = m68060|m68881|m68851;
1945: break;
1946: case bfd_mach_mcf5200:
1947: arch_mask = mcfisa_a;
1948: break;
1949: case bfd_mach_mcf521x:
1950: case bfd_mach_mcf528x:
1951: arch_mask = mcfisa_a|mcfhwdiv|mcfisa_aa|mcfusp|mcfemac;
1952: break;
1953: case bfd_mach_mcf5206e:
1954: arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
1955: break;
1956: case bfd_mach_mcf5249:
1957: arch_mask = mcfisa_a|mcfhwdiv|mcfemac;
1958: break;
1959: case bfd_mach_mcf5307:
1960: arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
1961: break;
1962: case bfd_mach_mcf5407:
1963: arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac;
1964: break;
1965: case bfd_mach_mcf547x:
1966: case bfd_mach_mcf548x:
1967: case bfd_mach_mcfv4e:
1968: arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfemac;
1969: break;
1970: }
1971:
1.1.1.5 ! root 1972: fetch_data(info, buffer + 2);
1.1 root 1973: major_opcode = (buffer[0] >> 4) & 15;
1974:
1975: for (i = 0; i < numopcodes[major_opcode]; i++)
1976: {
1977: const struct m68k_opcode *opc = opcodes[major_opcode][i];
1978: unsigned long opcode = opc->opcode;
1979: unsigned long match = opc->match;
1980:
1981: if (((0xff & buffer[0] & (match >> 24)) == (0xff & (opcode >> 24)))
1982: && ((0xff & buffer[1] & (match >> 16)) == (0xff & (opcode >> 16)))
1983: /* Only fetch the next two bytes if we need to. */
1984: && (((0xffff & match) == 0)
1985: ||
1.1.1.5 ! root 1986: (fetch_data(info, buffer + 4)
1.1 root 1987: && ((0xff & buffer[2] & (match >> 8)) == (0xff & (opcode >> 8)))
1988: && ((0xff & buffer[3] & match) == (0xff & opcode)))
1989: )
1990: && (opc->arch & arch_mask) != 0)
1991: {
1992: /* Don't use for printout the variants of divul and divsl
1993: that have the same register number in two places.
1994: The more general variants will match instead. */
1995: for (d = opc->args; *d; d += 2)
1996: if (d[1] == 'D')
1997: break;
1998:
1999: /* Don't use for printout the variants of most floating
2000: point coprocessor instructions which use the same
2001: register number in two places, as above. */
2002: if (*d == '\0')
2003: for (d = opc->args; *d; d += 2)
2004: if (d[1] == 't')
2005: break;
2006:
2007: /* Don't match fmovel with more than one register;
2008: wait for fmoveml. */
2009: if (*d == '\0')
2010: {
2011: for (d = opc->args; *d; d += 2)
2012: {
2013: if (d[0] == 's' && d[1] == '8')
2014: {
2015: val = fetch_arg (buffer, d[1], 3, info);
2016: if ((val & (val - 1)) != 0)
2017: break;
2018: }
2019: }
2020: }
2021:
2022: if (*d == '\0')
2023: if ((val = match_insn_m68k (memaddr, info, opc, & priv)))
2024: return val;
2025: }
2026: }
2027:
2028: /* Handle undefined instructions. */
2029: info->fprintf_func (info->stream, "0%o", (buffer[0] << 8) + buffer[1]);
2030: return 2;
2031: }
2032: /* **** End of m68k-dis.c */
2033: /* **** m68k-opc.h from sourceware.org CVS 2005-08-14. */
2034: /* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
2035: Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2036: 2000, 2001, 2003, 2004, 2005
2037: Free Software Foundation, Inc.
2038:
2039: This file is part of GDB, GAS, and the GNU binutils.
2040:
2041: GDB, GAS, and the GNU binutils are free software; you can redistribute
2042: them and/or modify them under the terms of the GNU General Public
2043: License as published by the Free Software Foundation; either version
2044: 1, or (at your option) any later version.
2045:
2046: GDB, GAS, and the GNU binutils are distributed in the hope that they
2047: will be useful, but WITHOUT ANY WARRANTY; without even the implied
2048: warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
2049: the GNU General Public License for more details.
2050:
2051: You should have received a copy of the GNU General Public License
1.1.1.4 root 2052: along with this file; see the file COPYING. If not,
2053: see <http://www.gnu.org/licenses/>. */
1.1 root 2054:
2055: #define one(x) ((unsigned int) (x) << 16)
2056: #define two(x, y) (((unsigned int) (x) << 16) + (y))
2057:
2058: /* The assembler requires that all instances of the same mnemonic must
2059: be consecutive. If they aren't, the assembler will bomb at
2060: runtime. */
2061:
2062: const struct m68k_opcode m68k_opcodes[] =
2063: {
2064: {"abcd", 2, one(0140400), one(0170770), "DsDd", m68000up },
2065: {"abcd", 2, one(0140410), one(0170770), "-s-d", m68000up },
2066:
2067: {"addaw", 2, one(0150300), one(0170700), "*wAd", m68000up },
2068: {"addal", 2, one(0150700), one(0170700), "*lAd", m68000up | mcfisa_a },
2069:
2070: {"addib", 4, one(0003000), one(0177700), "#b$s", m68000up },
2071: {"addiw", 4, one(0003100), one(0177700), "#w$s", m68000up },
2072: {"addil", 6, one(0003200), one(0177700), "#l$s", m68000up },
2073: {"addil", 6, one(0003200), one(0177700), "#lDs", mcfisa_a },
2074:
2075: {"addqb", 2, one(0050000), one(0170700), "Qd$b", m68000up },
2076: {"addqw", 2, one(0050100), one(0170700), "Qd%w", m68000up },
2077: {"addql", 2, one(0050200), one(0170700), "Qd%l", m68000up | mcfisa_a },
2078:
2079: /* The add opcode can generate the adda, addi, and addq instructions. */
2080: {"addb", 2, one(0050000), one(0170700), "Qd$b", m68000up },
2081: {"addb", 4, one(0003000), one(0177700), "#b$s", m68000up },
2082: {"addb", 2, one(0150000), one(0170700), ";bDd", m68000up },
2083: {"addb", 2, one(0150400), one(0170700), "Dd~b", m68000up },
2084: {"addw", 2, one(0050100), one(0170700), "Qd%w", m68000up },
2085: {"addw", 2, one(0150300), one(0170700), "*wAd", m68000up },
2086: {"addw", 4, one(0003100), one(0177700), "#w$s", m68000up },
2087: {"addw", 2, one(0150100), one(0170700), "*wDd", m68000up },
2088: {"addw", 2, one(0150500), one(0170700), "Dd~w", m68000up },
2089: {"addl", 2, one(0050200), one(0170700), "Qd%l", m68000up | mcfisa_a },
2090: {"addl", 6, one(0003200), one(0177700), "#l$s", m68000up },
2091: {"addl", 6, one(0003200), one(0177700), "#lDs", mcfisa_a },
2092: {"addl", 2, one(0150700), one(0170700), "*lAd", m68000up | mcfisa_a },
2093: {"addl", 2, one(0150200), one(0170700), "*lDd", m68000up | mcfisa_a },
2094: {"addl", 2, one(0150600), one(0170700), "Dd~l", m68000up | mcfisa_a },
2095:
2096: {"addxb", 2, one(0150400), one(0170770), "DsDd", m68000up },
2097: {"addxb", 2, one(0150410), one(0170770), "-s-d", m68000up },
2098: {"addxw", 2, one(0150500), one(0170770), "DsDd", m68000up },
2099: {"addxw", 2, one(0150510), one(0170770), "-s-d", m68000up },
2100: {"addxl", 2, one(0150600), one(0170770), "DsDd", m68000up | mcfisa_a },
2101: {"addxl", 2, one(0150610), one(0170770), "-s-d", m68000up },
2102:
2103: {"andib", 4, one(0001000), one(0177700), "#b$s", m68000up },
2104: {"andib", 4, one(0001074), one(0177777), "#bCs", m68000up },
2105: {"andiw", 4, one(0001100), one(0177700), "#w$s", m68000up },
2106: {"andiw", 4, one(0001174), one(0177777), "#wSs", m68000up },
2107: {"andil", 6, one(0001200), one(0177700), "#l$s", m68000up },
2108: {"andil", 6, one(0001200), one(0177700), "#lDs", mcfisa_a },
2109: {"andi", 4, one(0001100), one(0177700), "#w$s", m68000up },
2110: {"andi", 4, one(0001074), one(0177777), "#bCs", m68000up },
2111: {"andi", 4, one(0001174), one(0177777), "#wSs", m68000up },
2112:
2113: /* The and opcode can generate the andi instruction. */
2114: {"andb", 4, one(0001000), one(0177700), "#b$s", m68000up },
2115: {"andb", 4, one(0001074), one(0177777), "#bCs", m68000up },
2116: {"andb", 2, one(0140000), one(0170700), ";bDd", m68000up },
2117: {"andb", 2, one(0140400), one(0170700), "Dd~b", m68000up },
2118: {"andw", 4, one(0001100), one(0177700), "#w$s", m68000up },
2119: {"andw", 4, one(0001174), one(0177777), "#wSs", m68000up },
2120: {"andw", 2, one(0140100), one(0170700), ";wDd", m68000up },
2121: {"andw", 2, one(0140500), one(0170700), "Dd~w", m68000up },
2122: {"andl", 6, one(0001200), one(0177700), "#l$s", m68000up },
2123: {"andl", 6, one(0001200), one(0177700), "#lDs", mcfisa_a },
2124: {"andl", 2, one(0140200), one(0170700), ";lDd", m68000up | mcfisa_a },
2125: {"andl", 2, one(0140600), one(0170700), "Dd~l", m68000up | mcfisa_a },
2126: {"and", 4, one(0001100), one(0177700), "#w$w", m68000up },
2127: {"and", 4, one(0001074), one(0177777), "#bCs", m68000up },
2128: {"and", 4, one(0001174), one(0177777), "#wSs", m68000up },
2129: {"and", 2, one(0140100), one(0170700), ";wDd", m68000up },
2130: {"and", 2, one(0140500), one(0170700), "Dd~w", m68000up },
2131:
2132: {"aslb", 2, one(0160400), one(0170770), "QdDs", m68000up },
2133: {"aslb", 2, one(0160440), one(0170770), "DdDs", m68000up },
2134: {"aslw", 2, one(0160500), one(0170770), "QdDs", m68000up },
2135: {"aslw", 2, one(0160540), one(0170770), "DdDs", m68000up },
2136: {"aslw", 2, one(0160700), one(0177700), "~s", m68000up },
2137: {"asll", 2, one(0160600), one(0170770), "QdDs", m68000up | mcfisa_a },
2138: {"asll", 2, one(0160640), one(0170770), "DdDs", m68000up | mcfisa_a },
2139:
2140: {"asrb", 2, one(0160000), one(0170770), "QdDs", m68000up },
2141: {"asrb", 2, one(0160040), one(0170770), "DdDs", m68000up },
2142: {"asrw", 2, one(0160100), one(0170770), "QdDs", m68000up },
2143: {"asrw", 2, one(0160140), one(0170770), "DdDs", m68000up },
2144: {"asrw", 2, one(0160300), one(0177700), "~s", m68000up },
2145: {"asrl", 2, one(0160200), one(0170770), "QdDs", m68000up | mcfisa_a },
2146: {"asrl", 2, one(0160240), one(0170770), "DdDs", m68000up | mcfisa_a },
2147:
2148: {"bhiw", 2, one(0061000), one(0177777), "BW", m68000up | mcfisa_a },
2149: {"blsw", 2, one(0061400), one(0177777), "BW", m68000up | mcfisa_a },
2150: {"bccw", 2, one(0062000), one(0177777), "BW", m68000up | mcfisa_a },
2151: {"bcsw", 2, one(0062400), one(0177777), "BW", m68000up | mcfisa_a },
2152: {"bnew", 2, one(0063000), one(0177777), "BW", m68000up | mcfisa_a },
2153: {"beqw", 2, one(0063400), one(0177777), "BW", m68000up | mcfisa_a },
2154: {"bvcw", 2, one(0064000), one(0177777), "BW", m68000up | mcfisa_a },
2155: {"bvsw", 2, one(0064400), one(0177777), "BW", m68000up | mcfisa_a },
2156: {"bplw", 2, one(0065000), one(0177777), "BW", m68000up | mcfisa_a },
2157: {"bmiw", 2, one(0065400), one(0177777), "BW", m68000up | mcfisa_a },
2158: {"bgew", 2, one(0066000), one(0177777), "BW", m68000up | mcfisa_a },
2159: {"bltw", 2, one(0066400), one(0177777), "BW", m68000up | mcfisa_a },
2160: {"bgtw", 2, one(0067000), one(0177777), "BW", m68000up | mcfisa_a },
2161: {"blew", 2, one(0067400), one(0177777), "BW", m68000up | mcfisa_a },
2162:
2163: {"bhil", 2, one(0061377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2164: {"blsl", 2, one(0061777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2165: {"bccl", 2, one(0062377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2166: {"bcsl", 2, one(0062777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2167: {"bnel", 2, one(0063377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2168: {"beql", 2, one(0063777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2169: {"bvcl", 2, one(0064377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2170: {"bvsl", 2, one(0064777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2171: {"bpll", 2, one(0065377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2172: {"bmil", 2, one(0065777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2173: {"bgel", 2, one(0066377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2174: {"bltl", 2, one(0066777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2175: {"bgtl", 2, one(0067377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2176: {"blel", 2, one(0067777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2177:
2178: {"bhis", 2, one(0061000), one(0177400), "BB", m68000up | mcfisa_a },
2179: {"blss", 2, one(0061400), one(0177400), "BB", m68000up | mcfisa_a },
2180: {"bccs", 2, one(0062000), one(0177400), "BB", m68000up | mcfisa_a },
2181: {"bcss", 2, one(0062400), one(0177400), "BB", m68000up | mcfisa_a },
2182: {"bnes", 2, one(0063000), one(0177400), "BB", m68000up | mcfisa_a },
2183: {"beqs", 2, one(0063400), one(0177400), "BB", m68000up | mcfisa_a },
2184: {"bvcs", 2, one(0064000), one(0177400), "BB", m68000up | mcfisa_a },
2185: {"bvss", 2, one(0064400), one(0177400), "BB", m68000up | mcfisa_a },
2186: {"bpls", 2, one(0065000), one(0177400), "BB", m68000up | mcfisa_a },
2187: {"bmis", 2, one(0065400), one(0177400), "BB", m68000up | mcfisa_a },
2188: {"bges", 2, one(0066000), one(0177400), "BB", m68000up | mcfisa_a },
2189: {"blts", 2, one(0066400), one(0177400), "BB", m68000up | mcfisa_a },
2190: {"bgts", 2, one(0067000), one(0177400), "BB", m68000up | mcfisa_a },
2191: {"bles", 2, one(0067400), one(0177400), "BB", m68000up | mcfisa_a },
2192:
2193: {"jhi", 2, one(0061000), one(0177400), "Bg", m68000up | mcfisa_a },
2194: {"jls", 2, one(0061400), one(0177400), "Bg", m68000up | mcfisa_a },
2195: {"jcc", 2, one(0062000), one(0177400), "Bg", m68000up | mcfisa_a },
2196: {"jcs", 2, one(0062400), one(0177400), "Bg", m68000up | mcfisa_a },
2197: {"jne", 2, one(0063000), one(0177400), "Bg", m68000up | mcfisa_a },
2198: {"jeq", 2, one(0063400), one(0177400), "Bg", m68000up | mcfisa_a },
2199: {"jvc", 2, one(0064000), one(0177400), "Bg", m68000up | mcfisa_a },
2200: {"jvs", 2, one(0064400), one(0177400), "Bg", m68000up | mcfisa_a },
2201: {"jpl", 2, one(0065000), one(0177400), "Bg", m68000up | mcfisa_a },
2202: {"jmi", 2, one(0065400), one(0177400), "Bg", m68000up | mcfisa_a },
2203: {"jge", 2, one(0066000), one(0177400), "Bg", m68000up | mcfisa_a },
2204: {"jlt", 2, one(0066400), one(0177400), "Bg", m68000up | mcfisa_a },
2205: {"jgt", 2, one(0067000), one(0177400), "Bg", m68000up | mcfisa_a },
2206: {"jle", 2, one(0067400), one(0177400), "Bg", m68000up | mcfisa_a },
2207:
2208: {"bchg", 2, one(0000500), one(0170700), "Dd$s", m68000up | mcfisa_a },
2209: {"bchg", 4, one(0004100), one(0177700), "#b$s", m68000up },
2210: {"bchg", 4, one(0004100), one(0177700), "#bqs", mcfisa_a },
2211:
2212: {"bclr", 2, one(0000600), one(0170700), "Dd$s", m68000up | mcfisa_a },
2213: {"bclr", 4, one(0004200), one(0177700), "#b$s", m68000up },
2214: {"bclr", 4, one(0004200), one(0177700), "#bqs", mcfisa_a },
2215:
2216: {"bfchg", 4, two(0165300, 0), two(0177700, 0170000), "?sO2O3", m68020up },
2217: {"bfclr", 4, two(0166300, 0), two(0177700, 0170000), "?sO2O3", m68020up },
2218: {"bfexts", 4, two(0165700, 0), two(0177700, 0100000), "/sO2O3D1", m68020up },
2219: {"bfextu", 4, two(0164700, 0), two(0177700, 0100000), "/sO2O3D1", m68020up },
2220: {"bfffo", 4, two(0166700, 0), two(0177700, 0100000), "/sO2O3D1", m68020up },
2221: {"bfins", 4, two(0167700, 0), two(0177700, 0100000), "D1?sO2O3", m68020up },
2222: {"bfset", 4, two(0167300, 0), two(0177700, 0170000), "?sO2O3", m68020up },
2223: {"bftst", 4, two(0164300, 0), two(0177700, 0170000), "/sO2O3", m68020up },
2224:
2225: {"bgnd", 2, one(0045372), one(0177777), "", cpu32 },
2226:
2227: {"bitrev", 2, one(0000300), one(0177770), "Ds", mcfisa_aa},
2228:
2229: {"bkpt", 2, one(0044110), one(0177770), "ts", m68010up },
2230:
2231: {"braw", 2, one(0060000), one(0177777), "BW", m68000up | mcfisa_a },
2232: {"bral", 2, one(0060377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2233: {"bras", 2, one(0060000), one(0177400), "BB", m68000up | mcfisa_a },
2234:
2235: {"bset", 2, one(0000700), one(0170700), "Dd$s", m68000up | mcfisa_a },
2236: {"bset", 2, one(0000700), one(0170700), "Ddvs", mcfisa_a },
2237: {"bset", 4, one(0004300), one(0177700), "#b$s", m68000up },
2238: {"bset", 4, one(0004300), one(0177700), "#bqs", mcfisa_a },
2239:
2240: {"bsrw", 2, one(0060400), one(0177777), "BW", m68000up | mcfisa_a },
2241: {"bsrl", 2, one(0060777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2242: {"bsrs", 2, one(0060400), one(0177400), "BB", m68000up | mcfisa_a },
2243:
2244: {"btst", 2, one(0000400), one(0170700), "Dd;b", m68000up | mcfisa_a },
2245: {"btst", 4, one(0004000), one(0177700), "#b@s", m68000up },
2246: {"btst", 4, one(0004000), one(0177700), "#bqs", mcfisa_a },
2247:
2248: {"byterev", 2, one(0001300), one(0177770), "Ds", mcfisa_aa},
2249:
2250: {"callm", 4, one(0003300), one(0177700), "#b!s", m68020 },
2251:
2252: {"cas2w", 6, two(0006374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up },
2253: {"cas2w", 6, two(0006374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up },
2254: {"cas2l", 6, two(0007374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up },
2255: {"cas2l", 6, two(0007374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up },
2256:
2257: {"casb", 4, two(0005300, 0), two(0177700, 0177070), "D3D2~s", m68020up },
2258: {"casw", 4, two(0006300, 0), two(0177700, 0177070), "D3D2~s", m68020up },
2259: {"casl", 4, two(0007300, 0), two(0177700, 0177070), "D3D2~s", m68020up },
2260:
2261: {"chk2b", 4, two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
2262: {"chk2w", 4, two(0001300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
2263: {"chk2l", 4, two(0002300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
2264:
2265: {"chkl", 2, one(0040400), one(0170700), ";lDd", m68000up },
2266: {"chkw", 2, one(0040600), one(0170700), ";wDd", m68000up },
2267:
2268: #define SCOPE_LINE (0x1 << 3)
2269: #define SCOPE_PAGE (0x2 << 3)
2270: #define SCOPE_ALL (0x3 << 3)
2271:
2272: {"cinva", 2, one(0xf400|SCOPE_ALL), one(0xff38), "ce", m68040up },
2273: {"cinvl", 2, one(0xf400|SCOPE_LINE), one(0xff38), "ceas", m68040up },
2274: {"cinvp", 2, one(0xf400|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
2275:
2276: {"cpusha", 2, one(0xf420|SCOPE_ALL), one(0xff38), "ce", m68040up },
2277: {"cpushl", 2, one(0xf420|SCOPE_LINE), one(0xff38), "ceas", m68040up | mcfisa_a },
2278: {"cpushp", 2, one(0xf420|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
2279:
2280: #undef SCOPE_LINE
2281: #undef SCOPE_PAGE
2282: #undef SCOPE_ALL
2283:
2284: {"clrb", 2, one(0041000), one(0177700), "$s", m68000up | mcfisa_a },
2285: {"clrw", 2, one(0041100), one(0177700), "$s", m68000up | mcfisa_a },
2286: {"clrl", 2, one(0041200), one(0177700), "$s", m68000up | mcfisa_a },
2287:
2288: {"cmp2b", 4, two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
2289: {"cmp2w", 4, two(0001300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
2290: {"cmp2l", 4, two(0002300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
2291:
2292: {"cmpaw", 2, one(0130300), one(0170700), "*wAd", m68000up },
2293: {"cmpal", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a },
2294:
2295: {"cmpib", 4, one(0006000), one(0177700), "#b@s", m68000up },
2296: {"cmpib", 4, one(0006000), one(0177700), "#bDs", mcfisa_b },
2297: {"cmpiw", 4, one(0006100), one(0177700), "#w@s", m68000up },
2298: {"cmpiw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b },
2299: {"cmpil", 6, one(0006200), one(0177700), "#l@s", m68000up },
2300: {"cmpil", 6, one(0006200), one(0177700), "#lDs", mcfisa_a },
2301:
2302: {"cmpmb", 2, one(0130410), one(0170770), "+s+d", m68000up },
2303: {"cmpmw", 2, one(0130510), one(0170770), "+s+d", m68000up },
2304: {"cmpml", 2, one(0130610), one(0170770), "+s+d", m68000up },
2305:
2306: /* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions. */
2307: {"cmpb", 4, one(0006000), one(0177700), "#b@s", m68000up },
2308: {"cmpb", 4, one(0006000), one(0177700), "#bDs", mcfisa_b },
2309: {"cmpb", 2, one(0130410), one(0170770), "+s+d", m68000up },
2310: {"cmpb", 2, one(0130000), one(0170700), ";bDd", m68000up },
2311: {"cmpb", 2, one(0130000), one(0170700), "*bDd", mcfisa_b },
2312: {"cmpw", 2, one(0130300), one(0170700), "*wAd", m68000up },
2313: {"cmpw", 4, one(0006100), one(0177700), "#w@s", m68000up },
2314: {"cmpw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b },
2315: {"cmpw", 2, one(0130510), one(0170770), "+s+d", m68000up },
2316: {"cmpw", 2, one(0130100), one(0170700), "*wDd", m68000up | mcfisa_b },
2317: {"cmpl", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a },
2318: {"cmpl", 6, one(0006200), one(0177700), "#l@s", m68000up },
2319: {"cmpl", 6, one(0006200), one(0177700), "#lDs", mcfisa_a },
2320: {"cmpl", 2, one(0130610), one(0170770), "+s+d", m68000up },
2321: {"cmpl", 2, one(0130200), one(0170700), "*lDd", m68000up | mcfisa_a },
2322:
2323: {"dbcc", 2, one(0052310), one(0177770), "DsBw", m68000up },
2324: {"dbcs", 2, one(0052710), one(0177770), "DsBw", m68000up },
2325: {"dbeq", 2, one(0053710), one(0177770), "DsBw", m68000up },
2326: {"dbf", 2, one(0050710), one(0177770), "DsBw", m68000up },
2327: {"dbge", 2, one(0056310), one(0177770), "DsBw", m68000up },
2328: {"dbgt", 2, one(0057310), one(0177770), "DsBw", m68000up },
2329: {"dbhi", 2, one(0051310), one(0177770), "DsBw", m68000up },
2330: {"dble", 2, one(0057710), one(0177770), "DsBw", m68000up },
2331: {"dbls", 2, one(0051710), one(0177770), "DsBw", m68000up },
2332: {"dblt", 2, one(0056710), one(0177770), "DsBw", m68000up },
2333: {"dbmi", 2, one(0055710), one(0177770), "DsBw", m68000up },
2334: {"dbne", 2, one(0053310), one(0177770), "DsBw", m68000up },
2335: {"dbpl", 2, one(0055310), one(0177770), "DsBw", m68000up },
2336: {"dbt", 2, one(0050310), one(0177770), "DsBw", m68000up },
2337: {"dbvc", 2, one(0054310), one(0177770), "DsBw", m68000up },
2338: {"dbvs", 2, one(0054710), one(0177770), "DsBw", m68000up },
2339:
2340: {"divsw", 2, one(0100700), one(0170700), ";wDd", m68000up | mcfhwdiv },
2341:
2342: {"divsl", 4, two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
2343: {"divsl", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up|cpu32 },
2344: {"divsl", 4, two(0046100,0004000),two(0177700,0107770),"qsDD", mcfhwdiv },
2345:
2346: {"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
2347: {"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up|cpu32 },
2348:
2349: {"divuw", 2, one(0100300), one(0170700), ";wDd", m68000up | mcfhwdiv },
2350:
2351: {"divul", 4, two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
2352: {"divul", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up|cpu32 },
2353: {"divul", 4, two(0046100,0000000),two(0177700,0107770),"qsDD", mcfhwdiv },
2354:
2355: {"divull", 4, two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
2356: {"divull", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up|cpu32 },
2357:
2358: {"eorib", 4, one(0005000), one(0177700), "#b$s", m68000up },
2359: {"eorib", 4, one(0005074), one(0177777), "#bCs", m68000up },
2360: {"eoriw", 4, one(0005100), one(0177700), "#w$s", m68000up },
2361: {"eoriw", 4, one(0005174), one(0177777), "#wSs", m68000up },
2362: {"eoril", 6, one(0005200), one(0177700), "#l$s", m68000up },
2363: {"eoril", 6, one(0005200), one(0177700), "#lDs", mcfisa_a },
2364: {"eori", 4, one(0005074), one(0177777), "#bCs", m68000up },
2365: {"eori", 4, one(0005174), one(0177777), "#wSs", m68000up },
2366: {"eori", 4, one(0005100), one(0177700), "#w$s", m68000up },
2367:
2368: /* The eor opcode can generate the eori instruction. */
2369: {"eorb", 4, one(0005000), one(0177700), "#b$s", m68000up },
2370: {"eorb", 4, one(0005074), one(0177777), "#bCs", m68000up },
2371: {"eorb", 2, one(0130400), one(0170700), "Dd$s", m68000up },
2372: {"eorw", 4, one(0005100), one(0177700), "#w$s", m68000up },
2373: {"eorw", 4, one(0005174), one(0177777), "#wSs", m68000up },
2374: {"eorw", 2, one(0130500), one(0170700), "Dd$s", m68000up },
2375: {"eorl", 6, one(0005200), one(0177700), "#l$s", m68000up },
2376: {"eorl", 6, one(0005200), one(0177700), "#lDs", mcfisa_a },
2377: {"eorl", 2, one(0130600), one(0170700), "Dd$s", m68000up | mcfisa_a },
2378: {"eor", 4, one(0005074), one(0177777), "#bCs", m68000up },
2379: {"eor", 4, one(0005174), one(0177777), "#wSs", m68000up },
2380: {"eor", 4, one(0005100), one(0177700), "#w$s", m68000up },
2381: {"eor", 2, one(0130500), one(0170700), "Dd$s", m68000up },
1.1.1.2 root 2382:
1.1 root 2383: {"exg", 2, one(0140500), one(0170770), "DdDs", m68000up },
2384: {"exg", 2, one(0140510), one(0170770), "AdAs", m68000up },
2385: {"exg", 2, one(0140610), one(0170770), "DdAs", m68000up },
2386: {"exg", 2, one(0140610), one(0170770), "AsDd", m68000up },
2387:
2388: {"extw", 2, one(0044200), one(0177770), "Ds", m68000up|mcfisa_a },
2389: {"extl", 2, one(0044300), one(0177770), "Ds", m68000up|mcfisa_a },
2390: {"extbl", 2, one(0044700), one(0177770), "Ds", m68020up|cpu32|mcfisa_a },
2391:
2392: {"ff1", 2, one(0002300), one(0177770), "Ds", mcfisa_aa},
2393:
2394: /* float stuff starts here */
2395:
2396: {"fabsb", 4, two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2397: {"fabsb", 4, two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2398: {"fabsd", 4, two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2399: {"fabsd", 4, two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt", cfloat },
2400: {"fabsd", 4, two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2401: {"fabsd", 4, two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2402: {"fabsl", 4, two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2403: {"fabsl", 4, two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2404: {"fabsp", 4, two(0xF000, 0x4C18), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2405: {"fabss", 4, two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", cfloat },
2406: {"fabss", 4, two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2407: {"fabsw", 4, two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2408: {"fabsw", 4, two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2409: {"fabsx", 4, two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2410: {"fabsx", 4, two(0xF000, 0x4818), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2411: {"fabsx", 4, two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2412:
2413: {"fsabsb", 4, two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2414: {"fsabsb", 4, two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2415: {"fsabsd", 4, two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2416: {"fsabsd", 4, two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt", cfloat },
2417: {"fsabsd", 4, two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2418: {"fsabsd", 4, two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2419: {"fsabsl", 4, two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2420: {"fsabsl", 4, two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2421: {"fsabsp", 4, two(0xF000, 0x4C58), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2422: {"fsabss", 4, two(0xF000, 0x4258), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2423: {"fsabss", 4, two(0xF000, 0x4458), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2424: {"fsabsw", 4, two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2425: {"fsabsw", 4, two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2426: {"fsabsx", 4, two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2427: {"fsabsx", 4, two(0xF000, 0x4858), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2428: {"fsabsx", 4, two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt", m68040up },
2429:
2430: {"fdabsb", 4, two(0xF000, 0x585C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2431: {"fdabsb", 4, two(0xF000, 0x585c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up},
2432: {"fdabsd", 4, two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2433: {"fdabsd", 4, two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiFt", cfloat },
2434: {"fdabsd", 4, two(0xF000, 0x545C), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2435: {"fdabsd", 4, two(0xF000, 0x545c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up},
2436: {"fdabsl", 4, two(0xF000, 0x405C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2437: {"fdabsl", 4, two(0xF000, 0x405c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up},
2438: {"fdabsp", 4, two(0xF000, 0x4C5c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up},
2439: {"fdabss", 4, two(0xF000, 0x425C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2440: {"fdabss", 4, two(0xF000, 0x445c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up},
2441: {"fdabsw", 4, two(0xF000, 0x505C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2442: {"fdabsw", 4, two(0xF000, 0x505c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up},
2443: {"fdabsx", 4, two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up},
2444: {"fdabsx", 4, two(0xF000, 0x485c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up},
2445: {"fdabsx", 4, two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiFt", m68040up},
2446:
2447: {"facosb", 4, two(0xF000, 0x581C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2448: {"facosd", 4, two(0xF000, 0x541C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2449: {"facosl", 4, two(0xF000, 0x401C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2450: {"facosp", 4, two(0xF000, 0x4C1C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2451: {"facoss", 4, two(0xF000, 0x441C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2452: {"facosw", 4, two(0xF000, 0x501C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2453: {"facosx", 4, two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2454: {"facosx", 4, two(0xF000, 0x481C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2455: {"facosx", 4, two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2456:
2457: {"faddb", 4, two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2458: {"faddb", 4, two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2459: {"faddd", 4, two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2460: {"faddd", 4, two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2461: {"faddd", 4, two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2462: {"faddd", 4, two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2463: {"faddl", 4, two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2464: {"faddl", 4, two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2465: {"faddp", 4, two(0xF000, 0x4C22), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2466: {"fadds", 4, two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2467: {"fadds", 4, two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2468: {"faddw", 4, two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2469: {"faddw", 4, two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2470: {"faddx", 4, two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2471: {"faddx", 4, two(0xF000, 0x4822), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2472:
2473: {"fsaddb", 4, two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2474: {"fsaddb", 4, two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2475: {"fsaddd", 4, two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2476: {"fsaddd", 4, two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2477: {"fsaddd", 4, two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2478: {"fsaddl", 4, two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2479: {"fsaddl", 4, two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2480: {"fsaddp", 4, two(0xF000, 0x4C62), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2481: {"fsadds", 4, two(0xF000, 0x4462), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2482: {"fsadds", 4, two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2483: {"fsaddw", 4, two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2484: {"fsaddw", 4, two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2485: {"fsaddx", 4, two(0xF000, 0x0062), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2486: {"fsaddx", 4, two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2487:
2488: {"fdaddb", 4, two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2489: {"fdaddb", 4, two(0xF000, 0x5866), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2490: {"fdaddd", 4, two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2491: {"fdaddd", 4, two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2492: {"fdaddd", 4, two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2493: {"fdaddl", 4, two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2494: {"fdaddl", 4, two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2495: {"fdaddp", 4, two(0xF000, 0x4C66), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2496: {"fdadds", 4, two(0xF000, 0x4466), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2497: {"fdadds", 4, two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2498: {"fdaddw", 4, two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2499: {"fdaddw", 4, two(0xF000, 0x5066), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2500: {"fdaddx", 4, two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2501: {"fdaddx", 4, two(0xF000, 0x4866), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2502:
2503: {"fasinb", 4, two(0xF000, 0x580C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2504: {"fasind", 4, two(0xF000, 0x540C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2505: {"fasinl", 4, two(0xF000, 0x400C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2506: {"fasinp", 4, two(0xF000, 0x4C0C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2507: {"fasins", 4, two(0xF000, 0x440C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2508: {"fasinw", 4, two(0xF000, 0x500C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2509: {"fasinx", 4, two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2510: {"fasinx", 4, two(0xF000, 0x480C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2511: {"fasinx", 4, two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2512:
2513: {"fatanb", 4, two(0xF000, 0x580A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2514: {"fatand", 4, two(0xF000, 0x540A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2515: {"fatanl", 4, two(0xF000, 0x400A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2516: {"fatanp", 4, two(0xF000, 0x4C0A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2517: {"fatans", 4, two(0xF000, 0x440A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2518: {"fatanw", 4, two(0xF000, 0x500A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2519: {"fatanx", 4, two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2520: {"fatanx", 4, two(0xF000, 0x480A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2521: {"fatanx", 4, two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2522:
2523: {"fatanhb", 4, two(0xF000, 0x580D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2524: {"fatanhd", 4, two(0xF000, 0x540D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2525: {"fatanhl", 4, two(0xF000, 0x400D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2526: {"fatanhp", 4, two(0xF000, 0x4C0D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2527: {"fatanhs", 4, two(0xF000, 0x440D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2528: {"fatanhw", 4, two(0xF000, 0x500D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2529: {"fatanhx", 4, two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2530: {"fatanhx", 4, two(0xF000, 0x480D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2531: {"fatanhx", 4, two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2532:
2533: {"fbeq", 2, one(0xF081), one(0xF1FF), "IdBW", mfloat | cfloat },
2534: {"fbf", 2, one(0xF080), one(0xF1FF), "IdBW", mfloat | cfloat },
2535: {"fbge", 2, one(0xF093), one(0xF1FF), "IdBW", mfloat | cfloat },
2536: {"fbgl", 2, one(0xF096), one(0xF1FF), "IdBW", mfloat | cfloat },
2537: {"fbgle", 2, one(0xF097), one(0xF1FF), "IdBW", mfloat | cfloat },
2538: {"fbgt", 2, one(0xF092), one(0xF1FF), "IdBW", mfloat | cfloat },
2539: {"fble", 2, one(0xF095), one(0xF1FF), "IdBW", mfloat | cfloat },
2540: {"fblt", 2, one(0xF094), one(0xF1FF), "IdBW", mfloat | cfloat },
2541: {"fbne", 2, one(0xF08E), one(0xF1FF), "IdBW", mfloat | cfloat },
2542: {"fbnge", 2, one(0xF09C), one(0xF1FF), "IdBW", mfloat | cfloat },
2543: {"fbngl", 2, one(0xF099), one(0xF1FF), "IdBW", mfloat | cfloat },
2544: {"fbngle", 2, one(0xF098), one(0xF1FF), "IdBW", mfloat | cfloat },
2545: {"fbngt", 2, one(0xF09D), one(0xF1FF), "IdBW", mfloat | cfloat },
2546: {"fbnle", 2, one(0xF09A), one(0xF1FF), "IdBW", mfloat | cfloat },
2547: {"fbnlt", 2, one(0xF09B), one(0xF1FF), "IdBW", mfloat | cfloat },
2548: {"fboge", 2, one(0xF083), one(0xF1FF), "IdBW", mfloat | cfloat },
2549: {"fbogl", 2, one(0xF086), one(0xF1FF), "IdBW", mfloat | cfloat },
2550: {"fbogt", 2, one(0xF082), one(0xF1FF), "IdBW", mfloat | cfloat },
2551: {"fbole", 2, one(0xF085), one(0xF1FF), "IdBW", mfloat | cfloat },
2552: {"fbolt", 2, one(0xF084), one(0xF1FF), "IdBW", mfloat | cfloat },
2553: {"fbor", 2, one(0xF087), one(0xF1FF), "IdBW", mfloat | cfloat },
2554: {"fbseq", 2, one(0xF091), one(0xF1FF), "IdBW", mfloat | cfloat },
2555: {"fbsf", 2, one(0xF090), one(0xF1FF), "IdBW", mfloat | cfloat },
2556: {"fbsne", 2, one(0xF09E), one(0xF1FF), "IdBW", mfloat | cfloat },
2557: {"fbst", 2, one(0xF09F), one(0xF1FF), "IdBW", mfloat | cfloat },
2558: {"fbt", 2, one(0xF08F), one(0xF1FF), "IdBW", mfloat | cfloat },
2559: {"fbueq", 2, one(0xF089), one(0xF1FF), "IdBW", mfloat | cfloat },
2560: {"fbuge", 2, one(0xF08B), one(0xF1FF), "IdBW", mfloat | cfloat },
2561: {"fbugt", 2, one(0xF08A), one(0xF1FF), "IdBW", mfloat | cfloat },
2562: {"fbule", 2, one(0xF08D), one(0xF1FF), "IdBW", mfloat | cfloat },
2563: {"fbult", 2, one(0xF08C), one(0xF1FF), "IdBW", mfloat | cfloat },
2564: {"fbun", 2, one(0xF088), one(0xF1FF), "IdBW", mfloat | cfloat },
2565:
2566: {"fbeql", 2, one(0xF0C1), one(0xF1FF), "IdBC", mfloat | cfloat },
2567: {"fbfl", 2, one(0xF0C0), one(0xF1FF), "IdBC", mfloat | cfloat },
2568: {"fbgel", 2, one(0xF0D3), one(0xF1FF), "IdBC", mfloat | cfloat },
2569: {"fbgll", 2, one(0xF0D6), one(0xF1FF), "IdBC", mfloat | cfloat },
2570: {"fbglel", 2, one(0xF0D7), one(0xF1FF), "IdBC", mfloat | cfloat },
2571: {"fbgtl", 2, one(0xF0D2), one(0xF1FF), "IdBC", mfloat | cfloat },
2572: {"fblel", 2, one(0xF0D5), one(0xF1FF), "IdBC", mfloat | cfloat },
2573: {"fbltl", 2, one(0xF0D4), one(0xF1FF), "IdBC", mfloat | cfloat },
2574: {"fbnel", 2, one(0xF0CE), one(0xF1FF), "IdBC", mfloat | cfloat },
2575: {"fbngel", 2, one(0xF0DC), one(0xF1FF), "IdBC", mfloat | cfloat },
2576: {"fbngll", 2, one(0xF0D9), one(0xF1FF), "IdBC", mfloat | cfloat },
2577: {"fbnglel", 2, one(0xF0D8), one(0xF1FF), "IdBC", mfloat | cfloat },
2578: {"fbngtl", 2, one(0xF0DD), one(0xF1FF), "IdBC", mfloat | cfloat },
2579: {"fbnlel", 2, one(0xF0DA), one(0xF1FF), "IdBC", mfloat | cfloat },
2580: {"fbnltl", 2, one(0xF0DB), one(0xF1FF), "IdBC", mfloat | cfloat },
2581: {"fbogel", 2, one(0xF0C3), one(0xF1FF), "IdBC", mfloat | cfloat },
2582: {"fbogll", 2, one(0xF0C6), one(0xF1FF), "IdBC", mfloat | cfloat },
2583: {"fbogtl", 2, one(0xF0C2), one(0xF1FF), "IdBC", mfloat | cfloat },
2584: {"fbolel", 2, one(0xF0C5), one(0xF1FF), "IdBC", mfloat | cfloat },
2585: {"fboltl", 2, one(0xF0C4), one(0xF1FF), "IdBC", mfloat | cfloat },
2586: {"fborl", 2, one(0xF0C7), one(0xF1FF), "IdBC", mfloat | cfloat },
2587: {"fbseql", 2, one(0xF0D1), one(0xF1FF), "IdBC", mfloat | cfloat },
2588: {"fbsfl", 2, one(0xF0D0), one(0xF1FF), "IdBC", mfloat | cfloat },
2589: {"fbsnel", 2, one(0xF0DE), one(0xF1FF), "IdBC", mfloat | cfloat },
2590: {"fbstl", 2, one(0xF0DF), one(0xF1FF), "IdBC", mfloat | cfloat },
2591: {"fbtl", 2, one(0xF0CF), one(0xF1FF), "IdBC", mfloat | cfloat },
2592: {"fbueql", 2, one(0xF0C9), one(0xF1FF), "IdBC", mfloat | cfloat },
2593: {"fbugel", 2, one(0xF0CB), one(0xF1FF), "IdBC", mfloat | cfloat },
2594: {"fbugtl", 2, one(0xF0CA), one(0xF1FF), "IdBC", mfloat | cfloat },
2595: {"fbulel", 2, one(0xF0CD), one(0xF1FF), "IdBC", mfloat | cfloat },
2596: {"fbultl", 2, one(0xF0CC), one(0xF1FF), "IdBC", mfloat | cfloat },
2597: {"fbunl", 2, one(0xF0C8), one(0xF1FF), "IdBC", mfloat | cfloat },
2598:
2599: {"fjeq", 2, one(0xF081), one(0xF1BF), "IdBc", mfloat | cfloat },
2600: {"fjf", 2, one(0xF080), one(0xF1BF), "IdBc", mfloat | cfloat },
2601: {"fjge", 2, one(0xF093), one(0xF1BF), "IdBc", mfloat | cfloat },
2602: {"fjgl", 2, one(0xF096), one(0xF1BF), "IdBc", mfloat | cfloat },
2603: {"fjgle", 2, one(0xF097), one(0xF1BF), "IdBc", mfloat | cfloat },
2604: {"fjgt", 2, one(0xF092), one(0xF1BF), "IdBc", mfloat | cfloat },
2605: {"fjle", 2, one(0xF095), one(0xF1BF), "IdBc", mfloat | cfloat },
2606: {"fjlt", 2, one(0xF094), one(0xF1BF), "IdBc", mfloat | cfloat },
2607: {"fjne", 2, one(0xF08E), one(0xF1BF), "IdBc", mfloat | cfloat },
2608: {"fjnge", 2, one(0xF09C), one(0xF1BF), "IdBc", mfloat | cfloat },
2609: {"fjngl", 2, one(0xF099), one(0xF1BF), "IdBc", mfloat | cfloat },
2610: {"fjngle", 2, one(0xF098), one(0xF1BF), "IdBc", mfloat | cfloat },
2611: {"fjngt", 2, one(0xF09D), one(0xF1BF), "IdBc", mfloat | cfloat },
2612: {"fjnle", 2, one(0xF09A), one(0xF1BF), "IdBc", mfloat | cfloat },
2613: {"fjnlt", 2, one(0xF09B), one(0xF1BF), "IdBc", mfloat | cfloat },
2614: {"fjoge", 2, one(0xF083), one(0xF1BF), "IdBc", mfloat | cfloat },
2615: {"fjogl", 2, one(0xF086), one(0xF1BF), "IdBc", mfloat | cfloat },
2616: {"fjogt", 2, one(0xF082), one(0xF1BF), "IdBc", mfloat | cfloat },
2617: {"fjole", 2, one(0xF085), one(0xF1BF), "IdBc", mfloat | cfloat },
2618: {"fjolt", 2, one(0xF084), one(0xF1BF), "IdBc", mfloat | cfloat },
2619: {"fjor", 2, one(0xF087), one(0xF1BF), "IdBc", mfloat | cfloat },
2620: {"fjseq", 2, one(0xF091), one(0xF1BF), "IdBc", mfloat | cfloat },
2621: {"fjsf", 2, one(0xF090), one(0xF1BF), "IdBc", mfloat | cfloat },
2622: {"fjsne", 2, one(0xF09E), one(0xF1BF), "IdBc", mfloat | cfloat },
2623: {"fjst", 2, one(0xF09F), one(0xF1BF), "IdBc", mfloat | cfloat },
2624: {"fjt", 2, one(0xF08F), one(0xF1BF), "IdBc", mfloat | cfloat },
2625: {"fjueq", 2, one(0xF089), one(0xF1BF), "IdBc", mfloat | cfloat },
2626: {"fjuge", 2, one(0xF08B), one(0xF1BF), "IdBc", mfloat | cfloat },
2627: {"fjugt", 2, one(0xF08A), one(0xF1BF), "IdBc", mfloat | cfloat },
2628: {"fjule", 2, one(0xF08D), one(0xF1BF), "IdBc", mfloat | cfloat },
2629: {"fjult", 2, one(0xF08C), one(0xF1BF), "IdBc", mfloat | cfloat },
2630: {"fjun", 2, one(0xF088), one(0xF1BF), "IdBc", mfloat | cfloat },
2631:
2632: {"fcmpb", 4, two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2633: {"fcmpb", 4, two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2634: {"fcmpd", 4, two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2635: {"fcmpd", 4, two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2636: {"fcmpd", 4, two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2637: {"fcmpl", 4, two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2638: {"fcmpl", 4, two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2639: {"fcmpp", 4, two(0xF000, 0x4C38), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2640: {"fcmps", 4, two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2641: {"fcmps", 4, two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2642: {"fcmpw", 4, two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2643: {"fcmpw", 4, two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2644: {"fcmpx", 4, two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2645: {"fcmpx", 4, two(0xF000, 0x4838), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2646:
2647: {"fcosb", 4, two(0xF000, 0x581D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2648: {"fcosd", 4, two(0xF000, 0x541D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2649: {"fcosl", 4, two(0xF000, 0x401D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2650: {"fcosp", 4, two(0xF000, 0x4C1D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2651: {"fcoss", 4, two(0xF000, 0x441D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2652: {"fcosw", 4, two(0xF000, 0x501D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2653: {"fcosx", 4, two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2654: {"fcosx", 4, two(0xF000, 0x481D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2655: {"fcosx", 4, two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2656:
2657: {"fcoshb", 4, two(0xF000, 0x5819), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2658: {"fcoshd", 4, two(0xF000, 0x5419), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2659: {"fcoshl", 4, two(0xF000, 0x4019), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2660: {"fcoshp", 4, two(0xF000, 0x4C19), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2661: {"fcoshs", 4, two(0xF000, 0x4419), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2662: {"fcoshw", 4, two(0xF000, 0x5019), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2663: {"fcoshx", 4, two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2664: {"fcoshx", 4, two(0xF000, 0x4819), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2665: {"fcoshx", 4, two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2666:
2667: {"fdbeq", 4, two(0xF048, 0x0001), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2668: {"fdbf", 4, two(0xF048, 0x0000), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2669: {"fdbge", 4, two(0xF048, 0x0013), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2670: {"fdbgl", 4, two(0xF048, 0x0016), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2671: {"fdbgle", 4, two(0xF048, 0x0017), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2672: {"fdbgt", 4, two(0xF048, 0x0012), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2673: {"fdble", 4, two(0xF048, 0x0015), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2674: {"fdblt", 4, two(0xF048, 0x0014), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2675: {"fdbne", 4, two(0xF048, 0x000E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2676: {"fdbnge", 4, two(0xF048, 0x001C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2677: {"fdbngl", 4, two(0xF048, 0x0019), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2678: {"fdbngle", 4, two(0xF048, 0x0018), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2679: {"fdbngt", 4, two(0xF048, 0x001D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2680: {"fdbnle", 4, two(0xF048, 0x001A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2681: {"fdbnlt", 4, two(0xF048, 0x001B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2682: {"fdboge", 4, two(0xF048, 0x0003), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2683: {"fdbogl", 4, two(0xF048, 0x0006), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2684: {"fdbogt", 4, two(0xF048, 0x0002), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2685: {"fdbole", 4, two(0xF048, 0x0005), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2686: {"fdbolt", 4, two(0xF048, 0x0004), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2687: {"fdbor", 4, two(0xF048, 0x0007), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2688: {"fdbseq", 4, two(0xF048, 0x0011), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2689: {"fdbsf", 4, two(0xF048, 0x0010), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2690: {"fdbsne", 4, two(0xF048, 0x001E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2691: {"fdbst", 4, two(0xF048, 0x001F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2692: {"fdbt", 4, two(0xF048, 0x000F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2693: {"fdbueq", 4, two(0xF048, 0x0009), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2694: {"fdbuge", 4, two(0xF048, 0x000B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2695: {"fdbugt", 4, two(0xF048, 0x000A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2696: {"fdbule", 4, two(0xF048, 0x000D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2697: {"fdbult", 4, two(0xF048, 0x000C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2698: {"fdbun", 4, two(0xF048, 0x0008), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2699:
2700: {"fdivb", 4, two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2701: {"fdivb", 4, two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2702: {"fdivd", 4, two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2703: {"fdivd", 4, two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2704: {"fdivd", 4, two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2705: {"fdivl", 4, two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2706: {"fdivl", 4, two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2707: {"fdivp", 4, two(0xF000, 0x4C20), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2708: {"fdivs", 4, two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2709: {"fdivs", 4, two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2710: {"fdivw", 4, two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2711: {"fdivw", 4, two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2712: {"fdivx", 4, two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2713: {"fdivx", 4, two(0xF000, 0x4820), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2714:
2715: {"fsdivb", 4, two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2716: {"fsdivb", 4, two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2717: {"fsdivd", 4, two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2718: {"fsdivd", 4, two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2719: {"fsdivd", 4, two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2720: {"fsdivl", 4, two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2721: {"fsdivl", 4, two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2722: {"fsdivp", 4, two(0xF000, 0x4C60), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2723: {"fsdivs", 4, two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2724: {"fsdivs", 4, two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2725: {"fsdivw", 4, two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2726: {"fsdivw", 4, two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2727: {"fsdivx", 4, two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2728: {"fsdivx", 4, two(0xF000, 0x4860), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2729:
2730: {"fddivb", 4, two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2731: {"fddivb", 4, two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2732: {"fddivd", 4, two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2733: {"fddivd", 4, two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2734: {"fddivd", 4, two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2735: {"fddivl", 4, two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2736: {"fddivl", 4, two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2737: {"fddivp", 4, two(0xF000, 0x4C64), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2738: {"fddivs", 4, two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2739: {"fddivs", 4, two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2740: {"fddivw", 4, two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2741: {"fddivw", 4, two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2742: {"fddivx", 4, two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2743: {"fddivx", 4, two(0xF000, 0x4864), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2744:
2745: {"fetoxb", 4, two(0xF000, 0x5810), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2746: {"fetoxd", 4, two(0xF000, 0x5410), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2747: {"fetoxl", 4, two(0xF000, 0x4010), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2748: {"fetoxp", 4, two(0xF000, 0x4C10), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2749: {"fetoxs", 4, two(0xF000, 0x4410), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2750: {"fetoxw", 4, two(0xF000, 0x5010), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2751: {"fetoxx", 4, two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2752: {"fetoxx", 4, two(0xF000, 0x4810), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2753: {"fetoxx", 4, two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2754:
2755: {"fetoxm1b", 4, two(0xF000, 0x5808), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2756: {"fetoxm1d", 4, two(0xF000, 0x5408), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2757: {"fetoxm1l", 4, two(0xF000, 0x4008), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2758: {"fetoxm1p", 4, two(0xF000, 0x4C08), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2759: {"fetoxm1s", 4, two(0xF000, 0x4408), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2760: {"fetoxm1w", 4, two(0xF000, 0x5008), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2761: {"fetoxm1x", 4, two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2762: {"fetoxm1x", 4, two(0xF000, 0x4808), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2763: {"fetoxm1x", 4, two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2764:
2765: {"fgetexpb", 4, two(0xF000, 0x581E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2766: {"fgetexpd", 4, two(0xF000, 0x541E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2767: {"fgetexpl", 4, two(0xF000, 0x401E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2768: {"fgetexpp", 4, two(0xF000, 0x4C1E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2769: {"fgetexps", 4, two(0xF000, 0x441E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2770: {"fgetexpw", 4, two(0xF000, 0x501E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2771: {"fgetexpx", 4, two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2772: {"fgetexpx", 4, two(0xF000, 0x481E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2773: {"fgetexpx", 4, two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2774:
2775: {"fgetmanb", 4, two(0xF000, 0x581F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2776: {"fgetmand", 4, two(0xF000, 0x541F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2777: {"fgetmanl", 4, two(0xF000, 0x401F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2778: {"fgetmanp", 4, two(0xF000, 0x4C1F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2779: {"fgetmans", 4, two(0xF000, 0x441F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2780: {"fgetmanw", 4, two(0xF000, 0x501F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2781: {"fgetmanx", 4, two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2782: {"fgetmanx", 4, two(0xF000, 0x481F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2783: {"fgetmanx", 4, two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2784:
2785: {"fintb", 4, two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2786: {"fintb", 4, two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2787: {"fintd", 4, two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2788: {"fintd", 4, two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt", cfloat },
2789: {"fintd", 4, two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2790: {"fintd", 4, two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2791: {"fintl", 4, two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2792: {"fintl", 4, two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2793: {"fintp", 4, two(0xF000, 0x4C01), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2794: {"fints", 4, two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2795: {"fints", 4, two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2796: {"fintw", 4, two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2797: {"fintw", 4, two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2798: {"fintx", 4, two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2799: {"fintx", 4, two(0xF000, 0x4801), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2800: {"fintx", 4, two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2801:
2802: {"fintrzb", 4, two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2803: {"fintrzb", 4, two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2804: {"fintrzd", 4, two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2805: {"fintrzd", 4, two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt", cfloat },
2806: {"fintrzd", 4, two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2807: {"fintrzd", 4, two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2808: {"fintrzl", 4, two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2809: {"fintrzl", 4, two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2810: {"fintrzp", 4, two(0xF000, 0x4C03), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2811: {"fintrzs", 4, two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2812: {"fintrzs", 4, two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2813: {"fintrzw", 4, two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2814: {"fintrzw", 4, two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2815: {"fintrzx", 4, two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2816: {"fintrzx", 4, two(0xF000, 0x4803), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2817: {"fintrzx", 4, two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2818:
2819: {"flog10b", 4, two(0xF000, 0x5815), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2820: {"flog10d", 4, two(0xF000, 0x5415), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2821: {"flog10l", 4, two(0xF000, 0x4015), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2822: {"flog10p", 4, two(0xF000, 0x4C15), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2823: {"flog10s", 4, two(0xF000, 0x4415), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2824: {"flog10w", 4, two(0xF000, 0x5015), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2825: {"flog10x", 4, two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2826: {"flog10x", 4, two(0xF000, 0x4815), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2827: {"flog10x", 4, two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2828:
2829: {"flog2b", 4, two(0xF000, 0x5816), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2830: {"flog2d", 4, two(0xF000, 0x5416), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2831: {"flog2l", 4, two(0xF000, 0x4016), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2832: {"flog2p", 4, two(0xF000, 0x4C16), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2833: {"flog2s", 4, two(0xF000, 0x4416), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2834: {"flog2w", 4, two(0xF000, 0x5016), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2835: {"flog2x", 4, two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2836: {"flog2x", 4, two(0xF000, 0x4816), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2837: {"flog2x", 4, two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2838:
2839: {"flognb", 4, two(0xF000, 0x5814), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2840: {"flognd", 4, two(0xF000, 0x5414), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2841: {"flognl", 4, two(0xF000, 0x4014), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2842: {"flognp", 4, two(0xF000, 0x4C14), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2843: {"flogns", 4, two(0xF000, 0x4414), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2844: {"flognw", 4, two(0xF000, 0x5014), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2845: {"flognx", 4, two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2846: {"flognx", 4, two(0xF000, 0x4814), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2847: {"flognx", 4, two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2848:
2849: {"flognp1b", 4, two(0xF000, 0x5806), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2850: {"flognp1d", 4, two(0xF000, 0x5406), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2851: {"flognp1l", 4, two(0xF000, 0x4006), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2852: {"flognp1p", 4, two(0xF000, 0x4C06), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2853: {"flognp1s", 4, two(0xF000, 0x4406), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2854: {"flognp1w", 4, two(0xF000, 0x5006), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2855: {"flognp1x", 4, two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2856: {"flognp1x", 4, two(0xF000, 0x4806), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2857: {"flognp1x", 4, two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiFt", mfloat },
2858:
2859: {"fmodb", 4, two(0xF000, 0x5821), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2860: {"fmodd", 4, two(0xF000, 0x5421), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2861: {"fmodl", 4, two(0xF000, 0x4021), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2862: {"fmodp", 4, two(0xF000, 0x4C21), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2863: {"fmods", 4, two(0xF000, 0x4421), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2864: {"fmodw", 4, two(0xF000, 0x5021), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2865: {"fmodx", 4, two(0xF000, 0x0021), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2866: {"fmodx", 4, two(0xF000, 0x4821), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2867:
2868: {"fmoveb", 4, two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2869: {"fmoveb", 4, two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
2870: {"fmoveb", 4, two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2871: {"fmoveb", 4, two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7$b", mfloat },
2872: {"fmoved", 4, two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2873: {"fmoved", 4, two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7~F", mfloat },
2874: {"fmoved", 4, two(0xF000, 0x0000), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2875: {"fmoved", 4, two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2876: {"fmoved", 4, two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
2877: {"fmovel", 4, two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2878: {"fmovel", 4, two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7$l", mfloat },
2879: /* FIXME: the next two variants should not permit moving an address
2880: register to anything but the floating point instruction register. */
2881: {"fmovel", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
2882: {"fmovel", 4, two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", mfloat },
2883: {"fmovel", 4, two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2884: {"fmovel", 4, two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
2885: /* Move the FP control registers. */
2886: {"fmovel", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8ps", cfloat },
2887: {"fmovel", 4, two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Iibss8", cfloat },
2888: {"fmovep", 4, two(0xF000, 0x4C00), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2889: {"fmovep", 4, two(0xF000, 0x6C00), two(0xF1C0, 0xFC00), "IiF7~pkC", mfloat },
2890: {"fmovep", 4, two(0xF000, 0x7C00), two(0xF1C0, 0xFC0F), "IiF7~pDk", mfloat },
2891: {"fmoves", 4, two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2892: {"fmoves", 4, two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7$f", mfloat },
2893: {"fmoves", 4, two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2894: {"fmoves", 4, two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2895: {"fmovew", 4, two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2896: {"fmovew", 4, two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7$w", mfloat },
2897: {"fmovew", 4, two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2898: {"fmovew", 4, two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2899: {"fmovex", 4, two(0xF000, 0x0000), two(0xF1FF, 0xE07F), "IiF8F7", mfloat },
2900: {"fmovex", 4, two(0xF000, 0x4800), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2901: {"fmovex", 4, two(0xF000, 0x6800), two(0xF1C0, 0xFC7F), "IiF7~x", mfloat },
2902:
2903: {"fsmoveb", 4, two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2904: {"fsmoveb", 4, two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2905: {"fsmoveb", 4, two(0xF000, 0x7840), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2906: {"fsmoved", 4, two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2907: {"fsmoved", 4, two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2908: {"fsmoved", 4, two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2909: {"fsmoved", 4, two(0xF000, 0x7440), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
2910: {"fsmovel", 4, two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2911: {"fsmovel", 4, two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2912: {"fsmovel", 4, two(0xF000, 0x6040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2913: {"fsmoves", 4, two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2914: {"fsmoves", 4, two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2915: {"fsmoves", 4, two(0xF000, 0x6440), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2916: {"fsmovew", 4, two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2917: {"fsmovew", 4, two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2918: {"fsmovew", 4, two(0xF000, 0x7040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2919: {"fsmovex", 4, two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2920: {"fsmovex", 4, two(0xF000, 0x4840), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2921: {"fsmovep", 4, two(0xF000, 0x4C40), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2922:
2923: {"fdmoveb", 4, two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2924: {"fdmoveb", 4, two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2925: {"fdmoveb", 4, two(0xF000, 0x7844), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2926: {"fdmoved", 4, two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2927: {"fdmoved", 4, two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2928: {"fdmoved", 4, two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2929: {"fdmoved", 4, two(0xF000, 0x7444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2930: {"fdmovel", 4, two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2931: {"fdmovel", 4, two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2932: {"fdmovel", 4, two(0xF000, 0x6044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2933: {"fdmoves", 4, two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2934: {"fdmoves", 4, two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2935: {"fdmoves", 4, two(0xF000, 0x6444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2936: {"fdmovew", 4, two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2937: {"fdmovew", 4, two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2938: {"fdmovew", 4, two(0xF000, 0x7044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2939: {"fdmovex", 4, two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2940: {"fdmovex", 4, two(0xF000, 0x4844), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2941: {"fdmovep", 4, two(0xF000, 0x4C44), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2942:
2943: {"fmovecrx", 4, two(0xF000, 0x5C00), two(0xF1FF, 0xFC00), "Ii#CF7", mfloat },
2944:
2945: {"fmovemd", 4, two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizsl3", cfloat },
2946: {"fmovemd", 4, two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
2947: {"fmovemd", 4, two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
2948: {"fmovemd", 4, two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Iil3ys", cfloat },
2949:
2950: {"fmovemx", 4, two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat },
2951: {"fmovemx", 4, two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
2952: {"fmovemx", 4, two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat },
2953: {"fmovemx", 4, two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
2954: {"fmovemx", 4, two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
2955: {"fmovemx", 4, two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat },
2956: {"fmovemx", 4, two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat },
2957: {"fmovemx", 4, two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat },
2958: {"fmovemx", 4, two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
2959: {"fmovemx", 4, two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat },
2960: {"fmovemx", 4, two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
2961: {"fmovemx", 4, two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat },
2962:
2963: {"fmoveml", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
2964: {"fmoveml", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat },
2965: /* FIXME: In the next instruction, we should only permit %dn if the
2966: target is a single register. We should only permit %an if the
2967: target is a single %fpiar. */
2968: {"fmoveml", 4, two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*lL8", mfloat },
2969:
2970: {"fmovem", 4, two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "IizsL3", cfloat },
2971: {"fmovem", 4, two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
2972: {"fmovem", 4, two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
2973: {"fmovem", 4, two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "IiL3ys", cfloat },
2974:
2975: {"fmovem", 4, two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
2976: {"fmovem", 4, two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
2977: {"fmovem", 4, two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
2978: {"fmovem", 4, two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat },
2979: {"fmovem", 4, two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat },
2980: {"fmovem", 4, two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
2981: {"fmovem", 4, two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat },
2982: {"fmovem", 4, two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat },
2983: {"fmovem", 4, two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat },
2984: {"fmovem", 4, two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
2985: {"fmovem", 4, two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat },
2986: {"fmovem", 4, two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat },
2987: {"fmovem", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
2988: {"fmovem", 4, two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ss8", mfloat },
2989: {"fmovem", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat },
2990: {"fmovem", 4, two(0xF000, 0x8000), two(0xF2C0, 0xE3FF), "Ii*sL8", mfloat },
2991:
2992: {"fmulb", 4, two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2993: {"fmulb", 4, two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2994: {"fmuld", 4, two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2995: {"fmuld", 4, two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2996: {"fmuld", 4, two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2997: {"fmull", 4, two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2998: {"fmull", 4, two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2999: {"fmulp", 4, two(0xF000, 0x4C23), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3000: {"fmuls", 4, two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3001: {"fmuls", 4, two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3002: {"fmulw", 4, two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3003: {"fmulw", 4, two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3004: {"fmulx", 4, two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3005: {"fmulx", 4, two(0xF000, 0x4823), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3006:
3007: {"fsmulb", 4, two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3008: {"fsmulb", 4, two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3009: {"fsmuld", 4, two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3010: {"fsmuld", 4, two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3011: {"fsmuld", 4, two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3012: {"fsmull", 4, two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3013: {"fsmull", 4, two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3014: {"fsmulp", 4, two(0xF000, 0x4C63), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3015: {"fsmuls", 4, two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3016: {"fsmuls", 4, two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3017: {"fsmulw", 4, two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3018: {"fsmulw", 4, two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3019: {"fsmulx", 4, two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3020: {"fsmulx", 4, two(0xF000, 0x4863), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3021:
3022: {"fdmulb", 4, two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3023: {"fdmulb", 4, two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3024: {"fdmuld", 4, two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3025: {"fdmuld", 4, two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3026: {"fdmuld", 4, two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3027: {"fdmull", 4, two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3028: {"fdmull", 4, two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3029: {"fdmulp", 4, two(0xF000, 0x4C67), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3030: {"fdmuls", 4, two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3031: {"fdmuls", 4, two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3032: {"fdmulw", 4, two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3033: {"fdmulw", 4, two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3034: {"fdmulx", 4, two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3035: {"fdmulx", 4, two(0xF000, 0x4867), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3036:
3037: {"fnegb", 4, two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3038: {"fnegb", 4, two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3039: {"fnegd", 4, two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3040: {"fnegd", 4, two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt", cfloat },
3041: {"fnegd", 4, two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3042: {"fnegd", 4, two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3043: {"fnegl", 4, two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3044: {"fnegl", 4, two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3045: {"fnegp", 4, two(0xF000, 0x4C1A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3046: {"fnegs", 4, two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3047: {"fnegs", 4, two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3048: {"fnegw", 4, two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3049: {"fnegw", 4, two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3050: {"fnegx", 4, two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3051: {"fnegx", 4, two(0xF000, 0x481A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3052: {"fnegx", 4, two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3053:
3054: {"fsnegb", 4, two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3055: {"fsnegb", 4, two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3056: {"fsnegd", 4, two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3057: {"fsnegd", 4, two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt", cfloat },
3058: {"fsnegd", 4, two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3059: {"fsnegd", 4, two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3060: {"fsnegl", 4, two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3061: {"fsnegl", 4, two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3062: {"fsnegp", 4, two(0xF000, 0x4C5A), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3063: {"fsnegs", 4, two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3064: {"fsnegs", 4, two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3065: {"fsnegw", 4, two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3066: {"fsnegw", 4, two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3067: {"fsnegx", 4, two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3068: {"fsnegx", 4, two(0xF000, 0x485A), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3069: {"fsnegx", 4, two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt", m68040up },
3070:
3071: {"fdnegb", 4, two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3072: {"fdnegb", 4, two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3073: {"fdnegd", 4, two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3074: {"fdnegd", 4, two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt", cfloat },
3075: {"fdnegd", 4, two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3076: {"fdnegd", 4, two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3077: {"fdnegl", 4, two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3078: {"fdnegl", 4, two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3079: {"fdnegp", 4, two(0xF000, 0x4C5E), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3080: {"fdnegs", 4, two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3081: {"fdnegs", 4, two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3082: {"fdnegw", 4, two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3083: {"fdnegw", 4, two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3084: {"fdnegx", 4, two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3085: {"fdnegx", 4, two(0xF000, 0x485E), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3086: {"fdnegx", 4, two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt", m68040up },
3087:
3088: {"fnop", 4, two(0xF280, 0x0000), two(0xFFFF, 0xFFFF), "Ii", mfloat | cfloat },
3089:
3090: {"fremb", 4, two(0xF000, 0x5825), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3091: {"fremd", 4, two(0xF000, 0x5425), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3092: {"freml", 4, two(0xF000, 0x4025), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3093: {"fremp", 4, two(0xF000, 0x4C25), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3094: {"frems", 4, two(0xF000, 0x4425), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3095: {"fremw", 4, two(0xF000, 0x5025), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3096: {"fremx", 4, two(0xF000, 0x0025), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3097: {"fremx", 4, two(0xF000, 0x4825), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3098:
3099: {"frestore", 2, one(0xF140), one(0xF1C0), "Id<s", mfloat },
3100: {"frestore", 2, one(0xF140), one(0xF1C0), "Idys", cfloat },
3101:
3102: {"fsave", 2, one(0xF100), one(0xF1C0), "Id>s", mfloat },
3103: {"fsave", 2, one(0xF100), one(0xF1C0), "Idzs", cfloat },
3104:
3105: {"fscaleb", 4, two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3106: {"fscaled", 4, two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3107: {"fscalel", 4, two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3108: {"fscalep", 4, two(0xF000, 0x4C26), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3109: {"fscales", 4, two(0xF000, 0x4426), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3110: {"fscalew", 4, two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3111: {"fscalex", 4, two(0xF000, 0x0026), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3112: {"fscalex", 4, two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3113:
3114: /* $ is necessary to prevent the assembler from using PC-relative.
3115: If @ were used, "label: fseq label" could produce "ftrapeq", 2,
3116: because "label" became "pc@label". */
3117: {"fseq", 4, two(0xF040, 0x0001), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3118: {"fsf", 4, two(0xF040, 0x0000), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3119: {"fsge", 4, two(0xF040, 0x0013), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3120: {"fsgl", 4, two(0xF040, 0x0016), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3121: {"fsgle", 4, two(0xF040, 0x0017), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3122: {"fsgt", 4, two(0xF040, 0x0012), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3123: {"fsle", 4, two(0xF040, 0x0015), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3124: {"fslt", 4, two(0xF040, 0x0014), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3125: {"fsne", 4, two(0xF040, 0x000E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3126: {"fsnge", 4, two(0xF040, 0x001C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3127: {"fsngl", 4, two(0xF040, 0x0019), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3128: {"fsngle", 4, two(0xF040, 0x0018), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3129: {"fsngt", 4, two(0xF040, 0x001D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3130: {"fsnle", 4, two(0xF040, 0x001A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3131: {"fsnlt", 4, two(0xF040, 0x001B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3132: {"fsoge", 4, two(0xF040, 0x0003), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3133: {"fsogl", 4, two(0xF040, 0x0006), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3134: {"fsogt", 4, two(0xF040, 0x0002), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3135: {"fsole", 4, two(0xF040, 0x0005), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3136: {"fsolt", 4, two(0xF040, 0x0004), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3137: {"fsor", 4, two(0xF040, 0x0007), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3138: {"fsseq", 4, two(0xF040, 0x0011), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3139: {"fssf", 4, two(0xF040, 0x0010), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3140: {"fssne", 4, two(0xF040, 0x001E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3141: {"fsst", 4, two(0xF040, 0x001F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3142: {"fst", 4, two(0xF040, 0x000F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3143: {"fsueq", 4, two(0xF040, 0x0009), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3144: {"fsuge", 4, two(0xF040, 0x000B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3145: {"fsugt", 4, two(0xF040, 0x000A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3146: {"fsule", 4, two(0xF040, 0x000D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3147: {"fsult", 4, two(0xF040, 0x000C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3148: {"fsun", 4, two(0xF040, 0x0008), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3149:
3150: {"fsgldivb", 4, two(0xF000, 0x5824), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3151: {"fsgldivd", 4, two(0xF000, 0x5424), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3152: {"fsgldivl", 4, two(0xF000, 0x4024), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3153: {"fsgldivp", 4, two(0xF000, 0x4C24), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3154: {"fsgldivs", 4, two(0xF000, 0x4424), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3155: {"fsgldivw", 4, two(0xF000, 0x5024), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3156: {"fsgldivx", 4, two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3157: {"fsgldivx", 4, two(0xF000, 0x4824), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3158: {"fsgldivx", 4, two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3159:
3160: {"fsglmulb", 4, two(0xF000, 0x5827), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3161: {"fsglmuld", 4, two(0xF000, 0x5427), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3162: {"fsglmull", 4, two(0xF000, 0x4027), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3163: {"fsglmulp", 4, two(0xF000, 0x4C27), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3164: {"fsglmuls", 4, two(0xF000, 0x4427), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3165: {"fsglmulw", 4, two(0xF000, 0x5027), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3166: {"fsglmulx", 4, two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3167: {"fsglmulx", 4, two(0xF000, 0x4827), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3168: {"fsglmulx", 4, two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3169:
3170: {"fsinb", 4, two(0xF000, 0x580E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3171: {"fsind", 4, two(0xF000, 0x540E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3172: {"fsinl", 4, two(0xF000, 0x400E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3173: {"fsinp", 4, two(0xF000, 0x4C0E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3174: {"fsins", 4, two(0xF000, 0x440E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3175: {"fsinw", 4, two(0xF000, 0x500E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3176: {"fsinx", 4, two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3177: {"fsinx", 4, two(0xF000, 0x480E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3178: {"fsinx", 4, two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3179:
3180: {"fsincosb", 4, two(0xF000, 0x5830), two(0xF1C0, 0xFC78), "Ii;bF3F7", mfloat },
3181: {"fsincosd", 4, two(0xF000, 0x5430), two(0xF1C0, 0xFC78), "Ii;FF3F7", mfloat },
3182: {"fsincosl", 4, two(0xF000, 0x4030), two(0xF1C0, 0xFC78), "Ii;lF3F7", mfloat },
3183: {"fsincosp", 4, two(0xF000, 0x4C30), two(0xF1C0, 0xFC78), "Ii;pF3F7", mfloat },
3184: {"fsincoss", 4, two(0xF000, 0x4430), two(0xF1C0, 0xFC78), "Ii;fF3F7", mfloat },
3185: {"fsincosw", 4, two(0xF000, 0x5030), two(0xF1C0, 0xFC78), "Ii;wF3F7", mfloat },
3186: {"fsincosx", 4, two(0xF000, 0x0030), two(0xF1C0, 0xE078), "IiF8F3F7", mfloat },
3187: {"fsincosx", 4, two(0xF000, 0x4830), two(0xF1C0, 0xFC78), "Ii;xF3F7", mfloat },
3188:
3189: {"fsinhb", 4, two(0xF000, 0x5802), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3190: {"fsinhd", 4, two(0xF000, 0x5402), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3191: {"fsinhl", 4, two(0xF000, 0x4002), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3192: {"fsinhp", 4, two(0xF000, 0x4C02), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3193: {"fsinhs", 4, two(0xF000, 0x4402), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3194: {"fsinhw", 4, two(0xF000, 0x5002), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3195: {"fsinhx", 4, two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3196: {"fsinhx", 4, two(0xF000, 0x4802), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3197: {"fsinhx", 4, two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3198:
3199: {"fsqrtb", 4, two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3200: {"fsqrtb", 4, two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3201: {"fsqrtd", 4, two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3202: {"fsqrtd", 4, two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt", cfloat },
3203: {"fsqrtd", 4, two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3204: {"fsqrtd", 4, two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3205: {"fsqrtl", 4, two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3206: {"fsqrtl", 4, two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3207: {"fsqrtp", 4, two(0xF000, 0x4C04), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3208: {"fsqrts", 4, two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3209: {"fsqrts", 4, two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3210: {"fsqrtw", 4, two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3211: {"fsqrtw", 4, two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3212: {"fsqrtx", 4, two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3213: {"fsqrtx", 4, two(0xF000, 0x4804), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3214: {"fsqrtx", 4, two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3215:
3216: {"fssqrtb", 4, two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3217: {"fssqrtb", 4, two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3218: {"fssqrtd", 4, two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3219: {"fssqrtd", 4, two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt", cfloat },
3220: {"fssqrtd", 4, two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3221: {"fssqrtd", 4, two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3222: {"fssqrtl", 4, two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3223: {"fssqrtl", 4, two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3224: {"fssqrtp", 4, two(0xF000, 0x4C41), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3225: {"fssqrts", 4, two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3226: {"fssqrts", 4, two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3227: {"fssqrtw", 4, two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3228: {"fssqrtw", 4, two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3229: {"fssqrtx", 4, two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3230: {"fssqrtx", 4, two(0xF000, 0x4841), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3231: {"fssqrtx", 4, two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt", m68040up },
3232:
3233: {"fdsqrtb", 4, two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3234: {"fdsqrtb", 4, two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3235: {"fdsqrtd", 4, two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3236: {"fdsqrtd", 4, two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt", cfloat },
3237: {"fdsqrtd", 4, two(0xF000, 0x5445), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3238: {"fdsqrtl", 4, two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3239: {"fdsqrtl", 4, two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3240: {"fdsqrtp", 4, two(0xF000, 0x4C45), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3241: {"fdsqrts", 4, two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3242: {"fdsqrts", 4, two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3243: {"fdsqrtw", 4, two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3244: {"fdsqrtw", 4, two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3245: {"fdsqrtx", 4, two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3246: {"fdsqrtx", 4, two(0xF000, 0x4845), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3247: {"fdsqrtx", 4, two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt", m68040up },
3248:
3249: {"fsubb", 4, two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3250: {"fsubb", 4, two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3251: {"fsubd", 4, two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3252: {"fsubd", 4, two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3253: {"fsubd", 4, two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3254: {"fsubl", 4, two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3255: {"fsubl", 4, two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3256: {"fsubp", 4, two(0xF000, 0x4C28), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3257: {"fsubs", 4, two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3258: {"fsubs", 4, two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3259: {"fsubw", 4, two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3260: {"fsubw", 4, two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3261: {"fsubx", 4, two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3262: {"fsubx", 4, two(0xF000, 0x4828), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3263: {"fsubx", 4, two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3264:
3265: {"fssubb", 4, two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3266: {"fssubb", 4, two(0xF000, 0x5868), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3267: {"fssubd", 4, two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3268: {"fssubd", 4, two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3269: {"fssubd", 4, two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3270: {"fssubl", 4, two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3271: {"fssubl", 4, two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3272: {"fssubp", 4, two(0xF000, 0x4C68), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3273: {"fssubs", 4, two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3274: {"fssubs", 4, two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3275: {"fssubw", 4, two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3276: {"fssubw", 4, two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3277: {"fssubx", 4, two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3278: {"fssubx", 4, two(0xF000, 0x4868), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3279: {"fssubx", 4, two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiFt", m68040up },
3280:
3281: {"fdsubb", 4, two(0xF000, 0x586A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3282: {"fdsubb", 4, two(0xF000, 0x586c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3283: {"fdsubd", 4, two(0xF000, 0x006A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3284: {"fdsubd", 4, two(0xF000, 0x546A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3285: {"fdsubd", 4, two(0xF000, 0x546c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3286: {"fdsubl", 4, two(0xF000, 0x406A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3287: {"fdsubl", 4, two(0xF000, 0x406c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3288: {"fdsubp", 4, two(0xF000, 0x4C6c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3289: {"fdsubs", 4, two(0xF000, 0x446A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3290: {"fdsubs", 4, two(0xF000, 0x446c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3291: {"fdsubw", 4, two(0xF000, 0x506A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3292: {"fdsubw", 4, two(0xF000, 0x506c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3293: {"fdsubx", 4, two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3294: {"fdsubx", 4, two(0xF000, 0x486c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3295: {"fdsubx", 4, two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiFt", m68040up },
3296:
3297: {"ftanb", 4, two(0xF000, 0x580F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3298: {"ftand", 4, two(0xF000, 0x540F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3299: {"ftanl", 4, two(0xF000, 0x400F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3300: {"ftanp", 4, two(0xF000, 0x4C0F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3301: {"ftans", 4, two(0xF000, 0x440F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3302: {"ftanw", 4, two(0xF000, 0x500F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3303: {"ftanx", 4, two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3304: {"ftanx", 4, two(0xF000, 0x480F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3305: {"ftanx", 4, two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3306:
3307: {"ftanhb", 4, two(0xF000, 0x5809), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3308: {"ftanhd", 4, two(0xF000, 0x5409), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3309: {"ftanhl", 4, two(0xF000, 0x4009), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3310: {"ftanhp", 4, two(0xF000, 0x4C09), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3311: {"ftanhs", 4, two(0xF000, 0x4409), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3312: {"ftanhw", 4, two(0xF000, 0x5009), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3313: {"ftanhx", 4, two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3314: {"ftanhx", 4, two(0xF000, 0x4809), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3315: {"ftanhx", 4, two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3316:
3317: {"ftentoxb", 4, two(0xF000, 0x5812), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3318: {"ftentoxd", 4, two(0xF000, 0x5412), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3319: {"ftentoxl", 4, two(0xF000, 0x4012), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3320: {"ftentoxp", 4, two(0xF000, 0x4C12), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3321: {"ftentoxs", 4, two(0xF000, 0x4412), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3322: {"ftentoxw", 4, two(0xF000, 0x5012), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3323: {"ftentoxx", 4, two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3324: {"ftentoxx", 4, two(0xF000, 0x4812), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3325: {"ftentoxx", 4, two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3326:
3327: {"ftrapeq", 4, two(0xF07C, 0x0001), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3328: {"ftrapf", 4, two(0xF07C, 0x0000), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3329: {"ftrapge", 4, two(0xF07C, 0x0013), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3330: {"ftrapgl", 4, two(0xF07C, 0x0016), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3331: {"ftrapgle", 4, two(0xF07C, 0x0017), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3332: {"ftrapgt", 4, two(0xF07C, 0x0012), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3333: {"ftraple", 4, two(0xF07C, 0x0015), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3334: {"ftraplt", 4, two(0xF07C, 0x0014), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3335: {"ftrapne", 4, two(0xF07C, 0x000E), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3336: {"ftrapnge", 4, two(0xF07C, 0x001C), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3337: {"ftrapngl", 4, two(0xF07C, 0x0019), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3338: {"ftrapngle", 4,two(0xF07C, 0x0018), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3339: {"ftrapngt", 4, two(0xF07C, 0x001D), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3340: {"ftrapnle", 4, two(0xF07C, 0x001A), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3341: {"ftrapnlt", 4, two(0xF07C, 0x001B), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3342: {"ftrapoge", 4, two(0xF07C, 0x0003), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3343: {"ftrapogl", 4, two(0xF07C, 0x0006), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3344: {"ftrapogt", 4, two(0xF07C, 0x0002), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3345: {"ftrapole", 4, two(0xF07C, 0x0005), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3346: {"ftrapolt", 4, two(0xF07C, 0x0004), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3347: {"ftrapor", 4, two(0xF07C, 0x0007), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3348: {"ftrapseq", 4, two(0xF07C, 0x0011), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3349: {"ftrapsf", 4, two(0xF07C, 0x0010), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3350: {"ftrapsne", 4, two(0xF07C, 0x001E), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3351: {"ftrapst", 4, two(0xF07C, 0x001F), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3352: {"ftrapt", 4, two(0xF07C, 0x000F), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3353: {"ftrapueq", 4, two(0xF07C, 0x0009), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3354: {"ftrapuge", 4, two(0xF07C, 0x000B), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3355: {"ftrapugt", 4, two(0xF07C, 0x000A), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3356: {"ftrapule", 4, two(0xF07C, 0x000D), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3357: {"ftrapult", 4, two(0xF07C, 0x000C), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3358: {"ftrapun", 4, two(0xF07C, 0x0008), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3359:
3360: {"ftrapeqw", 4, two(0xF07A, 0x0001), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3361: {"ftrapfw", 4, two(0xF07A, 0x0000), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3362: {"ftrapgew", 4, two(0xF07A, 0x0013), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3363: {"ftrapglw", 4, two(0xF07A, 0x0016), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3364: {"ftrapglew", 4,two(0xF07A, 0x0017), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3365: {"ftrapgtw", 4, two(0xF07A, 0x0012), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3366: {"ftraplew", 4, two(0xF07A, 0x0015), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3367: {"ftrapltw", 4, two(0xF07A, 0x0014), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3368: {"ftrapnew", 4, two(0xF07A, 0x000E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3369: {"ftrapngew", 4,two(0xF07A, 0x001C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3370: {"ftrapnglw", 4,two(0xF07A, 0x0019), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3371: {"ftrapnglew", 4,two(0xF07A, 0x0018), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3372: {"ftrapngtw", 4,two(0xF07A, 0x001D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3373: {"ftrapnlew", 4,two(0xF07A, 0x001A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3374: {"ftrapnltw", 4,two(0xF07A, 0x001B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3375: {"ftrapogew", 4,two(0xF07A, 0x0003), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3376: {"ftrapoglw", 4,two(0xF07A, 0x0006), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3377: {"ftrapogtw", 4,two(0xF07A, 0x0002), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3378: {"ftrapolew", 4,two(0xF07A, 0x0005), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3379: {"ftrapoltw", 4,two(0xF07A, 0x0004), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3380: {"ftraporw", 4, two(0xF07A, 0x0007), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3381: {"ftrapseqw", 4,two(0xF07A, 0x0011), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3382: {"ftrapsfw", 4, two(0xF07A, 0x0010), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3383: {"ftrapsnew", 4,two(0xF07A, 0x001E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3384: {"ftrapstw", 4, two(0xF07A, 0x001F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3385: {"ftraptw", 4, two(0xF07A, 0x000F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3386: {"ftrapueqw", 4,two(0xF07A, 0x0009), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3387: {"ftrapugew", 4,two(0xF07A, 0x000B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3388: {"ftrapugtw", 4,two(0xF07A, 0x000A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3389: {"ftrapulew", 4,two(0xF07A, 0x000D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3390: {"ftrapultw", 4,two(0xF07A, 0x000C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3391: {"ftrapunw", 4, two(0xF07A, 0x0008), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3392:
3393: {"ftrapeql", 4, two(0xF07B, 0x0001), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3394: {"ftrapfl", 4, two(0xF07B, 0x0000), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3395: {"ftrapgel", 4, two(0xF07B, 0x0013), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3396: {"ftrapgll", 4, two(0xF07B, 0x0016), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3397: {"ftrapglel", 4,two(0xF07B, 0x0017), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3398: {"ftrapgtl", 4, two(0xF07B, 0x0012), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3399: {"ftraplel", 4, two(0xF07B, 0x0015), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3400: {"ftrapltl", 4, two(0xF07B, 0x0014), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3401: {"ftrapnel", 4, two(0xF07B, 0x000E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3402: {"ftrapngel", 4,two(0xF07B, 0x001C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3403: {"ftrapngll", 4,two(0xF07B, 0x0019), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3404: {"ftrapnglel", 4,two(0xF07B, 0x0018), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3405: {"ftrapngtl", 4,two(0xF07B, 0x001D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3406: {"ftrapnlel", 4,two(0xF07B, 0x001A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3407: {"ftrapnltl", 4,two(0xF07B, 0x001B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3408: {"ftrapogel", 4,two(0xF07B, 0x0003), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3409: {"ftrapogll", 4,two(0xF07B, 0x0006), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3410: {"ftrapogtl", 4,two(0xF07B, 0x0002), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3411: {"ftrapolel", 4,two(0xF07B, 0x0005), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3412: {"ftrapoltl", 4,two(0xF07B, 0x0004), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3413: {"ftraporl", 4, two(0xF07B, 0x0007), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3414: {"ftrapseql", 4,two(0xF07B, 0x0011), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3415: {"ftrapsfl", 4, two(0xF07B, 0x0010), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3416: {"ftrapsnel", 4,two(0xF07B, 0x001E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3417: {"ftrapstl", 4, two(0xF07B, 0x001F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3418: {"ftraptl", 4, two(0xF07B, 0x000F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3419: {"ftrapueql", 4,two(0xF07B, 0x0009), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3420: {"ftrapugel", 4,two(0xF07B, 0x000B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3421: {"ftrapugtl", 4,two(0xF07B, 0x000A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3422: {"ftrapulel", 4,two(0xF07B, 0x000D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3423: {"ftrapultl", 4,two(0xF07B, 0x000C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3424: {"ftrapunl", 4, two(0xF07B, 0x0008), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3425:
3426: {"ftstb", 4, two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Ii;b", mfloat },
3427: {"ftstb", 4, two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3428: {"ftstd", 4, two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", cfloat },
3429: {"ftstd", 4, two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Ii;F", mfloat },
3430: {"ftstd", 4, two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3431: {"ftstl", 4, two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Ii;l", mfloat },
3432: {"ftstl", 4, two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3433: {"ftstp", 4, two(0xF000, 0x4C3A), two(0xF1C0, 0xFC7F), "Ii;p", mfloat },
3434: {"ftsts", 4, two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Ii;f", mfloat },
3435: {"ftsts", 4, two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3436: {"ftstw", 4, two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Ii;w", mfloat },
3437: {"ftstw", 4, two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3438: {"ftstx", 4, two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", mfloat },
3439: {"ftstx", 4, two(0xF000, 0x483A), two(0xF1C0, 0xFC7F), "Ii;x", mfloat },
3440:
3441: {"ftwotoxb", 4, two(0xF000, 0x5811), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3442: {"ftwotoxd", 4, two(0xF000, 0x5411), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3443: {"ftwotoxl", 4, two(0xF000, 0x4011), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3444: {"ftwotoxp", 4, two(0xF000, 0x4C11), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3445: {"ftwotoxs", 4, two(0xF000, 0x4411), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3446: {"ftwotoxw", 4, two(0xF000, 0x5011), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3447: {"ftwotoxx", 4, two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3448: {"ftwotoxx", 4, two(0xF000, 0x4811), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3449: {"ftwotoxx", 4, two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiFt", mfloat },
3450:
3451: {"halt", 2, one(0045310), one(0177777), "", m68060 | mcfisa_a },
3452:
3453: {"illegal", 2, one(0045374), one(0177777), "", m68000up | mcfisa_a },
3454: {"intouch", 2, one(0xf428), one(0xfff8), "As", mcfisa_b },
3455:
3456: {"jmp", 2, one(0047300), one(0177700), "!s", m68000up | mcfisa_a },
3457:
3458: {"jra", 2, one(0060000), one(0177400), "Bg", m68000up | mcfisa_a },
3459: {"jra", 2, one(0047300), one(0177700), "!s", m68000up | mcfisa_a },
3460:
3461: {"jsr", 2, one(0047200), one(0177700), "!s", m68000up | mcfisa_a },
3462:
3463: {"jbsr", 2, one(0060400), one(0177400), "Bg", m68000up | mcfisa_a },
3464: {"jbsr", 2, one(0047200), one(0177700), "!s", m68000up | mcfisa_a },
3465:
3466: {"lea", 2, one(0040700), one(0170700), "!sAd", m68000up | mcfisa_a },
3467:
3468: {"lpstop", 6, two(0174000,0000700),two(0177777,0177777),"#w", cpu32|m68060 },
3469:
3470: {"linkw", 4, one(0047120), one(0177770), "As#w", m68000up | mcfisa_a },
3471: {"linkl", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 },
3472: {"link", 4, one(0047120), one(0177770), "As#W", m68000up | mcfisa_a },
3473: {"link", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 },
3474:
3475: {"lslb", 2, one(0160410), one(0170770), "QdDs", m68000up },
3476: {"lslb", 2, one(0160450), one(0170770), "DdDs", m68000up },
3477: {"lslw", 2, one(0160510), one(0170770), "QdDs", m68000up },
3478: {"lslw", 2, one(0160550), one(0170770), "DdDs", m68000up },
3479: {"lslw", 2, one(0161700), one(0177700), "~s", m68000up },
3480: {"lsll", 2, one(0160610), one(0170770), "QdDs", m68000up | mcfisa_a },
3481: {"lsll", 2, one(0160650), one(0170770), "DdDs", m68000up | mcfisa_a },
3482:
3483: {"lsrb", 2, one(0160010), one(0170770), "QdDs", m68000up },
3484: {"lsrb", 2, one(0160050), one(0170770), "DdDs", m68000up },
3485: {"lsrw", 2, one(0160110), one(0170770), "QdDs", m68000up },
3486: {"lsrw", 2, one(0160150), one(0170770), "DdDs", m68000up },
3487: {"lsrw", 2, one(0161300), one(0177700), "~s", m68000up },
3488: {"lsrl", 2, one(0160210), one(0170770), "QdDs", m68000up | mcfisa_a },
3489: {"lsrl", 2, one(0160250), one(0170770), "DdDs", m68000up | mcfisa_a },
3490:
3491: {"macw", 4, two(0xa080, 0x0000), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
3492: {"macw", 4, two(0xa080, 0x0200), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
3493: {"macw", 4, two(0xa080, 0x0000), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac },
3494: {"macw", 4, two(0xa000, 0x0000), two(0xf1b0, 0x0900), "uMumiI", mcfmac },
3495: {"macw", 4, two(0xa000, 0x0200), two(0xf1b0, 0x0900), "uMumMh", mcfmac },
3496: {"macw", 4, two(0xa000, 0x0000), two(0xf1b0, 0x0f00), "uMum", mcfmac },
3497:
3498: {"macw", 4, two(0xa000, 0x0000), two(0xf100, 0x0900), "uNuoiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX. */
3499: {"macw", 4, two(0xa000, 0x0200), two(0xf100, 0x0900), "uNuoMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX. */
3500: {"macw", 4, two(0xa000, 0x0000), two(0xf100, 0x0f00), "uNuo4/RneG", mcfemac },/* Ry,Rx,<ea>,accX. */
3501: {"macw", 4, two(0xa000, 0x0000), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX. */
3502: {"macw", 4, two(0xa000, 0x0200), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX. */
3503: {"macw", 4, two(0xa000, 0x0000), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX. */
3504:
3505: {"macl", 4, two(0xa080, 0x0800), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
3506: {"macl", 4, two(0xa080, 0x0a00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
3507: {"macl", 4, two(0xa080, 0x0800), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac },
3508: {"macl", 4, two(0xa000, 0x0800), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
3509: {"macl", 4, two(0xa000, 0x0a00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
3510: {"macl", 4, two(0xa000, 0x0800), two(0xf1b0, 0x0800), "RMRm", mcfmac },
3511:
3512: {"macl", 4, two(0xa000, 0x0800), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
3513: {"macl", 4, two(0xa000, 0x0a00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
3514: {"macl", 4, two(0xa000, 0x0800), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
3515: {"macl", 4, two(0xa000, 0x0800), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
3516: {"macl", 4, two(0xa000, 0x0a00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
3517: {"macl", 4, two(0xa000, 0x0800), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
3518:
3519: /* NOTE: The mcf5200 family programmer's reference manual does not
3520: indicate the byte form of the movea instruction is invalid (as it
3521: is on 68000 family cpus). However, experiments on the 5202 yeild
3522: unexpected results. The value is copied, but it is not sign extended
3523: (as is done with movea.w) and the top three bytes in the address
3524: register are not disturbed. I don't know if this is the intended
3525: behavior --- it could be a hole in instruction decoding (Motorola
3526: decided not to trap all invalid instructions for performance reasons)
3527: --- but I suspect that it is not.
3528:
3529: I reported this to Motorola ISD Technical Communications Support,
3530: which replied that other coldfire assemblers reject movea.b. For
3531: this reason I've decided to not allow moveab.
3532:
3533: [email protected] - 97/01/24. */
3534:
3535: {"moveal", 2, one(0020100), one(0170700), "*lAd", m68000up | mcfisa_a },
3536: {"moveaw", 2, one(0030100), one(0170700), "*wAd", m68000up | mcfisa_a },
3537:
3538: {"movclrl", 2, one(0xA1C0), one(0xf9f0), "eFRs", mcfemac },
3539:
3540: {"movec", 4, one(0047173), one(0177777), "R1Jj", m68010up | mcfisa_a },
3541: {"movec", 4, one(0047173), one(0177777), "R1#j", m68010up | mcfisa_a },
3542: {"movec", 4, one(0047172), one(0177777), "JjR1", m68010up },
3543: {"movec", 4, one(0047172), one(0177777), "#jR1", m68010up },
3544:
3545: {"movemw", 4, one(0044200), one(0177700), "Lw&s", m68000up },
3546: {"movemw", 4, one(0044240), one(0177770), "lw-s", m68000up },
3547: {"movemw", 4, one(0044200), one(0177700), "#w>s", m68000up },
3548: {"movemw", 4, one(0046200), one(0177700), "<sLw", m68000up },
3549: {"movemw", 4, one(0046200), one(0177700), "<s#w", m68000up },
3550: {"moveml", 4, one(0044300), one(0177700), "Lw&s", m68000up },
3551: {"moveml", 4, one(0044340), one(0177770), "lw-s", m68000up },
3552: {"moveml", 4, one(0044300), one(0177700), "#w>s", m68000up },
3553: {"moveml", 4, one(0046300), one(0177700), "<sLw", m68000up },
3554: {"moveml", 4, one(0046300), one(0177700), "<s#w", m68000up },
3555: /* FIXME: need specifier for mode 2 and 5 to simplify below insn patterns. */
3556: {"moveml", 4, one(0044320), one(0177770), "Lwas", mcfisa_a },
3557: {"moveml", 4, one(0044320), one(0177770), "#was", mcfisa_a },
3558: {"moveml", 4, one(0044350), one(0177770), "Lwds", mcfisa_a },
3559: {"moveml", 4, one(0044350), one(0177770), "#wds", mcfisa_a },
3560: {"moveml", 4, one(0046320), one(0177770), "asLw", mcfisa_a },
3561: {"moveml", 4, one(0046320), one(0177770), "as#w", mcfisa_a },
3562: {"moveml", 4, one(0046350), one(0177770), "dsLw", mcfisa_a },
3563: {"moveml", 4, one(0046350), one(0177770), "ds#w", mcfisa_a },
3564:
3565: {"movepw", 2, one(0000410), one(0170770), "dsDd", m68000up },
3566: {"movepw", 2, one(0000610), one(0170770), "Ddds", m68000up },
3567: {"movepl", 2, one(0000510), one(0170770), "dsDd", m68000up },
3568: {"movepl", 2, one(0000710), one(0170770), "Ddds", m68000up },
3569:
3570: {"moveq", 2, one(0070000), one(0170400), "MsDd", m68000up | mcfisa_a },
3571: {"moveq", 2, one(0070000), one(0170400), "#BDd", m68000up | mcfisa_a },
3572:
3573: /* The move opcode can generate the movea and moveq instructions. */
3574: {"moveb", 2, one(0010000), one(0170000), ";b$d", m68000up },
3575: {"moveb", 2, one(0010000), one(0170070), "Ds$d", mcfisa_a },
3576: {"moveb", 2, one(0010020), one(0170070), "as$d", mcfisa_a },
3577: {"moveb", 2, one(0010030), one(0170070), "+s$d", mcfisa_a },
3578: {"moveb", 2, one(0010040), one(0170070), "-s$d", mcfisa_a },
3579: {"moveb", 2, one(0010000), one(0170000), "nsqd", mcfisa_a },
3580: {"moveb", 2, one(0010000), one(0170700), "obDd", mcfisa_a },
3581: {"moveb", 2, one(0010200), one(0170700), "obad", mcfisa_a },
3582: {"moveb", 2, one(0010300), one(0170700), "ob+d", mcfisa_a },
3583: {"moveb", 2, one(0010400), one(0170700), "ob-d", mcfisa_a },
3584: {"moveb", 2, one(0010000), one(0170000), "obnd", mcfisa_b },
3585:
3586: {"movew", 2, one(0030000), one(0170000), "*w%d", m68000up },
3587: {"movew", 2, one(0030000), one(0170000), "ms%d", mcfisa_a },
3588: {"movew", 2, one(0030000), one(0170000), "nspd", mcfisa_a },
3589: {"movew", 2, one(0030000), one(0170000), "owmd", mcfisa_a },
3590: {"movew", 2, one(0030000), one(0170000), "ownd", mcfisa_b },
3591: {"movew", 2, one(0040300), one(0177700), "Ss$s", m68000up },
3592: {"movew", 2, one(0040300), one(0177770), "SsDs", mcfisa_a },
3593: {"movew", 2, one(0041300), one(0177700), "Cs$s", m68010up },
3594: {"movew", 2, one(0041300), one(0177770), "CsDs", mcfisa_a },
3595: {"movew", 2, one(0042300), one(0177700), ";wCd", m68000up },
3596: {"movew", 2, one(0042300), one(0177700), "DsCd", mcfisa_a },
3597: {"movew", 4, one(0042374), one(0177777), "#wCd", mcfisa_a },
3598: {"movew", 2, one(0043300), one(0177700), ";wSd", m68000up },
3599: {"movew", 2, one(0043300), one(0177700), "DsSd", mcfisa_a },
3600: {"movew", 4, one(0043374), one(0177777), "#wSd", mcfisa_a },
3601:
3602: {"movel", 2, one(0070000), one(0170400), "MsDd", m68000up | mcfisa_a },
3603: {"movel", 2, one(0020000), one(0170000), "*l%d", m68000up },
3604: {"movel", 2, one(0020000), one(0170000), "ms%d", mcfisa_a },
3605: {"movel", 2, one(0020000), one(0170000), "nspd", mcfisa_a },
3606: {"movel", 2, one(0020000), one(0170000), "olmd", mcfisa_a },
3607: {"movel", 2, one(0020000), one(0170000), "olnd", mcfisa_b },
3608: {"movel", 2, one(0047140), one(0177770), "AsUd", m68000up | mcfusp },
3609: {"movel", 2, one(0047150), one(0177770), "UdAs", m68000up | mcfusp },
3610: {"movel", 2, one(0120600), one(0177760), "EsRs", mcfmac },
3611: {"movel", 2, one(0120400), one(0177760), "RsEs", mcfmac },
3612: {"movel", 6, one(0120474), one(0177777), "#lEs", mcfmac },
3613: {"movel", 2, one(0124600), one(0177760), "GsRs", mcfmac },
3614: {"movel", 2, one(0124400), one(0177760), "RsGs", mcfmac },
3615: {"movel", 6, one(0124474), one(0177777), "#lGs", mcfmac },
3616: {"movel", 2, one(0126600), one(0177760), "HsRs", mcfmac },
3617: {"movel", 2, one(0126400), one(0177760), "RsHs", mcfmac },
3618: {"movel", 6, one(0126474), one(0177777), "#lHs", mcfmac },
3619: {"movel", 2, one(0124700), one(0177777), "GsCs", mcfmac },
3620:
3621: {"movel", 2, one(0xa180), one(0xf9f0), "eFRs", mcfemac }, /* ACCx,Rx. */
3622: {"movel", 2, one(0xab80), one(0xfbf0), "g]Rs", mcfemac }, /* ACCEXTx,Rx. */
3623: {"movel", 2, one(0xa980), one(0xfff0), "G-Rs", mcfemac }, /* macsr,Rx. */
3624: {"movel", 2, one(0xad80), one(0xfff0), "H-Rs", mcfemac }, /* mask,Rx. */
3625: {"movel", 2, one(0xa110), one(0xf9fc), "efeF", mcfemac }, /* ACCy,ACCx. */
3626: {"movel", 2, one(0xa9c0), one(0xffff), "G-C-", mcfemac }, /* macsr,ccr. */
3627: {"movel", 2, one(0xa100), one(0xf9f0), "RseF", mcfemac }, /* Rx,ACCx. */
3628: {"movel", 6, one(0xa13c), one(0xf9ff), "#leF", mcfemac }, /* #,ACCx. */
3629: {"movel", 2, one(0xab00), one(0xfbc0), "Rsg]", mcfemac }, /* Rx,ACCEXTx. */
3630: {"movel", 6, one(0xab3c), one(0xfbff), "#lg]", mcfemac }, /* #,ACCEXTx. */
3631: {"movel", 2, one(0xa900), one(0xffc0), "RsG-", mcfemac }, /* Rx,macsr. */
3632: {"movel", 6, one(0xa93c), one(0xffff), "#lG-", mcfemac }, /* #,macsr. */
3633: {"movel", 2, one(0xad00), one(0xffc0), "RsH-", mcfemac }, /* Rx,mask. */
3634: {"movel", 6, one(0xad3c), one(0xffff), "#lH-", mcfemac }, /* #,mask. */
3635:
3636: {"move", 2, one(0030000), one(0170000), "*w%d", m68000up },
3637: {"move", 2, one(0030000), one(0170000), "ms%d", mcfisa_a },
3638: {"move", 2, one(0030000), one(0170000), "nspd", mcfisa_a },
3639: {"move", 2, one(0030000), one(0170000), "owmd", mcfisa_a },
3640: {"move", 2, one(0030000), one(0170000), "ownd", mcfisa_b },
3641: {"move", 2, one(0040300), one(0177700), "Ss$s", m68000up },
3642: {"move", 2, one(0040300), one(0177770), "SsDs", mcfisa_a },
3643: {"move", 2, one(0041300), one(0177700), "Cs$s", m68010up },
3644: {"move", 2, one(0041300), one(0177770), "CsDs", mcfisa_a },
3645: {"move", 2, one(0042300), one(0177700), ";wCd", m68000up },
3646: {"move", 2, one(0042300), one(0177700), "DsCd", mcfisa_a },
3647: {"move", 4, one(0042374), one(0177777), "#wCd", mcfisa_a },
3648: {"move", 2, one(0043300), one(0177700), ";wSd", m68000up },
3649: {"move", 2, one(0043300), one(0177700), "DsSd", mcfisa_a },
3650: {"move", 4, one(0043374), one(0177777), "#wSd", mcfisa_a },
3651:
3652: {"move", 2, one(0047140), one(0177770), "AsUd", m68000up },
3653: {"move", 2, one(0047150), one(0177770), "UdAs", m68000up },
3654:
3655: {"mov3ql", 2, one(0120500), one(0170700), "xd%s", mcfisa_b },
3656: {"mvsb", 2, one(0070400), one(0170700), "*bDd", mcfisa_b },
3657: {"mvsw", 2, one(0070500), one(0170700), "*wDd", mcfisa_b },
3658: {"mvzb", 2, one(0070600), one(0170700), "*bDd", mcfisa_b },
3659: {"mvzw", 2, one(0070700), one(0170700), "*wDd", mcfisa_b },
3660:
3661: {"movesb", 4, two(0007000, 0), two(0177700, 07777), "~sR1", m68010up },
3662: {"movesb", 4, two(0007000, 04000), two(0177700, 07777), "R1~s", m68010up },
3663: {"movesw", 4, two(0007100, 0), two(0177700, 07777), "~sR1", m68010up },
3664: {"movesw", 4, two(0007100, 04000), two(0177700, 07777), "R1~s", m68010up },
3665: {"movesl", 4, two(0007200, 0), two(0177700, 07777), "~sR1", m68010up },
3666: {"movesl", 4, two(0007200, 04000), two(0177700, 07777), "R1~s", m68010up },
3667:
3668: {"move16", 4, two(0xf620, 0x8000), two(0xfff8, 0x8fff), "+s+1", m68040up },
3669: {"move16", 2, one(0xf600), one(0xfff8), "+s_L", m68040up },
3670: {"move16", 2, one(0xf608), one(0xfff8), "_L+s", m68040up },
3671: {"move16", 2, one(0xf610), one(0xfff8), "as_L", m68040up },
3672: {"move16", 2, one(0xf618), one(0xfff8), "_Las", m68040up },
3673:
3674: {"msacw", 4, two(0xa080, 0x0100), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
3675: {"msacw", 4, two(0xa080, 0x0300), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
3676: {"msacw", 4, two(0xa080, 0x0100), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac },
3677: {"msacw", 4, two(0xa000, 0x0100), two(0xf1b0, 0x0900), "uMumiI", mcfmac },
3678: {"msacw", 4, two(0xa000, 0x0300), two(0xf1b0, 0x0900), "uMumMh", mcfmac },
3679: {"msacw", 4, two(0xa000, 0x0100), two(0xf1b0, 0x0f00), "uMum", mcfmac },
3680:
3681: {"msacw", 4, two(0xa000, 0x0100), two(0xf100, 0x0900), "uMumiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX. */
3682: {"msacw", 4, two(0xa000, 0x0300), two(0xf100, 0x0900), "uMumMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX. */
3683: {"msacw", 4, two(0xa000, 0x0100), two(0xf100, 0x0f00), "uMum4/RneG", mcfemac },/* Ry,Rx,<ea>,accX. */
3684: {"msacw", 4, two(0xa000, 0x0100), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX. */
3685: {"msacw", 4, two(0xa000, 0x0300), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX. */
3686: {"msacw", 4, two(0xa000, 0x0100), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX. */
3687:
3688: {"msacl", 4, two(0xa080, 0x0900), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
3689: {"msacl", 4, two(0xa080, 0x0b00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
3690: {"msacl", 4, two(0xa080, 0x0900), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac },
3691: {"msacl", 4, two(0xa000, 0x0900), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
3692: {"msacl", 4, two(0xa000, 0x0b00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
3693: {"msacl", 4, two(0xa000, 0x0900), two(0xf1b0, 0x0800), "RMRm", mcfmac },
3694:
3695: {"msacl", 4, two(0xa000, 0x0900), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
3696: {"msacl", 4, two(0xa000, 0x0b00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
3697: {"msacl", 4, two(0xa000, 0x0900), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
3698: {"msacl", 4, two(0xa000, 0x0900), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
3699: {"msacl", 4, two(0xa000, 0x0b00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
3700: {"msacl", 4, two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
3701:
3702: {"mulsw", 2, one(0140700), one(0170700), ";wDd", m68000up|mcfisa_a },
3703: {"mulsl", 4, two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
3704: {"mulsl", 4, two(0046000,004000), two(0177700,0107770), "qsD1", mcfisa_a },
3705: {"mulsl", 4, two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
3706:
3707: {"muluw", 2, one(0140300), one(0170700), ";wDd", m68000up|mcfisa_a },
3708: {"mulul", 4, two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
3709: {"mulul", 4, two(0046000,000000), two(0177700,0107770), "qsD1", mcfisa_a },
3710: {"mulul", 4, two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
3711:
3712: {"nbcd", 2, one(0044000), one(0177700), "$s", m68000up },
3713:
3714: {"negb", 2, one(0042000), one(0177700), "$s", m68000up },
3715: {"negw", 2, one(0042100), one(0177700), "$s", m68000up },
3716: {"negl", 2, one(0042200), one(0177700), "$s", m68000up },
3717: {"negl", 2, one(0042200), one(0177700), "Ds", mcfisa_a},
3718:
3719: {"negxb", 2, one(0040000), one(0177700), "$s", m68000up },
3720: {"negxw", 2, one(0040100), one(0177700), "$s", m68000up },
3721: {"negxl", 2, one(0040200), one(0177700), "$s", m68000up },
3722: {"negxl", 2, one(0040200), one(0177700), "Ds", mcfisa_a},
3723:
3724: {"nop", 2, one(0047161), one(0177777), "", m68000up | mcfisa_a},
3725:
3726: {"notb", 2, one(0043000), one(0177700), "$s", m68000up },
3727: {"notw", 2, one(0043100), one(0177700), "$s", m68000up },
3728: {"notl", 2, one(0043200), one(0177700), "$s", m68000up },
3729: {"notl", 2, one(0043200), one(0177700), "Ds", mcfisa_a},
3730:
3731: {"orib", 4, one(0000000), one(0177700), "#b$s", m68000up },
3732: {"orib", 4, one(0000074), one(0177777), "#bCs", m68000up },
3733: {"oriw", 4, one(0000100), one(0177700), "#w$s", m68000up },
3734: {"oriw", 4, one(0000174), one(0177777), "#wSs", m68000up },
3735: {"oril", 6, one(0000200), one(0177700), "#l$s", m68000up },
3736: {"oril", 6, one(0000200), one(0177700), "#lDs", mcfisa_a },
3737: {"ori", 4, one(0000074), one(0177777), "#bCs", m68000up },
3738: {"ori", 4, one(0000100), one(0177700), "#w$s", m68000up },
3739: {"ori", 4, one(0000174), one(0177777), "#wSs", m68000up },
3740:
3741: /* The or opcode can generate the ori instruction. */
3742: {"orb", 4, one(0000000), one(0177700), "#b$s", m68000up },
3743: {"orb", 4, one(0000074), one(0177777), "#bCs", m68000up },
3744: {"orb", 2, one(0100000), one(0170700), ";bDd", m68000up },
3745: {"orb", 2, one(0100400), one(0170700), "Dd~s", m68000up },
3746: {"orw", 4, one(0000100), one(0177700), "#w$s", m68000up },
3747: {"orw", 4, one(0000174), one(0177777), "#wSs", m68000up },
3748: {"orw", 2, one(0100100), one(0170700), ";wDd", m68000up },
3749: {"orw", 2, one(0100500), one(0170700), "Dd~s", m68000up },
3750: {"orl", 6, one(0000200), one(0177700), "#l$s", m68000up },
3751: {"orl", 6, one(0000200), one(0177700), "#lDs", mcfisa_a },
3752: {"orl", 2, one(0100200), one(0170700), ";lDd", m68000up | mcfisa_a },
3753: {"orl", 2, one(0100600), one(0170700), "Dd~s", m68000up | mcfisa_a },
3754: {"or", 4, one(0000074), one(0177777), "#bCs", m68000up },
3755: {"or", 4, one(0000100), one(0177700), "#w$s", m68000up },
3756: {"or", 4, one(0000174), one(0177777), "#wSs", m68000up },
3757: {"or", 2, one(0100100), one(0170700), ";wDd", m68000up },
3758: {"or", 2, one(0100500), one(0170700), "Dd~s", m68000up },
3759:
3760: {"pack", 4, one(0100500), one(0170770), "DsDd#w", m68020up },
3761: {"pack", 4, one(0100510), one(0170770), "-s-d#w", m68020up },
3762:
3763: {"pbac", 2, one(0xf087), one(0xffbf), "Bc", m68851 },
3764: {"pbacw", 2, one(0xf087), one(0xffff), "BW", m68851 },
3765: {"pbas", 2, one(0xf086), one(0xffbf), "Bc", m68851 },
3766: {"pbasw", 2, one(0xf086), one(0xffff), "BW", m68851 },
3767: {"pbbc", 2, one(0xf081), one(0xffbf), "Bc", m68851 },
3768: {"pbbcw", 2, one(0xf081), one(0xffff), "BW", m68851 },
3769: {"pbbs", 2, one(0xf080), one(0xffbf), "Bc", m68851 },
3770: {"pbbsw", 2, one(0xf080), one(0xffff), "BW", m68851 },
3771: {"pbcc", 2, one(0xf08f), one(0xffbf), "Bc", m68851 },
3772: {"pbccw", 2, one(0xf08f), one(0xffff), "BW", m68851 },
3773: {"pbcs", 2, one(0xf08e), one(0xffbf), "Bc", m68851 },
3774: {"pbcsw", 2, one(0xf08e), one(0xffff), "BW", m68851 },
3775: {"pbgc", 2, one(0xf08d), one(0xffbf), "Bc", m68851 },
3776: {"pbgcw", 2, one(0xf08d), one(0xffff), "BW", m68851 },
3777: {"pbgs", 2, one(0xf08c), one(0xffbf), "Bc", m68851 },
3778: {"pbgsw", 2, one(0xf08c), one(0xffff), "BW", m68851 },
3779: {"pbic", 2, one(0xf08b), one(0xffbf), "Bc", m68851 },
3780: {"pbicw", 2, one(0xf08b), one(0xffff), "BW", m68851 },
3781: {"pbis", 2, one(0xf08a), one(0xffbf), "Bc", m68851 },
3782: {"pbisw", 2, one(0xf08a), one(0xffff), "BW", m68851 },
3783: {"pblc", 2, one(0xf083), one(0xffbf), "Bc", m68851 },
3784: {"pblcw", 2, one(0xf083), one(0xffff), "BW", m68851 },
3785: {"pbls", 2, one(0xf082), one(0xffbf), "Bc", m68851 },
3786: {"pblsw", 2, one(0xf082), one(0xffff), "BW", m68851 },
3787: {"pbsc", 2, one(0xf085), one(0xffbf), "Bc", m68851 },
3788: {"pbscw", 2, one(0xf085), one(0xffff), "BW", m68851 },
3789: {"pbss", 2, one(0xf084), one(0xffbf), "Bc", m68851 },
3790: {"pbssw", 2, one(0xf084), one(0xffff), "BW", m68851 },
3791: {"pbwc", 2, one(0xf089), one(0xffbf), "Bc", m68851 },
3792: {"pbwcw", 2, one(0xf089), one(0xffff), "BW", m68851 },
3793: {"pbws", 2, one(0xf088), one(0xffbf), "Bc", m68851 },
3794: {"pbwsw", 2, one(0xf088), one(0xffff), "BW", m68851 },
3795:
3796: {"pdbac", 4, two(0xf048, 0x0007), two(0xfff8, 0xffff), "DsBw", m68851 },
3797: {"pdbas", 4, two(0xf048, 0x0006), two(0xfff8, 0xffff), "DsBw", m68851 },
3798: {"pdbbc", 4, two(0xf048, 0x0001), two(0xfff8, 0xffff), "DsBw", m68851 },
3799: {"pdbbs", 4, two(0xf048, 0x0000), two(0xfff8, 0xffff), "DsBw", m68851 },
3800: {"pdbcc", 4, two(0xf048, 0x000f), two(0xfff8, 0xffff), "DsBw", m68851 },
3801: {"pdbcs", 4, two(0xf048, 0x000e), two(0xfff8, 0xffff), "DsBw", m68851 },
3802: {"pdbgc", 4, two(0xf048, 0x000d), two(0xfff8, 0xffff), "DsBw", m68851 },
3803: {"pdbgs", 4, two(0xf048, 0x000c), two(0xfff8, 0xffff), "DsBw", m68851 },
3804: {"pdbic", 4, two(0xf048, 0x000b), two(0xfff8, 0xffff), "DsBw", m68851 },
3805: {"pdbis", 4, two(0xf048, 0x000a), two(0xfff8, 0xffff), "DsBw", m68851 },
3806: {"pdblc", 4, two(0xf048, 0x0003), two(0xfff8, 0xffff), "DsBw", m68851 },
3807: {"pdbls", 4, two(0xf048, 0x0002), two(0xfff8, 0xffff), "DsBw", m68851 },
3808: {"pdbsc", 4, two(0xf048, 0x0005), two(0xfff8, 0xffff), "DsBw", m68851 },
3809: {"pdbss", 4, two(0xf048, 0x0004), two(0xfff8, 0xffff), "DsBw", m68851 },
3810: {"pdbwc", 4, two(0xf048, 0x0009), two(0xfff8, 0xffff), "DsBw", m68851 },
3811: {"pdbws", 4, two(0xf048, 0x0008), two(0xfff8, 0xffff), "DsBw", m68851 },
3812:
3813: {"pea", 2, one(0044100), one(0177700), "!s", m68000up|mcfisa_a },
3814:
3815: {"pflusha", 2, one(0xf518), one(0xfff8), "", m68040up },
3816: {"pflusha", 4, two(0xf000,0x2400), two(0xffff,0xffff), "", m68030 | m68851 },
3817:
3818: {"pflush", 4, two(0xf000,0x3010), two(0xffc0,0xfe10), "T3T9", m68030|m68851 },
3819: {"pflush", 4, two(0xf000,0x3810), two(0xffc0,0xfe10), "T3T9&s", m68030|m68851 },
3820: {"pflush", 4, two(0xf000,0x3008), two(0xffc0,0xfe18), "D3T9", m68030|m68851 },
3821: {"pflush", 4, two(0xf000,0x3808), two(0xffc0,0xfe18), "D3T9&s", m68030|m68851 },
3822: {"pflush", 4, two(0xf000,0x3000), two(0xffc0,0xfe1e), "f3T9", m68030|m68851 },
3823: {"pflush", 4, two(0xf000,0x3800), two(0xffc0,0xfe1e), "f3T9&s", m68030|m68851 },
3824: {"pflush", 2, one(0xf508), one(0xfff8), "as", m68040up },
3825: {"pflush", 2, one(0xf508), one(0xfff8), "As", m68040up },
3826:
3827: {"pflushan", 2, one(0xf510), one(0xfff8), "", m68040up },
3828: {"pflushn", 2, one(0xf500), one(0xfff8), "as", m68040up },
3829: {"pflushn", 2, one(0xf500), one(0xfff8), "As", m68040up },
3830:
3831: {"pflushr", 4, two(0xf000, 0xa000), two(0xffc0, 0xffff), "|s", m68851 },
3832:
3833: {"pflushs", 4, two(0xf000, 0x3410), two(0xfff8, 0xfe10), "T3T9", m68851 },
3834: {"pflushs", 4, two(0xf000, 0x3c10), two(0xfff8, 0xfe10), "T3T9&s", m68851 },
3835: {"pflushs", 4, two(0xf000, 0x3408), two(0xfff8, 0xfe18), "D3T9", m68851 },
3836: {"pflushs", 4, two(0xf000, 0x3c08), two(0xfff8, 0xfe18), "D3T9&s", m68851 },
3837: {"pflushs", 4, two(0xf000, 0x3400), two(0xfff8, 0xfe1e), "f3T9", m68851 },
3838: {"pflushs", 4, two(0xf000, 0x3c00), two(0xfff8, 0xfe1e), "f3T9&s", m68851 },
3839:
3840: {"ploadr", 4, two(0xf000,0x2210), two(0xffc0,0xfff0), "T3&s", m68030|m68851 },
3841: {"ploadr", 4, two(0xf000,0x2208), two(0xffc0,0xfff8), "D3&s", m68030|m68851 },
3842: {"ploadr", 4, two(0xf000,0x2200), two(0xffc0,0xfffe), "f3&s", m68030|m68851 },
3843: {"ploadw", 4, two(0xf000,0x2010), two(0xffc0,0xfff0), "T3&s", m68030|m68851 },
3844: {"ploadw", 4, two(0xf000,0x2008), two(0xffc0,0xfff8), "D3&s", m68030|m68851 },
3845: {"ploadw", 4, two(0xf000,0x2000), two(0xffc0,0xfffe), "f3&s", m68030|m68851 },
3846:
3847: {"plpar", 2, one(0xf5c8), one(0xfff8), "as", m68060 },
3848: {"plpaw", 2, one(0xf588), one(0xfff8), "as", m68060 },
3849:
3850: {"pmove", 4, two(0xf000,0x4000), two(0xffc0,0xffff), "*l08", m68030|m68851 },
3851: {"pmove", 4, two(0xf000,0x5c00), two(0xffc0,0xffff), "*w18", m68851 },
3852: {"pmove", 4, two(0xf000,0x4000), two(0xffc0,0xe3ff), "*b28", m68851 },
3853: {"pmove", 4, two(0xf000,0x4200), two(0xffc0,0xffff), "08%s", m68030|m68851 },
3854: {"pmove", 4, two(0xf000,0x5e00), two(0xffc0,0xffff), "18%s", m68851 },
3855: {"pmove", 4, two(0xf000,0x4200), two(0xffc0,0xe3ff), "28%s", m68851 },
3856: {"pmove", 4, two(0xf000,0x4000), two(0xffc0,0xe3ff), "|sW8", m68030|m68851 },
3857: {"pmove", 4, two(0xf000,0x4200), two(0xffc0,0xe3ff), "W8~s", m68030|m68851 },
3858: {"pmove", 4, two(0xf000,0x6200), two(0xffc0,0xe3e3), "*wX3", m68851 },
3859: {"pmove", 4, two(0xf000,0x6000), two(0xffc0,0xe3e3), "X3%s", m68851 },
3860: {"pmove", 4, two(0xf000,0x6000), two(0xffc0,0xffff), "*wY8", m68030|m68851 },
3861: {"pmove", 4, two(0xf000,0x6200), two(0xffc0,0xffff), "Y8%s", m68030|m68851 },
3862: {"pmove", 4, two(0xf000,0x6600), two(0xffc0,0xffff), "Z8%s", m68851 },
3863: {"pmove", 4, two(0xf000,0x0800), two(0xffc0,0xfbff), "*l38", m68030 },
3864: {"pmove", 4, two(0xf000,0x0a00), two(0xffc0,0xfbff), "38%s", m68030 },
3865:
3866: {"pmovefd", 4, two(0xf000, 0x4100), two(0xffc0, 0xe3ff), "*l08", m68030 },
3867: {"pmovefd", 4, two(0xf000, 0x4100), two(0xffc0, 0xe3ff), "|sW8", m68030 },
3868: {"pmovefd", 4, two(0xf000, 0x0900), two(0xffc0, 0xfbff), "*l38", m68030 },
3869:
3870: {"prestore", 2, one(0xf140), one(0xffc0), "<s", m68851 },
3871:
3872: {"psave", 2, one(0xf100), one(0xffc0), ">s", m68851 },
3873:
3874: {"psac", 4, two(0xf040, 0x0007), two(0xffc0, 0xffff), "$s", m68851 },
3875: {"psas", 4, two(0xf040, 0x0006), two(0xffc0, 0xffff), "$s", m68851 },
3876: {"psbc", 4, two(0xf040, 0x0001), two(0xffc0, 0xffff), "$s", m68851 },
3877: {"psbs", 4, two(0xf040, 0x0000), two(0xffc0, 0xffff), "$s", m68851 },
3878: {"pscc", 4, two(0xf040, 0x000f), two(0xffc0, 0xffff), "$s", m68851 },
3879: {"pscs", 4, two(0xf040, 0x000e), two(0xffc0, 0xffff), "$s", m68851 },
3880: {"psgc", 4, two(0xf040, 0x000d), two(0xffc0, 0xffff), "$s", m68851 },
3881: {"psgs", 4, two(0xf040, 0x000c), two(0xffc0, 0xffff), "$s", m68851 },
3882: {"psic", 4, two(0xf040, 0x000b), two(0xffc0, 0xffff), "$s", m68851 },
3883: {"psis", 4, two(0xf040, 0x000a), two(0xffc0, 0xffff), "$s", m68851 },
3884: {"pslc", 4, two(0xf040, 0x0003), two(0xffc0, 0xffff), "$s", m68851 },
3885: {"psls", 4, two(0xf040, 0x0002), two(0xffc0, 0xffff), "$s", m68851 },
3886: {"pssc", 4, two(0xf040, 0x0005), two(0xffc0, 0xffff), "$s", m68851 },
3887: {"psss", 4, two(0xf040, 0x0004), two(0xffc0, 0xffff), "$s", m68851 },
3888: {"pswc", 4, two(0xf040, 0x0009), two(0xffc0, 0xffff), "$s", m68851 },
3889: {"psws", 4, two(0xf040, 0x0008), two(0xffc0, 0xffff), "$s", m68851 },
3890:
3891: {"ptestr", 4, two(0xf000,0x8210), two(0xffc0, 0xe3f0), "T3&st8", m68030|m68851 },
3892: {"ptestr", 4, two(0xf000,0x8310), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 },
3893: {"ptestr", 4, two(0xf000,0x8208), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 },
3894: {"ptestr", 4, two(0xf000,0x8308), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 },
3895: {"ptestr", 4, two(0xf000,0x8200), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 },
3896: {"ptestr", 4, two(0xf000,0x8300), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 },
3897: {"ptestr", 2, one(0xf568), one(0xfff8), "as", m68040 },
3898:
3899: {"ptestw", 4, two(0xf000,0x8010), two(0xffc0,0xe3f0), "T3&st8", m68030|m68851 },
3900: {"ptestw", 4, two(0xf000,0x8110), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 },
3901: {"ptestw", 4, two(0xf000,0x8008), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 },
3902: {"ptestw", 4, two(0xf000,0x8108), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 },
3903: {"ptestw", 4, two(0xf000,0x8000), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 },
3904: {"ptestw", 4, two(0xf000,0x8100), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 },
3905: {"ptestw", 2, one(0xf548), one(0xfff8), "as", m68040 },
3906:
3907: {"ptrapacw", 6, two(0xf07a, 0x0007), two(0xffff, 0xffff), "#w", m68851 },
3908: {"ptrapacl", 6, two(0xf07b, 0x0007), two(0xffff, 0xffff), "#l", m68851 },
3909: {"ptrapac", 4, two(0xf07c, 0x0007), two(0xffff, 0xffff), "", m68851 },
3910:
3911: {"ptrapasw", 6, two(0xf07a, 0x0006), two(0xffff, 0xffff), "#w", m68851 },
3912: {"ptrapasl", 6, two(0xf07b, 0x0006), two(0xffff, 0xffff), "#l", m68851 },
3913: {"ptrapas", 4, two(0xf07c, 0x0006), two(0xffff, 0xffff), "", m68851 },
3914:
3915: {"ptrapbcw", 6, two(0xf07a, 0x0001), two(0xffff, 0xffff), "#w", m68851 },
3916: {"ptrapbcl", 6, two(0xf07b, 0x0001), two(0xffff, 0xffff), "#l", m68851 },
3917: {"ptrapbc", 4, two(0xf07c, 0x0001), two(0xffff, 0xffff), "", m68851 },
3918:
3919: {"ptrapbsw", 6, two(0xf07a, 0x0000), two(0xffff, 0xffff), "#w", m68851 },
3920: {"ptrapbsl", 6, two(0xf07b, 0x0000), two(0xffff, 0xffff), "#l", m68851 },
3921: {"ptrapbs", 4, two(0xf07c, 0x0000), two(0xffff, 0xffff), "", m68851 },
3922:
3923: {"ptrapccw", 6, two(0xf07a, 0x000f), two(0xffff, 0xffff), "#w", m68851 },
3924: {"ptrapccl", 6, two(0xf07b, 0x000f), two(0xffff, 0xffff), "#l", m68851 },
3925: {"ptrapcc", 4, two(0xf07c, 0x000f), two(0xffff, 0xffff), "", m68851 },
3926:
3927: {"ptrapcsw", 6, two(0xf07a, 0x000e), two(0xffff, 0xffff), "#w", m68851 },
3928: {"ptrapcsl", 6, two(0xf07b, 0x000e), two(0xffff, 0xffff), "#l", m68851 },
3929: {"ptrapcs", 4, two(0xf07c, 0x000e), two(0xffff, 0xffff), "", m68851 },
3930:
3931: {"ptrapgcw", 6, two(0xf07a, 0x000d), two(0xffff, 0xffff), "#w", m68851 },
3932: {"ptrapgcl", 6, two(0xf07b, 0x000d), two(0xffff, 0xffff), "#l", m68851 },
3933: {"ptrapgc", 4, two(0xf07c, 0x000d), two(0xffff, 0xffff), "", m68851 },
3934:
3935: {"ptrapgsw", 6, two(0xf07a, 0x000c), two(0xffff, 0xffff), "#w", m68851 },
3936: {"ptrapgsl", 6, two(0xf07b, 0x000c), two(0xffff, 0xffff), "#l", m68851 },
3937: {"ptrapgs", 4, two(0xf07c, 0x000c), two(0xffff, 0xffff), "", m68851 },
3938:
3939: {"ptrapicw", 6, two(0xf07a, 0x000b), two(0xffff, 0xffff), "#w", m68851 },
3940: {"ptrapicl", 6, two(0xf07b, 0x000b), two(0xffff, 0xffff), "#l", m68851 },
3941: {"ptrapic", 4, two(0xf07c, 0x000b), two(0xffff, 0xffff), "", m68851 },
3942:
3943: {"ptrapisw", 6, two(0xf07a, 0x000a), two(0xffff, 0xffff), "#w", m68851 },
3944: {"ptrapisl", 6, two(0xf07b, 0x000a), two(0xffff, 0xffff), "#l", m68851 },
3945: {"ptrapis", 4, two(0xf07c, 0x000a), two(0xffff, 0xffff), "", m68851 },
3946:
3947: {"ptraplcw", 6, two(0xf07a, 0x0003), two(0xffff, 0xffff), "#w", m68851 },
3948: {"ptraplcl", 6, two(0xf07b, 0x0003), two(0xffff, 0xffff), "#l", m68851 },
3949: {"ptraplc", 4, two(0xf07c, 0x0003), two(0xffff, 0xffff), "", m68851 },
3950:
3951: {"ptraplsw", 6, two(0xf07a, 0x0002), two(0xffff, 0xffff), "#w", m68851 },
3952: {"ptraplsl", 6, two(0xf07b, 0x0002), two(0xffff, 0xffff), "#l", m68851 },
3953: {"ptrapls", 4, two(0xf07c, 0x0002), two(0xffff, 0xffff), "", m68851 },
3954:
3955: {"ptrapscw", 6, two(0xf07a, 0x0005), two(0xffff, 0xffff), "#w", m68851 },
3956: {"ptrapscl", 6, two(0xf07b, 0x0005), two(0xffff, 0xffff), "#l", m68851 },
3957: {"ptrapsc", 4, two(0xf07c, 0x0005), two(0xffff, 0xffff), "", m68851 },
3958:
3959: {"ptrapssw", 6, two(0xf07a, 0x0004), two(0xffff, 0xffff), "#w", m68851 },
3960: {"ptrapssl", 6, two(0xf07b, 0x0004), two(0xffff, 0xffff), "#l", m68851 },
3961: {"ptrapss", 4, two(0xf07c, 0x0004), two(0xffff, 0xffff), "", m68851 },
3962:
3963: {"ptrapwcw", 6, two(0xf07a, 0x0009), two(0xffff, 0xffff), "#w", m68851 },
3964: {"ptrapwcl", 6, two(0xf07b, 0x0009), two(0xffff, 0xffff), "#l", m68851 },
3965: {"ptrapwc", 4, two(0xf07c, 0x0009), two(0xffff, 0xffff), "", m68851 },
3966:
3967: {"ptrapwsw", 6, two(0xf07a, 0x0008), two(0xffff, 0xffff), "#w", m68851 },
3968: {"ptrapwsl", 6, two(0xf07b, 0x0008), two(0xffff, 0xffff), "#l", m68851 },
3969: {"ptrapws", 4, two(0xf07c, 0x0008), two(0xffff, 0xffff), "", m68851 },
3970:
3971: {"pulse", 2, one(0045314), one(0177777), "", m68060 | mcfisa_a },
3972:
3973: {"pvalid", 4, two(0xf000, 0x2800), two(0xffc0, 0xffff), "Vs&s", m68851 },
3974: {"pvalid", 4, two(0xf000, 0x2c00), two(0xffc0, 0xfff8), "A3&s", m68851 },
3975:
3976: /* FIXME: don't allow Dw==Dx. */
3977: {"remsl", 4, two(0x4c40, 0x0800), two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv },
3978: {"remul", 4, two(0x4c40, 0x0000), two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv },
3979:
3980: {"reset", 2, one(0047160), one(0177777), "", m68000up },
3981:
3982: {"rolb", 2, one(0160430), one(0170770), "QdDs", m68000up },
3983: {"rolb", 2, one(0160470), one(0170770), "DdDs", m68000up },
3984: {"rolw", 2, one(0160530), one(0170770), "QdDs", m68000up },
3985: {"rolw", 2, one(0160570), one(0170770), "DdDs", m68000up },
3986: {"rolw", 2, one(0163700), one(0177700), "~s", m68000up },
3987: {"roll", 2, one(0160630), one(0170770), "QdDs", m68000up },
3988: {"roll", 2, one(0160670), one(0170770), "DdDs", m68000up },
3989:
3990: {"rorb", 2, one(0160030), one(0170770), "QdDs", m68000up },
3991: {"rorb", 2, one(0160070), one(0170770), "DdDs", m68000up },
3992: {"rorw", 2, one(0160130), one(0170770), "QdDs", m68000up },
3993: {"rorw", 2, one(0160170), one(0170770), "DdDs", m68000up },
3994: {"rorw", 2, one(0163300), one(0177700), "~s", m68000up },
3995: {"rorl", 2, one(0160230), one(0170770), "QdDs", m68000up },
3996: {"rorl", 2, one(0160270), one(0170770), "DdDs", m68000up },
3997:
3998: {"roxlb", 2, one(0160420), one(0170770), "QdDs", m68000up },
3999: {"roxlb", 2, one(0160460), one(0170770), "DdDs", m68000up },
4000: {"roxlw", 2, one(0160520), one(0170770), "QdDs", m68000up },
4001: {"roxlw", 2, one(0160560), one(0170770), "DdDs", m68000up },
4002: {"roxlw", 2, one(0162700), one(0177700), "~s", m68000up },
4003: {"roxll", 2, one(0160620), one(0170770), "QdDs", m68000up },
4004: {"roxll", 2, one(0160660), one(0170770), "DdDs", m68000up },
4005:
4006: {"roxrb", 2, one(0160020), one(0170770), "QdDs", m68000up },
4007: {"roxrb", 2, one(0160060), one(0170770), "DdDs", m68000up },
4008: {"roxrw", 2, one(0160120), one(0170770), "QdDs", m68000up },
4009: {"roxrw", 2, one(0160160), one(0170770), "DdDs", m68000up },
4010: {"roxrw", 2, one(0162300), one(0177700), "~s", m68000up },
4011: {"roxrl", 2, one(0160220), one(0170770), "QdDs", m68000up },
4012: {"roxrl", 2, one(0160260), one(0170770), "DdDs", m68000up },
4013:
4014: {"rtd", 4, one(0047164), one(0177777), "#w", m68010up },
1.1.1.2 root 4015:
1.1 root 4016: {"rte", 2, one(0047163), one(0177777), "", m68000up | mcfisa_a },
1.1.1.2 root 4017:
1.1 root 4018: {"rtm", 2, one(0003300), one(0177760), "Rs", m68020 },
1.1.1.2 root 4019:
1.1 root 4020: {"rtr", 2, one(0047167), one(0177777), "", m68000up },
1.1.1.2 root 4021:
1.1 root 4022: {"rts", 2, one(0047165), one(0177777), "", m68000up | mcfisa_a },
4023:
4024: {"satsl", 2, one(0046200), one(0177770), "Ds", mcfisa_b },
4025:
4026: {"sbcd", 2, one(0100400), one(0170770), "DsDd", m68000up },
4027: {"sbcd", 2, one(0100410), one(0170770), "-s-d", m68000up },
4028:
4029: {"scc", 2, one(0052300), one(0177700), "$s", m68000up },
4030: {"scc", 2, one(0052300), one(0177700), "Ds", mcfisa_a },
4031: {"scs", 2, one(0052700), one(0177700), "$s", m68000up },
4032: {"scs", 2, one(0052700), one(0177700), "Ds", mcfisa_a },
4033: {"seq", 2, one(0053700), one(0177700), "$s", m68000up },
4034: {"seq", 2, one(0053700), one(0177700), "Ds", mcfisa_a },
4035: {"sf", 2, one(0050700), one(0177700), "$s", m68000up },
4036: {"sf", 2, one(0050700), one(0177700), "Ds", mcfisa_a },
4037: {"sge", 2, one(0056300), one(0177700), "$s", m68000up },
4038: {"sge", 2, one(0056300), one(0177700), "Ds", mcfisa_a },
4039: {"sgt", 2, one(0057300), one(0177700), "$s", m68000up },
4040: {"sgt", 2, one(0057300), one(0177700), "Ds", mcfisa_a },
4041: {"shi", 2, one(0051300), one(0177700), "$s", m68000up },
4042: {"shi", 2, one(0051300), one(0177700), "Ds", mcfisa_a },
4043: {"sle", 2, one(0057700), one(0177700), "$s", m68000up },
4044: {"sle", 2, one(0057700), one(0177700), "Ds", mcfisa_a },
4045: {"sls", 2, one(0051700), one(0177700), "$s", m68000up },
4046: {"sls", 2, one(0051700), one(0177700), "Ds", mcfisa_a },
4047: {"slt", 2, one(0056700), one(0177700), "$s", m68000up },
4048: {"slt", 2, one(0056700), one(0177700), "Ds", mcfisa_a },
4049: {"smi", 2, one(0055700), one(0177700), "$s", m68000up },
4050: {"smi", 2, one(0055700), one(0177700), "Ds", mcfisa_a },
4051: {"sne", 2, one(0053300), one(0177700), "$s", m68000up },
4052: {"sne", 2, one(0053300), one(0177700), "Ds", mcfisa_a },
4053: {"spl", 2, one(0055300), one(0177700), "$s", m68000up },
4054: {"spl", 2, one(0055300), one(0177700), "Ds", mcfisa_a },
4055: {"st", 2, one(0050300), one(0177700), "$s", m68000up },
4056: {"st", 2, one(0050300), one(0177700), "Ds", mcfisa_a },
4057: {"svc", 2, one(0054300), one(0177700), "$s", m68000up },
4058: {"svc", 2, one(0054300), one(0177700), "Ds", mcfisa_a },
4059: {"svs", 2, one(0054700), one(0177700), "$s", m68000up },
4060: {"svs", 2, one(0054700), one(0177700), "Ds", mcfisa_a },
4061:
4062: {"stop", 4, one(0047162), one(0177777), "#w", m68000up | mcfisa_a },
4063:
4064: {"strldsr", 4, two(0040347,0043374), two(0177777,0177777), "#w", mcfisa_aa},
4065:
4066: {"subal", 2, one(0110700), one(0170700), "*lAd", m68000up | mcfisa_a },
4067: {"subaw", 2, one(0110300), one(0170700), "*wAd", m68000up },
4068:
4069: {"subib", 4, one(0002000), one(0177700), "#b$s", m68000up },
4070: {"subiw", 4, one(0002100), one(0177700), "#w$s", m68000up },
4071: {"subil", 6, one(0002200), one(0177700), "#l$s", m68000up },
4072: {"subil", 6, one(0002200), one(0177700), "#lDs", mcfisa_a },
4073:
4074: {"subqb", 2, one(0050400), one(0170700), "Qd%s", m68000up },
4075: {"subqw", 2, one(0050500), one(0170700), "Qd%s", m68000up },
4076: {"subql", 2, one(0050600), one(0170700), "Qd%s", m68000up | mcfisa_a },
4077:
4078: /* The sub opcode can generate the suba, subi, and subq instructions. */
4079: {"subb", 2, one(0050400), one(0170700), "Qd%s", m68000up },
4080: {"subb", 4, one(0002000), one(0177700), "#b$s", m68000up },
4081: {"subb", 2, one(0110000), one(0170700), ";bDd", m68000up },
4082: {"subb", 2, one(0110400), one(0170700), "Dd~s", m68000up },
4083: {"subw", 2, one(0050500), one(0170700), "Qd%s", m68000up },
4084: {"subw", 4, one(0002100), one(0177700), "#w$s", m68000up },
4085: {"subw", 2, one(0110300), one(0170700), "*wAd", m68000up },
4086: {"subw", 2, one(0110100), one(0170700), "*wDd", m68000up },
4087: {"subw", 2, one(0110500), one(0170700), "Dd~s", m68000up },
4088: {"subl", 2, one(0050600), one(0170700), "Qd%s", m68000up | mcfisa_a },
4089: {"subl", 6, one(0002200), one(0177700), "#l$s", m68000up },
4090: {"subl", 6, one(0002200), one(0177700), "#lDs", mcfisa_a },
4091: {"subl", 2, one(0110700), one(0170700), "*lAd", m68000up | mcfisa_a },
4092: {"subl", 2, one(0110200), one(0170700), "*lDd", m68000up | mcfisa_a },
4093: {"subl", 2, one(0110600), one(0170700), "Dd~s", m68000up | mcfisa_a },
4094:
4095: {"subxb", 2, one(0110400), one(0170770), "DsDd", m68000up },
4096: {"subxb", 2, one(0110410), one(0170770), "-s-d", m68000up },
4097: {"subxw", 2, one(0110500), one(0170770), "DsDd", m68000up },
4098: {"subxw", 2, one(0110510), one(0170770), "-s-d", m68000up },
4099: {"subxl", 2, one(0110600), one(0170770), "DsDd", m68000up | mcfisa_a },
4100: {"subxl", 2, one(0110610), one(0170770), "-s-d", m68000up },
4101:
4102: {"swap", 2, one(0044100), one(0177770), "Ds", m68000up | mcfisa_a },
4103:
4104: /* swbeg and swbegl are magic constants used on sysV68. The compiler
4105: generates them before a switch table. They tell the debugger and
4106: disassembler that a switch table follows. The parameter is the
4107: number of elements in the table. swbeg means that the entries in
4108: the table are word (2 byte) sized, and swbegl means that the
4109: entries in the table are longword (4 byte) sized. */
4110: {"swbeg", 4, one(0045374), one(0177777), "#w", m68000up | mcfisa_a },
4111: {"swbegl", 6, one(0045375), one(0177777), "#l", m68000up | mcfisa_a },
4112:
4113: {"tas", 2, one(0045300), one(0177700), "$s", m68000up | mcfisa_b},
4114:
4115: #define TBL1(name,insn_size,signed,round,size) \
4116: {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)|0000400), \
4117: two(0177700,0107777), "!sD1", cpu32 }, \
4118: {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)), \
4119: two(0177770,0107770), "DsD3D1", cpu32 }
4120: #define TBL(name1, name2, name3, s, r) \
4121: TBL1(name1, 4, s, r, 0), TBL1(name2, 4, s, r, 1), TBL1(name3, 4, s, r, 2)
4122: TBL("tblsb", "tblsw", "tblsl", 2, 1),
4123: TBL("tblsnb", "tblsnw", "tblsnl", 2, 0),
4124: TBL("tblub", "tbluw", "tblul", 0, 1),
4125: TBL("tblunb", "tblunw", "tblunl", 0, 0),
4126:
4127: {"trap", 2, one(0047100), one(0177760), "Ts", m68000up | mcfisa_a },
4128:
4129: {"trapcc", 2, one(0052374), one(0177777), "", m68020up | cpu32 },
4130: {"trapcs", 2, one(0052774), one(0177777), "", m68020up | cpu32 },
4131: {"trapeq", 2, one(0053774), one(0177777), "", m68020up | cpu32 },
4132: {"trapf", 2, one(0050774), one(0177777), "", m68020up | cpu32 | mcfisa_a },
4133: {"trapge", 2, one(0056374), one(0177777), "", m68020up | cpu32 },
4134: {"trapgt", 2, one(0057374), one(0177777), "", m68020up | cpu32 },
4135: {"traphi", 2, one(0051374), one(0177777), "", m68020up | cpu32 },
4136: {"traple", 2, one(0057774), one(0177777), "", m68020up | cpu32 },
4137: {"trapls", 2, one(0051774), one(0177777), "", m68020up | cpu32 },
4138: {"traplt", 2, one(0056774), one(0177777), "", m68020up | cpu32 },
4139: {"trapmi", 2, one(0055774), one(0177777), "", m68020up | cpu32 },
4140: {"trapne", 2, one(0053374), one(0177777), "", m68020up | cpu32 },
4141: {"trappl", 2, one(0055374), one(0177777), "", m68020up | cpu32 },
4142: {"trapt", 2, one(0050374), one(0177777), "", m68020up | cpu32 },
4143: {"trapvc", 2, one(0054374), one(0177777), "", m68020up | cpu32 },
4144: {"trapvs", 2, one(0054774), one(0177777), "", m68020up | cpu32 },
4145:
4146: {"trapccw", 4, one(0052372), one(0177777), "#w", m68020up|cpu32 },
4147: {"trapcsw", 4, one(0052772), one(0177777), "#w", m68020up|cpu32 },
4148: {"trapeqw", 4, one(0053772), one(0177777), "#w", m68020up|cpu32 },
4149: {"trapfw", 4, one(0050772), one(0177777), "#w", m68020up|cpu32|mcfisa_a},
4150: {"trapgew", 4, one(0056372), one(0177777), "#w", m68020up|cpu32 },
4151: {"trapgtw", 4, one(0057372), one(0177777), "#w", m68020up|cpu32 },
4152: {"traphiw", 4, one(0051372), one(0177777), "#w", m68020up|cpu32 },
4153: {"traplew", 4, one(0057772), one(0177777), "#w", m68020up|cpu32 },
4154: {"traplsw", 4, one(0051772), one(0177777), "#w", m68020up|cpu32 },
4155: {"trapltw", 4, one(0056772), one(0177777), "#w", m68020up|cpu32 },
4156: {"trapmiw", 4, one(0055772), one(0177777), "#w", m68020up|cpu32 },
4157: {"trapnew", 4, one(0053372), one(0177777), "#w", m68020up|cpu32 },
4158: {"trapplw", 4, one(0055372), one(0177777), "#w", m68020up|cpu32 },
4159: {"traptw", 4, one(0050372), one(0177777), "#w", m68020up|cpu32 },
4160: {"trapvcw", 4, one(0054372), one(0177777), "#w", m68020up|cpu32 },
4161: {"trapvsw", 4, one(0054772), one(0177777), "#w", m68020up|cpu32 },
4162:
4163: {"trapccl", 6, one(0052373), one(0177777), "#l", m68020up|cpu32 },
4164: {"trapcsl", 6, one(0052773), one(0177777), "#l", m68020up|cpu32 },
4165: {"trapeql", 6, one(0053773), one(0177777), "#l", m68020up|cpu32 },
4166: {"trapfl", 6, one(0050773), one(0177777), "#l", m68020up|cpu32|mcfisa_a},
4167: {"trapgel", 6, one(0056373), one(0177777), "#l", m68020up|cpu32 },
4168: {"trapgtl", 6, one(0057373), one(0177777), "#l", m68020up|cpu32 },
4169: {"traphil", 6, one(0051373), one(0177777), "#l", m68020up|cpu32 },
4170: {"traplel", 6, one(0057773), one(0177777), "#l", m68020up|cpu32 },
4171: {"traplsl", 6, one(0051773), one(0177777), "#l", m68020up|cpu32 },
4172: {"trapltl", 6, one(0056773), one(0177777), "#l", m68020up|cpu32 },
4173: {"trapmil", 6, one(0055773), one(0177777), "#l", m68020up|cpu32 },
4174: {"trapnel", 6, one(0053373), one(0177777), "#l", m68020up|cpu32 },
4175: {"trappll", 6, one(0055373), one(0177777), "#l", m68020up|cpu32 },
4176: {"traptl", 6, one(0050373), one(0177777), "#l", m68020up|cpu32 },
4177: {"trapvcl", 6, one(0054373), one(0177777), "#l", m68020up|cpu32 },
4178: {"trapvsl", 6, one(0054773), one(0177777), "#l", m68020up|cpu32 },
4179:
4180: {"trapv", 2, one(0047166), one(0177777), "", m68000up },
4181:
4182: {"tstb", 2, one(0045000), one(0177700), ";b", m68020up|cpu32|mcfisa_a },
4183: {"tstb", 2, one(0045000), one(0177700), "$b", m68000up },
4184: {"tstw", 2, one(0045100), one(0177700), "*w", m68020up|cpu32|mcfisa_a },
4185: {"tstw", 2, one(0045100), one(0177700), "$w", m68000up },
4186: {"tstl", 2, one(0045200), one(0177700), "*l", m68020up|cpu32|mcfisa_a },
4187: {"tstl", 2, one(0045200), one(0177700), "$l", m68000up },
4188:
4189: {"unlk", 2, one(0047130), one(0177770), "As", m68000up | mcfisa_a },
4190:
4191: {"unpk", 4, one(0100600), one(0170770), "DsDd#w", m68020up },
4192: {"unpk", 4, one(0100610), one(0170770), "-s-d#w", m68020up },
4193:
4194: {"wddatab", 2, one(0175400), one(0177700), "~s", mcfisa_a },
4195: {"wddataw", 2, one(0175500), one(0177700), "~s", mcfisa_a },
4196: {"wddatal", 2, one(0175600), one(0177700), "~s", mcfisa_a },
4197:
4198: {"wdebug", 4, two(0175720, 03), two(0177770, 0xffff), "as", mcfisa_a },
4199: {"wdebug", 4, two(0175750, 03), two(0177770, 0xffff), "ds", mcfisa_a },
4200: };
4201:
4202: const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0];
4203:
4204: /* These aliases used to be in the above table, each one duplicating
4205: all of the entries for its primary exactly. This table was
4206: constructed by mechanical processing of the opcode table, with a
4207: small number of tweaks done by hand. There are probably a lot more
4208: aliases above that could be moved down here, except for very minor
4209: differences. */
4210:
4211: const struct m68k_opcode_alias m68k_opcode_aliases[] =
4212: {
4213: { "add", "addw", },
4214: { "adda", "addaw", },
4215: { "addi", "addiw", },
4216: { "addq", "addqw", },
4217: { "addx", "addxw", },
4218: { "asl", "aslw", },
4219: { "asr", "asrw", },
4220: { "bhi", "bhiw", },
4221: { "bls", "blsw", },
4222: { "bcc", "bccw", },
4223: { "bcs", "bcsw", },
4224: { "bne", "bnew", },
4225: { "beq", "beqw", },
4226: { "bvc", "bvcw", },
4227: { "bvs", "bvsw", },
4228: { "bpl", "bplw", },
4229: { "bmi", "bmiw", },
4230: { "bge", "bgew", },
4231: { "blt", "bltw", },
4232: { "bgt", "bgtw", },
4233: { "ble", "blew", },
4234: { "bra", "braw", },
4235: { "bsr", "bsrw", },
4236: { "bhib", "bhis", },
4237: { "blsb", "blss", },
4238: { "bccb", "bccs", },
4239: { "bcsb", "bcss", },
4240: { "bneb", "bnes", },
4241: { "beqb", "beqs", },
4242: { "bvcb", "bvcs", },
4243: { "bvsb", "bvss", },
4244: { "bplb", "bpls", },
4245: { "bmib", "bmis", },
4246: { "bgeb", "bges", },
4247: { "bltb", "blts", },
4248: { "bgtb", "bgts", },
4249: { "bleb", "bles", },
4250: { "brab", "bras", },
4251: { "bsrb", "bsrs", },
4252: { "bhs", "bccw" },
4253: { "bhss", "bccs" },
4254: { "bhsb", "bccs" },
4255: { "bhsw", "bccw" },
4256: { "bhsl", "bccl" },
4257: { "blo", "bcsw" },
4258: { "blos", "bcss" },
4259: { "blob", "bcss" },
4260: { "blow", "bcsw" },
4261: { "blol", "bcsl" },
4262: { "br", "braw", },
4263: { "brs", "bras", },
4264: { "brb", "bras", },
4265: { "brw", "braw", },
4266: { "brl", "bral", },
4267: { "jfnlt", "bcc", }, /* Apparently a sun alias. */
4268: { "jfngt", "ble", }, /* Apparently a sun alias. */
4269: { "jfeq", "beqs", }, /* Apparently a sun alias. */
4270: { "bchgb", "bchg", },
4271: { "bchgl", "bchg", },
4272: { "bclrb", "bclr", },
4273: { "bclrl", "bclr", },
4274: { "bsetb", "bset", },
4275: { "bsetl", "bset", },
4276: { "btstb", "btst", },
4277: { "btstl", "btst", },
4278: { "cas2", "cas2w", },
4279: { "cas", "casw", },
4280: { "chk2", "chk2w", },
4281: { "chk", "chkw", },
4282: { "clr", "clrw", },
4283: { "cmp2", "cmp2w", },
4284: { "cmpa", "cmpaw", },
4285: { "cmpi", "cmpiw", },
4286: { "cmpm", "cmpmw", },
4287: { "cmp", "cmpw", },
4288: { "dbccw", "dbcc", },
4289: { "dbcsw", "dbcs", },
4290: { "dbeqw", "dbeq", },
4291: { "dbfw", "dbf", },
4292: { "dbgew", "dbge", },
4293: { "dbgtw", "dbgt", },
4294: { "dbhiw", "dbhi", },
4295: { "dblew", "dble", },
4296: { "dblsw", "dbls", },
4297: { "dbltw", "dblt", },
4298: { "dbmiw", "dbmi", },
4299: { "dbnew", "dbne", },
4300: { "dbplw", "dbpl", },
4301: { "dbtw", "dbt", },
4302: { "dbvcw", "dbvc", },
4303: { "dbvsw", "dbvs", },
4304: { "dbhs", "dbcc", },
4305: { "dbhsw", "dbcc", },
4306: { "dbra", "dbf", },
4307: { "dbraw", "dbf", },
4308: { "tdivsl", "divsl", },
4309: { "divs", "divsw", },
4310: { "divu", "divuw", },
4311: { "ext", "extw", },
4312: { "extbw", "extw", },
4313: { "extwl", "extl", },
4314: { "fbneq", "fbne", },
4315: { "fbsneq", "fbsne", },
4316: { "fdbneq", "fdbne", },
4317: { "fdbsneq", "fdbsne", },
4318: { "fmovecr", "fmovecrx", },
4319: { "fmovm", "fmovem", },
4320: { "fsneq", "fsne", },
4321: { "fssneq", "fssne", },
4322: { "ftrapneq", "ftrapne", },
4323: { "ftrapsneq", "ftrapsne", },
4324: { "fjneq", "fjne", },
4325: { "fjsneq", "fjsne", },
4326: { "jmpl", "jmp", },
4327: { "jmps", "jmp", },
4328: { "jsrl", "jsr", },
4329: { "jsrs", "jsr", },
4330: { "leal", "lea", },
4331: { "lsl", "lslw", },
4332: { "lsr", "lsrw", },
4333: { "mac", "macw" },
4334: { "movea", "moveaw", },
4335: { "movem", "movemw", },
4336: { "movml", "moveml", },
4337: { "movmw", "movemw", },
4338: { "movm", "movemw", },
4339: { "movep", "movepw", },
4340: { "movpw", "movepw", },
4341: { "moves", "movesw" },
4342: { "muls", "mulsw", },
4343: { "mulu", "muluw", },
4344: { "msac", "msacw" },
4345: { "nbcdb", "nbcd" },
4346: { "neg", "negw", },
4347: { "negx", "negxw", },
4348: { "not", "notw", },
4349: { "peal", "pea", },
4350: { "rol", "rolw", },
4351: { "ror", "rorw", },
4352: { "roxl", "roxlw", },
4353: { "roxr", "roxrw", },
4354: { "sats", "satsl", },
4355: { "sbcdb", "sbcd", },
4356: { "sccb", "scc", },
4357: { "scsb", "scs", },
4358: { "seqb", "seq", },
4359: { "sfb", "sf", },
4360: { "sgeb", "sge", },
4361: { "sgtb", "sgt", },
4362: { "shib", "shi", },
4363: { "sleb", "sle", },
4364: { "slsb", "sls", },
4365: { "sltb", "slt", },
4366: { "smib", "smi", },
4367: { "sneb", "sne", },
4368: { "splb", "spl", },
4369: { "stb", "st", },
4370: { "svcb", "svc", },
4371: { "svsb", "svs", },
4372: { "sfge", "sge", },
4373: { "sfgt", "sgt", },
4374: { "sfle", "sle", },
4375: { "sflt", "slt", },
4376: { "sfneq", "sne", },
4377: { "suba", "subaw", },
4378: { "subi", "subiw", },
4379: { "subq", "subqw", },
4380: { "sub", "subw", },
4381: { "subx", "subxw", },
4382: { "swapw", "swap", },
4383: { "tasb", "tas", },
4384: { "tpcc", "trapcc", },
4385: { "tcc", "trapcc", },
4386: { "tst", "tstw", },
4387: { "jbra", "jra", },
4388: { "jbhi", "jhi", },
4389: { "jbls", "jls", },
4390: { "jbcc", "jcc", },
4391: { "jbcs", "jcs", },
4392: { "jbne", "jne", },
4393: { "jbeq", "jeq", },
4394: { "jbvc", "jvc", },
4395: { "jbvs", "jvs", },
4396: { "jbpl", "jpl", },
4397: { "jbmi", "jmi", },
4398: { "jbge", "jge", },
4399: { "jblt", "jlt", },
4400: { "jbgt", "jgt", },
4401: { "jble", "jle", },
4402: { "movql", "moveq", },
4403: { "moveql", "moveq", },
4404: { "movl", "movel", },
4405: { "movq", "moveq", },
4406: { "moval", "moveal", },
4407: { "movaw", "moveaw", },
4408: { "movb", "moveb", },
4409: { "movc", "movec", },
4410: { "movecl", "movec", },
4411: { "movpl", "movepl", },
4412: { "movw", "movew", },
4413: { "movsb", "movesb", },
4414: { "movsl", "movesl", },
4415: { "movsw", "movesw", },
4416: { "mov3q", "mov3ql", },
4417:
4418: { "tdivul", "divul", }, /* For m68k-svr4. */
4419: { "fmovb", "fmoveb", },
4420: { "fsmovb", "fsmoveb", },
4421: { "fdmovb", "fdmoveb", },
4422: { "fmovd", "fmoved", },
4423: { "fsmovd", "fsmoved", },
4424: { "fmovl", "fmovel", },
4425: { "fsmovl", "fsmovel", },
4426: { "fdmovl", "fdmovel", },
4427: { "fmovp", "fmovep", },
4428: { "fsmovp", "fsmovep", },
4429: { "fdmovp", "fdmovep", },
4430: { "fmovs", "fmoves", },
4431: { "fsmovs", "fsmoves", },
4432: { "fdmovs", "fdmoves", },
4433: { "fmovw", "fmovew", },
4434: { "fsmovw", "fsmovew", },
4435: { "fdmovw", "fdmovew", },
4436: { "fmovx", "fmovex", },
4437: { "fsmovx", "fsmovex", },
4438: { "fdmovx", "fdmovex", },
4439: { "fmovcr", "fmovecr", },
4440: { "fmovcrx", "fmovecrx", },
4441: { "ftestb", "ftstb", },
4442: { "ftestd", "ftstd", },
4443: { "ftestl", "ftstl", },
4444: { "ftestp", "ftstp", },
4445: { "ftests", "ftsts", },
4446: { "ftestw", "ftstw", },
4447: { "ftestx", "ftstx", },
4448:
4449: { "bitrevl", "bitrev", },
4450: { "byterevl", "byterev", },
4451: { "ff1l", "ff1", },
4452:
4453: };
4454:
4455: const int m68k_numaliases =
4456: sizeof m68k_opcode_aliases / sizeof m68k_opcode_aliases[0];
4457: /* **** End of m68k-opc.c */
4458: /* **** floatformat.c from sourceware.org CVS 2005-08-14. */
4459: /* IEEE floating point support routines, for GDB, the GNU Debugger.
4460: Copyright (C) 1991, 1994, 1999, 2000, 2003 Free Software Foundation, Inc.
4461:
4462: This file is part of GDB.
4463:
4464: This program is free software; you can redistribute it and/or modify
4465: it under the terms of the GNU General Public License as published by
4466: the Free Software Foundation; either version 2 of the License, or
4467: (at your option) any later version.
4468:
4469: This program is distributed in the hope that it will be useful,
4470: but WITHOUT ANY WARRANTY; without even the implied warranty of
4471: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4472: GNU General Public License for more details.
4473:
4474: You should have received a copy of the GNU General Public License
1.1.1.4 root 4475: along with this program; if not, see <http://www.gnu.org/licenses/>. */
1.1 root 4476:
4477: /* This is needed to pick up the NAN macro on some systems. */
4478: //#define _GNU_SOURCE
4479:
4480: #ifndef INFINITY
4481: #ifdef HUGE_VAL
4482: #define INFINITY HUGE_VAL
4483: #else
4484: #define INFINITY (1.0 / 0.0)
4485: #endif
4486: #endif
4487:
4488: #ifndef NAN
4489: #define NAN (0.0 / 0.0)
4490: #endif
4491:
4492: static unsigned long get_field (const unsigned char *,
4493: enum floatformat_byteorders,
4494: unsigned int,
4495: unsigned int,
4496: unsigned int);
4497: static int floatformat_always_valid (const struct floatformat *fmt,
4498: const char *from);
4499:
4500: static int
4501: floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED,
4502: const char *from ATTRIBUTE_UNUSED)
4503: {
4504: return 1;
4505: }
4506:
4507: /* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not
4508: going to bother with trying to muck around with whether it is defined in
4509: a system header, what we do if not, etc. */
4510: #define FLOATFORMAT_CHAR_BIT 8
4511:
4512: /* floatformats for IEEE single and double, big and little endian. */
4513: const struct floatformat floatformat_ieee_single_big =
4514: {
4515: floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
4516: floatformat_intbit_no,
4517: "floatformat_ieee_single_big",
4518: floatformat_always_valid
4519: };
4520: const struct floatformat floatformat_ieee_single_little =
4521: {
4522: floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
4523: floatformat_intbit_no,
4524: "floatformat_ieee_single_little",
4525: floatformat_always_valid
4526: };
4527: const struct floatformat floatformat_ieee_double_big =
4528: {
4529: floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
4530: floatformat_intbit_no,
4531: "floatformat_ieee_double_big",
4532: floatformat_always_valid
4533: };
4534: const struct floatformat floatformat_ieee_double_little =
4535: {
4536: floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
4537: floatformat_intbit_no,
4538: "floatformat_ieee_double_little",
4539: floatformat_always_valid
4540: };
4541:
4542: /* floatformat for IEEE double, little endian byte order, with big endian word
4543: ordering, as on the ARM. */
4544:
4545: const struct floatformat floatformat_ieee_double_littlebyte_bigword =
4546: {
4547: floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
4548: floatformat_intbit_no,
4549: "floatformat_ieee_double_littlebyte_bigword",
4550: floatformat_always_valid
4551: };
4552:
4553: static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from);
4554:
4555: static int
4556: floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from)
4557: {
4558: /* In the i387 double-extended format, if the exponent is all ones,
4559: then the integer bit must be set. If the exponent is neither 0
4560: nor ~0, the intbit must also be set. Only if the exponent is
4561: zero can it be zero, and then it must be zero. */
4562: unsigned long exponent, int_bit;
4563: const unsigned char *ufrom = (const unsigned char *) from;
1.1.1.2 root 4564:
1.1 root 4565: exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
4566: fmt->exp_start, fmt->exp_len);
4567: int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize,
4568: fmt->man_start, 1);
1.1.1.2 root 4569:
1.1 root 4570: if ((exponent == 0) != (int_bit == 0))
4571: return 0;
4572: else
4573: return 1;
4574: }
4575:
4576: const struct floatformat floatformat_i387_ext =
4577: {
4578: floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
4579: floatformat_intbit_yes,
4580: "floatformat_i387_ext",
4581: floatformat_i387_ext_is_valid
4582: };
4583: const struct floatformat floatformat_m68881_ext =
4584: {
4585: /* Note that the bits from 16 to 31 are unused. */
4586: floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
4587: floatformat_intbit_yes,
4588: "floatformat_m68881_ext",
4589: floatformat_always_valid
4590: };
4591: const struct floatformat floatformat_i960_ext =
4592: {
4593: /* Note that the bits from 0 to 15 are unused. */
4594: floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
4595: floatformat_intbit_yes,
4596: "floatformat_i960_ext",
4597: floatformat_always_valid
4598: };
4599: const struct floatformat floatformat_m88110_ext =
4600: {
4601: floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
4602: floatformat_intbit_yes,
4603: "floatformat_m88110_ext",
4604: floatformat_always_valid
4605: };
4606: const struct floatformat floatformat_m88110_harris_ext =
4607: {
4608: /* Harris uses raw format 128 bytes long, but the number is just an ieee
4609: double, and the last 64 bits are wasted. */
4610: floatformat_big,128, 0, 1, 11, 0x3ff, 0x7ff, 12, 52,
4611: floatformat_intbit_no,
4612: "floatformat_m88110_ext_harris",
4613: floatformat_always_valid
4614: };
4615: const struct floatformat floatformat_arm_ext_big =
4616: {
4617: /* Bits 1 to 16 are unused. */
4618: floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
4619: floatformat_intbit_yes,
4620: "floatformat_arm_ext_big",
4621: floatformat_always_valid
4622: };
4623: const struct floatformat floatformat_arm_ext_littlebyte_bigword =
4624: {
4625: /* Bits 1 to 16 are unused. */
4626: floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
4627: floatformat_intbit_yes,
4628: "floatformat_arm_ext_littlebyte_bigword",
4629: floatformat_always_valid
4630: };
4631: const struct floatformat floatformat_ia64_spill_big =
4632: {
4633: floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
4634: floatformat_intbit_yes,
4635: "floatformat_ia64_spill_big",
4636: floatformat_always_valid
4637: };
4638: const struct floatformat floatformat_ia64_spill_little =
4639: {
4640: floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
4641: floatformat_intbit_yes,
4642: "floatformat_ia64_spill_little",
4643: floatformat_always_valid
4644: };
4645: const struct floatformat floatformat_ia64_quad_big =
4646: {
4647: floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
4648: floatformat_intbit_no,
4649: "floatformat_ia64_quad_big",
4650: floatformat_always_valid
4651: };
4652: const struct floatformat floatformat_ia64_quad_little =
4653: {
4654: floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
4655: floatformat_intbit_no,
4656: "floatformat_ia64_quad_little",
4657: floatformat_always_valid
4658: };
4659:
4660: /* Extract a field which starts at START and is LEN bits long. DATA and
4661: TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */
4662: static unsigned long
4663: get_field (const unsigned char *data, enum floatformat_byteorders order,
4664: unsigned int total_len, unsigned int start, unsigned int len)
4665: {
4666: unsigned long result;
4667: unsigned int cur_byte;
4668: int cur_bitshift;
4669:
4670: /* Start at the least significant part of the field. */
4671: cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
4672: if (order == floatformat_little)
4673: cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
4674: cur_bitshift =
4675: ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
4676: result = *(data + cur_byte) >> (-cur_bitshift);
4677: cur_bitshift += FLOATFORMAT_CHAR_BIT;
4678: if (order == floatformat_little)
4679: ++cur_byte;
4680: else
4681: --cur_byte;
4682:
4683: /* Move towards the most significant part of the field. */
4684: while ((unsigned int) cur_bitshift < len)
4685: {
4686: if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
4687: /* This is the last byte; zero out the bits which are not part of
4688: this field. */
4689: result |=
4690: (*(data + cur_byte) & ((1 << (len - cur_bitshift)) - 1))
4691: << cur_bitshift;
4692: else
4693: result |= *(data + cur_byte) << cur_bitshift;
4694: cur_bitshift += FLOATFORMAT_CHAR_BIT;
4695: if (order == floatformat_little)
4696: ++cur_byte;
4697: else
4698: --cur_byte;
4699: }
4700: return result;
4701: }
1.1.1.2 root 4702:
1.1 root 4703: #ifndef min
4704: #define min(a, b) ((a) < (b) ? (a) : (b))
4705: #endif
4706:
4707: /* Convert from FMT to a double.
4708: FROM is the address of the extended float.
4709: Store the double in *TO. */
4710:
4711: void
4712: floatformat_to_double (const struct floatformat *fmt,
4713: const char *from, double *to)
4714: {
4715: const unsigned char *ufrom = (const unsigned char *)from;
4716: double dto;
4717: long exponent;
4718: unsigned long mant;
4719: unsigned int mant_bits, mant_off;
4720: int mant_bits_left;
4721: int special_exponent; /* It's a NaN, denorm or zero */
4722:
4723: exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
4724: fmt->exp_start, fmt->exp_len);
4725:
4726: /* If the exponent indicates a NaN, we don't have information to
4727: decide what to do. So we handle it like IEEE, except that we
4728: don't try to preserve the type of NaN. FIXME. */
4729: if ((unsigned long) exponent == fmt->exp_nan)
4730: {
4731: int nan;
4732:
4733: mant_off = fmt->man_start;
4734: mant_bits_left = fmt->man_len;
4735: nan = 0;
4736: while (mant_bits_left > 0)
4737: {
4738: mant_bits = min (mant_bits_left, 32);
4739:
4740: if (get_field (ufrom, fmt->byteorder, fmt->totalsize,
4741: mant_off, mant_bits) != 0)
4742: {
4743: /* This is a NaN. */
4744: nan = 1;
4745: break;
4746: }
4747:
4748: mant_off += mant_bits;
4749: mant_bits_left -= mant_bits;
4750: }
4751:
4752: /* On certain systems (such as GNU/Linux), the use of the
4753: INFINITY macro below may generate a warning that can not be
4754: silenced due to a bug in GCC (PR preprocessor/11931). The
4755: preprocessor fails to recognise the __extension__ keyword in
4756: conjunction with the GNU/C99 extension for hexadecimal
4757: floating point constants and will issue a warning when
4758: compiling with -pedantic. */
4759: if (nan)
4760: dto = NAN;
4761: else
4762: dto = INFINITY;
4763:
4764: if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
4765: dto = -dto;
4766:
4767: *to = dto;
4768:
4769: return;
4770: }
4771:
4772: mant_bits_left = fmt->man_len;
4773: mant_off = fmt->man_start;
4774: dto = 0.0;
4775:
4776: special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan;
4777:
4778: /* Don't bias zero's, denorms or NaNs. */
4779: if (!special_exponent)
4780: exponent -= fmt->exp_bias;
4781:
4782: /* Build the result algebraically. Might go infinite, underflow, etc;
4783: who cares. */
4784:
4785: /* If this format uses a hidden bit, explicitly add it in now. Otherwise,
4786: increment the exponent by one to account for the integer bit. */
4787:
4788: if (!special_exponent)
4789: {
4790: if (fmt->intbit == floatformat_intbit_no)
4791: dto = ldexp (1.0, exponent);
4792: else
4793: exponent++;
4794: }
4795:
4796: while (mant_bits_left > 0)
4797: {
4798: mant_bits = min (mant_bits_left, 32);
4799:
4800: mant = get_field (ufrom, fmt->byteorder, fmt->totalsize,
4801: mant_off, mant_bits);
4802:
4803: /* Handle denormalized numbers. FIXME: What should we do for
4804: non-IEEE formats? */
4805: if (exponent == 0 && mant != 0)
4806: dto += ldexp ((double)mant,
4807: (- fmt->exp_bias
4808: - mant_bits
4809: - (mant_off - fmt->man_start)
4810: + 1));
4811: else
4812: dto += ldexp ((double)mant, exponent - mant_bits);
4813: if (exponent != 0)
4814: exponent -= mant_bits;
4815: mant_off += mant_bits;
4816: mant_bits_left -= mant_bits;
4817: }
4818:
4819: /* Negate it if negative. */
4820: if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
4821: dto = -dto;
4822: *to = dto;
4823: }
4824:
4825: static void put_field (unsigned char *, enum floatformat_byteorders,
4826: unsigned int,
4827: unsigned int,
4828: unsigned int,
4829: unsigned long);
4830:
4831: /* Set a field which starts at START and is LEN bits long. DATA and
4832: TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */
4833: static void
4834: put_field (unsigned char *data, enum floatformat_byteorders order,
4835: unsigned int total_len, unsigned int start, unsigned int len,
4836: unsigned long stuff_to_put)
4837: {
4838: unsigned int cur_byte;
4839: int cur_bitshift;
4840:
4841: /* Start at the least significant part of the field. */
4842: cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
4843: if (order == floatformat_little)
4844: cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
4845: cur_bitshift =
4846: ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
4847: *(data + cur_byte) &=
4848: ~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1) << (-cur_bitshift));
4849: *(data + cur_byte) |=
4850: (stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
4851: cur_bitshift += FLOATFORMAT_CHAR_BIT;
4852: if (order == floatformat_little)
4853: ++cur_byte;
4854: else
4855: --cur_byte;
4856:
4857: /* Move towards the most significant part of the field. */
4858: while ((unsigned int) cur_bitshift < len)
4859: {
4860: if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
4861: {
4862: /* This is the last byte. */
4863: *(data + cur_byte) &=
4864: ~((1 << (len - cur_bitshift)) - 1);
4865: *(data + cur_byte) |= (stuff_to_put >> cur_bitshift);
4866: }
4867: else
4868: *(data + cur_byte) = ((stuff_to_put >> cur_bitshift)
4869: & ((1 << FLOATFORMAT_CHAR_BIT) - 1));
4870: cur_bitshift += FLOATFORMAT_CHAR_BIT;
4871: if (order == floatformat_little)
4872: ++cur_byte;
4873: else
4874: --cur_byte;
4875: }
4876: }
4877:
4878: /* The converse: convert the double *FROM to an extended float
4879: and store where TO points. Neither FROM nor TO have any alignment
4880: restrictions. */
4881:
4882: void
4883: floatformat_from_double (const struct floatformat *fmt,
4884: const double *from, char *to)
4885: {
4886: double dfrom;
4887: int exponent;
4888: double mant;
4889: unsigned int mant_bits, mant_off;
4890: int mant_bits_left;
4891: unsigned char *uto = (unsigned char *)to;
4892:
4893: dfrom = *from;
4894: memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
4895:
4896: /* If negative, set the sign bit. */
4897: if (dfrom < 0)
4898: {
4899: put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1);
4900: dfrom = -dfrom;
4901: }
4902:
4903: if (dfrom == 0)
4904: {
4905: /* 0.0. */
4906: return;
4907: }
4908:
4909: if (dfrom != dfrom)
4910: {
4911: /* NaN. */
4912: put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
4913: fmt->exp_len, fmt->exp_nan);
4914: /* Be sure it's not infinity, but NaN value is irrelevant. */
4915: put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
4916: 32, 1);
4917: return;
4918: }
4919:
4920: if (dfrom + dfrom == dfrom)
4921: {
4922: /* This can only happen for an infinite value (or zero, which we
4923: already handled above). */
4924: put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
4925: fmt->exp_len, fmt->exp_nan);
4926: return;
4927: }
4928:
4929: mant = frexp (dfrom, &exponent);
4930: if (exponent + fmt->exp_bias - 1 > 0)
4931: put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
4932: fmt->exp_len, exponent + fmt->exp_bias - 1);
4933: else
4934: {
4935: /* Handle a denormalized number. FIXME: What should we do for
4936: non-IEEE formats? */
4937: put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
4938: fmt->exp_len, 0);
4939: mant = ldexp (mant, exponent + fmt->exp_bias - 1);
4940: }
4941:
4942: mant_bits_left = fmt->man_len;
4943: mant_off = fmt->man_start;
4944: while (mant_bits_left > 0)
4945: {
4946: unsigned long mant_long;
4947: mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
4948:
4949: mant *= 4294967296.0;
4950: mant_long = (unsigned long)mant;
4951: mant -= mant_long;
4952:
4953: /* If the integer bit is implicit, and we are not creating a
4954: denormalized number, then we need to discard it. */
4955: if ((unsigned int) mant_bits_left == fmt->man_len
4956: && fmt->intbit == floatformat_intbit_no
4957: && exponent + fmt->exp_bias - 1 > 0)
4958: {
4959: mant_long &= 0x7fffffff;
4960: mant_bits -= 1;
4961: }
4962: else if (mant_bits < 32)
4963: {
4964: /* The bits we want are in the most significant MANT_BITS bits of
4965: mant_long. Move them to the least significant. */
4966: mant_long >>= 32 - mant_bits;
4967: }
4968:
4969: put_field (uto, fmt->byteorder, fmt->totalsize,
4970: mant_off, mant_bits, mant_long);
4971: mant_off += mant_bits;
4972: mant_bits_left -= mant_bits;
4973: }
4974: }
4975:
4976: /* Return non-zero iff the data at FROM is a valid number in format FMT. */
4977:
4978: int
4979: floatformat_is_valid (const struct floatformat *fmt, const char *from)
4980: {
4981: return fmt->is_valid (fmt, from);
4982: }
4983:
4984:
4985: #ifdef IEEE_DEBUG
4986:
4987: /* This is to be run on a host which uses IEEE floating point. */
4988:
4989: void
4990: ieee_test (double n)
4991: {
4992: double result;
4993:
4994: floatformat_to_double (&floatformat_ieee_double_little, (char *) &n,
4995: &result);
4996: if ((n != result && (! isnan (n) || ! isnan (result)))
4997: || (n < 0 && result >= 0)
4998: || (n >= 0 && result < 0))
4999: printf ("Differ(to): %.20g -> %.20g\n", n, result);
5000:
5001: floatformat_from_double (&floatformat_ieee_double_little, &n,
5002: (char *) &result);
5003: if ((n != result && (! isnan (n) || ! isnan (result)))
5004: || (n < 0 && result >= 0)
5005: || (n >= 0 && result < 0))
5006: printf ("Differ(from): %.20g -> %.20g\n", n, result);
5007:
5008: #if 0
5009: {
5010: char exten[16];
5011:
5012: floatformat_from_double (&floatformat_m68881_ext, &n, exten);
5013: floatformat_to_double (&floatformat_m68881_ext, exten, &result);
5014: if (n != result)
5015: printf ("Differ(to+from): %.20g -> %.20g\n", n, result);
5016: }
5017: #endif
5018:
5019: #if IEEE_DEBUG > 1
5020: /* This is to be run on a host which uses 68881 format. */
5021: {
5022: long double ex = *(long double *)exten;
5023: if (ex != n)
5024: printf ("Differ(from vs. extended): %.20g\n", n);
5025: }
5026: #endif
5027: }
5028:
5029: int
5030: main (void)
5031: {
5032: ieee_test (0.0);
5033: ieee_test (0.5);
5034: ieee_test (256.0);
5035: ieee_test (0.12345);
5036: ieee_test (234235.78907234);
5037: ieee_test (-512.0);
5038: ieee_test (-0.004321);
5039: ieee_test (1.2E-70);
5040: ieee_test (1.2E-316);
5041: ieee_test (4.9406564584124654E-324);
5042: ieee_test (- 4.9406564584124654E-324);
5043: ieee_test (- 0.0);
5044: ieee_test (- INFINITY);
5045: ieee_test (- NAN);
5046: ieee_test (INFINITY);
5047: ieee_test (NAN);
5048: return 0;
5049: }
5050: #endif
5051: /* **** End of floatformat.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.