xref: /qemu/disas/m68k.c (revision d16cab541ab9217977e2a39abf3d79f914146741)
148024e4aSbellard /* This file is composed of several different files from the upstream
248024e4aSbellard    sourceware.org CVS.  Original file boundaries marked with **** */
348024e4aSbellard 
448d4ab25SPeter Maydell #include "qemu/osdep.h"
548024e4aSbellard #include <math.h>
648024e4aSbellard 
73979fca4SMarkus Armbruster #include "disas/dis-asm.h"
848024e4aSbellard 
91addc7c5Saurel32 /* **** floatformat.h from sourceware.org CVS 2005-08-14.  */
1048024e4aSbellard /* IEEE floating point support declarations, for GDB, the GNU Debugger.
1148024e4aSbellard    Copyright 1991, 1994, 1995, 1997, 2000, 2003 Free Software Foundation, Inc.
1248024e4aSbellard 
1348024e4aSbellard This file is part of GDB.
1448024e4aSbellard 
1548024e4aSbellard This program is free software; you can redistribute it and/or modify
1648024e4aSbellard it under the terms of the GNU General Public License as published by
1748024e4aSbellard the Free Software Foundation; either version 2 of the License, or
1848024e4aSbellard (at your option) any later version.
1948024e4aSbellard 
2048024e4aSbellard This program is distributed in the hope that it will be useful,
2148024e4aSbellard but WITHOUT ANY WARRANTY; without even the implied warranty of
2248024e4aSbellard MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2348024e4aSbellard GNU General Public License for more details.
2448024e4aSbellard 
2548024e4aSbellard You should have received a copy of the GNU General Public License
268167ee88SBlue Swirl along with this program; if not, see <http://www.gnu.org/licenses/>.  */
2748024e4aSbellard 
2848024e4aSbellard #if !defined (FLOATFORMAT_H)
2948024e4aSbellard #define FLOATFORMAT_H 1
3048024e4aSbellard 
3148024e4aSbellard /*#include "ansidecl.h" */
3248024e4aSbellard 
3348024e4aSbellard /* A floatformat consists of a sign bit, an exponent and a mantissa.  Once the
3448024e4aSbellard    bytes are concatenated according to the byteorder flag, then each of those
3548024e4aSbellard    fields is contiguous.  We number the bits with 0 being the most significant
3648024e4aSbellard    (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field
3748024e4aSbellard    contains with the *_start and *_len fields.  */
3848024e4aSbellard 
3948024e4aSbellard /* What is the order of the bytes. */
4048024e4aSbellard 
4148024e4aSbellard enum floatformat_byteorders {
4248024e4aSbellard 
4348024e4aSbellard   /* Standard little endian byte order.
4448024e4aSbellard      EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */
4548024e4aSbellard 
4648024e4aSbellard   floatformat_little,
4748024e4aSbellard 
4848024e4aSbellard   /* Standard big endian byte order.
4948024e4aSbellard      EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */
5048024e4aSbellard 
5148024e4aSbellard   floatformat_big,
5248024e4aSbellard 
5348024e4aSbellard   /* Little endian byte order but big endian word order.
5448024e4aSbellard      EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */
5548024e4aSbellard 
5648024e4aSbellard   floatformat_littlebyte_bigword
5748024e4aSbellard 
5848024e4aSbellard };
5948024e4aSbellard 
6048024e4aSbellard enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
6148024e4aSbellard 
6248024e4aSbellard struct floatformat
6348024e4aSbellard {
6448024e4aSbellard   enum floatformat_byteorders byteorder;
6548024e4aSbellard   unsigned int totalsize;	/* Total size of number in bits */
6648024e4aSbellard 
6748024e4aSbellard   /* Sign bit is always one bit long.  1 means negative, 0 means positive.  */
6848024e4aSbellard   unsigned int sign_start;
6948024e4aSbellard 
7048024e4aSbellard   unsigned int exp_start;
7148024e4aSbellard   unsigned int exp_len;
7248024e4aSbellard   /* Bias added to a "true" exponent to form the biased exponent.  It
732dbb1308Szhaolichang      is intentionally signed as, otherwise, -exp_bias can turn into a
7448024e4aSbellard      very large number (e.g., given the exp_bias of 0x3fff and a 64
7548024e4aSbellard      bit long, the equation (long)(1 - exp_bias) evaluates to
7648024e4aSbellard      4294950914) instead of -16382).  */
7748024e4aSbellard   int exp_bias;
7848024e4aSbellard   /* Exponent value which indicates NaN.  This is the actual value stored in
7948024e4aSbellard      the float, not adjusted by the exp_bias.  This usually consists of all
8048024e4aSbellard      one bits.  */
8148024e4aSbellard   unsigned int exp_nan;
8248024e4aSbellard 
8348024e4aSbellard   unsigned int man_start;
8448024e4aSbellard   unsigned int man_len;
8548024e4aSbellard 
8648024e4aSbellard   /* Is the integer bit explicit or implicit?  */
8748024e4aSbellard   enum floatformat_intbit intbit;
8848024e4aSbellard 
8948024e4aSbellard   /* Internal name for debugging. */
9048024e4aSbellard   const char *name;
9148024e4aSbellard 
9248024e4aSbellard   /* Validator method.  */
9348024e4aSbellard   int (*is_valid) (const struct floatformat *fmt, const char *from);
9448024e4aSbellard };
9548024e4aSbellard 
9648024e4aSbellard /* floatformats for IEEE single and double, big and little endian.  */
9748024e4aSbellard 
9848024e4aSbellard extern const struct floatformat floatformat_ieee_single_big;
9948024e4aSbellard extern const struct floatformat floatformat_ieee_single_little;
10048024e4aSbellard extern const struct floatformat floatformat_ieee_double_big;
10148024e4aSbellard extern const struct floatformat floatformat_ieee_double_little;
10248024e4aSbellard 
10348024e4aSbellard /* floatformat for ARM IEEE double, little endian bytes and big endian words */
10448024e4aSbellard 
10548024e4aSbellard extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
10648024e4aSbellard 
10748024e4aSbellard /* floatformats for various extendeds.  */
10848024e4aSbellard 
10948024e4aSbellard extern const struct floatformat floatformat_i387_ext;
11048024e4aSbellard extern const struct floatformat floatformat_m68881_ext;
11148024e4aSbellard extern const struct floatformat floatformat_i960_ext;
11248024e4aSbellard extern const struct floatformat floatformat_m88110_ext;
11348024e4aSbellard extern const struct floatformat floatformat_m88110_harris_ext;
11448024e4aSbellard extern const struct floatformat floatformat_arm_ext_big;
11548024e4aSbellard extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
11648024e4aSbellard /* IA-64 Floating Point register spilt into memory.  */
11748024e4aSbellard extern const struct floatformat floatformat_ia64_spill_big;
11848024e4aSbellard extern const struct floatformat floatformat_ia64_spill_little;
11948024e4aSbellard extern const struct floatformat floatformat_ia64_quad_big;
12048024e4aSbellard extern const struct floatformat floatformat_ia64_quad_little;
12148024e4aSbellard 
12248024e4aSbellard /* Convert from FMT to a double.
12348024e4aSbellard    FROM is the address of the extended float.
12448024e4aSbellard    Store the double in *TO.  */
12548024e4aSbellard 
12648024e4aSbellard extern void
12748024e4aSbellard floatformat_to_double (const struct floatformat *, const char *, double *);
12848024e4aSbellard 
12948024e4aSbellard /* The converse: convert the double *FROM to FMT
13048024e4aSbellard    and store where TO points.  */
13148024e4aSbellard 
13248024e4aSbellard extern void
13348024e4aSbellard floatformat_from_double (const struct floatformat *, const double *, char *);
13448024e4aSbellard 
13548024e4aSbellard /* Return non-zero iff the data at FROM is a valid number in format FMT.  */
13648024e4aSbellard 
13748024e4aSbellard extern int
13848024e4aSbellard floatformat_is_valid (const struct floatformat *fmt, const char *from);
13948024e4aSbellard 
14048024e4aSbellard #endif	/* defined (FLOATFORMAT_H) */
14148024e4aSbellard /* **** End of floatformat.h */
14248024e4aSbellard /* **** m68k-dis.h from sourceware.org CVS 2005-08-14.  */
14348024e4aSbellard /* Opcode table header for m680[01234]0/m6888[12]/m68851.
14448024e4aSbellard    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001,
14548024e4aSbellard    2003, 2004 Free Software Foundation, Inc.
14648024e4aSbellard 
14748024e4aSbellard    This file is part of GDB, GAS, and the GNU binutils.
14848024e4aSbellard 
14948024e4aSbellard    GDB, GAS, and the GNU binutils are free software; you can redistribute
15048024e4aSbellard    them and/or modify them under the terms of the GNU General Public
15148024e4aSbellard    License as published by the Free Software Foundation; either version
15248024e4aSbellard    1, or (at your option) any later version.
15348024e4aSbellard 
15448024e4aSbellard    GDB, GAS, and the GNU binutils are distributed in the hope that they
15548024e4aSbellard    will be useful, but WITHOUT ANY WARRANTY; without even the implied
15648024e4aSbellard    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
15748024e4aSbellard    the GNU General Public License for more details.
15848024e4aSbellard 
15948024e4aSbellard    You should have received a copy of the GNU General Public License
1608167ee88SBlue Swirl    along with this file; see the file COPYING.  If not,
1618167ee88SBlue Swirl    see <http://www.gnu.org/licenses/>.  */
16248024e4aSbellard 
16348024e4aSbellard /* These are used as bit flags for the arch field in the m68k_opcode
16448024e4aSbellard    structure.  */
16548024e4aSbellard #define	_m68k_undef  0
16648024e4aSbellard #define	m68000   0x001
16748024e4aSbellard #define	m68008   m68000 /* Synonym for -m68000.  otherwise unused.  */
16848024e4aSbellard #define	m68010   0x002
16948024e4aSbellard #define	m68020   0x004
17048024e4aSbellard #define	m68030   0x008
17148024e4aSbellard #define m68ec030 m68030 /* Similar enough to -m68030 to ignore differences;
17248024e4aSbellard 			   gas will deal with the few differences.  */
17348024e4aSbellard #define	m68040   0x010
17448024e4aSbellard /* There is no 68050.  */
17548024e4aSbellard #define m68060   0x020
17648024e4aSbellard #define	m68881   0x040
17748024e4aSbellard #define	m68882   m68881 /* Synonym for -m68881.  otherwise unused.  */
17848024e4aSbellard #define	m68851   0x080
17948024e4aSbellard #define cpu32	 0x100		/* e.g., 68332 */
18048024e4aSbellard 
18148024e4aSbellard #define mcfmac   0x200		/* ColdFire MAC. */
18248024e4aSbellard #define mcfemac  0x400		/* ColdFire EMAC. */
18348024e4aSbellard #define cfloat   0x800		/* ColdFire FPU.  */
18448024e4aSbellard #define mcfhwdiv 0x1000		/* ColdFire hardware divide.  */
18548024e4aSbellard 
18648024e4aSbellard #define mcfisa_a 0x2000		/* ColdFire ISA_A.  */
18748024e4aSbellard #define mcfisa_aa 0x4000	/* ColdFire ISA_A+.  */
18848024e4aSbellard #define mcfisa_b 0x8000		/* ColdFire ISA_B.  */
18948024e4aSbellard #define mcfusp   0x10000	/* ColdFire USP instructions.  */
19048024e4aSbellard 
19148024e4aSbellard #define mcf5200  0x20000
19248024e4aSbellard #define mcf5206e 0x40000
19348024e4aSbellard #define mcf521x  0x80000
19448024e4aSbellard #define mcf5249  0x100000
19548024e4aSbellard #define mcf528x  0x200000
19648024e4aSbellard #define mcf5307  0x400000
19748024e4aSbellard #define mcf5407  0x800000
19848024e4aSbellard #define mcf5470  0x1000000
19948024e4aSbellard #define mcf5480  0x2000000
20048024e4aSbellard 
20148024e4aSbellard  /* Handy aliases.  */
20248024e4aSbellard #define	m68040up   (m68040 | m68060)
20348024e4aSbellard #define	m68030up   (m68030 | m68040up)
20448024e4aSbellard #define	m68020up   (m68020 | m68030up)
20548024e4aSbellard #define	m68010up   (m68010 | cpu32 | m68020up)
20648024e4aSbellard #define	m68000up   (m68000 | m68010up)
20748024e4aSbellard 
20848024e4aSbellard #define	mfloat  (m68881 | m68882 | m68040 | m68060)
20948024e4aSbellard #define	mmmu    (m68851 | m68030 | m68040 | m68060)
21048024e4aSbellard 
21148024e4aSbellard /* The structure used to hold information for an opcode.  */
21248024e4aSbellard 
21348024e4aSbellard struct m68k_opcode
21448024e4aSbellard {
21548024e4aSbellard   /* The opcode name.  */
21648024e4aSbellard   const char *name;
21748024e4aSbellard   /* The pseudo-size of the instruction(in bytes).  Used to determine
21848024e4aSbellard      number of bytes necessary to disassemble the instruction.  */
21948024e4aSbellard   unsigned int size;
22048024e4aSbellard   /* The opcode itself.  */
22148024e4aSbellard   unsigned long opcode;
22248024e4aSbellard   /* The mask used by the disassembler.  */
22348024e4aSbellard   unsigned long match;
22448024e4aSbellard   /* The arguments.  */
22548024e4aSbellard   const char *args;
22648024e4aSbellard   /* The architectures which support this opcode.  */
22748024e4aSbellard   unsigned int arch;
22848024e4aSbellard };
22948024e4aSbellard 
23048024e4aSbellard /* The structure used to hold information for an opcode alias.  */
23148024e4aSbellard 
23248024e4aSbellard struct m68k_opcode_alias
23348024e4aSbellard {
23448024e4aSbellard   /* The alias name.  */
23548024e4aSbellard   const char *alias;
23648024e4aSbellard   /* The instruction for which this is an alias.  */
23748024e4aSbellard   const char *primary;
23848024e4aSbellard };
23948024e4aSbellard 
24048024e4aSbellard /* We store four bytes of opcode for all opcodes because that is the
24148024e4aSbellard    most any of them need.  The actual length of an instruction is
24248024e4aSbellard    always at least 2 bytes, and is as much longer as necessary to hold
24348024e4aSbellard    the operands it has.
24448024e4aSbellard 
24548024e4aSbellard    The match field is a mask saying which bits must match particular
24648024e4aSbellard    opcode in order for an instruction to be an instance of that
24748024e4aSbellard    opcode.
24848024e4aSbellard 
24948024e4aSbellard    The args field is a string containing two characters for each
25048024e4aSbellard    operand of the instruction.  The first specifies the kind of
25148024e4aSbellard    operand; the second, the place it is stored.  */
25248024e4aSbellard 
25348024e4aSbellard /* Kinds of operands:
25448024e4aSbellard    Characters used: AaBbCcDdEeFfGgHIiJkLlMmnOopQqRrSsTtU VvWwXxYyZz01234|*~%;@!&$?/<>#^+-
25548024e4aSbellard 
25648024e4aSbellard    D  data register only.  Stored as 3 bits.
25748024e4aSbellard    A  address register only.  Stored as 3 bits.
25848024e4aSbellard    a  address register indirect only.  Stored as 3 bits.
25948024e4aSbellard    R  either kind of register.  Stored as 4 bits.
26048024e4aSbellard    r  either kind of register indirect only.  Stored as 4 bits.
26148024e4aSbellard       At the moment, used only for cas2 instruction.
26248024e4aSbellard    F  floating point coprocessor register only.   Stored as 3 bits.
26348024e4aSbellard    O  an offset (or width): immediate data 0-31 or data register.
26448024e4aSbellard       Stored as 6 bits in special format for BF... insns.
26548024e4aSbellard    +  autoincrement only.  Stored as 3 bits (number of the address register).
26648024e4aSbellard    -  autodecrement only.  Stored as 3 bits (number of the address register).
26748024e4aSbellard    Q  quick immediate data.  Stored as 3 bits.
26848024e4aSbellard       This matches an immediate operand only when value is in range 1 .. 8.
26948024e4aSbellard    M  moveq immediate data.  Stored as 8 bits.
27048024e4aSbellard       This matches an immediate operand only when value is in range -128..127
27148024e4aSbellard    T  trap vector immediate data.  Stored as 4 bits.
27248024e4aSbellard 
27348024e4aSbellard    k  K-factor for fmove.p instruction.   Stored as a 7-bit constant or
27448024e4aSbellard       a three bit register offset, depending on the field type.
27548024e4aSbellard 
27648024e4aSbellard    #  immediate data.  Stored in special places (b, w or l)
27748024e4aSbellard       which say how many bits to store.
27848024e4aSbellard    ^  immediate data for floating point instructions.   Special places
27948024e4aSbellard       are offset by 2 bytes from '#'...
28048024e4aSbellard    B  pc-relative address, converted to an offset
28148024e4aSbellard       that is treated as immediate data.
28248024e4aSbellard    d  displacement and register.  Stores the register as 3 bits
28348024e4aSbellard       and stores the displacement in the entire second word.
28448024e4aSbellard 
28548024e4aSbellard    C  the CCR.  No need to store it; this is just for filtering validity.
28648024e4aSbellard    S  the SR.  No need to store, just as with CCR.
28748024e4aSbellard    U  the USP.  No need to store, just as with CCR.
28848024e4aSbellard    E  the MAC ACC.  No need to store, just as with CCR.
28948024e4aSbellard    e  the EMAC ACC[0123].
29048024e4aSbellard    G  the MAC/EMAC MACSR.  No need to store, just as with CCR.
29148024e4aSbellard    g  the EMAC ACCEXT{01,23}.
29248024e4aSbellard    H  the MASK.  No need to store, just as with CCR.
29348024e4aSbellard    i  the MAC/EMAC scale factor.
29448024e4aSbellard 
29548024e4aSbellard    I  Coprocessor ID.   Not printed if 1.   The Coprocessor ID is always
29648024e4aSbellard       extracted from the 'd' field of word one, which means that an extended
29748024e4aSbellard       coprocessor opcode can be skipped using the 'i' place, if needed.
29848024e4aSbellard 
29948024e4aSbellard    s  System Control register for the floating point coprocessor.
30048024e4aSbellard 
30148024e4aSbellard    J  Misc register for movec instruction, stored in 'j' format.
30248024e4aSbellard 	Possible values:
30348024e4aSbellard 	0x000	SFC	Source Function Code reg	[60, 40, 30, 20, 10]
30448024e4aSbellard 	0x001	DFC	Data Function Code reg		[60, 40, 30, 20, 10]
30548024e4aSbellard 	0x002   CACR    Cache Control Register          [60, 40, 30, 20, mcf]
30648024e4aSbellard 	0x003	TC	MMU Translation Control		[60, 40]
30748024e4aSbellard 	0x004	ITT0	Instruction Transparent
30848024e4aSbellard 				Translation reg 0	[60, 40]
30948024e4aSbellard 	0x005	ITT1	Instruction Transparent
31048024e4aSbellard 				Translation reg 1	[60, 40]
31148024e4aSbellard 	0x006	DTT0	Data Transparent
31248024e4aSbellard 				Translation reg 0	[60, 40]
31348024e4aSbellard 	0x007	DTT1	Data Transparent
31448024e4aSbellard 				Translation reg 1	[60, 40]
31548024e4aSbellard 	0x008	BUSCR	Bus Control Register		[60]
31648024e4aSbellard 	0x800	USP	User Stack Pointer		[60, 40, 30, 20, 10]
31748024e4aSbellard         0x801   VBR     Vector Base reg                 [60, 40, 30, 20, 10, mcf]
31848024e4aSbellard 	0x802	CAAR	Cache Address Register		[        30, 20]
31948024e4aSbellard 	0x803	MSP	Master Stack Pointer		[    40, 30, 20]
32048024e4aSbellard 	0x804	ISP	Interrupt Stack Pointer		[    40, 30, 20]
32148024e4aSbellard 	0x805	MMUSR	MMU Status reg			[    40]
32248024e4aSbellard 	0x806	URP	User Root Pointer		[60, 40]
32348024e4aSbellard 	0x807	SRP	Supervisor Root Pointer		[60, 40]
32448024e4aSbellard 	0x808	PCR	Processor Configuration reg	[60]
32548024e4aSbellard 	0xC00	ROMBAR	ROM Base Address Register	[520X]
32648024e4aSbellard 	0xC04	RAMBAR0	RAM Base Address Register 0	[520X]
32748024e4aSbellard 	0xC05	RAMBAR1	RAM Base Address Register 0	[520X]
32848024e4aSbellard 	0xC0F	MBAR0	RAM Base Address Register 0	[520X]
32948024e4aSbellard         0xC04   FLASHBAR FLASH Base Address Register    [mcf528x]
33048024e4aSbellard         0xC05   RAMBAR  Static RAM Base Address Register [mcf528x]
33148024e4aSbellard 
33248024e4aSbellard     L  Register list of the type d0-d7/a0-a7 etc.
33348024e4aSbellard        (New!  Improved!  Can also hold fp0-fp7, as well!)
33448024e4aSbellard        The assembler tries to see if the registers match the insn by
33548024e4aSbellard        looking at where the insn wants them stored.
33648024e4aSbellard 
33748024e4aSbellard     l  Register list like L, but with all the bits reversed.
33848024e4aSbellard        Used for going the other way. . .
33948024e4aSbellard 
34048024e4aSbellard     c  cache identifier which may be "nc" for no cache, "ic"
34148024e4aSbellard        for instruction cache, "dc" for data cache, or "bc"
34248024e4aSbellard        for both caches.  Used in cinv and cpush.  Always
34348024e4aSbellard        stored in position "d".
34448024e4aSbellard 
34548024e4aSbellard     u  Any register, with ``upper'' or ``lower'' specification.  Used
34648024e4aSbellard        in the mac instructions with size word.
34748024e4aSbellard 
34848024e4aSbellard  The remainder are all stored as 6 bits using an address mode and a
34948024e4aSbellard  register number; they differ in which addressing modes they match.
35048024e4aSbellard 
35148024e4aSbellard    *  all					(modes 0-6,7.0-4)
35248024e4aSbellard    ~  alterable memory				(modes 2-6,7.0,7.1)
35348024e4aSbellard 						(not 0,1,7.2-4)
35448024e4aSbellard    %  alterable					(modes 0-6,7.0,7.1)
35548024e4aSbellard 						(not 7.2-4)
35648024e4aSbellard    ;  data					(modes 0,2-6,7.0-4)
35748024e4aSbellard 						(not 1)
35848024e4aSbellard    @  data, but not immediate			(modes 0,2-6,7.0-3)
35948024e4aSbellard 						(not 1,7.4)
36048024e4aSbellard    !  control					(modes 2,5,6,7.0-3)
36148024e4aSbellard 						(not 0,1,3,4,7.4)
36248024e4aSbellard    &  alterable control				(modes 2,5,6,7.0,7.1)
36348024e4aSbellard 						(not 0,1,3,4,7.2-4)
36448024e4aSbellard    $  alterable data				(modes 0,2-6,7.0,7.1)
36548024e4aSbellard 						(not 1,7.2-4)
36648024e4aSbellard    ?  alterable control, or data register	(modes 0,2,5,6,7.0,7.1)
36748024e4aSbellard 						(not 1,3,4,7.2-4)
36848024e4aSbellard    /  control, or data register			(modes 0,2,5,6,7.0-3)
36948024e4aSbellard 						(not 1,3,4,7.4)
37048024e4aSbellard    >  *save operands				(modes 2,4,5,6,7.0,7.1)
37148024e4aSbellard 						(not 0,1,3,7.2-4)
37248024e4aSbellard    <  *restore operands				(modes 2,3,5,6,7.0-3)
37348024e4aSbellard 						(not 0,1,4,7.4)
37448024e4aSbellard 
37548024e4aSbellard    coldfire move operands:
37648024e4aSbellard    m  						(modes 0-4)
37748024e4aSbellard    n						(modes 5,7.2)
37848024e4aSbellard    o						(modes 6,7.0,7.1,7.3,7.4)
37948024e4aSbellard    p						(modes 0-5)
38048024e4aSbellard 
38148024e4aSbellard    coldfire bset/bclr/btst/mulsl/mulul operands:
38248024e4aSbellard    q						(modes 0,2-5)
38348024e4aSbellard    v						(modes 0,2-5,7.0,7.1)
38448024e4aSbellard    b                                            (modes 0,2-5,7.2)
38548024e4aSbellard    w                                            (modes 2-5,7.2)
38648024e4aSbellard    y						(modes 2,5)
38748024e4aSbellard    z						(modes 2,5,7.2)
38848024e4aSbellard    x  mov3q immediate operand.
38948024e4aSbellard    4						(modes 2,3,4,5)
39048024e4aSbellard   */
39148024e4aSbellard 
39248024e4aSbellard /* For the 68851:  */
39348024e4aSbellard /* I didn't use much imagination in choosing the
39448024e4aSbellard    following codes, so many of them aren't very
39548024e4aSbellard    mnemonic. -rab
39648024e4aSbellard 
39748024e4aSbellard    0  32 bit pmmu register
39848024e4aSbellard 	Possible values:
39948024e4aSbellard 	000	TC	Translation Control Register (68030, 68851)
40048024e4aSbellard 
40148024e4aSbellard    1  16 bit pmmu register
40248024e4aSbellard 	111	AC	Access Control (68851)
40348024e4aSbellard 
40448024e4aSbellard    2  8 bit pmmu register
40548024e4aSbellard 	100	CAL	Current Access Level (68851)
40648024e4aSbellard 	101	VAL	Validate Access Level (68851)
40748024e4aSbellard 	110	SCC	Stack Change Control (68851)
40848024e4aSbellard 
40948024e4aSbellard    3  68030-only pmmu registers (32 bit)
41048024e4aSbellard 	010	TT0	Transparent Translation reg 0
41148024e4aSbellard 			(aka Access Control reg 0 -- AC0 -- on 68ec030)
41248024e4aSbellard 	011	TT1	Transparent Translation reg 1
41348024e4aSbellard 			(aka Access Control reg 1 -- AC1 -- on 68ec030)
41448024e4aSbellard 
41548024e4aSbellard    W  wide pmmu registers
41648024e4aSbellard 	Possible values:
41748024e4aSbellard 	001	DRP	Dma Root Pointer (68851)
41848024e4aSbellard 	010	SRP	Supervisor Root Pointer (68030, 68851)
41948024e4aSbellard 	011	CRP	Cpu Root Pointer (68030, 68851)
42048024e4aSbellard 
42148024e4aSbellard    f	function code register (68030, 68851)
42248024e4aSbellard 	0	SFC
42348024e4aSbellard 	1	DFC
42448024e4aSbellard 
42548024e4aSbellard    V	VAL register only (68851)
42648024e4aSbellard 
42748024e4aSbellard    X	BADx, BACx (16 bit)
42848024e4aSbellard 	100	BAD	Breakpoint Acknowledge Data (68851)
42948024e4aSbellard 	101	BAC	Breakpoint Acknowledge Control (68851)
43048024e4aSbellard 
43148024e4aSbellard    Y	PSR (68851) (MMUSR on 68030) (ACUSR on 68ec030)
43248024e4aSbellard    Z	PCSR (68851)
43348024e4aSbellard 
43448024e4aSbellard    |	memory 		(modes 2-6, 7.*)
43548024e4aSbellard 
43648024e4aSbellard    t  address test level (68030 only)
43748024e4aSbellard       Stored as 3 bits, range 0-7.
43848024e4aSbellard       Also used for breakpoint instruction now.
43948024e4aSbellard 
44048024e4aSbellard */
44148024e4aSbellard 
44248024e4aSbellard /* Places to put an operand, for non-general operands:
44348024e4aSbellard    Characters used: BbCcDdFfGgHhIijkLlMmNnostWw123456789/
44448024e4aSbellard 
44548024e4aSbellard    s  source, low bits of first word.
44648024e4aSbellard    d  dest, shifted 9 in first word
44748024e4aSbellard    1  second word, shifted 12
44848024e4aSbellard    2  second word, shifted 6
44948024e4aSbellard    3  second word, shifted 0
45048024e4aSbellard    4  third word, shifted 12
45148024e4aSbellard    5  third word, shifted 6
45248024e4aSbellard    6  third word, shifted 0
45348024e4aSbellard    7  second word, shifted 7
45448024e4aSbellard    8  second word, shifted 10
45548024e4aSbellard    9  second word, shifted 5
45648024e4aSbellard    D  store in both place 1 and place 3; for divul and divsl.
45748024e4aSbellard    B  first word, low byte, for branch displacements
45848024e4aSbellard    W  second word (entire), for branch displacements
45948024e4aSbellard    L  second and third words (entire), for branch displacements
46048024e4aSbellard       (also overloaded for move16)
46148024e4aSbellard    b  second word, low byte
46248024e4aSbellard    w  second word (entire) [variable word/long branch offset for dbra]
46348024e4aSbellard    W  second word (entire) (must be signed 16 bit value)
46448024e4aSbellard    l  second and third word (entire)
46548024e4aSbellard    g  variable branch offset for bra and similar instructions.
46648024e4aSbellard       The place to store depends on the magnitude of offset.
46748024e4aSbellard    t  store in both place 7 and place 8; for floating point operations
46848024e4aSbellard    c  branch offset for cpBcc operations.
46948024e4aSbellard       The place to store is word two if bit six of word one is zero,
47048024e4aSbellard       and words two and three if bit six of word one is one.
47148024e4aSbellard    i  Increment by two, to skip over coprocessor extended operands.   Only
47248024e4aSbellard       works with the 'I' format.
47348024e4aSbellard    k  Dynamic K-factor field.   Bits 6-4 of word 2, used as a register number.
47448024e4aSbellard       Also used for dynamic fmovem instruction.
47548024e4aSbellard    C  floating point coprocessor constant - 7 bits.  Also used for static
47648024e4aSbellard       K-factors...
47748024e4aSbellard    j  Movec register #, stored in 12 low bits of second word.
47848024e4aSbellard    m  For M[S]ACx; 4 bits split with MSB shifted 6 bits in first word
47948024e4aSbellard       and remaining 3 bits of register shifted 9 bits in first word.
48048024e4aSbellard       Indicate upper/lower in 1 bit shifted 7 bits in second word.
48148024e4aSbellard       Use with `R' or `u' format.
4822dbb1308Szhaolichang    n  `m' without upper/lower indication. (For M[S]ACx; 4 bits split
48348024e4aSbellard       with MSB shifted 6 bits in first word and remaining 3 bits of
48448024e4aSbellard       register shifted 9 bits in first word.  No upper/lower
48548024e4aSbellard       indication is done.)  Use with `R' or `u' format.
48648024e4aSbellard    o  For M[S]ACw; 4 bits shifted 12 in second word (like `1').
48748024e4aSbellard       Indicate upper/lower in 1 bit shifted 7 bits in second word.
48848024e4aSbellard       Use with `R' or `u' format.
48948024e4aSbellard    M  For M[S]ACw; 4 bits in low bits of first word.  Indicate
49048024e4aSbellard       upper/lower in 1 bit shifted 6 bits in second word.  Use with
49148024e4aSbellard       `R' or `u' format.
49248024e4aSbellard    N  For M[S]ACw; 4 bits in low bits of second word.  Indicate
49348024e4aSbellard       upper/lower in 1 bit shifted 6 bits in second word.  Use with
49448024e4aSbellard       `R' or `u' format.
49548024e4aSbellard    h  shift indicator (scale factor), 1 bit shifted 10 in second word
49648024e4aSbellard 
49748024e4aSbellard  Places to put operand, for general operands:
49848024e4aSbellard    d  destination, shifted 6 bits in first word
49948024e4aSbellard    b  source, at low bit of first word, and immediate uses one byte
50048024e4aSbellard    w  source, at low bit of first word, and immediate uses two bytes
50148024e4aSbellard    l  source, at low bit of first word, and immediate uses four bytes
50248024e4aSbellard    s  source, at low bit of first word.
50348024e4aSbellard       Used sometimes in contexts where immediate is not allowed anyway.
50448024e4aSbellard    f  single precision float, low bit of 1st word, immediate uses 4 bytes
50548024e4aSbellard    F  double precision float, low bit of 1st word, immediate uses 8 bytes
50648024e4aSbellard    x  extended precision float, low bit of 1st word, immediate uses 12 bytes
50748024e4aSbellard    p  packed float, low bit of 1st word, immediate uses 12 bytes
50848024e4aSbellard    G  EMAC accumulator, load  (bit 4 2nd word, !bit8 first word)
50948024e4aSbellard    H  EMAC accumulator, non load  (bit 4 2nd word, bit 8 first word)
51048024e4aSbellard    F  EMAC ACCx
51148024e4aSbellard    f  EMAC ACCy
51248024e4aSbellard    I  MAC/EMAC scale factor
51348024e4aSbellard    /  Like 's', but set 2nd word, bit 5 if trailing_ampersand set
51448024e4aSbellard    ]  first word, bit 10
51548024e4aSbellard */
51648024e4aSbellard 
51748024e4aSbellard extern const struct m68k_opcode m68k_opcodes[];
51848024e4aSbellard extern const struct m68k_opcode_alias m68k_opcode_aliases[];
51948024e4aSbellard 
52048024e4aSbellard extern const int m68k_numopcodes, m68k_numaliases;
52148024e4aSbellard 
52248024e4aSbellard /* **** End of m68k-opcode.h */
52348024e4aSbellard /* **** m68k-dis.c from sourceware.org CVS 2005-08-14.  */
52448024e4aSbellard /* Print Motorola 68k instructions.
52548024e4aSbellard    Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
52648024e4aSbellard    1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
52748024e4aSbellard    Free Software Foundation, Inc.
52848024e4aSbellard 
52948024e4aSbellard    This file is free software; you can redistribute it and/or modify
53048024e4aSbellard    it under the terms of the GNU General Public License as published by
53148024e4aSbellard    the Free Software Foundation; either version 2 of the License, or
53248024e4aSbellard    (at your option) any later version.
53348024e4aSbellard 
53448024e4aSbellard    This program is distributed in the hope that it will be useful,
53548024e4aSbellard    but WITHOUT ANY WARRANTY; without even the implied warranty of
53648024e4aSbellard    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
53748024e4aSbellard    GNU General Public License for more details.
53848024e4aSbellard 
53948024e4aSbellard    You should have received a copy of the GNU General Public License
5408167ee88SBlue Swirl    along with this program; if not, see <http://www.gnu.org/licenses/>.  */
54148024e4aSbellard 
54248024e4aSbellard /* Local function prototypes.  */
54348024e4aSbellard 
5447ccfb2ebSblueswir1 static const char * const fpcr_names[] =
54548024e4aSbellard {
54648024e4aSbellard   "", "%fpiar", "%fpsr", "%fpiar/%fpsr", "%fpcr",
54748024e4aSbellard   "%fpiar/%fpcr", "%fpsr/%fpcr", "%fpiar/%fpsr/%fpcr"
54848024e4aSbellard };
54948024e4aSbellard 
5507ccfb2ebSblueswir1 static const char *const reg_names[] =
55148024e4aSbellard {
55248024e4aSbellard   "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
55348024e4aSbellard   "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp",
55448024e4aSbellard   "%ps", "%pc"
55548024e4aSbellard };
55648024e4aSbellard 
55748024e4aSbellard /* Name of register halves for MAC/EMAC.
558aa1f17c1Sths    Separate from reg_names since 'spu', 'fpl' look weird.  */
5597ccfb2ebSblueswir1 static const char *const reg_half_names[] =
56048024e4aSbellard {
56148024e4aSbellard   "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
56248024e4aSbellard   "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7",
56348024e4aSbellard   "%ps", "%pc"
56448024e4aSbellard };
56548024e4aSbellard 
56648024e4aSbellard /* Sign-extend an (unsigned char).  */
56748024e4aSbellard #if __STDC__ == 1
56848024e4aSbellard #define COERCE_SIGNED_CHAR(ch) ((signed char) (ch))
56948024e4aSbellard #else
57048024e4aSbellard #define COERCE_SIGNED_CHAR(ch) ((int) (((ch) ^ 0x80) & 0xFF) - 128)
57148024e4aSbellard #endif
57248024e4aSbellard 
57348024e4aSbellard /* Get a 1 byte signed integer.  */
57467774a04SBlue Swirl #define NEXTBYTE(p)  (p += 2, fetch_data(info, p), COERCE_SIGNED_CHAR(p[-1]))
57548024e4aSbellard 
57648024e4aSbellard /* Get a 2 byte signed integer.  */
57748024e4aSbellard #define COERCE16(x) ((int) (((x) ^ 0x8000) - 0x8000))
57848024e4aSbellard #define NEXTWORD(p)  \
57967774a04SBlue Swirl   (p += 2, fetch_data(info, p), \
58048024e4aSbellard    COERCE16 ((p[-2] << 8) + p[-1]))
58148024e4aSbellard 
58248024e4aSbellard /* Get a 4 byte signed integer.  */
58348024e4aSbellard #define COERCE32(x) ((bfd_signed_vma) ((x) ^ 0x80000000) - 0x80000000)
58448024e4aSbellard #define NEXTLONG(p)  \
58567774a04SBlue Swirl   (p += 4, fetch_data(info, p), \
58648024e4aSbellard    (COERCE32 ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1])))
58748024e4aSbellard 
58848024e4aSbellard /* Get a 4 byte unsigned integer.  */
58948024e4aSbellard #define NEXTULONG(p)  \
59067774a04SBlue Swirl   (p += 4, fetch_data(info, p), \
59148024e4aSbellard    (unsigned int) ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1]))
59248024e4aSbellard 
59348024e4aSbellard /* Get a single precision float.  */
59448024e4aSbellard #define NEXTSINGLE(val, p) \
59567774a04SBlue Swirl   (p += 4, fetch_data(info, p), \
59648024e4aSbellard    floatformat_to_double (&floatformat_ieee_single_big, (char *) p - 4, &val))
59748024e4aSbellard 
59848024e4aSbellard /* Get a double precision float.  */
59948024e4aSbellard #define NEXTDOUBLE(val, p) \
60067774a04SBlue Swirl   (p += 8, fetch_data(info, p), \
60148024e4aSbellard    floatformat_to_double (&floatformat_ieee_double_big, (char *) p - 8, &val))
60248024e4aSbellard 
60348024e4aSbellard /* Get an extended precision float.  */
60448024e4aSbellard #define NEXTEXTEND(val, p) \
60567774a04SBlue Swirl   (p += 12, fetch_data(info, p), \
60648024e4aSbellard    floatformat_to_double (&floatformat_m68881_ext, (char *) p - 12, &val))
60748024e4aSbellard 
60848024e4aSbellard /* Need a function to convert from packed to double
60948024e4aSbellard    precision.   Actually, it's easier to print a
61048024e4aSbellard    packed number than a double anyway, so maybe
61148024e4aSbellard    there should be a special case to handle this... */
61248024e4aSbellard #define NEXTPACKED(p) \
61367774a04SBlue Swirl   (p += 12, fetch_data(info, p), 0.0)
61448024e4aSbellard 
61548024e4aSbellard /* Maximum length of an instruction.  */
61648024e4aSbellard #define MAXLEN 22
61748024e4aSbellard 
61848024e4aSbellard struct private
61948024e4aSbellard {
62048024e4aSbellard   /* Points to first byte not fetched.  */
62148024e4aSbellard   bfd_byte *max_fetched;
62248024e4aSbellard   bfd_byte the_buffer[MAXLEN];
62348024e4aSbellard   bfd_vma insn_start;
6246ab7e546SPeter Maydell   sigjmp_buf bailout;
62548024e4aSbellard };
62648024e4aSbellard 
62748024e4aSbellard /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
62848024e4aSbellard    to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
62948024e4aSbellard    on error.  */
63048024e4aSbellard static int
fetch_data2(struct disassemble_info * info,bfd_byte * addr)63167774a04SBlue Swirl fetch_data2(struct disassemble_info *info, bfd_byte *addr)
63248024e4aSbellard {
63348024e4aSbellard   int status;
63448024e4aSbellard   struct private *priv = (struct private *)info->private_data;
63548024e4aSbellard   bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
63648024e4aSbellard 
63748024e4aSbellard   status = (*info->read_memory_func) (start,
63848024e4aSbellard 				      priv->max_fetched,
63948024e4aSbellard 				      addr - priv->max_fetched,
64048024e4aSbellard 				      info);
64148024e4aSbellard   if (status != 0)
64248024e4aSbellard     {
64348024e4aSbellard       (*info->memory_error_func) (status, start, info);
6446ab7e546SPeter Maydell       siglongjmp(priv->bailout, 1);
64548024e4aSbellard     }
64648024e4aSbellard   else
64748024e4aSbellard     priv->max_fetched = addr;
64848024e4aSbellard   return 1;
64948024e4aSbellard }
65067774a04SBlue Swirl 
65167774a04SBlue Swirl static int
fetch_data(struct disassemble_info * info,bfd_byte * addr)65267774a04SBlue Swirl fetch_data(struct disassemble_info *info, bfd_byte *addr)
65367774a04SBlue Swirl {
65467774a04SBlue Swirl     if (addr <= ((struct private *) (info->private_data))->max_fetched) {
65567774a04SBlue Swirl         return 1;
65667774a04SBlue Swirl     } else {
65767774a04SBlue Swirl         return fetch_data2(info, addr);
65867774a04SBlue Swirl     }
65967774a04SBlue Swirl }
66067774a04SBlue Swirl 
66148024e4aSbellard /* This function is used to print to the bit-bucket.  */
66248024e4aSbellard static int
dummy_printer(FILE * file ATTRIBUTE_UNUSED,const char * format ATTRIBUTE_UNUSED,...)66348024e4aSbellard dummy_printer (FILE *file ATTRIBUTE_UNUSED,
66448024e4aSbellard 	       const char *format ATTRIBUTE_UNUSED,
66548024e4aSbellard 	       ...)
66648024e4aSbellard {
66748024e4aSbellard   return 0;
66848024e4aSbellard }
66948024e4aSbellard 
67048024e4aSbellard static void
dummy_print_address(bfd_vma vma ATTRIBUTE_UNUSED,struct disassemble_info * info ATTRIBUTE_UNUSED)67148024e4aSbellard dummy_print_address (bfd_vma vma ATTRIBUTE_UNUSED,
67248024e4aSbellard 		     struct disassemble_info *info ATTRIBUTE_UNUSED)
67348024e4aSbellard {
67448024e4aSbellard }
67548024e4aSbellard 
67648024e4aSbellard /* Fetch BITS bits from a position in the instruction specified by CODE.
67748024e4aSbellard    CODE is a "place to put an argument", or 'x' for a destination
67848024e4aSbellard    that is a general address (mode and register).
67948024e4aSbellard    BUFFER contains the instruction.  */
68048024e4aSbellard 
68148024e4aSbellard static int
fetch_arg(unsigned char * buffer,int code,int bits,disassemble_info * info)68248024e4aSbellard fetch_arg (unsigned char *buffer,
68348024e4aSbellard 	   int code,
68448024e4aSbellard 	   int bits,
68548024e4aSbellard 	   disassemble_info *info)
68648024e4aSbellard {
68748024e4aSbellard   int val = 0;
68848024e4aSbellard 
68948024e4aSbellard   switch (code)
69048024e4aSbellard     {
69148024e4aSbellard     case '/': /* MAC/EMAC mask bit.  */
69248024e4aSbellard       val = buffer[3] >> 5;
69348024e4aSbellard       break;
69448024e4aSbellard 
69548024e4aSbellard     case 'G': /* EMAC ACC load.  */
69648024e4aSbellard       val = ((buffer[3] >> 3) & 0x2) | ((~buffer[1] >> 7) & 0x1);
69748024e4aSbellard       break;
69848024e4aSbellard 
69948024e4aSbellard     case 'H': /* EMAC ACC !load.  */
70048024e4aSbellard       val = ((buffer[3] >> 3) & 0x2) | ((buffer[1] >> 7) & 0x1);
70148024e4aSbellard       break;
70248024e4aSbellard 
70348024e4aSbellard     case ']': /* EMAC ACCEXT bit.  */
70448024e4aSbellard       val = buffer[0] >> 2;
70548024e4aSbellard       break;
70648024e4aSbellard 
70748024e4aSbellard     case 'I': /* MAC/EMAC scale factor.  */
70848024e4aSbellard       val = buffer[2] >> 1;
70948024e4aSbellard       break;
71048024e4aSbellard 
71148024e4aSbellard     case 'F': /* EMAC ACCx.  */
71248024e4aSbellard       val = buffer[0] >> 1;
71348024e4aSbellard       break;
71448024e4aSbellard 
71548024e4aSbellard     case 'f':
71648024e4aSbellard       val = buffer[1];
71748024e4aSbellard       break;
71848024e4aSbellard 
71948024e4aSbellard     case 's':
72048024e4aSbellard       val = buffer[1];
72148024e4aSbellard       break;
72248024e4aSbellard 
72348024e4aSbellard     case 'd':			/* Destination, for register or quick.  */
72448024e4aSbellard       val = (buffer[0] << 8) + buffer[1];
72548024e4aSbellard       val >>= 9;
72648024e4aSbellard       break;
72748024e4aSbellard 
72848024e4aSbellard     case 'x':			/* Destination, for general arg.  */
72948024e4aSbellard       val = (buffer[0] << 8) + buffer[1];
73048024e4aSbellard       val >>= 6;
73148024e4aSbellard       break;
73248024e4aSbellard 
73348024e4aSbellard     case 'k':
73467774a04SBlue Swirl       fetch_data(info, buffer + 3);
73548024e4aSbellard       val = (buffer[3] >> 4);
73648024e4aSbellard       break;
73748024e4aSbellard 
73848024e4aSbellard     case 'C':
73967774a04SBlue Swirl       fetch_data(info, buffer + 3);
74048024e4aSbellard       val = buffer[3];
74148024e4aSbellard       break;
74248024e4aSbellard 
74348024e4aSbellard     case '1':
74467774a04SBlue Swirl       fetch_data(info, buffer + 3);
74548024e4aSbellard       val = (buffer[2] << 8) + buffer[3];
74648024e4aSbellard       val >>= 12;
74748024e4aSbellard       break;
74848024e4aSbellard 
74948024e4aSbellard     case '2':
75067774a04SBlue Swirl       fetch_data(info, buffer + 3);
75148024e4aSbellard       val = (buffer[2] << 8) + buffer[3];
75248024e4aSbellard       val >>= 6;
75348024e4aSbellard       break;
75448024e4aSbellard 
75548024e4aSbellard     case '3':
75648024e4aSbellard     case 'j':
75767774a04SBlue Swirl       fetch_data(info, buffer + 3);
75848024e4aSbellard       val = (buffer[2] << 8) + buffer[3];
75948024e4aSbellard       break;
76048024e4aSbellard 
76148024e4aSbellard     case '4':
76267774a04SBlue Swirl       fetch_data(info, buffer + 5);
76348024e4aSbellard       val = (buffer[4] << 8) + buffer[5];
76448024e4aSbellard       val >>= 12;
76548024e4aSbellard       break;
76648024e4aSbellard 
76748024e4aSbellard     case '5':
76867774a04SBlue Swirl       fetch_data(info, buffer + 5);
76948024e4aSbellard       val = (buffer[4] << 8) + buffer[5];
77048024e4aSbellard       val >>= 6;
77148024e4aSbellard       break;
77248024e4aSbellard 
77348024e4aSbellard     case '6':
77467774a04SBlue Swirl       fetch_data(info, buffer + 5);
77548024e4aSbellard       val = (buffer[4] << 8) + buffer[5];
77648024e4aSbellard       break;
77748024e4aSbellard 
77848024e4aSbellard     case '7':
77967774a04SBlue Swirl       fetch_data(info, buffer + 3);
78048024e4aSbellard       val = (buffer[2] << 8) + buffer[3];
78148024e4aSbellard       val >>= 7;
78248024e4aSbellard       break;
78348024e4aSbellard 
78448024e4aSbellard     case '8':
78567774a04SBlue Swirl       fetch_data(info, buffer + 3);
78648024e4aSbellard       val = (buffer[2] << 8) + buffer[3];
78748024e4aSbellard       val >>= 10;
78848024e4aSbellard       break;
78948024e4aSbellard 
79048024e4aSbellard     case '9':
79167774a04SBlue Swirl       fetch_data(info, buffer + 3);
79248024e4aSbellard       val = (buffer[2] << 8) + buffer[3];
79348024e4aSbellard       val >>= 5;
79448024e4aSbellard       break;
79548024e4aSbellard 
79648024e4aSbellard     case 'e':
79748024e4aSbellard       val = (buffer[1] >> 6);
79848024e4aSbellard       break;
79948024e4aSbellard 
80048024e4aSbellard     case 'm':
80148024e4aSbellard       val = (buffer[1] & 0x40 ? 0x8 : 0)
80248024e4aSbellard 	| ((buffer[0] >> 1) & 0x7)
80348024e4aSbellard 	| (buffer[3] & 0x80 ? 0x10 : 0);
80448024e4aSbellard       break;
80548024e4aSbellard 
80648024e4aSbellard     case 'n':
80748024e4aSbellard       val = (buffer[1] & 0x40 ? 0x8 : 0) | ((buffer[0] >> 1) & 0x7);
80848024e4aSbellard       break;
80948024e4aSbellard 
81048024e4aSbellard     case 'o':
81148024e4aSbellard       val = (buffer[2] >> 4) | (buffer[3] & 0x80 ? 0x10 : 0);
81248024e4aSbellard       break;
81348024e4aSbellard 
81448024e4aSbellard     case 'M':
81548024e4aSbellard       val = (buffer[1] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0);
81648024e4aSbellard       break;
81748024e4aSbellard 
81848024e4aSbellard     case 'N':
81948024e4aSbellard       val = (buffer[3] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0);
82048024e4aSbellard       break;
82148024e4aSbellard 
82248024e4aSbellard     case 'h':
82348024e4aSbellard       val = buffer[2] >> 2;
82448024e4aSbellard       break;
82548024e4aSbellard 
82648024e4aSbellard     default:
82748024e4aSbellard       abort ();
82848024e4aSbellard     }
82948024e4aSbellard 
83048024e4aSbellard   switch (bits)
83148024e4aSbellard     {
83248024e4aSbellard     case 1:
83348024e4aSbellard       return val & 1;
83448024e4aSbellard     case 2:
83548024e4aSbellard       return val & 3;
83648024e4aSbellard     case 3:
83748024e4aSbellard       return val & 7;
83848024e4aSbellard     case 4:
83948024e4aSbellard       return val & 017;
84048024e4aSbellard     case 5:
84148024e4aSbellard       return val & 037;
84248024e4aSbellard     case 6:
84348024e4aSbellard       return val & 077;
84448024e4aSbellard     case 7:
84548024e4aSbellard       return val & 0177;
84648024e4aSbellard     case 8:
84748024e4aSbellard       return val & 0377;
84848024e4aSbellard     case 12:
84948024e4aSbellard       return val & 07777;
85048024e4aSbellard     default:
85148024e4aSbellard       abort ();
85248024e4aSbellard     }
85348024e4aSbellard }
85448024e4aSbellard 
85548024e4aSbellard /* Check if an EA is valid for a particular code.  This is required
85648024e4aSbellard    for the EMAC instructions since the type of source address determines
8572dbb1308Szhaolichang    if it is a EMAC-load instruction if the EA is mode 2-5, otherwise it
85848024e4aSbellard    is a non-load EMAC instruction and the bits mean register Ry.
85948024e4aSbellard    A similar case exists for the movem instructions where the register
86048024e4aSbellard    mask is interpreted differently for different EAs.  */
86148024e4aSbellard 
86248024e4aSbellard static bfd_boolean
m68k_valid_ea(char code,int val)86348024e4aSbellard m68k_valid_ea (char code, int val)
86448024e4aSbellard {
86548024e4aSbellard   int mode, mask;
86648024e4aSbellard #define M(n0,n1,n2,n3,n4,n5,n6,n70,n71,n72,n73,n74) \
86748024e4aSbellard   (n0 | n1 << 1 | n2 << 2 | n3 << 3 | n4 << 4 | n5 << 5 | n6 << 6 \
86848024e4aSbellard    | n70 << 7 | n71 << 8 | n72 << 9 | n73 << 10 | n74 << 11)
86948024e4aSbellard 
87048024e4aSbellard   switch (code)
87148024e4aSbellard     {
87248024e4aSbellard     case '*':
87348024e4aSbellard       mask = M (1,1,1,1,1,1,1,1,1,1,1,1);
87448024e4aSbellard       break;
87548024e4aSbellard     case '~':
87648024e4aSbellard       mask = M (0,0,1,1,1,1,1,1,1,0,0,0);
87748024e4aSbellard       break;
87848024e4aSbellard     case '%':
87948024e4aSbellard       mask = M (1,1,1,1,1,1,1,1,1,0,0,0);
88048024e4aSbellard       break;
88148024e4aSbellard     case ';':
88248024e4aSbellard       mask = M (1,0,1,1,1,1,1,1,1,1,1,1);
88348024e4aSbellard       break;
88448024e4aSbellard     case '@':
88548024e4aSbellard       mask = M (1,0,1,1,1,1,1,1,1,1,1,0);
88648024e4aSbellard       break;
88748024e4aSbellard     case '!':
88848024e4aSbellard       mask = M (0,0,1,0,0,1,1,1,1,1,1,0);
88948024e4aSbellard       break;
89048024e4aSbellard     case '&':
89148024e4aSbellard       mask = M (0,0,1,0,0,1,1,1,1,0,0,0);
89248024e4aSbellard       break;
89348024e4aSbellard     case '$':
89448024e4aSbellard       mask = M (1,0,1,1,1,1,1,1,1,0,0,0);
89548024e4aSbellard       break;
89648024e4aSbellard     case '?':
89748024e4aSbellard       mask = M (1,0,1,0,0,1,1,1,1,0,0,0);
89848024e4aSbellard       break;
89948024e4aSbellard     case '/':
90048024e4aSbellard       mask = M (1,0,1,0,0,1,1,1,1,1,1,0);
90148024e4aSbellard       break;
90248024e4aSbellard     case '|':
90348024e4aSbellard       mask = M (0,0,1,0,0,1,1,1,1,1,1,0);
90448024e4aSbellard       break;
90548024e4aSbellard     case '>':
90648024e4aSbellard       mask = M (0,0,1,0,1,1,1,1,1,0,0,0);
90748024e4aSbellard       break;
90848024e4aSbellard     case '<':
90948024e4aSbellard       mask = M (0,0,1,1,0,1,1,1,1,1,1,0);
91048024e4aSbellard       break;
91148024e4aSbellard     case 'm':
91248024e4aSbellard       mask = M (1,1,1,1,1,0,0,0,0,0,0,0);
91348024e4aSbellard       break;
91448024e4aSbellard     case 'n':
91548024e4aSbellard       mask = M (0,0,0,0,0,1,0,0,0,1,0,0);
91648024e4aSbellard       break;
91748024e4aSbellard     case 'o':
91848024e4aSbellard       mask = M (0,0,0,0,0,0,1,1,1,0,1,1);
91948024e4aSbellard       break;
92048024e4aSbellard     case 'p':
92148024e4aSbellard       mask = M (1,1,1,1,1,1,0,0,0,0,0,0);
92248024e4aSbellard       break;
92348024e4aSbellard     case 'q':
92448024e4aSbellard       mask = M (1,0,1,1,1,1,0,0,0,0,0,0);
92548024e4aSbellard       break;
92648024e4aSbellard     case 'v':
92748024e4aSbellard       mask = M (1,0,1,1,1,1,0,1,1,0,0,0);
92848024e4aSbellard       break;
92948024e4aSbellard     case 'b':
93048024e4aSbellard       mask = M (1,0,1,1,1,1,0,0,0,1,0,0);
93148024e4aSbellard       break;
93248024e4aSbellard     case 'w':
93348024e4aSbellard       mask = M (0,0,1,1,1,1,0,0,0,1,0,0);
93448024e4aSbellard       break;
93548024e4aSbellard     case 'y':
93648024e4aSbellard       mask = M (0,0,1,0,0,1,0,0,0,0,0,0);
93748024e4aSbellard       break;
93848024e4aSbellard     case 'z':
93948024e4aSbellard       mask = M (0,0,1,0,0,1,0,0,0,1,0,0);
94048024e4aSbellard       break;
94148024e4aSbellard     case '4':
94248024e4aSbellard       mask = M (0,0,1,1,1,1,0,0,0,0,0,0);
94348024e4aSbellard       break;
94448024e4aSbellard     default:
94548024e4aSbellard       abort ();
94648024e4aSbellard     }
94748024e4aSbellard #undef M
94848024e4aSbellard 
94948024e4aSbellard   mode = (val >> 3) & 7;
95048024e4aSbellard   if (mode == 7)
95148024e4aSbellard     mode += val & 7;
95248024e4aSbellard   return (mask & (1 << mode)) != 0;
95348024e4aSbellard }
95448024e4aSbellard 
95548024e4aSbellard /* Print a base register REGNO and displacement DISP, on INFO->STREAM.
95648024e4aSbellard    REGNO = -1 for pc, -2 for none (suppressed).  */
95748024e4aSbellard 
95848024e4aSbellard static void
print_base(int regno,bfd_vma disp,disassemble_info * info)95948024e4aSbellard print_base (int regno, bfd_vma disp, disassemble_info *info)
96048024e4aSbellard {
96148024e4aSbellard   if (regno == -1)
96248024e4aSbellard     {
96348024e4aSbellard       (*info->fprintf_func) (info->stream, "%%pc@(");
96448024e4aSbellard       (*info->print_address_func) (disp, info);
96548024e4aSbellard     }
96648024e4aSbellard   else
96748024e4aSbellard     {
96848024e4aSbellard       char buf[50];
96948024e4aSbellard 
97048024e4aSbellard       if (regno == -2)
97148024e4aSbellard 	(*info->fprintf_func) (info->stream, "@(");
97248024e4aSbellard       else if (regno == -3)
97348024e4aSbellard 	(*info->fprintf_func) (info->stream, "%%zpc@(");
97448024e4aSbellard       else
97548024e4aSbellard 	(*info->fprintf_func) (info->stream, "%s@(", reg_names[regno]);
97648024e4aSbellard 
97748024e4aSbellard       sprintf_vma (buf, disp);
97848024e4aSbellard       (*info->fprintf_func) (info->stream, "%s", buf);
97948024e4aSbellard     }
98048024e4aSbellard }
98148024e4aSbellard 
98248024e4aSbellard /* Print an indexed argument.  The base register is BASEREG (-1 for pc).
98348024e4aSbellard    P points to extension word, in buffer.
98448024e4aSbellard    ADDR is the nominal core address of that extension word.  */
98548024e4aSbellard 
98648024e4aSbellard static unsigned char *
print_indexed(int basereg,unsigned char * p,bfd_vma addr,disassemble_info * info)98748024e4aSbellard print_indexed (int basereg,
98848024e4aSbellard 	       unsigned char *p,
98948024e4aSbellard 	       bfd_vma addr,
99048024e4aSbellard 	       disassemble_info *info)
99148024e4aSbellard {
99248024e4aSbellard   int word;
9937ccfb2ebSblueswir1   static const char *const scales[] = { "", ":2", ":4", ":8" };
99448024e4aSbellard   bfd_vma base_disp;
99548024e4aSbellard   bfd_vma outer_disp;
99648024e4aSbellard   char buf[40];
99748024e4aSbellard   char vmabuf[50];
99848024e4aSbellard 
99948024e4aSbellard   word = NEXTWORD (p);
100048024e4aSbellard 
100148024e4aSbellard   /* Generate the text for the index register.
100248024e4aSbellard      Where this will be output is not yet determined.  */
1003*28d5bfc0SPhilippe Mathieu-Daudé   snprintf(buf, sizeof(buf), "%s:%c%s",
100448024e4aSbellard 	   reg_names[(word >> 12) & 0xf],
100548024e4aSbellard 	   (word & 0x800) ? 'l' : 'w',
100648024e4aSbellard 	   scales[(word >> 9) & 3]);
100748024e4aSbellard 
100848024e4aSbellard   /* Handle the 68000 style of indexing.  */
100948024e4aSbellard 
101048024e4aSbellard   if ((word & 0x100) == 0)
101148024e4aSbellard     {
101248024e4aSbellard       base_disp = word & 0xff;
101348024e4aSbellard       if ((base_disp & 0x80) != 0)
101448024e4aSbellard 	base_disp -= 0x100;
101548024e4aSbellard       if (basereg == -1)
101648024e4aSbellard 	base_disp += addr;
101748024e4aSbellard       print_base (basereg, base_disp, info);
101848024e4aSbellard       (*info->fprintf_func) (info->stream, ",%s)", buf);
101948024e4aSbellard       return p;
102048024e4aSbellard     }
102148024e4aSbellard 
102248024e4aSbellard   /* Handle the generalized kind.  */
102348024e4aSbellard   /* First, compute the displacement to add to the base register.  */
102448024e4aSbellard   if (word & 0200)
102548024e4aSbellard     {
102648024e4aSbellard       if (basereg == -1)
102748024e4aSbellard 	basereg = -3;
102848024e4aSbellard       else
102948024e4aSbellard 	basereg = -2;
103048024e4aSbellard     }
103148024e4aSbellard   if (word & 0100)
103248024e4aSbellard     buf[0] = '\0';
103348024e4aSbellard   base_disp = 0;
103448024e4aSbellard   switch ((word >> 4) & 3)
103548024e4aSbellard     {
103648024e4aSbellard     case 2:
103748024e4aSbellard       base_disp = NEXTWORD (p);
103848024e4aSbellard       break;
103948024e4aSbellard     case 3:
104048024e4aSbellard       base_disp = NEXTLONG (p);
104148024e4aSbellard     }
104248024e4aSbellard   if (basereg == -1)
104348024e4aSbellard     base_disp += addr;
104448024e4aSbellard 
104548024e4aSbellard   /* Handle single-level case (not indirect).  */
104648024e4aSbellard   if ((word & 7) == 0)
104748024e4aSbellard     {
104848024e4aSbellard       print_base (basereg, base_disp, info);
104948024e4aSbellard       if (buf[0] != '\0')
105048024e4aSbellard 	(*info->fprintf_func) (info->stream, ",%s", buf);
105148024e4aSbellard       (*info->fprintf_func) (info->stream, ")");
105248024e4aSbellard       return p;
105348024e4aSbellard     }
105448024e4aSbellard 
105548024e4aSbellard   /* Two level.  Compute displacement to add after indirection.  */
105648024e4aSbellard   outer_disp = 0;
105748024e4aSbellard   switch (word & 3)
105848024e4aSbellard     {
105948024e4aSbellard     case 2:
106048024e4aSbellard       outer_disp = NEXTWORD (p);
106148024e4aSbellard       break;
106248024e4aSbellard     case 3:
106348024e4aSbellard       outer_disp = NEXTLONG (p);
106448024e4aSbellard     }
106548024e4aSbellard 
106648024e4aSbellard   print_base (basereg, base_disp, info);
106748024e4aSbellard   if ((word & 4) == 0 && buf[0] != '\0')
106848024e4aSbellard     {
106948024e4aSbellard       (*info->fprintf_func) (info->stream, ",%s", buf);
107048024e4aSbellard       buf[0] = '\0';
107148024e4aSbellard     }
107248024e4aSbellard   sprintf_vma (vmabuf, outer_disp);
107348024e4aSbellard   (*info->fprintf_func) (info->stream, ")@(%s", vmabuf);
107448024e4aSbellard   if (buf[0] != '\0')
107548024e4aSbellard     (*info->fprintf_func) (info->stream, ",%s", buf);
107648024e4aSbellard   (*info->fprintf_func) (info->stream, ")");
107748024e4aSbellard 
107848024e4aSbellard   return p;
107948024e4aSbellard }
108048024e4aSbellard 
108148024e4aSbellard /* Returns number of bytes "eaten" by the operand, or
108248024e4aSbellard    return -1 if an invalid operand was found, or -2 if
10832dbb1308Szhaolichang    an opcode table error was found.
108448024e4aSbellard    ADDR is the pc for this arg to be relative to.  */
108548024e4aSbellard 
108648024e4aSbellard static int
print_insn_arg(const char * d,unsigned char * buffer,unsigned char * p0,bfd_vma addr,disassemble_info * info)108748024e4aSbellard print_insn_arg (const char *d,
108848024e4aSbellard 		unsigned char *buffer,
108948024e4aSbellard 		unsigned char *p0,
109048024e4aSbellard 		bfd_vma addr,
109148024e4aSbellard 		disassemble_info *info)
109248024e4aSbellard {
109348024e4aSbellard   int val = 0;
109448024e4aSbellard   int place = d[1];
109548024e4aSbellard   unsigned char *p = p0;
109648024e4aSbellard   int regno;
109748024e4aSbellard   const char *regname;
109848024e4aSbellard   unsigned char *p1;
109948024e4aSbellard   double flval;
110048024e4aSbellard   int flt_p;
110148024e4aSbellard   bfd_signed_vma disp;
110248024e4aSbellard   unsigned int uval;
110348024e4aSbellard 
110448024e4aSbellard   switch (*d)
110548024e4aSbellard     {
110648024e4aSbellard     case 'c':		/* Cache identifier.  */
110748024e4aSbellard       {
11087ccfb2ebSblueswir1         static const char *const cacheFieldName[] = { "nc", "dc", "ic", "bc" };
110948024e4aSbellard         val = fetch_arg (buffer, place, 2, info);
1110d14a68b6SStefan Weil         (*info->fprintf_func) (info->stream, "%s", cacheFieldName[val]);
111148024e4aSbellard         break;
111248024e4aSbellard       }
111348024e4aSbellard 
111448024e4aSbellard     case 'a':		/* Address register indirect only. Cf. case '+'.  */
111548024e4aSbellard       {
111648024e4aSbellard         (*info->fprintf_func)
111748024e4aSbellard 	  (info->stream,
111848024e4aSbellard 	   "%s@",
111948024e4aSbellard 	   reg_names[fetch_arg (buffer, place, 3, info) + 8]);
112048024e4aSbellard         break;
112148024e4aSbellard       }
112248024e4aSbellard 
112348024e4aSbellard     case '_':		/* 32-bit absolute address for move16.  */
112448024e4aSbellard       {
112548024e4aSbellard         uval = NEXTULONG (p);
112648024e4aSbellard 	(*info->print_address_func) (uval, info);
112748024e4aSbellard         break;
112848024e4aSbellard       }
112948024e4aSbellard 
113048024e4aSbellard     case 'C':
113148024e4aSbellard       (*info->fprintf_func) (info->stream, "%%ccr");
113248024e4aSbellard       break;
113348024e4aSbellard 
113448024e4aSbellard     case 'S':
113548024e4aSbellard       (*info->fprintf_func) (info->stream, "%%sr");
113648024e4aSbellard       break;
113748024e4aSbellard 
113848024e4aSbellard     case 'U':
113948024e4aSbellard       (*info->fprintf_func) (info->stream, "%%usp");
114048024e4aSbellard       break;
114148024e4aSbellard 
114248024e4aSbellard     case 'E':
114348024e4aSbellard       (*info->fprintf_func) (info->stream, "%%acc");
114448024e4aSbellard       break;
114548024e4aSbellard 
114648024e4aSbellard     case 'G':
114748024e4aSbellard       (*info->fprintf_func) (info->stream, "%%macsr");
114848024e4aSbellard       break;
114948024e4aSbellard 
115048024e4aSbellard     case 'H':
115148024e4aSbellard       (*info->fprintf_func) (info->stream, "%%mask");
115248024e4aSbellard       break;
115348024e4aSbellard 
115448024e4aSbellard     case 'J':
115548024e4aSbellard       {
115648024e4aSbellard 	/* FIXME: There's a problem here, different m68k processors call the
115748024e4aSbellard 	   same address different names. This table can't get it right
115848024e4aSbellard 	   because it doesn't know which processor it's disassembling for.  */
11597ccfb2ebSblueswir1 	static const struct { const char *name; int value; } names[]
116048024e4aSbellard 	  = {{"%sfc", 0x000}, {"%dfc", 0x001}, {"%cacr", 0x002},
116148024e4aSbellard 	     {"%tc",  0x003}, {"%itt0",0x004}, {"%itt1", 0x005},
116248024e4aSbellard              {"%dtt0",0x006}, {"%dtt1",0x007}, {"%buscr",0x008},
116348024e4aSbellard 	     {"%usp", 0x800}, {"%vbr", 0x801}, {"%caar", 0x802},
116448024e4aSbellard 	     {"%msp", 0x803}, {"%isp", 0x804},
116548024e4aSbellard 	     {"%flashbar", 0xc04}, {"%rambar", 0xc05}, /* mcf528x added these.  */
116648024e4aSbellard 
116748024e4aSbellard 	     /* Should we be calling this psr like we do in case 'Y'?  */
116848024e4aSbellard 	     {"%mmusr",0x805},
116948024e4aSbellard 
117048024e4aSbellard              {"%urp", 0x806}, {"%srp", 0x807}, {"%pcr", 0x808}};
117148024e4aSbellard 
117248024e4aSbellard 	val = fetch_arg (buffer, place, 12, info);
117348024e4aSbellard 	for (regno = sizeof names / sizeof names[0] - 1; regno >= 0; regno--)
117448024e4aSbellard 	  if (names[regno].value == val)
117548024e4aSbellard 	    {
117648024e4aSbellard 	      (*info->fprintf_func) (info->stream, "%s", names[regno].name);
117748024e4aSbellard 	      break;
117848024e4aSbellard 	    }
117948024e4aSbellard 	if (regno < 0)
118048024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%d", val);
118148024e4aSbellard       }
118248024e4aSbellard       break;
118348024e4aSbellard 
118448024e4aSbellard     case 'Q':
118548024e4aSbellard       val = fetch_arg (buffer, place, 3, info);
118648024e4aSbellard       /* 0 means 8, except for the bkpt instruction... */
118748024e4aSbellard       if (val == 0 && d[1] != 's')
118848024e4aSbellard 	val = 8;
118948024e4aSbellard       (*info->fprintf_func) (info->stream, "#%d", val);
119048024e4aSbellard       break;
119148024e4aSbellard 
119248024e4aSbellard     case 'x':
119348024e4aSbellard       val = fetch_arg (buffer, place, 3, info);
119448024e4aSbellard       /* 0 means -1.  */
119548024e4aSbellard       if (val == 0)
119648024e4aSbellard 	val = -1;
119748024e4aSbellard       (*info->fprintf_func) (info->stream, "#%d", val);
119848024e4aSbellard       break;
119948024e4aSbellard 
120048024e4aSbellard     case 'M':
120148024e4aSbellard       if (place == 'h')
120248024e4aSbellard 	{
12037ccfb2ebSblueswir1 	  static const char *const scalefactor_name[] = { "<<", ">>" };
120448024e4aSbellard 	  val = fetch_arg (buffer, place, 1, info);
1205d14a68b6SStefan Weil 	  (*info->fprintf_func) (info->stream, "%s", scalefactor_name[val]);
120648024e4aSbellard 	}
120748024e4aSbellard       else
120848024e4aSbellard 	{
120948024e4aSbellard 	  val = fetch_arg (buffer, place, 8, info);
121048024e4aSbellard 	  if (val & 0x80)
121148024e4aSbellard 	    val = val - 0x100;
121248024e4aSbellard 	  (*info->fprintf_func) (info->stream, "#%d", val);
121348024e4aSbellard 	}
121448024e4aSbellard       break;
121548024e4aSbellard 
121648024e4aSbellard     case 'T':
121748024e4aSbellard       val = fetch_arg (buffer, place, 4, info);
121848024e4aSbellard       (*info->fprintf_func) (info->stream, "#%d", val);
121948024e4aSbellard       break;
122048024e4aSbellard 
122148024e4aSbellard     case 'D':
122248024e4aSbellard       (*info->fprintf_func) (info->stream, "%s",
122348024e4aSbellard 			     reg_names[fetch_arg (buffer, place, 3, info)]);
122448024e4aSbellard       break;
122548024e4aSbellard 
122648024e4aSbellard     case 'A':
122748024e4aSbellard       (*info->fprintf_func)
122848024e4aSbellard 	(info->stream, "%s",
122948024e4aSbellard 	 reg_names[fetch_arg (buffer, place, 3, info) + 010]);
123048024e4aSbellard       break;
123148024e4aSbellard 
123248024e4aSbellard     case 'R':
123348024e4aSbellard       (*info->fprintf_func)
123448024e4aSbellard 	(info->stream, "%s",
123548024e4aSbellard 	 reg_names[fetch_arg (buffer, place, 4, info)]);
123648024e4aSbellard       break;
123748024e4aSbellard 
123848024e4aSbellard     case 'r':
123948024e4aSbellard       regno = fetch_arg (buffer, place, 4, info);
124048024e4aSbellard       if (regno > 7)
124148024e4aSbellard 	(*info->fprintf_func) (info->stream, "%s@", reg_names[regno]);
124248024e4aSbellard       else
124348024e4aSbellard 	(*info->fprintf_func) (info->stream, "@(%s)", reg_names[regno]);
124448024e4aSbellard       break;
124548024e4aSbellard 
124648024e4aSbellard     case 'F':
124748024e4aSbellard       (*info->fprintf_func)
124848024e4aSbellard 	(info->stream, "%%fp%d",
124948024e4aSbellard 	 fetch_arg (buffer, place, 3, info));
125048024e4aSbellard       break;
125148024e4aSbellard 
125248024e4aSbellard     case 'O':
125348024e4aSbellard       val = fetch_arg (buffer, place, 6, info);
125448024e4aSbellard       if (val & 0x20)
125548024e4aSbellard 	(*info->fprintf_func) (info->stream, "%s", reg_names[val & 7]);
125648024e4aSbellard       else
125748024e4aSbellard 	(*info->fprintf_func) (info->stream, "%d", val);
125848024e4aSbellard       break;
125948024e4aSbellard 
126048024e4aSbellard     case '+':
126148024e4aSbellard       (*info->fprintf_func)
126248024e4aSbellard 	(info->stream, "%s@+",
126348024e4aSbellard 	 reg_names[fetch_arg (buffer, place, 3, info) + 8]);
126448024e4aSbellard       break;
126548024e4aSbellard 
126648024e4aSbellard     case '-':
126748024e4aSbellard       (*info->fprintf_func)
126848024e4aSbellard 	(info->stream, "%s@-",
126948024e4aSbellard 	 reg_names[fetch_arg (buffer, place, 3, info) + 8]);
127048024e4aSbellard       break;
127148024e4aSbellard 
127248024e4aSbellard     case 'k':
127348024e4aSbellard       if (place == 'k')
127448024e4aSbellard 	(*info->fprintf_func)
127548024e4aSbellard 	  (info->stream, "{%s}",
127648024e4aSbellard 	   reg_names[fetch_arg (buffer, place, 3, info)]);
127748024e4aSbellard       else if (place == 'C')
127848024e4aSbellard 	{
127948024e4aSbellard 	  val = fetch_arg (buffer, place, 7, info);
128048024e4aSbellard 	  if (val > 63)		/* This is a signed constant.  */
128148024e4aSbellard 	    val -= 128;
128248024e4aSbellard 	  (*info->fprintf_func) (info->stream, "{#%d}", val);
128348024e4aSbellard 	}
128448024e4aSbellard       else
128548024e4aSbellard 	return -2;
128648024e4aSbellard       break;
128748024e4aSbellard 
128848024e4aSbellard     case '#':
128948024e4aSbellard     case '^':
129048024e4aSbellard       p1 = buffer + (*d == '#' ? 2 : 4);
129148024e4aSbellard       if (place == 's')
129248024e4aSbellard 	val = fetch_arg (buffer, place, 4, info);
129348024e4aSbellard       else if (place == 'C')
129448024e4aSbellard 	val = fetch_arg (buffer, place, 7, info);
129548024e4aSbellard       else if (place == '8')
129648024e4aSbellard 	val = fetch_arg (buffer, place, 3, info);
129748024e4aSbellard       else if (place == '3')
129848024e4aSbellard 	val = fetch_arg (buffer, place, 8, info);
129948024e4aSbellard       else if (place == 'b')
130048024e4aSbellard 	val = NEXTBYTE (p1);
130148024e4aSbellard       else if (place == 'w' || place == 'W')
130248024e4aSbellard 	val = NEXTWORD (p1);
130348024e4aSbellard       else if (place == 'l')
130448024e4aSbellard 	val = NEXTLONG (p1);
130548024e4aSbellard       else
130648024e4aSbellard 	return -2;
130748024e4aSbellard       (*info->fprintf_func) (info->stream, "#%d", val);
130848024e4aSbellard       break;
130948024e4aSbellard 
131048024e4aSbellard     case 'B':
131148024e4aSbellard       if (place == 'b')
131248024e4aSbellard 	disp = NEXTBYTE (p);
131348024e4aSbellard       else if (place == 'B')
131448024e4aSbellard 	disp = COERCE_SIGNED_CHAR (buffer[1]);
131548024e4aSbellard       else if (place == 'w' || place == 'W')
131648024e4aSbellard 	disp = NEXTWORD (p);
131748024e4aSbellard       else if (place == 'l' || place == 'L' || place == 'C')
131848024e4aSbellard 	disp = NEXTLONG (p);
131948024e4aSbellard       else if (place == 'g')
132048024e4aSbellard 	{
132148024e4aSbellard 	  disp = NEXTBYTE (buffer);
132248024e4aSbellard 	  if (disp == 0)
132348024e4aSbellard 	    disp = NEXTWORD (p);
132448024e4aSbellard 	  else if (disp == -1)
132548024e4aSbellard 	    disp = NEXTLONG (p);
132648024e4aSbellard 	}
132748024e4aSbellard       else if (place == 'c')
132848024e4aSbellard 	{
132948024e4aSbellard 	  if (buffer[1] & 0x40)		/* If bit six is one, long offset.  */
133048024e4aSbellard 	    disp = NEXTLONG (p);
133148024e4aSbellard 	  else
133248024e4aSbellard 	    disp = NEXTWORD (p);
133348024e4aSbellard 	}
133448024e4aSbellard       else
133548024e4aSbellard 	return -2;
133648024e4aSbellard 
133748024e4aSbellard       (*info->print_address_func) (addr + disp, info);
133848024e4aSbellard       break;
133948024e4aSbellard 
134048024e4aSbellard     case 'd':
134148024e4aSbellard       val = NEXTWORD (p);
134248024e4aSbellard       (*info->fprintf_func)
134348024e4aSbellard 	(info->stream, "%s@(%d)",
134448024e4aSbellard 	 reg_names[fetch_arg (buffer, place, 3, info) + 8], val);
134548024e4aSbellard       break;
134648024e4aSbellard 
134748024e4aSbellard     case 's':
134848024e4aSbellard       (*info->fprintf_func) (info->stream, "%s",
134948024e4aSbellard 			     fpcr_names[fetch_arg (buffer, place, 3, info)]);
135048024e4aSbellard       break;
135148024e4aSbellard 
135248024e4aSbellard     case 'e':
135348024e4aSbellard       val = fetch_arg(buffer, place, 2, info);
135448024e4aSbellard       (*info->fprintf_func) (info->stream, "%%acc%d", val);
135548024e4aSbellard       break;
135648024e4aSbellard 
135748024e4aSbellard     case 'g':
135848024e4aSbellard       val = fetch_arg(buffer, place, 1, info);
135948024e4aSbellard       (*info->fprintf_func) (info->stream, "%%accext%s", val==0 ? "01" : "23");
136048024e4aSbellard       break;
136148024e4aSbellard 
136248024e4aSbellard     case 'i':
136348024e4aSbellard       val = fetch_arg(buffer, place, 2, info);
136448024e4aSbellard       if (val == 1)
136548024e4aSbellard 	(*info->fprintf_func) (info->stream, "<<");
136648024e4aSbellard       else if (val == 3)
136748024e4aSbellard 	(*info->fprintf_func) (info->stream, ">>");
136848024e4aSbellard       else
136948024e4aSbellard 	return -1;
137048024e4aSbellard       break;
137148024e4aSbellard 
137248024e4aSbellard     case 'I':
137348024e4aSbellard       /* Get coprocessor ID... */
137448024e4aSbellard       val = fetch_arg (buffer, 'd', 3, info);
137548024e4aSbellard 
137648024e4aSbellard       if (val != 1)				/* Unusual coprocessor ID?  */
137748024e4aSbellard 	(*info->fprintf_func) (info->stream, "(cpid=%d) ", val);
137848024e4aSbellard       break;
137948024e4aSbellard 
138048024e4aSbellard     case '4':
138148024e4aSbellard     case '*':
138248024e4aSbellard     case '~':
138348024e4aSbellard     case '%':
138448024e4aSbellard     case ';':
138548024e4aSbellard     case '@':
138648024e4aSbellard     case '!':
138748024e4aSbellard     case '$':
138848024e4aSbellard     case '?':
138948024e4aSbellard     case '/':
139048024e4aSbellard     case '&':
139148024e4aSbellard     case '|':
139248024e4aSbellard     case '<':
139348024e4aSbellard     case '>':
139448024e4aSbellard     case 'm':
139548024e4aSbellard     case 'n':
139648024e4aSbellard     case 'o':
139748024e4aSbellard     case 'p':
139848024e4aSbellard     case 'q':
139948024e4aSbellard     case 'v':
140048024e4aSbellard     case 'b':
140148024e4aSbellard     case 'w':
140248024e4aSbellard     case 'y':
140348024e4aSbellard     case 'z':
140448024e4aSbellard       if (place == 'd')
140548024e4aSbellard 	{
140648024e4aSbellard 	  val = fetch_arg (buffer, 'x', 6, info);
140748024e4aSbellard 	  val = ((val & 7) << 3) + ((val >> 3) & 7);
140848024e4aSbellard 	}
140948024e4aSbellard       else
141048024e4aSbellard 	val = fetch_arg (buffer, 's', 6, info);
141148024e4aSbellard 
141248024e4aSbellard       /* If the <ea> is invalid for *d, then reject this match.  */
141348024e4aSbellard       if (!m68k_valid_ea (*d, val))
141448024e4aSbellard 	return -1;
141548024e4aSbellard 
141648024e4aSbellard       /* Get register number assuming address register.  */
141748024e4aSbellard       regno = (val & 7) + 8;
141848024e4aSbellard       regname = reg_names[regno];
141948024e4aSbellard       switch (val >> 3)
142048024e4aSbellard 	{
142148024e4aSbellard 	case 0:
142248024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%s", reg_names[val]);
142348024e4aSbellard 	  break;
142448024e4aSbellard 
142548024e4aSbellard 	case 1:
142648024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%s", regname);
142748024e4aSbellard 	  break;
142848024e4aSbellard 
142948024e4aSbellard 	case 2:
143048024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%s@", regname);
143148024e4aSbellard 	  break;
143248024e4aSbellard 
143348024e4aSbellard 	case 3:
143448024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%s@+", regname);
143548024e4aSbellard 	  break;
143648024e4aSbellard 
143748024e4aSbellard 	case 4:
143848024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%s@-", regname);
143948024e4aSbellard 	  break;
144048024e4aSbellard 
144148024e4aSbellard 	case 5:
144248024e4aSbellard 	  val = NEXTWORD (p);
144348024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%s@(%d)", regname, val);
144448024e4aSbellard 	  break;
144548024e4aSbellard 
144648024e4aSbellard 	case 6:
144748024e4aSbellard 	  p = print_indexed (regno, p, addr, info);
144848024e4aSbellard 	  break;
144948024e4aSbellard 
145048024e4aSbellard 	case 7:
145148024e4aSbellard 	  switch (val & 7)
145248024e4aSbellard 	    {
145348024e4aSbellard 	    case 0:
145448024e4aSbellard 	      val = NEXTWORD (p);
145548024e4aSbellard 	      (*info->print_address_func) (val, info);
145648024e4aSbellard 	      break;
145748024e4aSbellard 
145848024e4aSbellard 	    case 1:
145948024e4aSbellard 	      uval = NEXTULONG (p);
146048024e4aSbellard 	      (*info->print_address_func) (uval, info);
146148024e4aSbellard 	      break;
146248024e4aSbellard 
146348024e4aSbellard 	    case 2:
146448024e4aSbellard 	      val = NEXTWORD (p);
146548024e4aSbellard 	      (*info->fprintf_func) (info->stream, "%%pc@(");
146648024e4aSbellard 	      (*info->print_address_func) (addr + val, info);
146748024e4aSbellard 	      (*info->fprintf_func) (info->stream, ")");
146848024e4aSbellard 	      break;
146948024e4aSbellard 
147048024e4aSbellard 	    case 3:
147148024e4aSbellard 	      p = print_indexed (-1, p, addr, info);
147248024e4aSbellard 	      break;
147348024e4aSbellard 
147448024e4aSbellard 	    case 4:
147548024e4aSbellard 	      flt_p = 1;	/* Assume it's a float... */
147648024e4aSbellard 	      switch (place)
147748024e4aSbellard 	      {
147848024e4aSbellard 		case 'b':
147948024e4aSbellard 		  val = NEXTBYTE (p);
148048024e4aSbellard 		  flt_p = 0;
148148024e4aSbellard 		  break;
148248024e4aSbellard 
148348024e4aSbellard 		case 'w':
148448024e4aSbellard 		  val = NEXTWORD (p);
148548024e4aSbellard 		  flt_p = 0;
148648024e4aSbellard 		  break;
148748024e4aSbellard 
148848024e4aSbellard 		case 'l':
148948024e4aSbellard 		  val = NEXTLONG (p);
149048024e4aSbellard 		  flt_p = 0;
149148024e4aSbellard 		  break;
149248024e4aSbellard 
149348024e4aSbellard 		case 'f':
149448024e4aSbellard 		  NEXTSINGLE (flval, p);
149548024e4aSbellard 		  break;
149648024e4aSbellard 
149748024e4aSbellard 		case 'F':
149848024e4aSbellard 		  NEXTDOUBLE (flval, p);
149948024e4aSbellard 		  break;
150048024e4aSbellard 
150148024e4aSbellard 		case 'x':
150248024e4aSbellard 		  NEXTEXTEND (flval, p);
150348024e4aSbellard 		  break;
150448024e4aSbellard 
150548024e4aSbellard 		case 'p':
150648024e4aSbellard 		  flval = NEXTPACKED (p);
150748024e4aSbellard 		  break;
150848024e4aSbellard 
150948024e4aSbellard 		default:
151048024e4aSbellard 		  return -1;
151148024e4aSbellard 	      }
151248024e4aSbellard 	      if (flt_p)	/* Print a float? */
151348024e4aSbellard 		(*info->fprintf_func) (info->stream, "#%g", flval);
151448024e4aSbellard 	      else
151548024e4aSbellard 		(*info->fprintf_func) (info->stream, "#%d", val);
151648024e4aSbellard 	      break;
151748024e4aSbellard 
151848024e4aSbellard 	    default:
151948024e4aSbellard 	      return -1;
152048024e4aSbellard 	    }
152148024e4aSbellard 	}
152248024e4aSbellard 
152348024e4aSbellard       /* If place is '/', then this is the case of the mask bit for
152448024e4aSbellard 	 mac/emac loads. Now that the arg has been printed, grab the
152548024e4aSbellard 	 mask bit and if set, add a '&' to the arg.  */
152648024e4aSbellard       if (place == '/')
152748024e4aSbellard 	{
152848024e4aSbellard 	  val = fetch_arg (buffer, place, 1, info);
152948024e4aSbellard 	  if (val)
153048024e4aSbellard 	    info->fprintf_func (info->stream, "&");
153148024e4aSbellard 	}
153248024e4aSbellard       break;
153348024e4aSbellard 
153448024e4aSbellard     case 'L':
153548024e4aSbellard     case 'l':
153648024e4aSbellard 	if (place == 'w')
153748024e4aSbellard 	  {
153848024e4aSbellard 	    char doneany;
153948024e4aSbellard 	    p1 = buffer + 2;
154048024e4aSbellard 	    val = NEXTWORD (p1);
154148024e4aSbellard 	    /* Move the pointer ahead if this point is farther ahead
154248024e4aSbellard 	       than the last.  */
154348024e4aSbellard 	    p = p1 > p ? p1 : p;
154448024e4aSbellard 	    if (val == 0)
154548024e4aSbellard 	      {
154648024e4aSbellard 		(*info->fprintf_func) (info->stream, "#0");
154748024e4aSbellard 		break;
154848024e4aSbellard 	      }
154948024e4aSbellard 	    if (*d == 'l')
155048024e4aSbellard 	      {
155148024e4aSbellard 		int newval = 0;
155248024e4aSbellard 
155348024e4aSbellard 		for (regno = 0; regno < 16; ++regno)
155448024e4aSbellard 		  if (val & (0x8000 >> regno))
155548024e4aSbellard 		    newval |= 1 << regno;
155648024e4aSbellard 		val = newval;
155748024e4aSbellard 	      }
155848024e4aSbellard 	    val &= 0xffff;
155948024e4aSbellard 	    doneany = 0;
156048024e4aSbellard 	    for (regno = 0; regno < 16; ++regno)
156148024e4aSbellard 	      if (val & (1 << regno))
156248024e4aSbellard 		{
156348024e4aSbellard 		  int first_regno;
156448024e4aSbellard 
156548024e4aSbellard 		  if (doneany)
156648024e4aSbellard 		    (*info->fprintf_func) (info->stream, "/");
156748024e4aSbellard 		  doneany = 1;
156848024e4aSbellard 		  (*info->fprintf_func) (info->stream, "%s", reg_names[regno]);
156948024e4aSbellard 		  first_regno = regno;
157048024e4aSbellard 		  while (val & (1 << (regno + 1)))
157148024e4aSbellard 		    ++regno;
157248024e4aSbellard 		  if (regno > first_regno)
157348024e4aSbellard 		    (*info->fprintf_func) (info->stream, "-%s",
157448024e4aSbellard 					   reg_names[regno]);
157548024e4aSbellard 		}
157648024e4aSbellard 	  }
157748024e4aSbellard 	else if (place == '3')
157848024e4aSbellard 	  {
157948024e4aSbellard 	    /* `fmovem' insn.  */
158048024e4aSbellard 	    char doneany;
158148024e4aSbellard 	    val = fetch_arg (buffer, place, 8, info);
158248024e4aSbellard 	    if (val == 0)
158348024e4aSbellard 	      {
158448024e4aSbellard 		(*info->fprintf_func) (info->stream, "#0");
158548024e4aSbellard 		break;
158648024e4aSbellard 	      }
158748024e4aSbellard 	    if (*d == 'l')
158848024e4aSbellard 	      {
158948024e4aSbellard 		int newval = 0;
159048024e4aSbellard 
159148024e4aSbellard 		for (regno = 0; regno < 8; ++regno)
159248024e4aSbellard 		  if (val & (0x80 >> regno))
159348024e4aSbellard 		    newval |= 1 << regno;
159448024e4aSbellard 		val = newval;
159548024e4aSbellard 	      }
159648024e4aSbellard 	    val &= 0xff;
159748024e4aSbellard 	    doneany = 0;
159848024e4aSbellard 	    for (regno = 0; regno < 8; ++regno)
159948024e4aSbellard 	      if (val & (1 << regno))
160048024e4aSbellard 		{
160148024e4aSbellard 		  int first_regno;
160248024e4aSbellard 		  if (doneany)
160348024e4aSbellard 		    (*info->fprintf_func) (info->stream, "/");
160448024e4aSbellard 		  doneany = 1;
160548024e4aSbellard 		  (*info->fprintf_func) (info->stream, "%%fp%d", regno);
160648024e4aSbellard 		  first_regno = regno;
160748024e4aSbellard 		  while (val & (1 << (regno + 1)))
160848024e4aSbellard 		    ++regno;
160948024e4aSbellard 		  if (regno > first_regno)
161048024e4aSbellard 		    (*info->fprintf_func) (info->stream, "-%%fp%d", regno);
161148024e4aSbellard 		}
161248024e4aSbellard 	  }
161348024e4aSbellard 	else if (place == '8')
161448024e4aSbellard 	  {
161548024e4aSbellard 	    /* fmoveml for FP status registers.  */
161648024e4aSbellard 	    (*info->fprintf_func) (info->stream, "%s",
161748024e4aSbellard 				   fpcr_names[fetch_arg (buffer, place, 3,
161848024e4aSbellard 							 info)]);
161948024e4aSbellard 	  }
162048024e4aSbellard 	else
162148024e4aSbellard 	  return -2;
162248024e4aSbellard       break;
162348024e4aSbellard 
162448024e4aSbellard     case 'X':
162548024e4aSbellard       place = '8';
1626edd7541bSPaolo Bonzini       /* fall through */
162748024e4aSbellard     case 'Y':
162848024e4aSbellard     case 'Z':
162948024e4aSbellard     case 'W':
163048024e4aSbellard     case '0':
163148024e4aSbellard     case '1':
163248024e4aSbellard     case '2':
163348024e4aSbellard     case '3':
163448024e4aSbellard       {
16354dba9141SLaurent Vivier 	int reg = fetch_arg (buffer, place, 5, info);
16367ccfb2ebSblueswir1         const char *name = 0;
163748024e4aSbellard 
16384dba9141SLaurent Vivier 	switch (reg)
163948024e4aSbellard 	  {
164048024e4aSbellard 	  case 2: name = "%tt0"; break;
164148024e4aSbellard 	  case 3: name = "%tt1"; break;
164248024e4aSbellard 	  case 0x10: name = "%tc"; break;
164348024e4aSbellard 	  case 0x11: name = "%drp"; break;
164448024e4aSbellard 	  case 0x12: name = "%srp"; break;
164548024e4aSbellard 	  case 0x13: name = "%crp"; break;
164648024e4aSbellard 	  case 0x14: name = "%cal"; break;
164748024e4aSbellard 	  case 0x15: name = "%val"; break;
164848024e4aSbellard 	  case 0x16: name = "%scc"; break;
164948024e4aSbellard 	  case 0x17: name = "%ac"; break;
165048024e4aSbellard 	  case 0x18: name = "%psr"; break;
165148024e4aSbellard 	  case 0x19: name = "%pcsr"; break;
165248024e4aSbellard 	  case 0x1c:
165348024e4aSbellard 	  case 0x1d:
165448024e4aSbellard 	    {
165548024e4aSbellard 	      int break_reg = ((buffer[3] >> 2) & 7);
165648024e4aSbellard 
165748024e4aSbellard 	      (*info->fprintf_func)
16584dba9141SLaurent Vivier 		(info->stream, reg == 0x1c ? "%%bad%d" : "%%bac%d",
165948024e4aSbellard 		 break_reg);
166048024e4aSbellard 	    }
166148024e4aSbellard 	    break;
166248024e4aSbellard 	  default:
16634dba9141SLaurent Vivier 	    (*info->fprintf_func) (info->stream, "<mmu register %d>", reg);
166448024e4aSbellard 	  }
166548024e4aSbellard 	if (name)
166648024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%s", name);
166748024e4aSbellard       }
166848024e4aSbellard       break;
166948024e4aSbellard 
167048024e4aSbellard     case 'f':
167148024e4aSbellard       {
167248024e4aSbellard 	int fc = fetch_arg (buffer, place, 5, info);
167348024e4aSbellard 
167448024e4aSbellard 	if (fc == 1)
167548024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%%dfc");
167648024e4aSbellard 	else if (fc == 0)
167748024e4aSbellard 	  (*info->fprintf_func) (info->stream, "%%sfc");
167848024e4aSbellard 	else
167948024e4aSbellard 	  /* xgettext:c-format */
1680ca66f1a1SLluís Vilanova 	  (*info->fprintf_func) (info->stream, "<function code %d>", fc);
168148024e4aSbellard       }
168248024e4aSbellard       break;
168348024e4aSbellard 
168448024e4aSbellard     case 'V':
168548024e4aSbellard       (*info->fprintf_func) (info->stream, "%%val");
168648024e4aSbellard       break;
168748024e4aSbellard 
168848024e4aSbellard     case 't':
168948024e4aSbellard       {
169048024e4aSbellard 	int level = fetch_arg (buffer, place, 3, info);
169148024e4aSbellard 
169248024e4aSbellard 	(*info->fprintf_func) (info->stream, "%d", level);
169348024e4aSbellard       }
169448024e4aSbellard       break;
169548024e4aSbellard 
169648024e4aSbellard     case 'u':
169748024e4aSbellard       {
169848024e4aSbellard 	short is_upper = 0;
169948024e4aSbellard 	int reg = fetch_arg (buffer, place, 5, info);
170048024e4aSbellard 
170148024e4aSbellard 	if (reg & 0x10)
170248024e4aSbellard 	  {
170348024e4aSbellard 	    is_upper = 1;
170448024e4aSbellard 	    reg &= 0xf;
170548024e4aSbellard 	  }
170648024e4aSbellard 	(*info->fprintf_func) (info->stream, "%s%s",
170748024e4aSbellard 			       reg_half_names[reg],
170848024e4aSbellard 			       is_upper ? "u" : "l");
170948024e4aSbellard       }
171048024e4aSbellard       break;
171148024e4aSbellard 
171248024e4aSbellard     default:
171348024e4aSbellard       return -2;
171448024e4aSbellard     }
171548024e4aSbellard 
171648024e4aSbellard   return p - p0;
171748024e4aSbellard }
171848024e4aSbellard 
171948024e4aSbellard /* Try to match the current instruction to best and if so, return the
172048024e4aSbellard    number of bytes consumed from the instruction stream, else zero.  */
172148024e4aSbellard 
172248024e4aSbellard static int
match_insn_m68k(bfd_vma memaddr,disassemble_info * info,const struct m68k_opcode * best,struct private * priv)172348024e4aSbellard match_insn_m68k (bfd_vma memaddr,
172448024e4aSbellard 		 disassemble_info * info,
172548024e4aSbellard 		 const struct m68k_opcode * best,
172648024e4aSbellard 		 struct private * priv)
172748024e4aSbellard {
172848024e4aSbellard   unsigned char *save_p;
172948024e4aSbellard   unsigned char *p;
173048024e4aSbellard   const char *d;
173148024e4aSbellard 
173248024e4aSbellard   bfd_byte *buffer = priv->the_buffer;
17336e2d864eSStefan Weil   fprintf_function save_printer = info->fprintf_func;
173448024e4aSbellard   void (* save_print_address) (bfd_vma, struct disassemble_info *)
173548024e4aSbellard     = info->print_address_func;
173648024e4aSbellard 
173748024e4aSbellard   /* Point at first word of argument data,
173848024e4aSbellard      and at descriptor for first argument.  */
173948024e4aSbellard   p = buffer + 2;
174048024e4aSbellard 
174148024e4aSbellard   /* Figure out how long the fixed-size portion of the instruction is.
174248024e4aSbellard      The only place this is stored in the opcode table is
174348024e4aSbellard      in the arguments--look for arguments which specify fields in the 2nd
174448024e4aSbellard      or 3rd words of the instruction.  */
174548024e4aSbellard   for (d = best->args; *d; d += 2)
174648024e4aSbellard     {
174748024e4aSbellard       /* I don't think it is necessary to be checking d[0] here;
174848024e4aSbellard 	 I suspect all this could be moved to the case statement below.  */
174948024e4aSbellard       if (d[0] == '#')
175048024e4aSbellard 	{
175148024e4aSbellard 	  if (d[1] == 'l' && p - buffer < 6)
175248024e4aSbellard 	    p = buffer + 6;
175348024e4aSbellard 	  else if (p - buffer < 4 && d[1] != 'C' && d[1] != '8')
175448024e4aSbellard 	    p = buffer + 4;
175548024e4aSbellard 	}
175648024e4aSbellard 
175748024e4aSbellard       if ((d[0] == 'L' || d[0] == 'l') && d[1] == 'w' && p - buffer < 4)
175848024e4aSbellard 	p = buffer + 4;
175948024e4aSbellard 
176048024e4aSbellard       switch (d[1])
176148024e4aSbellard 	{
176248024e4aSbellard 	case '1':
176348024e4aSbellard 	case '2':
176448024e4aSbellard 	case '3':
176548024e4aSbellard 	case '7':
176648024e4aSbellard 	case '8':
176748024e4aSbellard 	case '9':
176848024e4aSbellard 	case 'i':
176948024e4aSbellard 	  if (p - buffer < 4)
177048024e4aSbellard 	    p = buffer + 4;
177148024e4aSbellard 	  break;
177248024e4aSbellard 	case '4':
177348024e4aSbellard 	case '5':
177448024e4aSbellard 	case '6':
177548024e4aSbellard 	  if (p - buffer < 6)
177648024e4aSbellard 	    p = buffer + 6;
177748024e4aSbellard 	  break;
177848024e4aSbellard 	default:
177948024e4aSbellard 	  break;
178048024e4aSbellard 	}
178148024e4aSbellard     }
178248024e4aSbellard 
178348024e4aSbellard   /* pflusha is an exceptions.  It takes no arguments but is two words
178448024e4aSbellard      long.  Recognize it by looking at the lower 16 bits of the mask.  */
178548024e4aSbellard   if (p - buffer < 4 && (best->match & 0xFFFF) != 0)
178648024e4aSbellard     p = buffer + 4;
178748024e4aSbellard 
178848024e4aSbellard   /* lpstop is another exception.  It takes a one word argument but is
178948024e4aSbellard      three words long.  */
179048024e4aSbellard   if (p - buffer < 6
179148024e4aSbellard       && (best->match & 0xffff) == 0xffff
179248024e4aSbellard       && best->args[0] == '#'
179348024e4aSbellard       && best->args[1] == 'w')
179448024e4aSbellard     {
179548024e4aSbellard       /* Copy the one word argument into the usual location for a one
179648024e4aSbellard 	 word argument, to simplify printing it.  We can get away with
179748024e4aSbellard 	 this because we know exactly what the second word is, and we
179848024e4aSbellard 	 aren't going to print anything based on it.  */
179948024e4aSbellard       p = buffer + 6;
180067774a04SBlue Swirl       fetch_data(info, p);
180148024e4aSbellard       buffer[2] = buffer[4];
180248024e4aSbellard       buffer[3] = buffer[5];
180348024e4aSbellard     }
180448024e4aSbellard 
180567774a04SBlue Swirl   fetch_data(info, p);
180648024e4aSbellard 
180748024e4aSbellard   d = best->args;
180848024e4aSbellard 
180948024e4aSbellard   save_p = p;
181048024e4aSbellard   info->print_address_func = dummy_print_address;
1811d14a68b6SStefan Weil   info->fprintf_func = dummy_printer;
181248024e4aSbellard 
181348024e4aSbellard   /* We scan the operands twice.  The first time we don't print anything,
181448024e4aSbellard      but look for errors.  */
181548024e4aSbellard   for (; *d; d += 2)
181648024e4aSbellard     {
181748024e4aSbellard       int eaten = print_insn_arg (d, buffer, p, memaddr + (p - buffer), info);
181848024e4aSbellard 
181948024e4aSbellard       if (eaten >= 0)
182048024e4aSbellard 	p += eaten;
182148024e4aSbellard       else if (eaten == -1)
182248024e4aSbellard 	{
182348024e4aSbellard 	  info->fprintf_func = save_printer;
182448024e4aSbellard 	  info->print_address_func = save_print_address;
182548024e4aSbellard 	  return 0;
182648024e4aSbellard 	}
182748024e4aSbellard       else
182848024e4aSbellard 	{
182948024e4aSbellard 	  info->fprintf_func (info->stream,
183048024e4aSbellard 			      /* xgettext:c-format */
1831ca66f1a1SLluís Vilanova 			      "<internal error in opcode table: %s %s>\n",
183248024e4aSbellard 			      best->name,  best->args);
183348024e4aSbellard 	  info->fprintf_func = save_printer;
183448024e4aSbellard 	  info->print_address_func = save_print_address;
183548024e4aSbellard 	  return 2;
183648024e4aSbellard 	}
183748024e4aSbellard     }
183848024e4aSbellard 
183948024e4aSbellard   p = save_p;
184048024e4aSbellard   info->fprintf_func = save_printer;
184148024e4aSbellard   info->print_address_func = save_print_address;
184248024e4aSbellard 
184348024e4aSbellard   d = best->args;
184448024e4aSbellard 
184548024e4aSbellard   info->fprintf_func (info->stream, "%s", best->name);
184648024e4aSbellard 
184748024e4aSbellard   if (*d)
184848024e4aSbellard     info->fprintf_func (info->stream, " ");
184948024e4aSbellard 
185048024e4aSbellard   while (*d)
185148024e4aSbellard     {
185248024e4aSbellard       p += print_insn_arg (d, buffer, p, memaddr + (p - buffer), info);
185348024e4aSbellard       d += 2;
185448024e4aSbellard 
185548024e4aSbellard       if (*d && *(d - 2) != 'I' && *d != 'k')
185648024e4aSbellard 	info->fprintf_func (info->stream, ",");
185748024e4aSbellard     }
185848024e4aSbellard 
185948024e4aSbellard   return p - buffer;
186048024e4aSbellard }
186148024e4aSbellard 
186248024e4aSbellard /* Print the m68k instruction at address MEMADDR in debugged memory,
186348024e4aSbellard    on INFO->STREAM.  Returns length of the instruction, in bytes.  */
186448024e4aSbellard 
186548024e4aSbellard int
print_insn_m68k(bfd_vma memaddr,disassemble_info * info)186648024e4aSbellard print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
186748024e4aSbellard {
186848024e4aSbellard   int i;
186948024e4aSbellard   const char *d;
187048024e4aSbellard   unsigned int arch_mask;
187148024e4aSbellard   struct private priv;
187248024e4aSbellard   bfd_byte *buffer = priv.the_buffer;
187348024e4aSbellard   int major_opcode;
187448024e4aSbellard   static int numopcodes[16];
187548024e4aSbellard   static const struct m68k_opcode **opcodes[16];
187648024e4aSbellard   int val;
187748024e4aSbellard 
187848024e4aSbellard   if (!opcodes[0])
187948024e4aSbellard     {
188048024e4aSbellard       /* Speed up the matching by sorting the opcode
188148024e4aSbellard 	 table on the upper four bits of the opcode.  */
188248024e4aSbellard       const struct m68k_opcode **opc_pointer[16];
188348024e4aSbellard 
188448024e4aSbellard       /* First count how many opcodes are in each of the sixteen buckets.  */
188548024e4aSbellard       for (i = 0; i < m68k_numopcodes; i++)
188648024e4aSbellard 	numopcodes[(m68k_opcodes[i].opcode >> 28) & 15]++;
188748024e4aSbellard 
188848024e4aSbellard       /* Then create a sorted table of pointers
188948024e4aSbellard 	 that point into the unsorted table.  */
189048024e4aSbellard       opc_pointer[0] = malloc (sizeof (struct m68k_opcode *)
189148024e4aSbellard                                * m68k_numopcodes);
189248024e4aSbellard       opcodes[0] = opc_pointer[0];
189348024e4aSbellard 
189448024e4aSbellard       for (i = 1; i < 16; i++)
189548024e4aSbellard 	{
189648024e4aSbellard 	  opc_pointer[i] = opc_pointer[i - 1] + numopcodes[i - 1];
189748024e4aSbellard 	  opcodes[i] = opc_pointer[i];
189848024e4aSbellard 	}
189948024e4aSbellard 
190048024e4aSbellard       for (i = 0; i < m68k_numopcodes; i++)
190148024e4aSbellard 	*opc_pointer[(m68k_opcodes[i].opcode >> 28) & 15]++ = &m68k_opcodes[i];
190248024e4aSbellard     }
190348024e4aSbellard 
190448024e4aSbellard   info->private_data = (PTR) &priv;
190548024e4aSbellard   /* Tell objdump to use two bytes per chunk
190648024e4aSbellard      and six bytes per line for displaying raw data.  */
190748024e4aSbellard   info->bytes_per_chunk = 2;
190848024e4aSbellard   info->bytes_per_line = 6;
190948024e4aSbellard   info->display_endian = BFD_ENDIAN_BIG;
191048024e4aSbellard   priv.max_fetched = priv.the_buffer;
191148024e4aSbellard   priv.insn_start = memaddr;
191248024e4aSbellard 
19136ab7e546SPeter Maydell   if (sigsetjmp(priv.bailout, 0) != 0) {
191448024e4aSbellard       /* Error return.  */
191548024e4aSbellard       return -1;
19166ab7e546SPeter Maydell   }
191748024e4aSbellard 
191848024e4aSbellard   switch (info->mach)
191948024e4aSbellard     {
192048024e4aSbellard     default:
192148024e4aSbellard     case 0:
192248024e4aSbellard       arch_mask = (unsigned int) -1;
192348024e4aSbellard       break;
192448024e4aSbellard     case bfd_mach_m68000:
192548024e4aSbellard       arch_mask = m68000|m68881|m68851;
192648024e4aSbellard       break;
192748024e4aSbellard     case bfd_mach_m68008:
192848024e4aSbellard       arch_mask = m68008|m68881|m68851;
192948024e4aSbellard       break;
193048024e4aSbellard     case bfd_mach_m68010:
193148024e4aSbellard       arch_mask = m68010|m68881|m68851;
193248024e4aSbellard       break;
193348024e4aSbellard     case bfd_mach_m68020:
193448024e4aSbellard       arch_mask = m68020|m68881|m68851;
193548024e4aSbellard       break;
193648024e4aSbellard     case bfd_mach_m68030:
193748024e4aSbellard       arch_mask = m68030|m68881|m68851;
193848024e4aSbellard       break;
193948024e4aSbellard     case bfd_mach_m68040:
194048024e4aSbellard       arch_mask = m68040|m68881|m68851;
194148024e4aSbellard       break;
194248024e4aSbellard     case bfd_mach_m68060:
194348024e4aSbellard       arch_mask = m68060|m68881|m68851;
194448024e4aSbellard       break;
194548024e4aSbellard     case bfd_mach_mcf5200:
194648024e4aSbellard       arch_mask = mcfisa_a;
194748024e4aSbellard       break;
194848024e4aSbellard     case bfd_mach_mcf521x:
194948024e4aSbellard     case bfd_mach_mcf528x:
195048024e4aSbellard       arch_mask = mcfisa_a|mcfhwdiv|mcfisa_aa|mcfusp|mcfemac;
195148024e4aSbellard       break;
195248024e4aSbellard     case bfd_mach_mcf5206e:
195348024e4aSbellard       arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
195448024e4aSbellard       break;
195548024e4aSbellard     case bfd_mach_mcf5249:
195648024e4aSbellard       arch_mask = mcfisa_a|mcfhwdiv|mcfemac;
195748024e4aSbellard       break;
195848024e4aSbellard     case bfd_mach_mcf5307:
195948024e4aSbellard       arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
196048024e4aSbellard       break;
196148024e4aSbellard     case bfd_mach_mcf5407:
196248024e4aSbellard       arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac;
196348024e4aSbellard       break;
196448024e4aSbellard     case bfd_mach_mcf547x:
196548024e4aSbellard     case bfd_mach_mcf548x:
196648024e4aSbellard     case bfd_mach_mcfv4e:
196748024e4aSbellard       arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfemac;
196848024e4aSbellard       break;
196948024e4aSbellard     }
197048024e4aSbellard 
197167774a04SBlue Swirl   fetch_data(info, buffer + 2);
197248024e4aSbellard   major_opcode = (buffer[0] >> 4) & 15;
197348024e4aSbellard 
197448024e4aSbellard   for (i = 0; i < numopcodes[major_opcode]; i++)
197548024e4aSbellard     {
197648024e4aSbellard       const struct m68k_opcode *opc = opcodes[major_opcode][i];
197748024e4aSbellard       unsigned long opcode = opc->opcode;
197848024e4aSbellard       unsigned long match = opc->match;
197948024e4aSbellard 
198048024e4aSbellard       if (((0xff & buffer[0] & (match >> 24)) == (0xff & (opcode >> 24)))
198148024e4aSbellard 	  && ((0xff & buffer[1] & (match >> 16)) == (0xff & (opcode >> 16)))
198248024e4aSbellard 	  /* Only fetch the next two bytes if we need to.  */
198348024e4aSbellard 	  && (((0xffff & match) == 0)
198448024e4aSbellard 	      ||
198567774a04SBlue Swirl               (fetch_data(info, buffer + 4)
198648024e4aSbellard 	       && ((0xff & buffer[2] & (match >> 8)) == (0xff & (opcode >> 8)))
198748024e4aSbellard 	       && ((0xff & buffer[3] & match) == (0xff & opcode)))
198848024e4aSbellard 	      )
198948024e4aSbellard 	  && (opc->arch & arch_mask) != 0)
199048024e4aSbellard 	{
199148024e4aSbellard 	  /* Don't use for printout the variants of divul and divsl
199248024e4aSbellard 	     that have the same register number in two places.
199348024e4aSbellard 	     The more general variants will match instead.  */
199448024e4aSbellard 	  for (d = opc->args; *d; d += 2)
199548024e4aSbellard 	    if (d[1] == 'D')
199648024e4aSbellard 	      break;
199748024e4aSbellard 
199848024e4aSbellard 	  /* Don't use for printout the variants of most floating
199948024e4aSbellard 	     point coprocessor instructions which use the same
200048024e4aSbellard 	     register number in two places, as above.  */
200148024e4aSbellard 	  if (*d == '\0')
200248024e4aSbellard 	    for (d = opc->args; *d; d += 2)
200348024e4aSbellard 	      if (d[1] == 't')
200448024e4aSbellard 		break;
200548024e4aSbellard 
200648024e4aSbellard 	  /* Don't match fmovel with more than one register;
200748024e4aSbellard 	     wait for fmoveml.  */
200848024e4aSbellard 	  if (*d == '\0')
200948024e4aSbellard 	    {
201048024e4aSbellard 	      for (d = opc->args; *d; d += 2)
201148024e4aSbellard 		{
201248024e4aSbellard 		  if (d[0] == 's' && d[1] == '8')
201348024e4aSbellard 		    {
201448024e4aSbellard 		      val = fetch_arg (buffer, d[1], 3, info);
201548024e4aSbellard 		      if ((val & (val - 1)) != 0)
201648024e4aSbellard 			break;
201748024e4aSbellard 		    }
201848024e4aSbellard 		}
201948024e4aSbellard 	    }
202048024e4aSbellard 
2021d9345f1eSLaurent Vivier           /* Don't match FPU insns with non-default coprocessor ID.  */
2022d9345f1eSLaurent Vivier           if (*d == '\0')
2023d9345f1eSLaurent Vivier             {
2024d9345f1eSLaurent Vivier               for (d = opc->args; *d; d += 2)
2025d9345f1eSLaurent Vivier                 {
2026d9345f1eSLaurent Vivier                   if (d[0] == 'I')
2027d9345f1eSLaurent Vivier                     {
2028d9345f1eSLaurent Vivier                       val = fetch_arg (buffer, 'd', 3, info);
2029d9345f1eSLaurent Vivier                       if (val != 1)
2030d9345f1eSLaurent Vivier                         break;
2031d9345f1eSLaurent Vivier                     }
2032d9345f1eSLaurent Vivier                 }
2033d9345f1eSLaurent Vivier             }
2034d9345f1eSLaurent Vivier 
203548024e4aSbellard 	  if (*d == '\0')
203648024e4aSbellard 	    if ((val = match_insn_m68k (memaddr, info, opc, & priv)))
203748024e4aSbellard 	      return val;
203848024e4aSbellard 	}
203948024e4aSbellard     }
204048024e4aSbellard 
204148024e4aSbellard   /* Handle undefined instructions.  */
204248024e4aSbellard   info->fprintf_func (info->stream, "0%o", (buffer[0] << 8) + buffer[1]);
204348024e4aSbellard   return 2;
204448024e4aSbellard }
204548024e4aSbellard /* **** End of m68k-dis.c */
204648024e4aSbellard /* **** m68k-opc.h from sourceware.org CVS 2005-08-14.  */
204748024e4aSbellard /* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
204848024e4aSbellard    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
204948024e4aSbellard    2000, 2001, 2003, 2004, 2005
205048024e4aSbellard    Free Software Foundation, Inc.
205148024e4aSbellard 
205248024e4aSbellard    This file is part of GDB, GAS, and the GNU binutils.
205348024e4aSbellard 
205448024e4aSbellard    GDB, GAS, and the GNU binutils are free software; you can redistribute
205548024e4aSbellard    them and/or modify them under the terms of the GNU General Public
205648024e4aSbellard    License as published by the Free Software Foundation; either version
205748024e4aSbellard    1, or (at your option) any later version.
205848024e4aSbellard 
205948024e4aSbellard    GDB, GAS, and the GNU binutils are distributed in the hope that they
206048024e4aSbellard    will be useful, but WITHOUT ANY WARRANTY; without even the implied
206148024e4aSbellard    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
206248024e4aSbellard    the GNU General Public License for more details.
206348024e4aSbellard 
206448024e4aSbellard    You should have received a copy of the GNU General Public License
20658167ee88SBlue Swirl    along with this file; see the file COPYING.  If not,
20668167ee88SBlue Swirl    see <http://www.gnu.org/licenses/>.  */
206748024e4aSbellard 
206848024e4aSbellard #define one(x) ((unsigned int) (x) << 16)
206948024e4aSbellard #define two(x, y) (((unsigned int) (x) << 16) + (y))
207048024e4aSbellard 
207148024e4aSbellard /* The assembler requires that all instances of the same mnemonic must
207248024e4aSbellard    be consecutive.  If they aren't, the assembler will bomb at
207348024e4aSbellard    runtime.  */
207448024e4aSbellard 
207548024e4aSbellard const struct m68k_opcode m68k_opcodes[] =
207648024e4aSbellard {
207748024e4aSbellard {"abcd", 2,	one(0140400),	one(0170770), "DsDd", m68000up },
207848024e4aSbellard {"abcd", 2,	one(0140410),	one(0170770), "-s-d", m68000up },
207948024e4aSbellard 
208048024e4aSbellard {"addaw", 2,	one(0150300),	one(0170700), "*wAd", m68000up },
208148024e4aSbellard {"addal", 2,	one(0150700),	one(0170700), "*lAd", m68000up | mcfisa_a },
208248024e4aSbellard 
208348024e4aSbellard {"addib", 4,	one(0003000),	one(0177700), "#b$s", m68000up },
208448024e4aSbellard {"addiw", 4,	one(0003100),	one(0177700), "#w$s", m68000up },
208548024e4aSbellard {"addil", 6,	one(0003200),	one(0177700), "#l$s", m68000up },
208648024e4aSbellard {"addil", 6,	one(0003200),	one(0177700), "#lDs", mcfisa_a },
208748024e4aSbellard 
208848024e4aSbellard {"addqb", 2,	one(0050000),	one(0170700), "Qd$b", m68000up },
208948024e4aSbellard {"addqw", 2,	one(0050100),	one(0170700), "Qd%w", m68000up },
209048024e4aSbellard {"addql", 2,	one(0050200),	one(0170700), "Qd%l", m68000up | mcfisa_a },
209148024e4aSbellard 
209248024e4aSbellard /* The add opcode can generate the adda, addi, and addq instructions.  */
209348024e4aSbellard {"addb", 2,	one(0050000),	one(0170700), "Qd$b", m68000up },
209448024e4aSbellard {"addb", 4,	one(0003000),	one(0177700), "#b$s", m68000up },
209548024e4aSbellard {"addb", 2,	one(0150000),	one(0170700), ";bDd", m68000up },
209648024e4aSbellard {"addb", 2,	one(0150400),	one(0170700), "Dd~b", m68000up },
209748024e4aSbellard {"addw", 2,	one(0050100),	one(0170700), "Qd%w", m68000up },
209848024e4aSbellard {"addw", 2,	one(0150300),	one(0170700), "*wAd", m68000up },
209948024e4aSbellard {"addw", 4,	one(0003100),	one(0177700), "#w$s", m68000up },
210048024e4aSbellard {"addw", 2,	one(0150100),	one(0170700), "*wDd", m68000up },
210148024e4aSbellard {"addw", 2,	one(0150500),	one(0170700), "Dd~w", m68000up },
210248024e4aSbellard {"addl", 2,	one(0050200),	one(0170700), "Qd%l", m68000up | mcfisa_a },
210348024e4aSbellard {"addl", 6,	one(0003200),	one(0177700), "#l$s", m68000up },
210448024e4aSbellard {"addl", 6,	one(0003200),	one(0177700), "#lDs", mcfisa_a },
210548024e4aSbellard {"addl", 2,	one(0150700),	one(0170700), "*lAd", m68000up | mcfisa_a },
210648024e4aSbellard {"addl", 2,	one(0150200),	one(0170700), "*lDd", m68000up | mcfisa_a },
210748024e4aSbellard {"addl", 2,	one(0150600),	one(0170700), "Dd~l", m68000up | mcfisa_a },
210848024e4aSbellard 
210948024e4aSbellard {"addxb", 2,	one(0150400),	one(0170770), "DsDd", m68000up },
211048024e4aSbellard {"addxb", 2,	one(0150410),	one(0170770), "-s-d", m68000up },
211148024e4aSbellard {"addxw", 2,	one(0150500),	one(0170770), "DsDd", m68000up },
211248024e4aSbellard {"addxw", 2,	one(0150510),	one(0170770), "-s-d", m68000up },
211348024e4aSbellard {"addxl", 2,	one(0150600),	one(0170770), "DsDd", m68000up | mcfisa_a },
211448024e4aSbellard {"addxl", 2,	one(0150610),	one(0170770), "-s-d", m68000up },
211548024e4aSbellard 
211648024e4aSbellard {"andib", 4,	one(0001000),	one(0177700), "#b$s", m68000up },
211748024e4aSbellard {"andib", 4,	one(0001074),	one(0177777), "#bCs", m68000up },
211848024e4aSbellard {"andiw", 4,	one(0001100),	one(0177700), "#w$s", m68000up },
211948024e4aSbellard {"andiw", 4,	one(0001174),	one(0177777), "#wSs", m68000up },
212048024e4aSbellard {"andil", 6,	one(0001200),	one(0177700), "#l$s", m68000up },
212148024e4aSbellard {"andil", 6,	one(0001200),	one(0177700), "#lDs", mcfisa_a },
212248024e4aSbellard {"andi", 4,	one(0001100),	one(0177700), "#w$s", m68000up },
212348024e4aSbellard {"andi", 4,	one(0001074),	one(0177777), "#bCs", m68000up },
212448024e4aSbellard {"andi", 4,	one(0001174),	one(0177777), "#wSs", m68000up },
212548024e4aSbellard 
212648024e4aSbellard /* The and opcode can generate the andi instruction.  */
212748024e4aSbellard {"andb", 4,	one(0001000),	one(0177700), "#b$s", m68000up },
212848024e4aSbellard {"andb", 4,	one(0001074),	one(0177777), "#bCs", m68000up },
212948024e4aSbellard {"andb", 2,	one(0140000),	one(0170700), ";bDd", m68000up },
213048024e4aSbellard {"andb", 2,	one(0140400),	one(0170700), "Dd~b", m68000up },
213148024e4aSbellard {"andw", 4,	one(0001100),	one(0177700), "#w$s", m68000up },
213248024e4aSbellard {"andw", 4,	one(0001174),	one(0177777), "#wSs", m68000up },
213348024e4aSbellard {"andw", 2,	one(0140100),	one(0170700), ";wDd", m68000up },
213448024e4aSbellard {"andw", 2,	one(0140500),	one(0170700), "Dd~w", m68000up },
213548024e4aSbellard {"andl", 6,	one(0001200),	one(0177700), "#l$s", m68000up },
213648024e4aSbellard {"andl", 6,	one(0001200),	one(0177700), "#lDs", mcfisa_a },
213748024e4aSbellard {"andl", 2,	one(0140200),	one(0170700), ";lDd", m68000up | mcfisa_a },
213848024e4aSbellard {"andl", 2,	one(0140600),	one(0170700), "Dd~l", m68000up | mcfisa_a },
213948024e4aSbellard {"and", 4,	one(0001100),	one(0177700), "#w$w", m68000up },
214048024e4aSbellard {"and", 4,	one(0001074),	one(0177777), "#bCs", m68000up },
214148024e4aSbellard {"and", 4,	one(0001174),	one(0177777), "#wSs", m68000up },
214248024e4aSbellard {"and", 2,	one(0140100),	one(0170700), ";wDd", m68000up },
214348024e4aSbellard {"and", 2,	one(0140500),	one(0170700), "Dd~w", m68000up },
214448024e4aSbellard 
214548024e4aSbellard {"aslb", 2,	one(0160400),	one(0170770), "QdDs", m68000up },
214648024e4aSbellard {"aslb", 2,	one(0160440),	one(0170770), "DdDs", m68000up },
214748024e4aSbellard {"aslw", 2,	one(0160500),	one(0170770), "QdDs", m68000up },
214848024e4aSbellard {"aslw", 2,	one(0160540),	one(0170770), "DdDs", m68000up },
214948024e4aSbellard {"aslw", 2,	one(0160700),	one(0177700), "~s",   m68000up },
215048024e4aSbellard {"asll", 2,	one(0160600),	one(0170770), "QdDs", m68000up | mcfisa_a },
215148024e4aSbellard {"asll", 2,	one(0160640),	one(0170770), "DdDs", m68000up | mcfisa_a },
215248024e4aSbellard 
215348024e4aSbellard {"asrb", 2,	one(0160000),	one(0170770), "QdDs", m68000up },
215448024e4aSbellard {"asrb", 2,	one(0160040),	one(0170770), "DdDs", m68000up },
215548024e4aSbellard {"asrw", 2,	one(0160100),	one(0170770), "QdDs", m68000up },
215648024e4aSbellard {"asrw", 2,	one(0160140),	one(0170770), "DdDs", m68000up },
215748024e4aSbellard {"asrw", 2,	one(0160300),	one(0177700), "~s",   m68000up },
215848024e4aSbellard {"asrl", 2,	one(0160200),	one(0170770), "QdDs", m68000up | mcfisa_a },
215948024e4aSbellard {"asrl", 2,	one(0160240),	one(0170770), "DdDs", m68000up | mcfisa_a },
216048024e4aSbellard 
216148024e4aSbellard {"bhiw", 2,	one(0061000),	one(0177777), "BW", m68000up | mcfisa_a },
216248024e4aSbellard {"blsw", 2,	one(0061400),	one(0177777), "BW", m68000up | mcfisa_a },
216348024e4aSbellard {"bccw", 2,	one(0062000),	one(0177777), "BW", m68000up | mcfisa_a },
216448024e4aSbellard {"bcsw", 2,	one(0062400),	one(0177777), "BW", m68000up | mcfisa_a },
216548024e4aSbellard {"bnew", 2,	one(0063000),	one(0177777), "BW", m68000up | mcfisa_a },
216648024e4aSbellard {"beqw", 2,	one(0063400),	one(0177777), "BW", m68000up | mcfisa_a },
216748024e4aSbellard {"bvcw", 2,	one(0064000),	one(0177777), "BW", m68000up | mcfisa_a },
216848024e4aSbellard {"bvsw", 2,	one(0064400),	one(0177777), "BW", m68000up | mcfisa_a },
216948024e4aSbellard {"bplw", 2,	one(0065000),	one(0177777), "BW", m68000up | mcfisa_a },
217048024e4aSbellard {"bmiw", 2,	one(0065400),	one(0177777), "BW", m68000up | mcfisa_a },
217148024e4aSbellard {"bgew", 2,	one(0066000),	one(0177777), "BW", m68000up | mcfisa_a },
217248024e4aSbellard {"bltw", 2,	one(0066400),	one(0177777), "BW", m68000up | mcfisa_a },
217348024e4aSbellard {"bgtw", 2,	one(0067000),	one(0177777), "BW", m68000up | mcfisa_a },
217448024e4aSbellard {"blew", 2,	one(0067400),	one(0177777), "BW", m68000up | mcfisa_a },
217548024e4aSbellard 
217648024e4aSbellard {"bhil", 2,	one(0061377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
217748024e4aSbellard {"blsl", 2,	one(0061777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
217848024e4aSbellard {"bccl", 2,	one(0062377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
217948024e4aSbellard {"bcsl", 2,	one(0062777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218048024e4aSbellard {"bnel", 2,	one(0063377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218148024e4aSbellard {"beql", 2,	one(0063777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218248024e4aSbellard {"bvcl", 2,	one(0064377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218348024e4aSbellard {"bvsl", 2,	one(0064777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218448024e4aSbellard {"bpll", 2,	one(0065377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218548024e4aSbellard {"bmil", 2,	one(0065777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218648024e4aSbellard {"bgel", 2,	one(0066377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218748024e4aSbellard {"bltl", 2,	one(0066777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218848024e4aSbellard {"bgtl", 2,	one(0067377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218948024e4aSbellard {"blel", 2,	one(0067777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
219048024e4aSbellard 
219148024e4aSbellard {"bhis", 2,	one(0061000),	one(0177400), "BB", m68000up | mcfisa_a },
219248024e4aSbellard {"blss", 2,	one(0061400),	one(0177400), "BB", m68000up | mcfisa_a },
219348024e4aSbellard {"bccs", 2,	one(0062000),	one(0177400), "BB", m68000up | mcfisa_a },
219448024e4aSbellard {"bcss", 2,	one(0062400),	one(0177400), "BB", m68000up | mcfisa_a },
219548024e4aSbellard {"bnes", 2,	one(0063000),	one(0177400), "BB", m68000up | mcfisa_a },
219648024e4aSbellard {"beqs", 2,	one(0063400),	one(0177400), "BB", m68000up | mcfisa_a },
219748024e4aSbellard {"bvcs", 2,	one(0064000),	one(0177400), "BB", m68000up | mcfisa_a },
219848024e4aSbellard {"bvss", 2,	one(0064400),	one(0177400), "BB", m68000up | mcfisa_a },
219948024e4aSbellard {"bpls", 2,	one(0065000),	one(0177400), "BB", m68000up | mcfisa_a },
220048024e4aSbellard {"bmis", 2,	one(0065400),	one(0177400), "BB", m68000up | mcfisa_a },
220148024e4aSbellard {"bges", 2,	one(0066000),	one(0177400), "BB", m68000up | mcfisa_a },
220248024e4aSbellard {"blts", 2,	one(0066400),	one(0177400), "BB", m68000up | mcfisa_a },
220348024e4aSbellard {"bgts", 2,	one(0067000),	one(0177400), "BB", m68000up | mcfisa_a },
220448024e4aSbellard {"bles", 2,	one(0067400),	one(0177400), "BB", m68000up | mcfisa_a },
220548024e4aSbellard 
220648024e4aSbellard {"jhi", 2,	one(0061000),	one(0177400), "Bg", m68000up | mcfisa_a },
220748024e4aSbellard {"jls", 2,	one(0061400),	one(0177400), "Bg", m68000up | mcfisa_a },
220848024e4aSbellard {"jcc", 2,	one(0062000),	one(0177400), "Bg", m68000up | mcfisa_a },
220948024e4aSbellard {"jcs", 2,	one(0062400),	one(0177400), "Bg", m68000up | mcfisa_a },
221048024e4aSbellard {"jne", 2,	one(0063000),	one(0177400), "Bg", m68000up | mcfisa_a },
221148024e4aSbellard {"jeq", 2,	one(0063400),	one(0177400), "Bg", m68000up | mcfisa_a },
221248024e4aSbellard {"jvc", 2,	one(0064000),	one(0177400), "Bg", m68000up | mcfisa_a },
221348024e4aSbellard {"jvs", 2,	one(0064400),	one(0177400), "Bg", m68000up | mcfisa_a },
221448024e4aSbellard {"jpl", 2,	one(0065000),	one(0177400), "Bg", m68000up | mcfisa_a },
221548024e4aSbellard {"jmi", 2,	one(0065400),	one(0177400), "Bg", m68000up | mcfisa_a },
221648024e4aSbellard {"jge", 2,	one(0066000),	one(0177400), "Bg", m68000up | mcfisa_a },
221748024e4aSbellard {"jlt", 2,	one(0066400),	one(0177400), "Bg", m68000up | mcfisa_a },
221848024e4aSbellard {"jgt", 2,	one(0067000),	one(0177400), "Bg", m68000up | mcfisa_a },
221948024e4aSbellard {"jle", 2,	one(0067400),	one(0177400), "Bg", m68000up | mcfisa_a },
222048024e4aSbellard 
222148024e4aSbellard {"bchg", 2,	one(0000500),	one(0170700), "Dd$s", m68000up | mcfisa_a },
222248024e4aSbellard {"bchg", 4,	one(0004100),	one(0177700), "#b$s", m68000up },
222348024e4aSbellard {"bchg", 4,	one(0004100),	one(0177700), "#bqs", mcfisa_a },
222448024e4aSbellard 
222548024e4aSbellard {"bclr", 2,	one(0000600),	one(0170700), "Dd$s", m68000up | mcfisa_a },
222648024e4aSbellard {"bclr", 4,	one(0004200),	one(0177700), "#b$s", m68000up },
222748024e4aSbellard {"bclr", 4,	one(0004200),	one(0177700), "#bqs", mcfisa_a },
222848024e4aSbellard 
222948024e4aSbellard {"bfchg", 4,	two(0165300, 0), two(0177700, 0170000),	"?sO2O3",   m68020up },
223048024e4aSbellard {"bfclr", 4,	two(0166300, 0), two(0177700, 0170000),	"?sO2O3",   m68020up },
223148024e4aSbellard {"bfexts", 4,	two(0165700, 0), two(0177700, 0100000),	"/sO2O3D1", m68020up },
223248024e4aSbellard {"bfextu", 4,	two(0164700, 0), two(0177700, 0100000),	"/sO2O3D1", m68020up },
223348024e4aSbellard {"bfffo", 4,	two(0166700, 0), two(0177700, 0100000),	"/sO2O3D1", m68020up },
223448024e4aSbellard {"bfins", 4,	two(0167700, 0), two(0177700, 0100000),	"D1?sO2O3", m68020up },
223548024e4aSbellard {"bfset", 4,	two(0167300, 0), two(0177700, 0170000),	"?sO2O3",   m68020up },
223648024e4aSbellard {"bftst", 4,	two(0164300, 0), two(0177700, 0170000),	"/sO2O3",   m68020up },
223748024e4aSbellard 
223848024e4aSbellard {"bgnd", 2,	one(0045372),	one(0177777), "", cpu32 },
223948024e4aSbellard 
224048024e4aSbellard {"bitrev", 2,	one(0000300),	one(0177770), "Ds", mcfisa_aa},
224148024e4aSbellard 
224248024e4aSbellard {"bkpt", 2,	one(0044110),	one(0177770), "ts", m68010up },
224348024e4aSbellard 
224448024e4aSbellard {"braw", 2,	one(0060000),	one(0177777), "BW", m68000up | mcfisa_a },
224548024e4aSbellard {"bral", 2,	one(0060377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
224648024e4aSbellard {"bras", 2,	one(0060000),	one(0177400), "BB", m68000up | mcfisa_a },
224748024e4aSbellard 
224848024e4aSbellard {"bset", 2,	one(0000700),	one(0170700), "Dd$s", m68000up | mcfisa_a },
224948024e4aSbellard {"bset", 2,	one(0000700),	one(0170700), "Ddvs", mcfisa_a },
225048024e4aSbellard {"bset", 4,	one(0004300),	one(0177700), "#b$s", m68000up },
225148024e4aSbellard {"bset", 4,	one(0004300),	one(0177700), "#bqs", mcfisa_a },
225248024e4aSbellard 
225348024e4aSbellard {"bsrw", 2,	one(0060400),	one(0177777), "BW", m68000up | mcfisa_a },
225448024e4aSbellard {"bsrl", 2,	one(0060777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
225548024e4aSbellard {"bsrs", 2,	one(0060400),	one(0177400), "BB", m68000up | mcfisa_a },
225648024e4aSbellard 
225748024e4aSbellard {"btst", 2,	one(0000400),	one(0170700), "Dd;b", m68000up | mcfisa_a },
225848024e4aSbellard {"btst", 4,	one(0004000),	one(0177700), "#b@s", m68000up },
225948024e4aSbellard {"btst", 4,	one(0004000),	one(0177700), "#bqs", mcfisa_a },
226048024e4aSbellard 
226148024e4aSbellard {"byterev", 2,	one(0001300),	one(0177770), "Ds", mcfisa_aa},
226248024e4aSbellard 
226348024e4aSbellard {"callm", 4,	one(0003300),	one(0177700), "#b!s", m68020 },
226448024e4aSbellard 
226548024e4aSbellard {"cas2w", 6,    two(0006374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up },
226648024e4aSbellard {"cas2w", 6,    two(0006374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up },
226748024e4aSbellard {"cas2l", 6,    two(0007374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up },
226848024e4aSbellard {"cas2l", 6,    two(0007374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up },
226948024e4aSbellard 
227048024e4aSbellard {"casb", 4,	two(0005300, 0), two(0177700, 0177070),	"D3D2~s", m68020up },
227148024e4aSbellard {"casw", 4,	two(0006300, 0), two(0177700, 0177070),	"D3D2~s", m68020up },
227248024e4aSbellard {"casl", 4,	two(0007300, 0), two(0177700, 0177070),	"D3D2~s", m68020up },
227348024e4aSbellard 
227448024e4aSbellard {"chk2b", 4, 	two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
227548024e4aSbellard {"chk2w", 4, 	two(0001300,0004000),	two(0177700,07777), "!sR1", m68020up | cpu32 },
227648024e4aSbellard {"chk2l", 4, 	two(0002300,0004000),	two(0177700,07777), "!sR1", m68020up | cpu32 },
227748024e4aSbellard 
227848024e4aSbellard {"chkl", 2,	one(0040400),		one(0170700), ";lDd", m68000up },
227948024e4aSbellard {"chkw", 2,	one(0040600),		one(0170700), ";wDd", m68000up },
228048024e4aSbellard 
228148024e4aSbellard #define SCOPE_LINE (0x1 << 3)
228248024e4aSbellard #define SCOPE_PAGE (0x2 << 3)
228348024e4aSbellard #define SCOPE_ALL  (0x3 << 3)
228448024e4aSbellard 
228548024e4aSbellard {"cinva", 2,	one(0xf400|SCOPE_ALL),  one(0xff38), "ce",   m68040up },
228648024e4aSbellard {"cinvl", 2,	one(0xf400|SCOPE_LINE), one(0xff38), "ceas", m68040up },
228748024e4aSbellard {"cinvp", 2,	one(0xf400|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
228848024e4aSbellard 
228948024e4aSbellard {"cpusha", 2,	one(0xf420|SCOPE_ALL),  one(0xff38), "ce",   m68040up },
229048024e4aSbellard {"cpushl", 2,	one(0xf420|SCOPE_LINE), one(0xff38), "ceas", m68040up | mcfisa_a },
229148024e4aSbellard {"cpushp", 2,	one(0xf420|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
229248024e4aSbellard 
229348024e4aSbellard #undef SCOPE_LINE
229448024e4aSbellard #undef SCOPE_PAGE
229548024e4aSbellard #undef SCOPE_ALL
229648024e4aSbellard 
229748024e4aSbellard {"clrb", 2,	one(0041000),	one(0177700), "$s", m68000up | mcfisa_a },
229848024e4aSbellard {"clrw", 2,	one(0041100),	one(0177700), "$s", m68000up | mcfisa_a },
229948024e4aSbellard {"clrl", 2,	one(0041200),	one(0177700), "$s", m68000up | mcfisa_a },
230048024e4aSbellard 
230148024e4aSbellard {"cmp2b", 4,	two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
230248024e4aSbellard {"cmp2w", 4,	two(0001300,0),	two(0177700,07777), "!sR1", m68020up | cpu32 },
230348024e4aSbellard {"cmp2l", 4,	two(0002300,0),	two(0177700,07777), "!sR1", m68020up | cpu32 },
230448024e4aSbellard 
230548024e4aSbellard {"cmpaw", 2,	one(0130300),	one(0170700), "*wAd", m68000up },
230648024e4aSbellard {"cmpal", 2,	one(0130700),	one(0170700), "*lAd", m68000up | mcfisa_a },
230748024e4aSbellard 
230848024e4aSbellard {"cmpib", 4,	one(0006000),	one(0177700), "#b@s", m68000up },
230948024e4aSbellard {"cmpib", 4,	one(0006000),	one(0177700), "#bDs", mcfisa_b },
231048024e4aSbellard {"cmpiw", 4,	one(0006100),	one(0177700), "#w@s", m68000up },
231148024e4aSbellard {"cmpiw", 4,	one(0006100),	one(0177700), "#wDs", mcfisa_b },
231248024e4aSbellard {"cmpil", 6,	one(0006200),	one(0177700), "#l@s", m68000up },
231348024e4aSbellard {"cmpil", 6,	one(0006200),	one(0177700), "#lDs", mcfisa_a },
231448024e4aSbellard 
231548024e4aSbellard {"cmpmb", 2,	one(0130410),	one(0170770), "+s+d", m68000up },
231648024e4aSbellard {"cmpmw", 2,	one(0130510),	one(0170770), "+s+d", m68000up },
231748024e4aSbellard {"cmpml", 2,	one(0130610),	one(0170770), "+s+d", m68000up },
231848024e4aSbellard 
231948024e4aSbellard /* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions.  */
232048024e4aSbellard {"cmpb", 4,	one(0006000),	one(0177700), "#b@s", m68000up },
232148024e4aSbellard {"cmpb", 4,	one(0006000),	one(0177700), "#bDs", mcfisa_b },
232248024e4aSbellard {"cmpb", 2,	one(0130410),	one(0170770), "+s+d", m68000up },
232348024e4aSbellard {"cmpb", 2,	one(0130000),	one(0170700), ";bDd", m68000up },
232448024e4aSbellard {"cmpb", 2,	one(0130000),	one(0170700), "*bDd", mcfisa_b },
232548024e4aSbellard {"cmpw", 2,	one(0130300),	one(0170700), "*wAd", m68000up },
232648024e4aSbellard {"cmpw", 4,	one(0006100),	one(0177700), "#w@s", m68000up },
232748024e4aSbellard {"cmpw", 4,	one(0006100),	one(0177700), "#wDs", mcfisa_b },
232848024e4aSbellard {"cmpw", 2,	one(0130510),	one(0170770), "+s+d", m68000up },
232948024e4aSbellard {"cmpw", 2,	one(0130100),	one(0170700), "*wDd", m68000up | mcfisa_b },
233048024e4aSbellard {"cmpl", 2,	one(0130700),	one(0170700), "*lAd", m68000up | mcfisa_a },
233148024e4aSbellard {"cmpl", 6,	one(0006200),	one(0177700), "#l@s", m68000up },
233248024e4aSbellard {"cmpl", 6,	one(0006200),	one(0177700), "#lDs", mcfisa_a },
233348024e4aSbellard {"cmpl", 2,	one(0130610),	one(0170770), "+s+d", m68000up },
233448024e4aSbellard {"cmpl", 2,	one(0130200),	one(0170700), "*lDd", m68000up | mcfisa_a },
233548024e4aSbellard 
233648024e4aSbellard {"dbcc", 2,	one(0052310),	one(0177770), "DsBw", m68000up },
233748024e4aSbellard {"dbcs", 2,	one(0052710),	one(0177770), "DsBw", m68000up },
233848024e4aSbellard {"dbeq", 2,	one(0053710),	one(0177770), "DsBw", m68000up },
233948024e4aSbellard {"dbf", 2,	one(0050710),	one(0177770), "DsBw", m68000up },
234048024e4aSbellard {"dbge", 2,	one(0056310),	one(0177770), "DsBw", m68000up },
234148024e4aSbellard {"dbgt", 2,	one(0057310),	one(0177770), "DsBw", m68000up },
234248024e4aSbellard {"dbhi", 2,	one(0051310),	one(0177770), "DsBw", m68000up },
234348024e4aSbellard {"dble", 2,	one(0057710),	one(0177770), "DsBw", m68000up },
234448024e4aSbellard {"dbls", 2,	one(0051710),	one(0177770), "DsBw", m68000up },
234548024e4aSbellard {"dblt", 2,	one(0056710),	one(0177770), "DsBw", m68000up },
234648024e4aSbellard {"dbmi", 2,	one(0055710),	one(0177770), "DsBw", m68000up },
234748024e4aSbellard {"dbne", 2,	one(0053310),	one(0177770), "DsBw", m68000up },
234848024e4aSbellard {"dbpl", 2,	one(0055310),	one(0177770), "DsBw", m68000up },
234948024e4aSbellard {"dbt", 2,	one(0050310),	one(0177770), "DsBw", m68000up },
235048024e4aSbellard {"dbvc", 2,	one(0054310),	one(0177770), "DsBw", m68000up },
235148024e4aSbellard {"dbvs", 2,	one(0054710),	one(0177770), "DsBw", m68000up },
235248024e4aSbellard 
235348024e4aSbellard {"divsw", 2,	one(0100700),	one(0170700), ";wDd", m68000up | mcfhwdiv },
235448024e4aSbellard 
235548024e4aSbellard {"divsl", 4, 	two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
235648024e4aSbellard {"divsl", 4, 	two(0046100,0004000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
235748024e4aSbellard {"divsl", 4, 	two(0046100,0004000),two(0177700,0107770),"qsDD",   mcfhwdiv },
235848024e4aSbellard 
235948024e4aSbellard {"divsll", 4, 	two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
236048024e4aSbellard {"divsll", 4, 	two(0046100,0004000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
236148024e4aSbellard 
236248024e4aSbellard {"divuw", 2,	one(0100300),		one(0170700), ";wDd", m68000up | mcfhwdiv },
236348024e4aSbellard 
236448024e4aSbellard {"divul", 4,	two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
236548024e4aSbellard {"divul", 4,	two(0046100,0000000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
236648024e4aSbellard {"divul", 4,	two(0046100,0000000),two(0177700,0107770),"qsDD",   mcfhwdiv },
236748024e4aSbellard 
236848024e4aSbellard {"divull", 4,	two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
236948024e4aSbellard {"divull", 4,	two(0046100,0000000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
237048024e4aSbellard 
237148024e4aSbellard {"eorib", 4,	one(0005000),	one(0177700), "#b$s", m68000up },
237248024e4aSbellard {"eorib", 4,	one(0005074),	one(0177777), "#bCs", m68000up },
237348024e4aSbellard {"eoriw", 4,	one(0005100),	one(0177700), "#w$s", m68000up },
237448024e4aSbellard {"eoriw", 4,	one(0005174),	one(0177777), "#wSs", m68000up },
237548024e4aSbellard {"eoril", 6,	one(0005200),	one(0177700), "#l$s", m68000up },
237648024e4aSbellard {"eoril", 6,	one(0005200),	one(0177700), "#lDs", mcfisa_a },
237748024e4aSbellard {"eori", 4,	one(0005074),	one(0177777), "#bCs", m68000up },
237848024e4aSbellard {"eori", 4,	one(0005174),	one(0177777), "#wSs", m68000up },
237948024e4aSbellard {"eori", 4,	one(0005100),	one(0177700), "#w$s", m68000up },
238048024e4aSbellard 
238148024e4aSbellard /* The eor opcode can generate the eori instruction.  */
238248024e4aSbellard {"eorb", 4,	one(0005000),	one(0177700), "#b$s", m68000up },
238348024e4aSbellard {"eorb", 4,	one(0005074),	one(0177777), "#bCs", m68000up },
238448024e4aSbellard {"eorb", 2,	one(0130400),	one(0170700), "Dd$s", m68000up },
238548024e4aSbellard {"eorw", 4,	one(0005100),	one(0177700), "#w$s", m68000up },
238648024e4aSbellard {"eorw", 4,	one(0005174),	one(0177777), "#wSs", m68000up },
238748024e4aSbellard {"eorw", 2,	one(0130500),	one(0170700), "Dd$s", m68000up },
238848024e4aSbellard {"eorl", 6,	one(0005200),	one(0177700), "#l$s", m68000up },
238948024e4aSbellard {"eorl", 6,	one(0005200),	one(0177700), "#lDs", mcfisa_a },
239048024e4aSbellard {"eorl", 2,	one(0130600),	one(0170700), "Dd$s", m68000up | mcfisa_a },
239148024e4aSbellard {"eor", 4,	one(0005074),	one(0177777), "#bCs", m68000up },
239248024e4aSbellard {"eor", 4,	one(0005174),	one(0177777), "#wSs", m68000up },
239348024e4aSbellard {"eor", 4,	one(0005100),	one(0177700), "#w$s", m68000up },
239448024e4aSbellard {"eor", 2,	one(0130500),	one(0170700), "Dd$s", m68000up },
239548024e4aSbellard 
239648024e4aSbellard {"exg", 2,	one(0140500),	one(0170770), "DdDs", m68000up },
239748024e4aSbellard {"exg", 2,	one(0140510),	one(0170770), "AdAs", m68000up },
239848024e4aSbellard {"exg", 2,	one(0140610),	one(0170770), "DdAs", m68000up },
239948024e4aSbellard {"exg", 2,	one(0140610),	one(0170770), "AsDd", m68000up },
240048024e4aSbellard 
240148024e4aSbellard {"extw", 2,	one(0044200),	one(0177770), "Ds", m68000up|mcfisa_a },
240248024e4aSbellard {"extl", 2,	one(0044300),	one(0177770), "Ds", m68000up|mcfisa_a },
240348024e4aSbellard {"extbl", 2,	one(0044700),	one(0177770), "Ds", m68020up|cpu32|mcfisa_a },
240448024e4aSbellard 
240548024e4aSbellard {"ff1", 2,   	one(0002300), one(0177770), "Ds", mcfisa_aa},
240648024e4aSbellard 
240748024e4aSbellard /* float stuff starts here */
240848024e4aSbellard 
240948024e4aSbellard {"fabsb", 4,	two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
241048024e4aSbellard {"fabsb", 4,	two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
241148024e4aSbellard {"fabsd", 4,	two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
241248024e4aSbellard {"fabsd", 4,	two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt", cfloat },
241348024e4aSbellard {"fabsd", 4,	two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
241448024e4aSbellard {"fabsd", 4,	two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
241548024e4aSbellard {"fabsl", 4,	two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
241648024e4aSbellard {"fabsl", 4,	two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
241748024e4aSbellard {"fabsp", 4,	two(0xF000, 0x4C18), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
241848024e4aSbellard {"fabss", 4,	two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", cfloat },
241948024e4aSbellard {"fabss", 4,	two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
242048024e4aSbellard {"fabsw", 4,	two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
242148024e4aSbellard {"fabsw", 4,	two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
242248024e4aSbellard {"fabsx", 4,	two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
242348024e4aSbellard {"fabsx", 4,	two(0xF000, 0x4818), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
242448024e4aSbellard {"fabsx", 4,	two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
242548024e4aSbellard 
242648024e4aSbellard {"fsabsb", 4,	two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
242748024e4aSbellard {"fsabsb", 4,	two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
242848024e4aSbellard {"fsabsd", 4,	two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
242948024e4aSbellard {"fsabsd", 4,	two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt", cfloat },
243048024e4aSbellard {"fsabsd", 4,	two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
243148024e4aSbellard {"fsabsd", 4,	two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
243248024e4aSbellard {"fsabsl", 4,	two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
243348024e4aSbellard {"fsabsl", 4,	two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
243448024e4aSbellard {"fsabsp", 4,	two(0xF000, 0x4C58), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
243548024e4aSbellard {"fsabss", 4,	two(0xF000, 0x4258), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
243648024e4aSbellard {"fsabss", 4,	two(0xF000, 0x4458), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
243748024e4aSbellard {"fsabsw", 4,	two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
243848024e4aSbellard {"fsabsw", 4,	two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
243948024e4aSbellard {"fsabsx", 4,	two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
244048024e4aSbellard {"fsabsx", 4,	two(0xF000, 0x4858), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
244148024e4aSbellard {"fsabsx", 4,	two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
244248024e4aSbellard 
244348024e4aSbellard {"fdabsb", 4,	two(0xF000, 0x585C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
244448024e4aSbellard {"fdabsb", 4,	two(0xF000, 0x585c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up},
244548024e4aSbellard {"fdabsd", 4,	two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
244648024e4aSbellard {"fdabsd", 4,	two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiFt", cfloat },
244748024e4aSbellard {"fdabsd", 4,	two(0xF000, 0x545C), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
244848024e4aSbellard {"fdabsd", 4,	two(0xF000, 0x545c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up},
244948024e4aSbellard {"fdabsl", 4,	two(0xF000, 0x405C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
245048024e4aSbellard {"fdabsl", 4,	two(0xF000, 0x405c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up},
245148024e4aSbellard {"fdabsp", 4,	two(0xF000, 0x4C5c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up},
245248024e4aSbellard {"fdabss", 4,	two(0xF000, 0x425C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
245348024e4aSbellard {"fdabss", 4,	two(0xF000, 0x445c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up},
245448024e4aSbellard {"fdabsw", 4,	two(0xF000, 0x505C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
245548024e4aSbellard {"fdabsw", 4,	two(0xF000, 0x505c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up},
245648024e4aSbellard {"fdabsx", 4,	two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up},
245748024e4aSbellard {"fdabsx", 4,	two(0xF000, 0x485c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up},
245848024e4aSbellard {"fdabsx", 4,	two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiFt",   m68040up},
245948024e4aSbellard 
246048024e4aSbellard {"facosb", 4,	two(0xF000, 0x581C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
246148024e4aSbellard {"facosd", 4,	two(0xF000, 0x541C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
246248024e4aSbellard {"facosl", 4,	two(0xF000, 0x401C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
246348024e4aSbellard {"facosp", 4,	two(0xF000, 0x4C1C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
246448024e4aSbellard {"facoss", 4,	two(0xF000, 0x441C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
246548024e4aSbellard {"facosw", 4,	two(0xF000, 0x501C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
246648024e4aSbellard {"facosx", 4,	two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
246748024e4aSbellard {"facosx", 4,	two(0xF000, 0x481C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
246848024e4aSbellard {"facosx", 4,	two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
246948024e4aSbellard 
247048024e4aSbellard {"faddb", 4,	two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
247148024e4aSbellard {"faddb", 4,	two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
247248024e4aSbellard {"faddd", 4,	two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
247348024e4aSbellard {"faddd", 4,	two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
247448024e4aSbellard {"faddd", 4,	two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
247548024e4aSbellard {"faddd", 4,	two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
247648024e4aSbellard {"faddl", 4,	two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
247748024e4aSbellard {"faddl", 4,	two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
247848024e4aSbellard {"faddp", 4,	two(0xF000, 0x4C22), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
247948024e4aSbellard {"fadds", 4,	two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
248048024e4aSbellard {"fadds", 4,	two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
248148024e4aSbellard {"faddw", 4,	two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
248248024e4aSbellard {"faddw", 4,	two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
248348024e4aSbellard {"faddx", 4,	two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
248448024e4aSbellard {"faddx", 4,	two(0xF000, 0x4822), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
248548024e4aSbellard 
248648024e4aSbellard {"fsaddb", 4,	two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
248748024e4aSbellard {"fsaddb", 4,	two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
248848024e4aSbellard {"fsaddd", 4,	two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
248948024e4aSbellard {"fsaddd", 4,	two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
249048024e4aSbellard {"fsaddd", 4,	two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
249148024e4aSbellard {"fsaddl", 4,	two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
249248024e4aSbellard {"fsaddl", 4,	two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
249348024e4aSbellard {"fsaddp", 4,	two(0xF000, 0x4C62), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
249448024e4aSbellard {"fsadds", 4,	two(0xF000, 0x4462), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
249548024e4aSbellard {"fsadds", 4,	two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
249648024e4aSbellard {"fsaddw", 4,	two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
249748024e4aSbellard {"fsaddw", 4,	two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
249848024e4aSbellard {"fsaddx", 4,	two(0xF000, 0x0062), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
249948024e4aSbellard {"fsaddx", 4,	two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
250048024e4aSbellard 
250148024e4aSbellard {"fdaddb", 4,	two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
250248024e4aSbellard {"fdaddb", 4,	two(0xF000, 0x5866), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
250348024e4aSbellard {"fdaddd", 4,	two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
250448024e4aSbellard {"fdaddd", 4,	two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
250548024e4aSbellard {"fdaddd", 4,	two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
250648024e4aSbellard {"fdaddl", 4,	two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
250748024e4aSbellard {"fdaddl", 4,	two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
250848024e4aSbellard {"fdaddp", 4,	two(0xF000, 0x4C66), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
250948024e4aSbellard {"fdadds", 4,	two(0xF000, 0x4466), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
251048024e4aSbellard {"fdadds", 4,	two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
251148024e4aSbellard {"fdaddw", 4,	two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
251248024e4aSbellard {"fdaddw", 4,	two(0xF000, 0x5066), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
251348024e4aSbellard {"fdaddx", 4,	two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
251448024e4aSbellard {"fdaddx", 4,	two(0xF000, 0x4866), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
251548024e4aSbellard 
251648024e4aSbellard {"fasinb", 4,	two(0xF000, 0x580C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
251748024e4aSbellard {"fasind", 4,	two(0xF000, 0x540C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
251848024e4aSbellard {"fasinl", 4,	two(0xF000, 0x400C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
251948024e4aSbellard {"fasinp", 4,	two(0xF000, 0x4C0C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
252048024e4aSbellard {"fasins", 4,	two(0xF000, 0x440C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
252148024e4aSbellard {"fasinw", 4,	two(0xF000, 0x500C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
252248024e4aSbellard {"fasinx", 4,	two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
252348024e4aSbellard {"fasinx", 4,	two(0xF000, 0x480C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
252448024e4aSbellard {"fasinx", 4,	two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
252548024e4aSbellard 
252648024e4aSbellard {"fatanb", 4,	two(0xF000, 0x580A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
252748024e4aSbellard {"fatand", 4,	two(0xF000, 0x540A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
252848024e4aSbellard {"fatanl", 4,	two(0xF000, 0x400A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
252948024e4aSbellard {"fatanp", 4,	two(0xF000, 0x4C0A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
253048024e4aSbellard {"fatans", 4,	two(0xF000, 0x440A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
253148024e4aSbellard {"fatanw", 4,	two(0xF000, 0x500A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
253248024e4aSbellard {"fatanx", 4,	two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
253348024e4aSbellard {"fatanx", 4,	two(0xF000, 0x480A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
253448024e4aSbellard {"fatanx", 4,	two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
253548024e4aSbellard 
253648024e4aSbellard {"fatanhb", 4,	two(0xF000, 0x580D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
253748024e4aSbellard {"fatanhd", 4,	two(0xF000, 0x540D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
253848024e4aSbellard {"fatanhl", 4,	two(0xF000, 0x400D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
253948024e4aSbellard {"fatanhp", 4,	two(0xF000, 0x4C0D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
254048024e4aSbellard {"fatanhs", 4,	two(0xF000, 0x440D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
254148024e4aSbellard {"fatanhw", 4,	two(0xF000, 0x500D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
254248024e4aSbellard {"fatanhx", 4,	two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
254348024e4aSbellard {"fatanhx", 4,	two(0xF000, 0x480D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
254448024e4aSbellard {"fatanhx", 4,	two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
254548024e4aSbellard 
254648024e4aSbellard {"fbeq", 2,	one(0xF081),		one(0xF1FF), "IdBW", mfloat | cfloat },
254748024e4aSbellard {"fbf", 2,	one(0xF080),		one(0xF1FF), "IdBW", mfloat | cfloat },
254848024e4aSbellard {"fbge", 2,	one(0xF093),		one(0xF1FF), "IdBW", mfloat | cfloat },
254948024e4aSbellard {"fbgl", 2,	one(0xF096),		one(0xF1FF), "IdBW", mfloat | cfloat },
255048024e4aSbellard {"fbgle", 2,	one(0xF097),		one(0xF1FF), "IdBW", mfloat | cfloat },
255148024e4aSbellard {"fbgt", 2,	one(0xF092),		one(0xF1FF), "IdBW", mfloat | cfloat },
255248024e4aSbellard {"fble", 2,	one(0xF095),		one(0xF1FF), "IdBW", mfloat | cfloat },
255348024e4aSbellard {"fblt", 2,	one(0xF094),		one(0xF1FF), "IdBW", mfloat | cfloat },
255448024e4aSbellard {"fbne", 2,	one(0xF08E),		one(0xF1FF), "IdBW", mfloat | cfloat },
255548024e4aSbellard {"fbnge", 2,	one(0xF09C),		one(0xF1FF), "IdBW", mfloat | cfloat },
255648024e4aSbellard {"fbngl", 2,	one(0xF099),		one(0xF1FF), "IdBW", mfloat | cfloat },
255748024e4aSbellard {"fbngle", 2,	one(0xF098),		one(0xF1FF), "IdBW", mfloat | cfloat },
255848024e4aSbellard {"fbngt", 2,	one(0xF09D),		one(0xF1FF), "IdBW", mfloat | cfloat },
255948024e4aSbellard {"fbnle", 2,	one(0xF09A),		one(0xF1FF), "IdBW", mfloat | cfloat },
256048024e4aSbellard {"fbnlt", 2,	one(0xF09B),		one(0xF1FF), "IdBW", mfloat | cfloat },
256148024e4aSbellard {"fboge", 2,	one(0xF083),		one(0xF1FF), "IdBW", mfloat | cfloat },
256248024e4aSbellard {"fbogl", 2,	one(0xF086),		one(0xF1FF), "IdBW", mfloat | cfloat },
256348024e4aSbellard {"fbogt", 2,	one(0xF082),		one(0xF1FF), "IdBW", mfloat | cfloat },
256448024e4aSbellard {"fbole", 2,	one(0xF085),		one(0xF1FF), "IdBW", mfloat | cfloat },
256548024e4aSbellard {"fbolt", 2,	one(0xF084),		one(0xF1FF), "IdBW", mfloat | cfloat },
256648024e4aSbellard {"fbor", 2,	one(0xF087),		one(0xF1FF), "IdBW", mfloat | cfloat },
256748024e4aSbellard {"fbseq", 2,	one(0xF091),		one(0xF1FF), "IdBW", mfloat | cfloat },
256848024e4aSbellard {"fbsf", 2,	one(0xF090),		one(0xF1FF), "IdBW", mfloat | cfloat },
256948024e4aSbellard {"fbsne", 2,	one(0xF09E),		one(0xF1FF), "IdBW", mfloat | cfloat },
257048024e4aSbellard {"fbst", 2,	one(0xF09F),		one(0xF1FF), "IdBW", mfloat | cfloat },
257148024e4aSbellard {"fbt", 2,	one(0xF08F),		one(0xF1FF), "IdBW", mfloat | cfloat },
257248024e4aSbellard {"fbueq", 2,	one(0xF089),		one(0xF1FF), "IdBW", mfloat | cfloat },
257348024e4aSbellard {"fbuge", 2,	one(0xF08B),		one(0xF1FF), "IdBW", mfloat | cfloat },
257448024e4aSbellard {"fbugt", 2,	one(0xF08A),		one(0xF1FF), "IdBW", mfloat | cfloat },
257548024e4aSbellard {"fbule", 2,	one(0xF08D),		one(0xF1FF), "IdBW", mfloat | cfloat },
257648024e4aSbellard {"fbult", 2,	one(0xF08C),		one(0xF1FF), "IdBW", mfloat | cfloat },
257748024e4aSbellard {"fbun", 2,	one(0xF088),		one(0xF1FF), "IdBW", mfloat | cfloat },
257848024e4aSbellard 
257948024e4aSbellard {"fbeql", 2,	one(0xF0C1),		one(0xF1FF), "IdBC", mfloat | cfloat },
258048024e4aSbellard {"fbfl", 2,	one(0xF0C0),		one(0xF1FF), "IdBC", mfloat | cfloat },
258148024e4aSbellard {"fbgel", 2,	one(0xF0D3),		one(0xF1FF), "IdBC", mfloat | cfloat },
258248024e4aSbellard {"fbgll", 2,	one(0xF0D6),		one(0xF1FF), "IdBC", mfloat | cfloat },
258348024e4aSbellard {"fbglel", 2,	one(0xF0D7),		one(0xF1FF), "IdBC", mfloat | cfloat },
258448024e4aSbellard {"fbgtl", 2,	one(0xF0D2),		one(0xF1FF), "IdBC", mfloat | cfloat },
258548024e4aSbellard {"fblel", 2,	one(0xF0D5),		one(0xF1FF), "IdBC", mfloat | cfloat },
258648024e4aSbellard {"fbltl", 2,	one(0xF0D4),		one(0xF1FF), "IdBC", mfloat | cfloat },
258748024e4aSbellard {"fbnel", 2,	one(0xF0CE),		one(0xF1FF), "IdBC", mfloat | cfloat },
258848024e4aSbellard {"fbngel", 2,	one(0xF0DC),		one(0xF1FF), "IdBC", mfloat | cfloat },
258948024e4aSbellard {"fbngll", 2,	one(0xF0D9),		one(0xF1FF), "IdBC", mfloat | cfloat },
259048024e4aSbellard {"fbnglel", 2,	one(0xF0D8),		one(0xF1FF), "IdBC", mfloat | cfloat },
259148024e4aSbellard {"fbngtl", 2,	one(0xF0DD),		one(0xF1FF), "IdBC", mfloat | cfloat },
259248024e4aSbellard {"fbnlel", 2,	one(0xF0DA),		one(0xF1FF), "IdBC", mfloat | cfloat },
259348024e4aSbellard {"fbnltl", 2,	one(0xF0DB),		one(0xF1FF), "IdBC", mfloat | cfloat },
259448024e4aSbellard {"fbogel", 2,	one(0xF0C3),		one(0xF1FF), "IdBC", mfloat | cfloat },
259548024e4aSbellard {"fbogll", 2,	one(0xF0C6),		one(0xF1FF), "IdBC", mfloat | cfloat },
259648024e4aSbellard {"fbogtl", 2,	one(0xF0C2),		one(0xF1FF), "IdBC", mfloat | cfloat },
259748024e4aSbellard {"fbolel", 2,	one(0xF0C5),		one(0xF1FF), "IdBC", mfloat | cfloat },
259848024e4aSbellard {"fboltl", 2,	one(0xF0C4),		one(0xF1FF), "IdBC", mfloat | cfloat },
259948024e4aSbellard {"fborl", 2,	one(0xF0C7),		one(0xF1FF), "IdBC", mfloat | cfloat },
260048024e4aSbellard {"fbseql", 2,	one(0xF0D1),		one(0xF1FF), "IdBC", mfloat | cfloat },
260148024e4aSbellard {"fbsfl", 2,	one(0xF0D0),		one(0xF1FF), "IdBC", mfloat | cfloat },
260248024e4aSbellard {"fbsnel", 2,	one(0xF0DE),		one(0xF1FF), "IdBC", mfloat | cfloat },
260348024e4aSbellard {"fbstl", 2,	one(0xF0DF),		one(0xF1FF), "IdBC", mfloat | cfloat },
260448024e4aSbellard {"fbtl", 2,	one(0xF0CF),		one(0xF1FF), "IdBC", mfloat | cfloat },
260548024e4aSbellard {"fbueql", 2,	one(0xF0C9),		one(0xF1FF), "IdBC", mfloat | cfloat },
260648024e4aSbellard {"fbugel", 2,	one(0xF0CB),		one(0xF1FF), "IdBC", mfloat | cfloat },
260748024e4aSbellard {"fbugtl", 2,	one(0xF0CA),		one(0xF1FF), "IdBC", mfloat | cfloat },
260848024e4aSbellard {"fbulel", 2,	one(0xF0CD),		one(0xF1FF), "IdBC", mfloat | cfloat },
260948024e4aSbellard {"fbultl", 2,	one(0xF0CC),		one(0xF1FF), "IdBC", mfloat | cfloat },
261048024e4aSbellard {"fbunl", 2,	one(0xF0C8),		one(0xF1FF), "IdBC", mfloat | cfloat },
261148024e4aSbellard 
261248024e4aSbellard {"fjeq", 2,	one(0xF081),		one(0xF1BF), "IdBc", mfloat | cfloat },
261348024e4aSbellard {"fjf", 2,	one(0xF080),		one(0xF1BF), "IdBc", mfloat | cfloat },
261448024e4aSbellard {"fjge", 2,	one(0xF093),		one(0xF1BF), "IdBc", mfloat | cfloat },
261548024e4aSbellard {"fjgl", 2,	one(0xF096),		one(0xF1BF), "IdBc", mfloat | cfloat },
261648024e4aSbellard {"fjgle", 2,	one(0xF097),		one(0xF1BF), "IdBc", mfloat | cfloat },
261748024e4aSbellard {"fjgt", 2,	one(0xF092),		one(0xF1BF), "IdBc", mfloat | cfloat },
261848024e4aSbellard {"fjle", 2,	one(0xF095),		one(0xF1BF), "IdBc", mfloat | cfloat },
261948024e4aSbellard {"fjlt", 2,	one(0xF094),		one(0xF1BF), "IdBc", mfloat | cfloat },
262048024e4aSbellard {"fjne", 2,	one(0xF08E),		one(0xF1BF), "IdBc", mfloat | cfloat },
262148024e4aSbellard {"fjnge", 2,	one(0xF09C),		one(0xF1BF), "IdBc", mfloat | cfloat },
262248024e4aSbellard {"fjngl", 2,	one(0xF099),		one(0xF1BF), "IdBc", mfloat | cfloat },
262348024e4aSbellard {"fjngle", 2,	one(0xF098),		one(0xF1BF), "IdBc", mfloat | cfloat },
262448024e4aSbellard {"fjngt", 2,	one(0xF09D),		one(0xF1BF), "IdBc", mfloat | cfloat },
262548024e4aSbellard {"fjnle", 2,	one(0xF09A),		one(0xF1BF), "IdBc", mfloat | cfloat },
262648024e4aSbellard {"fjnlt", 2,	one(0xF09B),		one(0xF1BF), "IdBc", mfloat | cfloat },
262748024e4aSbellard {"fjoge", 2,	one(0xF083),		one(0xF1BF), "IdBc", mfloat | cfloat },
262848024e4aSbellard {"fjogl", 2,	one(0xF086),		one(0xF1BF), "IdBc", mfloat | cfloat },
262948024e4aSbellard {"fjogt", 2,	one(0xF082),		one(0xF1BF), "IdBc", mfloat | cfloat },
263048024e4aSbellard {"fjole", 2,	one(0xF085),		one(0xF1BF), "IdBc", mfloat | cfloat },
263148024e4aSbellard {"fjolt", 2,	one(0xF084),		one(0xF1BF), "IdBc", mfloat | cfloat },
263248024e4aSbellard {"fjor", 2,	one(0xF087),		one(0xF1BF), "IdBc", mfloat | cfloat },
263348024e4aSbellard {"fjseq", 2,	one(0xF091),		one(0xF1BF), "IdBc", mfloat | cfloat },
263448024e4aSbellard {"fjsf", 2,	one(0xF090),		one(0xF1BF), "IdBc", mfloat | cfloat },
263548024e4aSbellard {"fjsne", 2,	one(0xF09E),		one(0xF1BF), "IdBc", mfloat | cfloat },
263648024e4aSbellard {"fjst", 2,	one(0xF09F),		one(0xF1BF), "IdBc", mfloat | cfloat },
263748024e4aSbellard {"fjt", 2,	one(0xF08F),		one(0xF1BF), "IdBc", mfloat | cfloat },
263848024e4aSbellard {"fjueq", 2,	one(0xF089),		one(0xF1BF), "IdBc", mfloat | cfloat },
263948024e4aSbellard {"fjuge", 2,	one(0xF08B),		one(0xF1BF), "IdBc", mfloat | cfloat },
264048024e4aSbellard {"fjugt", 2,	one(0xF08A),		one(0xF1BF), "IdBc", mfloat | cfloat },
264148024e4aSbellard {"fjule", 2,	one(0xF08D),		one(0xF1BF), "IdBc", mfloat | cfloat },
264248024e4aSbellard {"fjult", 2,	one(0xF08C),		one(0xF1BF), "IdBc", mfloat | cfloat },
264348024e4aSbellard {"fjun", 2,	one(0xF088),		one(0xF1BF), "IdBc", mfloat | cfloat },
264448024e4aSbellard 
264548024e4aSbellard {"fcmpb", 4,	two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
264648024e4aSbellard {"fcmpb", 4,	two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
264748024e4aSbellard {"fcmpd", 4,	two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
264848024e4aSbellard {"fcmpd", 4,	two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
264948024e4aSbellard {"fcmpd", 4,	two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
265048024e4aSbellard {"fcmpl", 4,	two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
265148024e4aSbellard {"fcmpl", 4,	two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
265248024e4aSbellard {"fcmpp", 4,	two(0xF000, 0x4C38), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
265348024e4aSbellard {"fcmps", 4,	two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
265448024e4aSbellard {"fcmps", 4,	two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
265548024e4aSbellard {"fcmpw", 4,	two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
265648024e4aSbellard {"fcmpw", 4,	two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
265748024e4aSbellard {"fcmpx", 4,	two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
265848024e4aSbellard {"fcmpx", 4,	two(0xF000, 0x4838), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
265948024e4aSbellard 
266048024e4aSbellard {"fcosb", 4,	two(0xF000, 0x581D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
266148024e4aSbellard {"fcosd", 4,	two(0xF000, 0x541D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
266248024e4aSbellard {"fcosl", 4,	two(0xF000, 0x401D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
266348024e4aSbellard {"fcosp", 4,	two(0xF000, 0x4C1D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
266448024e4aSbellard {"fcoss", 4,	two(0xF000, 0x441D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
266548024e4aSbellard {"fcosw", 4,	two(0xF000, 0x501D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
266648024e4aSbellard {"fcosx", 4,	two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
266748024e4aSbellard {"fcosx", 4,	two(0xF000, 0x481D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
266848024e4aSbellard {"fcosx", 4,	two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
266948024e4aSbellard 
267048024e4aSbellard {"fcoshb", 4,	two(0xF000, 0x5819), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
267148024e4aSbellard {"fcoshd", 4,	two(0xF000, 0x5419), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
267248024e4aSbellard {"fcoshl", 4,	two(0xF000, 0x4019), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
267348024e4aSbellard {"fcoshp", 4,	two(0xF000, 0x4C19), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
267448024e4aSbellard {"fcoshs", 4,	two(0xF000, 0x4419), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
267548024e4aSbellard {"fcoshw", 4,	two(0xF000, 0x5019), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
267648024e4aSbellard {"fcoshx", 4,	two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
267748024e4aSbellard {"fcoshx", 4,	two(0xF000, 0x4819), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
267848024e4aSbellard {"fcoshx", 4,	two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
267948024e4aSbellard 
268048024e4aSbellard {"fdbeq", 4,	two(0xF048, 0x0001), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268148024e4aSbellard {"fdbf", 4,	two(0xF048, 0x0000), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268248024e4aSbellard {"fdbge", 4,	two(0xF048, 0x0013), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268348024e4aSbellard {"fdbgl", 4,	two(0xF048, 0x0016), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268448024e4aSbellard {"fdbgle", 4,	two(0xF048, 0x0017), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268548024e4aSbellard {"fdbgt", 4,	two(0xF048, 0x0012), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268648024e4aSbellard {"fdble", 4,	two(0xF048, 0x0015), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268748024e4aSbellard {"fdblt", 4,	two(0xF048, 0x0014), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268848024e4aSbellard {"fdbne", 4,	two(0xF048, 0x000E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268948024e4aSbellard {"fdbnge", 4,	two(0xF048, 0x001C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269048024e4aSbellard {"fdbngl", 4,	two(0xF048, 0x0019), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269148024e4aSbellard {"fdbngle", 4,	two(0xF048, 0x0018), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269248024e4aSbellard {"fdbngt", 4,	two(0xF048, 0x001D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269348024e4aSbellard {"fdbnle", 4,	two(0xF048, 0x001A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269448024e4aSbellard {"fdbnlt", 4,	two(0xF048, 0x001B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269548024e4aSbellard {"fdboge", 4,	two(0xF048, 0x0003), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269648024e4aSbellard {"fdbogl", 4,	two(0xF048, 0x0006), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269748024e4aSbellard {"fdbogt", 4,	two(0xF048, 0x0002), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269848024e4aSbellard {"fdbole", 4,	two(0xF048, 0x0005), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269948024e4aSbellard {"fdbolt", 4,	two(0xF048, 0x0004), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270048024e4aSbellard {"fdbor", 4,	two(0xF048, 0x0007), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270148024e4aSbellard {"fdbseq", 4,	two(0xF048, 0x0011), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270248024e4aSbellard {"fdbsf", 4,	two(0xF048, 0x0010), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270348024e4aSbellard {"fdbsne", 4,	two(0xF048, 0x001E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270448024e4aSbellard {"fdbst", 4,	two(0xF048, 0x001F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270548024e4aSbellard {"fdbt", 4,	two(0xF048, 0x000F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270648024e4aSbellard {"fdbueq", 4,	two(0xF048, 0x0009), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270748024e4aSbellard {"fdbuge", 4,	two(0xF048, 0x000B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270848024e4aSbellard {"fdbugt", 4,	two(0xF048, 0x000A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270948024e4aSbellard {"fdbule", 4,	two(0xF048, 0x000D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
271048024e4aSbellard {"fdbult", 4,	two(0xF048, 0x000C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
271148024e4aSbellard {"fdbun", 4,	two(0xF048, 0x0008), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
271248024e4aSbellard 
271348024e4aSbellard {"fdivb", 4,	two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
271448024e4aSbellard {"fdivb", 4,	two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
271548024e4aSbellard {"fdivd", 4,	two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
271648024e4aSbellard {"fdivd", 4,	two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
271748024e4aSbellard {"fdivd", 4,	two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
271848024e4aSbellard {"fdivl", 4,	two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
271948024e4aSbellard {"fdivl", 4,	two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
272048024e4aSbellard {"fdivp", 4,	two(0xF000, 0x4C20), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
272148024e4aSbellard {"fdivs", 4,	two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
272248024e4aSbellard {"fdivs", 4,	two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
272348024e4aSbellard {"fdivw", 4,	two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
272448024e4aSbellard {"fdivw", 4,	two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
272548024e4aSbellard {"fdivx", 4,	two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
272648024e4aSbellard {"fdivx", 4,	two(0xF000, 0x4820), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
272748024e4aSbellard 
272848024e4aSbellard {"fsdivb", 4,	two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
272948024e4aSbellard {"fsdivb", 4,	two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
273048024e4aSbellard {"fsdivd", 4,	two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
273148024e4aSbellard {"fsdivd", 4,	two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
273248024e4aSbellard {"fsdivd", 4,	two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
273348024e4aSbellard {"fsdivl", 4,	two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
273448024e4aSbellard {"fsdivl", 4,	two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
273548024e4aSbellard {"fsdivp", 4,	two(0xF000, 0x4C60), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
273648024e4aSbellard {"fsdivs", 4,	two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
273748024e4aSbellard {"fsdivs", 4,	two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
273848024e4aSbellard {"fsdivw", 4,	two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
273948024e4aSbellard {"fsdivw", 4,	two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
274048024e4aSbellard {"fsdivx", 4,	two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
274148024e4aSbellard {"fsdivx", 4,	two(0xF000, 0x4860), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
274248024e4aSbellard 
274348024e4aSbellard {"fddivb", 4,	two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
274448024e4aSbellard {"fddivb", 4,	two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
274548024e4aSbellard {"fddivd", 4,	two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
274648024e4aSbellard {"fddivd", 4,	two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
274748024e4aSbellard {"fddivd", 4,	two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
274848024e4aSbellard {"fddivl", 4,	two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
274948024e4aSbellard {"fddivl", 4,	two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
275048024e4aSbellard {"fddivp", 4,	two(0xF000, 0x4C64), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
275148024e4aSbellard {"fddivs", 4,	two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
275248024e4aSbellard {"fddivs", 4,	two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
275348024e4aSbellard {"fddivw", 4,	two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
275448024e4aSbellard {"fddivw", 4,	two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
275548024e4aSbellard {"fddivx", 4,	two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
275648024e4aSbellard {"fddivx", 4,	two(0xF000, 0x4864), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
275748024e4aSbellard 
275848024e4aSbellard {"fetoxb", 4,	two(0xF000, 0x5810), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
275948024e4aSbellard {"fetoxd", 4,	two(0xF000, 0x5410), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
276048024e4aSbellard {"fetoxl", 4,	two(0xF000, 0x4010), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
276148024e4aSbellard {"fetoxp", 4,	two(0xF000, 0x4C10), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
276248024e4aSbellard {"fetoxs", 4,	two(0xF000, 0x4410), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
276348024e4aSbellard {"fetoxw", 4,	two(0xF000, 0x5010), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
276448024e4aSbellard {"fetoxx", 4,	two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
276548024e4aSbellard {"fetoxx", 4,	two(0xF000, 0x4810), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
276648024e4aSbellard {"fetoxx", 4,	two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
276748024e4aSbellard 
276848024e4aSbellard {"fetoxm1b", 4,	two(0xF000, 0x5808), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
276948024e4aSbellard {"fetoxm1d", 4,	two(0xF000, 0x5408), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
277048024e4aSbellard {"fetoxm1l", 4,	two(0xF000, 0x4008), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
277148024e4aSbellard {"fetoxm1p", 4,	two(0xF000, 0x4C08), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
277248024e4aSbellard {"fetoxm1s", 4,	two(0xF000, 0x4408), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
277348024e4aSbellard {"fetoxm1w", 4,	two(0xF000, 0x5008), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
277448024e4aSbellard {"fetoxm1x", 4,	two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
277548024e4aSbellard {"fetoxm1x", 4,	two(0xF000, 0x4808), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
277648024e4aSbellard {"fetoxm1x", 4,	two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
277748024e4aSbellard 
277848024e4aSbellard {"fgetexpb", 4,	two(0xF000, 0x581E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
277948024e4aSbellard {"fgetexpd", 4,	two(0xF000, 0x541E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
278048024e4aSbellard {"fgetexpl", 4,	two(0xF000, 0x401E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
278148024e4aSbellard {"fgetexpp", 4,	two(0xF000, 0x4C1E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
278248024e4aSbellard {"fgetexps", 4,	two(0xF000, 0x441E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
278348024e4aSbellard {"fgetexpw", 4,	two(0xF000, 0x501E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
278448024e4aSbellard {"fgetexpx", 4,	two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
278548024e4aSbellard {"fgetexpx", 4,	two(0xF000, 0x481E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
278648024e4aSbellard {"fgetexpx", 4,	two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
278748024e4aSbellard 
278848024e4aSbellard {"fgetmanb", 4,	two(0xF000, 0x581F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
278948024e4aSbellard {"fgetmand", 4,	two(0xF000, 0x541F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
279048024e4aSbellard {"fgetmanl", 4,	two(0xF000, 0x401F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
279148024e4aSbellard {"fgetmanp", 4,	two(0xF000, 0x4C1F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
279248024e4aSbellard {"fgetmans", 4,	two(0xF000, 0x441F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
279348024e4aSbellard {"fgetmanw", 4,	two(0xF000, 0x501F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
279448024e4aSbellard {"fgetmanx", 4,	two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
279548024e4aSbellard {"fgetmanx", 4,	two(0xF000, 0x481F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
279648024e4aSbellard {"fgetmanx", 4,	two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
279748024e4aSbellard 
279848024e4aSbellard {"fintb", 4,	two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
279948024e4aSbellard {"fintb", 4,	two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
280048024e4aSbellard {"fintd", 4,	two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
280148024e4aSbellard {"fintd", 4,	two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt", cfloat },
280248024e4aSbellard {"fintd", 4,	two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
280348024e4aSbellard {"fintd", 4,	two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
280448024e4aSbellard {"fintl", 4,	two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
280548024e4aSbellard {"fintl", 4,	two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
280648024e4aSbellard {"fintp", 4,	two(0xF000, 0x4C01), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
280748024e4aSbellard {"fints", 4,	two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
280848024e4aSbellard {"fints", 4,	two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
280948024e4aSbellard {"fintw", 4,	two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
281048024e4aSbellard {"fintw", 4,	two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
281148024e4aSbellard {"fintx", 4,	two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
281248024e4aSbellard {"fintx", 4,	two(0xF000, 0x4801), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
281348024e4aSbellard {"fintx", 4,	two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
281448024e4aSbellard 
281548024e4aSbellard {"fintrzb", 4,	two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
281648024e4aSbellard {"fintrzb", 4,	two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
281748024e4aSbellard {"fintrzd", 4,	two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
281848024e4aSbellard {"fintrzd", 4,	two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
281948024e4aSbellard {"fintrzd", 4,	two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
282048024e4aSbellard {"fintrzd", 4,	two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
282148024e4aSbellard {"fintrzl", 4,	two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
282248024e4aSbellard {"fintrzl", 4,	two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
282348024e4aSbellard {"fintrzp", 4,	two(0xF000, 0x4C03), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
282448024e4aSbellard {"fintrzs", 4,	two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
282548024e4aSbellard {"fintrzs", 4,	two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
282648024e4aSbellard {"fintrzw", 4,	two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
282748024e4aSbellard {"fintrzw", 4,	two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
282848024e4aSbellard {"fintrzx", 4,	two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
282948024e4aSbellard {"fintrzx", 4,	two(0xF000, 0x4803), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
283048024e4aSbellard {"fintrzx", 4,	two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
283148024e4aSbellard 
283248024e4aSbellard {"flog10b", 4,	two(0xF000, 0x5815), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
283348024e4aSbellard {"flog10d", 4,	two(0xF000, 0x5415), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
283448024e4aSbellard {"flog10l", 4,	two(0xF000, 0x4015), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
283548024e4aSbellard {"flog10p", 4,	two(0xF000, 0x4C15), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
283648024e4aSbellard {"flog10s", 4,	two(0xF000, 0x4415), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
283748024e4aSbellard {"flog10w", 4,	two(0xF000, 0x5015), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
283848024e4aSbellard {"flog10x", 4,	two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
283948024e4aSbellard {"flog10x", 4,	two(0xF000, 0x4815), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
284048024e4aSbellard {"flog10x", 4,	two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
284148024e4aSbellard 
284248024e4aSbellard {"flog2b", 4,	two(0xF000, 0x5816), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
284348024e4aSbellard {"flog2d", 4,	two(0xF000, 0x5416), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
284448024e4aSbellard {"flog2l", 4,	two(0xF000, 0x4016), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
284548024e4aSbellard {"flog2p", 4,	two(0xF000, 0x4C16), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
284648024e4aSbellard {"flog2s", 4,	two(0xF000, 0x4416), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
284748024e4aSbellard {"flog2w", 4,	two(0xF000, 0x5016), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
284848024e4aSbellard {"flog2x", 4,	two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
284948024e4aSbellard {"flog2x", 4,	two(0xF000, 0x4816), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
285048024e4aSbellard {"flog2x", 4,	two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
285148024e4aSbellard 
285248024e4aSbellard {"flognb", 4,	two(0xF000, 0x5814), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
285348024e4aSbellard {"flognd", 4,	two(0xF000, 0x5414), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
285448024e4aSbellard {"flognl", 4,	two(0xF000, 0x4014), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
285548024e4aSbellard {"flognp", 4,	two(0xF000, 0x4C14), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
285648024e4aSbellard {"flogns", 4,	two(0xF000, 0x4414), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
285748024e4aSbellard {"flognw", 4,	two(0xF000, 0x5014), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
285848024e4aSbellard {"flognx", 4,	two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
285948024e4aSbellard {"flognx", 4,	two(0xF000, 0x4814), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
286048024e4aSbellard {"flognx", 4,	two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
286148024e4aSbellard 
286248024e4aSbellard {"flognp1b", 4,	two(0xF000, 0x5806), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
286348024e4aSbellard {"flognp1d", 4,	two(0xF000, 0x5406), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
286448024e4aSbellard {"flognp1l", 4,	two(0xF000, 0x4006), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
286548024e4aSbellard {"flognp1p", 4,	two(0xF000, 0x4C06), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
286648024e4aSbellard {"flognp1s", 4,	two(0xF000, 0x4406), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
286748024e4aSbellard {"flognp1w", 4,	two(0xF000, 0x5006), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
286848024e4aSbellard {"flognp1x", 4,	two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
286948024e4aSbellard {"flognp1x", 4,	two(0xF000, 0x4806), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
287048024e4aSbellard {"flognp1x", 4,	two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
287148024e4aSbellard 
287248024e4aSbellard {"fmodb", 4,	two(0xF000, 0x5821), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
287348024e4aSbellard {"fmodd", 4,	two(0xF000, 0x5421), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
287448024e4aSbellard {"fmodl", 4,	two(0xF000, 0x4021), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
287548024e4aSbellard {"fmodp", 4,	two(0xF000, 0x4C21), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
287648024e4aSbellard {"fmods", 4,	two(0xF000, 0x4421), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
287748024e4aSbellard {"fmodw", 4,	two(0xF000, 0x5021), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
287848024e4aSbellard {"fmodx", 4,	two(0xF000, 0x0021), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
287948024e4aSbellard {"fmodx", 4,	two(0xF000, 0x4821), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
288048024e4aSbellard 
288148024e4aSbellard {"fmoveb", 4,	two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
288248024e4aSbellard {"fmoveb", 4,	two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
288348024e4aSbellard {"fmoveb", 4,	two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
288448024e4aSbellard {"fmoveb", 4,	two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7$b", mfloat },
288548024e4aSbellard {"fmoved", 4,	two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
288648024e4aSbellard {"fmoved", 4,	two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7~F", mfloat },
288748024e4aSbellard {"fmoved", 4,	two(0xF000, 0x0000), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
288848024e4aSbellard {"fmoved", 4,	two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
288948024e4aSbellard {"fmoved", 4,	two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
289048024e4aSbellard {"fmovel", 4,	two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
289148024e4aSbellard {"fmovel", 4,	two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7$l", mfloat },
289248024e4aSbellard /* FIXME: the next two variants should not permit moving an address
289348024e4aSbellard    register to anything but the floating point instruction register.  */
289448024e4aSbellard {"fmovel", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
289548024e4aSbellard {"fmovel", 4,	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", mfloat },
289648024e4aSbellard {"fmovel", 4,	two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
289748024e4aSbellard {"fmovel", 4,	two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
289848024e4aSbellard   /* Move the FP control registers.  */
289948024e4aSbellard {"fmovel", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8ps", cfloat },
290048024e4aSbellard {"fmovel", 4,	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Iibss8", cfloat },
290148024e4aSbellard {"fmovep", 4,	two(0xF000, 0x4C00), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
290248024e4aSbellard {"fmovep", 4,	two(0xF000, 0x6C00), two(0xF1C0, 0xFC00), "IiF7~pkC", mfloat },
290348024e4aSbellard {"fmovep", 4,	two(0xF000, 0x7C00), two(0xF1C0, 0xFC0F), "IiF7~pDk", mfloat },
290448024e4aSbellard {"fmoves", 4,	two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
290548024e4aSbellard {"fmoves", 4,	two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7$f", mfloat },
290648024e4aSbellard {"fmoves", 4,	two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
290748024e4aSbellard {"fmoves", 4,	two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
290848024e4aSbellard {"fmovew", 4,	two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
290948024e4aSbellard {"fmovew", 4,	two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7$w", mfloat },
291048024e4aSbellard {"fmovew", 4,	two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
291148024e4aSbellard {"fmovew", 4,	two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
291248024e4aSbellard {"fmovex", 4,	two(0xF000, 0x0000), two(0xF1FF, 0xE07F), "IiF8F7", mfloat },
291348024e4aSbellard {"fmovex", 4,	two(0xF000, 0x4800), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
291448024e4aSbellard {"fmovex", 4,	two(0xF000, 0x6800), two(0xF1C0, 0xFC7F), "IiF7~x", mfloat },
291548024e4aSbellard 
291648024e4aSbellard {"fsmoveb", 4,	two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
291748024e4aSbellard {"fsmoveb", 4,	two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
291848024e4aSbellard {"fsmoveb", 4,	two(0xF000, 0x7840), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
291948024e4aSbellard {"fsmoved", 4,	two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
292048024e4aSbellard {"fsmoved", 4,	two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
292148024e4aSbellard {"fsmoved", 4,	two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
292248024e4aSbellard {"fsmoved", 4,	two(0xF000, 0x7440), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
292348024e4aSbellard {"fsmovel", 4,	two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
292448024e4aSbellard {"fsmovel", 4,	two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
292548024e4aSbellard {"fsmovel", 4,	two(0xF000, 0x6040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
292648024e4aSbellard {"fsmoves", 4,	two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
292748024e4aSbellard {"fsmoves", 4,	two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
292848024e4aSbellard {"fsmoves", 4,	two(0xF000, 0x6440), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
292948024e4aSbellard {"fsmovew", 4,	two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
293048024e4aSbellard {"fsmovew", 4,	two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
293148024e4aSbellard {"fsmovew", 4,	two(0xF000, 0x7040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
293248024e4aSbellard {"fsmovex", 4,	two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
293348024e4aSbellard {"fsmovex", 4,	two(0xF000, 0x4840), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
293448024e4aSbellard {"fsmovep", 4,	two(0xF000, 0x4C40), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
293548024e4aSbellard 
293648024e4aSbellard {"fdmoveb", 4,	two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
293748024e4aSbellard {"fdmoveb", 4,	two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
293848024e4aSbellard {"fdmoveb", 4,	two(0xF000, 0x7844), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
293948024e4aSbellard {"fdmoved", 4,	two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
294048024e4aSbellard {"fdmoved", 4,	two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
294148024e4aSbellard {"fdmoved", 4,	two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
294248024e4aSbellard {"fdmoved", 4,	two(0xF000, 0x7444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
294348024e4aSbellard {"fdmovel", 4,	two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
294448024e4aSbellard {"fdmovel", 4,	two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
294548024e4aSbellard {"fdmovel", 4,	two(0xF000, 0x6044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
294648024e4aSbellard {"fdmoves", 4,	two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
294748024e4aSbellard {"fdmoves", 4,	two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
294848024e4aSbellard {"fdmoves", 4,	two(0xF000, 0x6444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
294948024e4aSbellard {"fdmovew", 4,	two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
295048024e4aSbellard {"fdmovew", 4,	two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
295148024e4aSbellard {"fdmovew", 4,	two(0xF000, 0x7044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
295248024e4aSbellard {"fdmovex", 4,	two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
295348024e4aSbellard {"fdmovex", 4,	two(0xF000, 0x4844), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
295448024e4aSbellard {"fdmovep", 4,	two(0xF000, 0x4C44), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
295548024e4aSbellard 
295648024e4aSbellard {"fmovecrx", 4,	two(0xF000, 0x5C00), two(0xF1FF, 0xFC00), "Ii#CF7", mfloat },
295748024e4aSbellard 
295848024e4aSbellard {"fmovemd", 4,	two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizsl3", cfloat },
295948024e4aSbellard {"fmovemd", 4,	two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
296048024e4aSbellard {"fmovemd", 4,	two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
296148024e4aSbellard {"fmovemd", 4,	two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Iil3ys", cfloat },
296248024e4aSbellard 
296348024e4aSbellard {"fmovemx", 4,	two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat },
296448024e4aSbellard {"fmovemx", 4,	two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
296548024e4aSbellard {"fmovemx", 4,	two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat },
296648024e4aSbellard {"fmovemx", 4,	two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
296748024e4aSbellard {"fmovemx", 4,	two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
296848024e4aSbellard {"fmovemx", 4,	two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat },
296948024e4aSbellard {"fmovemx", 4,	two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat },
297048024e4aSbellard {"fmovemx", 4,	two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat },
297148024e4aSbellard {"fmovemx", 4,	two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
297248024e4aSbellard {"fmovemx", 4,	two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat },
297348024e4aSbellard {"fmovemx", 4,	two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
297448024e4aSbellard {"fmovemx", 4,	two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat },
297548024e4aSbellard 
297648024e4aSbellard {"fmoveml", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
297748024e4aSbellard {"fmoveml", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat },
297848024e4aSbellard /* FIXME: In the next instruction, we should only permit %dn if the
297948024e4aSbellard    target is a single register.  We should only permit %an if the
298048024e4aSbellard    target is a single %fpiar.  */
298148024e4aSbellard {"fmoveml", 4,	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*lL8", mfloat },
298248024e4aSbellard 
298348024e4aSbellard {"fmovem", 4,	two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "IizsL3", cfloat },
298448024e4aSbellard {"fmovem", 4,	two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
298548024e4aSbellard {"fmovem", 4,	two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
298648024e4aSbellard {"fmovem", 4,	two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "IiL3ys", cfloat },
298748024e4aSbellard 
298848024e4aSbellard {"fmovem", 4,	two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
298948024e4aSbellard {"fmovem", 4,	two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
299048024e4aSbellard {"fmovem", 4,	two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
299148024e4aSbellard {"fmovem", 4,	two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat },
299248024e4aSbellard {"fmovem", 4,	two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat },
299348024e4aSbellard {"fmovem", 4,	two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
299448024e4aSbellard {"fmovem", 4,	two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat },
299548024e4aSbellard {"fmovem", 4,	two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat },
299648024e4aSbellard {"fmovem", 4,	two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat },
299748024e4aSbellard {"fmovem", 4,	two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
299848024e4aSbellard {"fmovem", 4,	two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat },
299948024e4aSbellard {"fmovem", 4,	two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat },
300048024e4aSbellard {"fmovem", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
300148024e4aSbellard {"fmovem", 4,	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ss8", mfloat },
300248024e4aSbellard {"fmovem", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat },
300348024e4aSbellard {"fmovem", 4,	two(0xF000, 0x8000), two(0xF2C0, 0xE3FF), "Ii*sL8", mfloat },
300448024e4aSbellard 
300548024e4aSbellard {"fmulb", 4,	two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
300648024e4aSbellard {"fmulb", 4,	two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
300748024e4aSbellard {"fmuld", 4,	two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
300848024e4aSbellard {"fmuld", 4,	two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
300948024e4aSbellard {"fmuld", 4,	two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
301048024e4aSbellard {"fmull", 4,	two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
301148024e4aSbellard {"fmull", 4,	two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
301248024e4aSbellard {"fmulp", 4,	two(0xF000, 0x4C23), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
301348024e4aSbellard {"fmuls", 4,	two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
301448024e4aSbellard {"fmuls", 4,	two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
301548024e4aSbellard {"fmulw", 4,	two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
301648024e4aSbellard {"fmulw", 4,	two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
301748024e4aSbellard {"fmulx", 4,	two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
301848024e4aSbellard {"fmulx", 4,	two(0xF000, 0x4823), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
301948024e4aSbellard 
302048024e4aSbellard {"fsmulb", 4,	two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
302148024e4aSbellard {"fsmulb", 4,	two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
302248024e4aSbellard {"fsmuld", 4,	two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
302348024e4aSbellard {"fsmuld", 4,	two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
302448024e4aSbellard {"fsmuld", 4,	two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
302548024e4aSbellard {"fsmull", 4,	two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
302648024e4aSbellard {"fsmull", 4,	two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
302748024e4aSbellard {"fsmulp", 4,	two(0xF000, 0x4C63), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
302848024e4aSbellard {"fsmuls", 4,	two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
302948024e4aSbellard {"fsmuls", 4,	two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
303048024e4aSbellard {"fsmulw", 4,	two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
303148024e4aSbellard {"fsmulw", 4,	two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
303248024e4aSbellard {"fsmulx", 4,	two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
303348024e4aSbellard {"fsmulx", 4,	two(0xF000, 0x4863), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
303448024e4aSbellard 
303548024e4aSbellard {"fdmulb", 4,	two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
303648024e4aSbellard {"fdmulb", 4,	two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
303748024e4aSbellard {"fdmuld", 4,	two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
303848024e4aSbellard {"fdmuld", 4,	two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
303948024e4aSbellard {"fdmuld", 4,	two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
304048024e4aSbellard {"fdmull", 4,	two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
304148024e4aSbellard {"fdmull", 4,	two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
304248024e4aSbellard {"fdmulp", 4,	two(0xF000, 0x4C67), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
304348024e4aSbellard {"fdmuls", 4,	two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
304448024e4aSbellard {"fdmuls", 4,	two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
304548024e4aSbellard {"fdmulw", 4,	two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
304648024e4aSbellard {"fdmulw", 4,	two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
304748024e4aSbellard {"fdmulx", 4,	two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
304848024e4aSbellard {"fdmulx", 4,	two(0xF000, 0x4867), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
304948024e4aSbellard 
305048024e4aSbellard {"fnegb", 4,	two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
305148024e4aSbellard {"fnegb", 4,	two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
305248024e4aSbellard {"fnegd", 4,	two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
305348024e4aSbellard {"fnegd", 4,	two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
305448024e4aSbellard {"fnegd", 4,	two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
305548024e4aSbellard {"fnegd", 4,	two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
305648024e4aSbellard {"fnegl", 4,	two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
305748024e4aSbellard {"fnegl", 4,	two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
305848024e4aSbellard {"fnegp", 4,	two(0xF000, 0x4C1A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
305948024e4aSbellard {"fnegs", 4,	two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
306048024e4aSbellard {"fnegs", 4,	two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
306148024e4aSbellard {"fnegw", 4,	two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
306248024e4aSbellard {"fnegw", 4,	two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
306348024e4aSbellard {"fnegx", 4,	two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
306448024e4aSbellard {"fnegx", 4,	two(0xF000, 0x481A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
306548024e4aSbellard {"fnegx", 4,	two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
306648024e4aSbellard 
306748024e4aSbellard {"fsnegb", 4,	two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
306848024e4aSbellard {"fsnegb", 4,	two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
306948024e4aSbellard {"fsnegd", 4,	two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
307048024e4aSbellard {"fsnegd", 4,	two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
307148024e4aSbellard {"fsnegd", 4,	two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
307248024e4aSbellard {"fsnegd", 4,	two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
307348024e4aSbellard {"fsnegl", 4,	two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
307448024e4aSbellard {"fsnegl", 4,	two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
307548024e4aSbellard {"fsnegp", 4,	two(0xF000, 0x4C5A), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
307648024e4aSbellard {"fsnegs", 4,	two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
307748024e4aSbellard {"fsnegs", 4,	two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
307848024e4aSbellard {"fsnegw", 4,	two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
307948024e4aSbellard {"fsnegw", 4,	two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
308048024e4aSbellard {"fsnegx", 4,	two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
308148024e4aSbellard {"fsnegx", 4,	two(0xF000, 0x485A), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
308248024e4aSbellard {"fsnegx", 4,	two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
308348024e4aSbellard 
308448024e4aSbellard {"fdnegb", 4,	two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
308548024e4aSbellard {"fdnegb", 4,	two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
308648024e4aSbellard {"fdnegd", 4,	two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
308748024e4aSbellard {"fdnegd", 4,	two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
308848024e4aSbellard {"fdnegd", 4,	two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
308948024e4aSbellard {"fdnegd", 4,	two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
309048024e4aSbellard {"fdnegl", 4,	two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
309148024e4aSbellard {"fdnegl", 4,	two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
309248024e4aSbellard {"fdnegp", 4,	two(0xF000, 0x4C5E), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
309348024e4aSbellard {"fdnegs", 4,	two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
309448024e4aSbellard {"fdnegs", 4,	two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
309548024e4aSbellard {"fdnegw", 4,	two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
309648024e4aSbellard {"fdnegw", 4,	two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
309748024e4aSbellard {"fdnegx", 4,	two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
309848024e4aSbellard {"fdnegx", 4,	two(0xF000, 0x485E), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
309948024e4aSbellard {"fdnegx", 4,	two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
310048024e4aSbellard 
310148024e4aSbellard {"fnop", 4,	two(0xF280, 0x0000), two(0xFFFF, 0xFFFF), "Ii", mfloat | cfloat },
310248024e4aSbellard 
310348024e4aSbellard {"fremb", 4,	two(0xF000, 0x5825), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
310448024e4aSbellard {"fremd", 4,	two(0xF000, 0x5425), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
310548024e4aSbellard {"freml", 4,	two(0xF000, 0x4025), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
310648024e4aSbellard {"fremp", 4,	two(0xF000, 0x4C25), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
310748024e4aSbellard {"frems", 4,	two(0xF000, 0x4425), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
310848024e4aSbellard {"fremw", 4,	two(0xF000, 0x5025), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
310948024e4aSbellard {"fremx", 4,	two(0xF000, 0x0025), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
311048024e4aSbellard {"fremx", 4,	two(0xF000, 0x4825), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
311148024e4aSbellard 
311248024e4aSbellard {"frestore", 2,	one(0xF140),		one(0xF1C0), "Id<s", mfloat },
311348024e4aSbellard {"frestore", 2,	one(0xF140),		one(0xF1C0), "Idys", cfloat },
311448024e4aSbellard 
311548024e4aSbellard {"fsave", 2,	one(0xF100),		one(0xF1C0), "Id>s", mfloat },
311648024e4aSbellard {"fsave", 2,	one(0xF100),		one(0xF1C0), "Idzs", cfloat },
311748024e4aSbellard 
311848024e4aSbellard {"fscaleb", 4,	two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
311948024e4aSbellard {"fscaled", 4,	two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
312048024e4aSbellard {"fscalel", 4,	two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
312148024e4aSbellard {"fscalep", 4,	two(0xF000, 0x4C26), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
312248024e4aSbellard {"fscales", 4,	two(0xF000, 0x4426), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
312348024e4aSbellard {"fscalew", 4,	two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
312448024e4aSbellard {"fscalex", 4,	two(0xF000, 0x0026), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
312548024e4aSbellard {"fscalex", 4,	two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
312648024e4aSbellard 
312748024e4aSbellard /* $ is necessary to prevent the assembler from using PC-relative.
312848024e4aSbellard    If @ were used, "label: fseq label" could produce "ftrapeq", 2,
312948024e4aSbellard    because "label" became "pc@label".  */
313048024e4aSbellard {"fseq", 4,	two(0xF040, 0x0001), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313148024e4aSbellard {"fsf", 4,	two(0xF040, 0x0000), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313248024e4aSbellard {"fsge", 4,	two(0xF040, 0x0013), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313348024e4aSbellard {"fsgl", 4,	two(0xF040, 0x0016), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313448024e4aSbellard {"fsgle", 4,	two(0xF040, 0x0017), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313548024e4aSbellard {"fsgt", 4,	two(0xF040, 0x0012), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313648024e4aSbellard {"fsle", 4,	two(0xF040, 0x0015), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313748024e4aSbellard {"fslt", 4,	two(0xF040, 0x0014), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313848024e4aSbellard {"fsne", 4,	two(0xF040, 0x000E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313948024e4aSbellard {"fsnge", 4,	two(0xF040, 0x001C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314048024e4aSbellard {"fsngl", 4,	two(0xF040, 0x0019), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314148024e4aSbellard {"fsngle", 4,	two(0xF040, 0x0018), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314248024e4aSbellard {"fsngt", 4,	two(0xF040, 0x001D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314348024e4aSbellard {"fsnle", 4,	two(0xF040, 0x001A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314448024e4aSbellard {"fsnlt", 4,	two(0xF040, 0x001B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314548024e4aSbellard {"fsoge", 4,	two(0xF040, 0x0003), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314648024e4aSbellard {"fsogl", 4,	two(0xF040, 0x0006), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314748024e4aSbellard {"fsogt", 4,	two(0xF040, 0x0002), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314848024e4aSbellard {"fsole", 4,	two(0xF040, 0x0005), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314948024e4aSbellard {"fsolt", 4,	two(0xF040, 0x0004), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315048024e4aSbellard {"fsor", 4,	two(0xF040, 0x0007), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315148024e4aSbellard {"fsseq", 4,	two(0xF040, 0x0011), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315248024e4aSbellard {"fssf", 4,	two(0xF040, 0x0010), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315348024e4aSbellard {"fssne", 4,	two(0xF040, 0x001E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315448024e4aSbellard {"fsst", 4,	two(0xF040, 0x001F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315548024e4aSbellard {"fst", 4,	two(0xF040, 0x000F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315648024e4aSbellard {"fsueq", 4,	two(0xF040, 0x0009), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315748024e4aSbellard {"fsuge", 4,	two(0xF040, 0x000B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315848024e4aSbellard {"fsugt", 4,	two(0xF040, 0x000A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315948024e4aSbellard {"fsule", 4,	two(0xF040, 0x000D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
316048024e4aSbellard {"fsult", 4,	two(0xF040, 0x000C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
316148024e4aSbellard {"fsun", 4,	two(0xF040, 0x0008), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
316248024e4aSbellard 
316348024e4aSbellard {"fsgldivb", 4,	two(0xF000, 0x5824), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
316448024e4aSbellard {"fsgldivd", 4,	two(0xF000, 0x5424), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
316548024e4aSbellard {"fsgldivl", 4,	two(0xF000, 0x4024), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
316648024e4aSbellard {"fsgldivp", 4,	two(0xF000, 0x4C24), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
316748024e4aSbellard {"fsgldivs", 4,	two(0xF000, 0x4424), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
316848024e4aSbellard {"fsgldivw", 4,	two(0xF000, 0x5024), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
316948024e4aSbellard {"fsgldivx", 4,	two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
317048024e4aSbellard {"fsgldivx", 4,	two(0xF000, 0x4824), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
317148024e4aSbellard {"fsgldivx", 4,	two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
317248024e4aSbellard 
317348024e4aSbellard {"fsglmulb", 4,	two(0xF000, 0x5827), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
317448024e4aSbellard {"fsglmuld", 4,	two(0xF000, 0x5427), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
317548024e4aSbellard {"fsglmull", 4,	two(0xF000, 0x4027), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
317648024e4aSbellard {"fsglmulp", 4,	two(0xF000, 0x4C27), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
317748024e4aSbellard {"fsglmuls", 4,	two(0xF000, 0x4427), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
317848024e4aSbellard {"fsglmulw", 4,	two(0xF000, 0x5027), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
317948024e4aSbellard {"fsglmulx", 4,	two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
318048024e4aSbellard {"fsglmulx", 4,	two(0xF000, 0x4827), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
318148024e4aSbellard {"fsglmulx", 4,	two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
318248024e4aSbellard 
318348024e4aSbellard {"fsinb", 4,	two(0xF000, 0x580E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
318448024e4aSbellard {"fsind", 4,	two(0xF000, 0x540E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
318548024e4aSbellard {"fsinl", 4,	two(0xF000, 0x400E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
318648024e4aSbellard {"fsinp", 4,	two(0xF000, 0x4C0E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
318748024e4aSbellard {"fsins", 4,	two(0xF000, 0x440E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
318848024e4aSbellard {"fsinw", 4,	two(0xF000, 0x500E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
318948024e4aSbellard {"fsinx", 4,	two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
319048024e4aSbellard {"fsinx", 4,	two(0xF000, 0x480E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
319148024e4aSbellard {"fsinx", 4,	two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
319248024e4aSbellard 
319348024e4aSbellard {"fsincosb", 4,	two(0xF000, 0x5830), two(0xF1C0, 0xFC78), "Ii;bF3F7", mfloat },
319448024e4aSbellard {"fsincosd", 4,	two(0xF000, 0x5430), two(0xF1C0, 0xFC78), "Ii;FF3F7", mfloat },
319548024e4aSbellard {"fsincosl", 4,	two(0xF000, 0x4030), two(0xF1C0, 0xFC78), "Ii;lF3F7", mfloat },
319648024e4aSbellard {"fsincosp", 4,	two(0xF000, 0x4C30), two(0xF1C0, 0xFC78), "Ii;pF3F7", mfloat },
319748024e4aSbellard {"fsincoss", 4,	two(0xF000, 0x4430), two(0xF1C0, 0xFC78), "Ii;fF3F7", mfloat },
319848024e4aSbellard {"fsincosw", 4,	two(0xF000, 0x5030), two(0xF1C0, 0xFC78), "Ii;wF3F7", mfloat },
319948024e4aSbellard {"fsincosx", 4,	two(0xF000, 0x0030), two(0xF1C0, 0xE078), "IiF8F3F7", mfloat },
320048024e4aSbellard {"fsincosx", 4,	two(0xF000, 0x4830), two(0xF1C0, 0xFC78), "Ii;xF3F7", mfloat },
320148024e4aSbellard 
320248024e4aSbellard {"fsinhb", 4,	two(0xF000, 0x5802), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
320348024e4aSbellard {"fsinhd", 4,	two(0xF000, 0x5402), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
320448024e4aSbellard {"fsinhl", 4,	two(0xF000, 0x4002), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
320548024e4aSbellard {"fsinhp", 4,	two(0xF000, 0x4C02), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
320648024e4aSbellard {"fsinhs", 4,	two(0xF000, 0x4402), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
320748024e4aSbellard {"fsinhw", 4,	two(0xF000, 0x5002), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
320848024e4aSbellard {"fsinhx", 4,	two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
320948024e4aSbellard {"fsinhx", 4,	two(0xF000, 0x4802), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
321048024e4aSbellard {"fsinhx", 4,	two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
321148024e4aSbellard 
321248024e4aSbellard {"fsqrtb", 4,	two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
321348024e4aSbellard {"fsqrtb", 4,	two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
321448024e4aSbellard {"fsqrtd", 4,	two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
321548024e4aSbellard {"fsqrtd", 4,	two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
321648024e4aSbellard {"fsqrtd", 4,	two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
321748024e4aSbellard {"fsqrtd", 4,	two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
321848024e4aSbellard {"fsqrtl", 4,	two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
321948024e4aSbellard {"fsqrtl", 4,	two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
322048024e4aSbellard {"fsqrtp", 4,	two(0xF000, 0x4C04), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
322148024e4aSbellard {"fsqrts", 4,	two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
322248024e4aSbellard {"fsqrts", 4,	two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
322348024e4aSbellard {"fsqrtw", 4,	two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
322448024e4aSbellard {"fsqrtw", 4,	two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
322548024e4aSbellard {"fsqrtx", 4,	two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
322648024e4aSbellard {"fsqrtx", 4,	two(0xF000, 0x4804), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
322748024e4aSbellard {"fsqrtx", 4,	two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
322848024e4aSbellard 
322948024e4aSbellard {"fssqrtb", 4,	two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
323048024e4aSbellard {"fssqrtb", 4,	two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
323148024e4aSbellard {"fssqrtd", 4,	two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
323248024e4aSbellard {"fssqrtd", 4,	two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
323348024e4aSbellard {"fssqrtd", 4,	two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
323448024e4aSbellard {"fssqrtd", 4,	two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
323548024e4aSbellard {"fssqrtl", 4,	two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
323648024e4aSbellard {"fssqrtl", 4,	two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
323748024e4aSbellard {"fssqrtp", 4,	two(0xF000, 0x4C41), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
323848024e4aSbellard {"fssqrts", 4,	two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
323948024e4aSbellard {"fssqrts", 4,	two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
324048024e4aSbellard {"fssqrtw", 4,	two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
324148024e4aSbellard {"fssqrtw", 4,	two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
324248024e4aSbellard {"fssqrtx", 4,	two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
324348024e4aSbellard {"fssqrtx", 4,	two(0xF000, 0x4841), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
324448024e4aSbellard {"fssqrtx", 4,	two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
324548024e4aSbellard 
324648024e4aSbellard {"fdsqrtb", 4,	two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
324748024e4aSbellard {"fdsqrtb", 4,	two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
324848024e4aSbellard {"fdsqrtd", 4,	two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
324948024e4aSbellard {"fdsqrtd", 4,	two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
325048024e4aSbellard {"fdsqrtd", 4,	two(0xF000, 0x5445), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
325148024e4aSbellard {"fdsqrtl", 4,	two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
325248024e4aSbellard {"fdsqrtl", 4,	two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
325348024e4aSbellard {"fdsqrtp", 4,	two(0xF000, 0x4C45), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
325448024e4aSbellard {"fdsqrts", 4,	two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
325548024e4aSbellard {"fdsqrts", 4,	two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
325648024e4aSbellard {"fdsqrtw", 4,	two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
325748024e4aSbellard {"fdsqrtw", 4,	two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
325848024e4aSbellard {"fdsqrtx", 4,	two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
325948024e4aSbellard {"fdsqrtx", 4,	two(0xF000, 0x4845), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
326048024e4aSbellard {"fdsqrtx", 4,	two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
326148024e4aSbellard 
326248024e4aSbellard {"fsubb", 4,	two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
326348024e4aSbellard {"fsubb", 4,	two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
326448024e4aSbellard {"fsubd", 4,	two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
326548024e4aSbellard {"fsubd", 4,	two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
326648024e4aSbellard {"fsubd", 4,	two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
326748024e4aSbellard {"fsubl", 4,	two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
326848024e4aSbellard {"fsubl", 4,	two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
326948024e4aSbellard {"fsubp", 4,	two(0xF000, 0x4C28), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
327048024e4aSbellard {"fsubs", 4,	two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
327148024e4aSbellard {"fsubs", 4,	two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
327248024e4aSbellard {"fsubw", 4,	two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
327348024e4aSbellard {"fsubw", 4,	two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
327448024e4aSbellard {"fsubx", 4,	two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
327548024e4aSbellard {"fsubx", 4,	two(0xF000, 0x4828), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
327648024e4aSbellard {"fsubx", 4,	two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
327748024e4aSbellard 
327848024e4aSbellard {"fssubb", 4,	two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
327948024e4aSbellard {"fssubb", 4,	two(0xF000, 0x5868), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
328048024e4aSbellard {"fssubd", 4,	two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
328148024e4aSbellard {"fssubd", 4,	two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
328248024e4aSbellard {"fssubd", 4,	two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
328348024e4aSbellard {"fssubl", 4,	two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
328448024e4aSbellard {"fssubl", 4,	two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
328548024e4aSbellard {"fssubp", 4,	two(0xF000, 0x4C68), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
328648024e4aSbellard {"fssubs", 4,	two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
328748024e4aSbellard {"fssubs", 4,	two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
328848024e4aSbellard {"fssubw", 4,	two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
328948024e4aSbellard {"fssubw", 4,	two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
329048024e4aSbellard {"fssubx", 4,	two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
329148024e4aSbellard {"fssubx", 4,	two(0xF000, 0x4868), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
329248024e4aSbellard {"fssubx", 4,	two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
329348024e4aSbellard 
329448024e4aSbellard {"fdsubb", 4,	two(0xF000, 0x586A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
329548024e4aSbellard {"fdsubb", 4,	two(0xF000, 0x586c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
329648024e4aSbellard {"fdsubd", 4,	two(0xF000, 0x006A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
329748024e4aSbellard {"fdsubd", 4,	two(0xF000, 0x546A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
329848024e4aSbellard {"fdsubd", 4,	two(0xF000, 0x546c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
329948024e4aSbellard {"fdsubl", 4,	two(0xF000, 0x406A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
330048024e4aSbellard {"fdsubl", 4,	two(0xF000, 0x406c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
330148024e4aSbellard {"fdsubp", 4,	two(0xF000, 0x4C6c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
330248024e4aSbellard {"fdsubs", 4,	two(0xF000, 0x446A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
330348024e4aSbellard {"fdsubs", 4,	two(0xF000, 0x446c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
330448024e4aSbellard {"fdsubw", 4,	two(0xF000, 0x506A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
330548024e4aSbellard {"fdsubw", 4,	two(0xF000, 0x506c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
330648024e4aSbellard {"fdsubx", 4,	two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
330748024e4aSbellard {"fdsubx", 4,	two(0xF000, 0x486c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
330848024e4aSbellard {"fdsubx", 4,	two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
330948024e4aSbellard 
331048024e4aSbellard {"ftanb", 4,	two(0xF000, 0x580F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
331148024e4aSbellard {"ftand", 4,	two(0xF000, 0x540F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
331248024e4aSbellard {"ftanl", 4,	two(0xF000, 0x400F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
331348024e4aSbellard {"ftanp", 4,	two(0xF000, 0x4C0F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
331448024e4aSbellard {"ftans", 4,	two(0xF000, 0x440F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
331548024e4aSbellard {"ftanw", 4,	two(0xF000, 0x500F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
331648024e4aSbellard {"ftanx", 4,	two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
331748024e4aSbellard {"ftanx", 4,	two(0xF000, 0x480F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
331848024e4aSbellard {"ftanx", 4,	two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
331948024e4aSbellard 
332048024e4aSbellard {"ftanhb", 4,	two(0xF000, 0x5809), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
332148024e4aSbellard {"ftanhd", 4,	two(0xF000, 0x5409), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
332248024e4aSbellard {"ftanhl", 4,	two(0xF000, 0x4009), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
332348024e4aSbellard {"ftanhp", 4,	two(0xF000, 0x4C09), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
332448024e4aSbellard {"ftanhs", 4,	two(0xF000, 0x4409), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
332548024e4aSbellard {"ftanhw", 4,	two(0xF000, 0x5009), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
332648024e4aSbellard {"ftanhx", 4,	two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
332748024e4aSbellard {"ftanhx", 4,	two(0xF000, 0x4809), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
332848024e4aSbellard {"ftanhx", 4,	two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
332948024e4aSbellard 
333048024e4aSbellard {"ftentoxb", 4,	two(0xF000, 0x5812), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
333148024e4aSbellard {"ftentoxd", 4,	two(0xF000, 0x5412), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
333248024e4aSbellard {"ftentoxl", 4,	two(0xF000, 0x4012), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
333348024e4aSbellard {"ftentoxp", 4,	two(0xF000, 0x4C12), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
333448024e4aSbellard {"ftentoxs", 4,	two(0xF000, 0x4412), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
333548024e4aSbellard {"ftentoxw", 4,	two(0xF000, 0x5012), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
333648024e4aSbellard {"ftentoxx", 4,	two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
333748024e4aSbellard {"ftentoxx", 4,	two(0xF000, 0x4812), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
333848024e4aSbellard {"ftentoxx", 4,	two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
333948024e4aSbellard 
334048024e4aSbellard {"ftrapeq", 4,	two(0xF07C, 0x0001), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334148024e4aSbellard {"ftrapf", 4,	two(0xF07C, 0x0000), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334248024e4aSbellard {"ftrapge", 4,	two(0xF07C, 0x0013), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334348024e4aSbellard {"ftrapgl", 4,	two(0xF07C, 0x0016), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334448024e4aSbellard {"ftrapgle", 4,	two(0xF07C, 0x0017), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334548024e4aSbellard {"ftrapgt", 4,	two(0xF07C, 0x0012), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334648024e4aSbellard {"ftraple", 4,	two(0xF07C, 0x0015), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334748024e4aSbellard {"ftraplt", 4,	two(0xF07C, 0x0014), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334848024e4aSbellard {"ftrapne", 4,	two(0xF07C, 0x000E), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334948024e4aSbellard {"ftrapnge", 4,	two(0xF07C, 0x001C), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335048024e4aSbellard {"ftrapngl", 4,	two(0xF07C, 0x0019), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335148024e4aSbellard {"ftrapngle", 4,two(0xF07C, 0x0018), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335248024e4aSbellard {"ftrapngt", 4,	two(0xF07C, 0x001D), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335348024e4aSbellard {"ftrapnle", 4,	two(0xF07C, 0x001A), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335448024e4aSbellard {"ftrapnlt", 4,	two(0xF07C, 0x001B), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335548024e4aSbellard {"ftrapoge", 4,	two(0xF07C, 0x0003), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335648024e4aSbellard {"ftrapogl", 4,	two(0xF07C, 0x0006), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335748024e4aSbellard {"ftrapogt", 4,	two(0xF07C, 0x0002), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335848024e4aSbellard {"ftrapole", 4,	two(0xF07C, 0x0005), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335948024e4aSbellard {"ftrapolt", 4,	two(0xF07C, 0x0004), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336048024e4aSbellard {"ftrapor", 4,	two(0xF07C, 0x0007), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336148024e4aSbellard {"ftrapseq", 4,	two(0xF07C, 0x0011), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336248024e4aSbellard {"ftrapsf", 4,	two(0xF07C, 0x0010), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336348024e4aSbellard {"ftrapsne", 4,	two(0xF07C, 0x001E), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336448024e4aSbellard {"ftrapst", 4,	two(0xF07C, 0x001F), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336548024e4aSbellard {"ftrapt", 4,	two(0xF07C, 0x000F), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336648024e4aSbellard {"ftrapueq", 4,	two(0xF07C, 0x0009), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336748024e4aSbellard {"ftrapuge", 4,	two(0xF07C, 0x000B), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336848024e4aSbellard {"ftrapugt", 4,	two(0xF07C, 0x000A), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336948024e4aSbellard {"ftrapule", 4,	two(0xF07C, 0x000D), two(0xF1FF, 0xFFFF), "Ii", mfloat },
337048024e4aSbellard {"ftrapult", 4,	two(0xF07C, 0x000C), two(0xF1FF, 0xFFFF), "Ii", mfloat },
337148024e4aSbellard {"ftrapun", 4,	two(0xF07C, 0x0008), two(0xF1FF, 0xFFFF), "Ii", mfloat },
337248024e4aSbellard 
337348024e4aSbellard {"ftrapeqw", 4,	two(0xF07A, 0x0001), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337448024e4aSbellard {"ftrapfw", 4,	two(0xF07A, 0x0000), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337548024e4aSbellard {"ftrapgew", 4,	two(0xF07A, 0x0013), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337648024e4aSbellard {"ftrapglw", 4,	two(0xF07A, 0x0016), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337748024e4aSbellard {"ftrapglew", 4,two(0xF07A, 0x0017), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337848024e4aSbellard {"ftrapgtw", 4,	two(0xF07A, 0x0012), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337948024e4aSbellard {"ftraplew", 4,	two(0xF07A, 0x0015), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338048024e4aSbellard {"ftrapltw", 4,	two(0xF07A, 0x0014), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338148024e4aSbellard {"ftrapnew", 4,	two(0xF07A, 0x000E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338248024e4aSbellard {"ftrapngew", 4,two(0xF07A, 0x001C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338348024e4aSbellard {"ftrapnglw", 4,two(0xF07A, 0x0019), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338448024e4aSbellard {"ftrapnglew", 4,two(0xF07A, 0x0018), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338548024e4aSbellard {"ftrapngtw", 4,two(0xF07A, 0x001D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338648024e4aSbellard {"ftrapnlew", 4,two(0xF07A, 0x001A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338748024e4aSbellard {"ftrapnltw", 4,two(0xF07A, 0x001B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338848024e4aSbellard {"ftrapogew", 4,two(0xF07A, 0x0003), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338948024e4aSbellard {"ftrapoglw", 4,two(0xF07A, 0x0006), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339048024e4aSbellard {"ftrapogtw", 4,two(0xF07A, 0x0002), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339148024e4aSbellard {"ftrapolew", 4,two(0xF07A, 0x0005), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339248024e4aSbellard {"ftrapoltw", 4,two(0xF07A, 0x0004), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339348024e4aSbellard {"ftraporw", 4,	two(0xF07A, 0x0007), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339448024e4aSbellard {"ftrapseqw", 4,two(0xF07A, 0x0011), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339548024e4aSbellard {"ftrapsfw", 4,	two(0xF07A, 0x0010), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339648024e4aSbellard {"ftrapsnew", 4,two(0xF07A, 0x001E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339748024e4aSbellard {"ftrapstw", 4,	two(0xF07A, 0x001F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339848024e4aSbellard {"ftraptw", 4,	two(0xF07A, 0x000F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339948024e4aSbellard {"ftrapueqw", 4,two(0xF07A, 0x0009), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340048024e4aSbellard {"ftrapugew", 4,two(0xF07A, 0x000B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340148024e4aSbellard {"ftrapugtw", 4,two(0xF07A, 0x000A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340248024e4aSbellard {"ftrapulew", 4,two(0xF07A, 0x000D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340348024e4aSbellard {"ftrapultw", 4,two(0xF07A, 0x000C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340448024e4aSbellard {"ftrapunw", 4,	two(0xF07A, 0x0008), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340548024e4aSbellard 
340648024e4aSbellard {"ftrapeql", 4,	two(0xF07B, 0x0001), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
340748024e4aSbellard {"ftrapfl", 4,	two(0xF07B, 0x0000), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
340848024e4aSbellard {"ftrapgel", 4,	two(0xF07B, 0x0013), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
340948024e4aSbellard {"ftrapgll", 4,	two(0xF07B, 0x0016), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341048024e4aSbellard {"ftrapglel", 4,two(0xF07B, 0x0017), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341148024e4aSbellard {"ftrapgtl", 4,	two(0xF07B, 0x0012), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341248024e4aSbellard {"ftraplel", 4,	two(0xF07B, 0x0015), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341348024e4aSbellard {"ftrapltl", 4,	two(0xF07B, 0x0014), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341448024e4aSbellard {"ftrapnel", 4,	two(0xF07B, 0x000E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341548024e4aSbellard {"ftrapngel", 4,two(0xF07B, 0x001C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341648024e4aSbellard {"ftrapngll", 4,two(0xF07B, 0x0019), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341748024e4aSbellard {"ftrapnglel", 4,two(0xF07B, 0x0018), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341848024e4aSbellard {"ftrapngtl", 4,two(0xF07B, 0x001D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341948024e4aSbellard {"ftrapnlel", 4,two(0xF07B, 0x001A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342048024e4aSbellard {"ftrapnltl", 4,two(0xF07B, 0x001B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342148024e4aSbellard {"ftrapogel", 4,two(0xF07B, 0x0003), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342248024e4aSbellard {"ftrapogll", 4,two(0xF07B, 0x0006), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342348024e4aSbellard {"ftrapogtl", 4,two(0xF07B, 0x0002), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342448024e4aSbellard {"ftrapolel", 4,two(0xF07B, 0x0005), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342548024e4aSbellard {"ftrapoltl", 4,two(0xF07B, 0x0004), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342648024e4aSbellard {"ftraporl", 4,	two(0xF07B, 0x0007), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342748024e4aSbellard {"ftrapseql", 4,two(0xF07B, 0x0011), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342848024e4aSbellard {"ftrapsfl", 4,	two(0xF07B, 0x0010), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342948024e4aSbellard {"ftrapsnel", 4,two(0xF07B, 0x001E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343048024e4aSbellard {"ftrapstl", 4,	two(0xF07B, 0x001F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343148024e4aSbellard {"ftraptl", 4,	two(0xF07B, 0x000F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343248024e4aSbellard {"ftrapueql", 4,two(0xF07B, 0x0009), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343348024e4aSbellard {"ftrapugel", 4,two(0xF07B, 0x000B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343448024e4aSbellard {"ftrapugtl", 4,two(0xF07B, 0x000A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343548024e4aSbellard {"ftrapulel", 4,two(0xF07B, 0x000D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343648024e4aSbellard {"ftrapultl", 4,two(0xF07B, 0x000C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343748024e4aSbellard {"ftrapunl", 4,	two(0xF07B, 0x0008), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343848024e4aSbellard 
343948024e4aSbellard {"ftstb", 4,	two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Ii;b", mfloat },
344048024e4aSbellard {"ftstb", 4,	two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
344148024e4aSbellard {"ftstd", 4,	two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", cfloat },
344248024e4aSbellard {"ftstd", 4,	two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Ii;F", mfloat },
344348024e4aSbellard {"ftstd", 4,	two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
344448024e4aSbellard {"ftstl", 4,	two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Ii;l", mfloat },
344548024e4aSbellard {"ftstl", 4,	two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
344648024e4aSbellard {"ftstp", 4,	two(0xF000, 0x4C3A), two(0xF1C0, 0xFC7F), "Ii;p", mfloat },
344748024e4aSbellard {"ftsts", 4,	two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Ii;f", mfloat },
344848024e4aSbellard {"ftsts", 4,	two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
344948024e4aSbellard {"ftstw", 4,	two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Ii;w", mfloat },
345048024e4aSbellard {"ftstw", 4,	two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
345148024e4aSbellard {"ftstx", 4,	two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", mfloat },
345248024e4aSbellard {"ftstx", 4,	two(0xF000, 0x483A), two(0xF1C0, 0xFC7F), "Ii;x", mfloat },
345348024e4aSbellard 
345448024e4aSbellard {"ftwotoxb", 4,	two(0xF000, 0x5811), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
345548024e4aSbellard {"ftwotoxd", 4,	two(0xF000, 0x5411), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
345648024e4aSbellard {"ftwotoxl", 4,	two(0xF000, 0x4011), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
345748024e4aSbellard {"ftwotoxp", 4,	two(0xF000, 0x4C11), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
345848024e4aSbellard {"ftwotoxs", 4,	two(0xF000, 0x4411), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
345948024e4aSbellard {"ftwotoxw", 4,	two(0xF000, 0x5011), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
346048024e4aSbellard {"ftwotoxx", 4,	two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
346148024e4aSbellard {"ftwotoxx", 4,	two(0xF000, 0x4811), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
346248024e4aSbellard {"ftwotoxx", 4,	two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
346348024e4aSbellard 
346448024e4aSbellard {"halt", 2,	one(0045310),	one(0177777), "",     m68060 | mcfisa_a },
346548024e4aSbellard 
346648024e4aSbellard {"illegal", 2,	one(0045374),	one(0177777), "",     m68000up | mcfisa_a },
346748024e4aSbellard {"intouch", 2,	one(0xf428),	one(0xfff8), "As",    mcfisa_b },
346848024e4aSbellard 
346948024e4aSbellard {"jmp", 2,	one(0047300),	one(0177700), "!s", m68000up | mcfisa_a },
347048024e4aSbellard 
347148024e4aSbellard {"jra", 2,	one(0060000),	one(0177400), "Bg", m68000up | mcfisa_a },
347248024e4aSbellard {"jra", 2,	one(0047300),	one(0177700), "!s", m68000up | mcfisa_a },
347348024e4aSbellard 
347448024e4aSbellard {"jsr", 2,	one(0047200),	one(0177700), "!s", m68000up | mcfisa_a },
347548024e4aSbellard 
347648024e4aSbellard {"jbsr", 2,	one(0060400),	one(0177400), "Bg", m68000up | mcfisa_a },
347748024e4aSbellard {"jbsr", 2,	one(0047200),	one(0177700), "!s", m68000up | mcfisa_a },
347848024e4aSbellard 
347948024e4aSbellard {"lea", 2,	one(0040700),	one(0170700), "!sAd", m68000up | mcfisa_a },
348048024e4aSbellard 
348148024e4aSbellard {"lpstop", 6,	two(0174000,0000700),two(0177777,0177777),"#w", cpu32|m68060 },
348248024e4aSbellard 
348348024e4aSbellard {"linkw", 4,	one(0047120),	one(0177770), "As#w", m68000up | mcfisa_a },
348448024e4aSbellard {"linkl", 6,	one(0044010),	one(0177770), "As#l", m68020up | cpu32 },
348548024e4aSbellard {"link", 4,	one(0047120),	one(0177770), "As#W", m68000up | mcfisa_a },
348648024e4aSbellard {"link", 6,	one(0044010),	one(0177770), "As#l", m68020up | cpu32 },
348748024e4aSbellard 
348848024e4aSbellard {"lslb", 2,	one(0160410),	one(0170770), "QdDs", m68000up },
348948024e4aSbellard {"lslb", 2,	one(0160450),	one(0170770), "DdDs", m68000up },
349048024e4aSbellard {"lslw", 2,	one(0160510),	one(0170770), "QdDs", m68000up },
349148024e4aSbellard {"lslw", 2,	one(0160550),	one(0170770), "DdDs", m68000up },
349248024e4aSbellard {"lslw", 2,	one(0161700),	one(0177700), "~s",   m68000up },
349348024e4aSbellard {"lsll", 2,	one(0160610),	one(0170770), "QdDs", m68000up | mcfisa_a },
349448024e4aSbellard {"lsll", 2,	one(0160650),	one(0170770), "DdDs", m68000up | mcfisa_a },
349548024e4aSbellard 
349648024e4aSbellard {"lsrb", 2,	one(0160010),	one(0170770), "QdDs", m68000up },
349748024e4aSbellard {"lsrb", 2,	one(0160050),	one(0170770), "DdDs", m68000up },
349848024e4aSbellard {"lsrw", 2,	one(0160110),	one(0170770), "QdDs", m68000up },
349948024e4aSbellard {"lsrw", 2,	one(0160150),	one(0170770), "DdDs", m68000up },
350048024e4aSbellard {"lsrw", 2,	one(0161300),	one(0177700), "~s",   m68000up },
350148024e4aSbellard {"lsrl", 2,	one(0160210),	one(0170770), "QdDs", m68000up | mcfisa_a },
350248024e4aSbellard {"lsrl", 2,	one(0160250),	one(0170770), "DdDs", m68000up | mcfisa_a },
350348024e4aSbellard 
350448024e4aSbellard {"macw", 4,  	two(0xa080, 0x0000), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
350548024e4aSbellard {"macw", 4,  	two(0xa080, 0x0200), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
350648024e4aSbellard {"macw", 4,  	two(0xa080, 0x0000), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac },
350748024e4aSbellard {"macw", 4,  	two(0xa000, 0x0000), two(0xf1b0, 0x0900), "uMumiI", mcfmac },
350848024e4aSbellard {"macw", 4,  	two(0xa000, 0x0200), two(0xf1b0, 0x0900), "uMumMh", mcfmac },
350948024e4aSbellard {"macw", 4,  	two(0xa000, 0x0000), two(0xf1b0, 0x0f00), "uMum", mcfmac },
351048024e4aSbellard 
351148024e4aSbellard {"macw", 4,  	two(0xa000, 0x0000), two(0xf100, 0x0900), "uNuoiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX.  */
351248024e4aSbellard {"macw", 4,  	two(0xa000, 0x0200), two(0xf100, 0x0900), "uNuoMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX.  */
351348024e4aSbellard {"macw", 4,  	two(0xa000, 0x0000), two(0xf100, 0x0f00), "uNuo4/RneG", mcfemac },/* Ry,Rx,<ea>,accX.  */
351448024e4aSbellard {"macw", 4,  	two(0xa000, 0x0000), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX.  */
351548024e4aSbellard {"macw", 4,  	two(0xa000, 0x0200), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX.  */
351648024e4aSbellard {"macw", 4,  	two(0xa000, 0x0000), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX.  */
351748024e4aSbellard 
351848024e4aSbellard {"macl", 4,  	two(0xa080, 0x0800), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
351948024e4aSbellard {"macl", 4,  	two(0xa080, 0x0a00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
352048024e4aSbellard {"macl", 4,  	two(0xa080, 0x0800), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac },
352148024e4aSbellard {"macl", 4,  	two(0xa000, 0x0800), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
352248024e4aSbellard {"macl", 4,  	two(0xa000, 0x0a00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
352348024e4aSbellard {"macl", 4,  	two(0xa000, 0x0800), two(0xf1b0, 0x0800), "RMRm", mcfmac },
352448024e4aSbellard 
352548024e4aSbellard {"macl", 4,  	two(0xa000, 0x0800), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
352648024e4aSbellard {"macl", 4,  	two(0xa000, 0x0a00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
352748024e4aSbellard {"macl", 4,  	two(0xa000, 0x0800), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
352848024e4aSbellard {"macl", 4,  	two(0xa000, 0x0800), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
352948024e4aSbellard {"macl", 4,  	two(0xa000, 0x0a00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
353048024e4aSbellard {"macl", 4,  	two(0xa000, 0x0800), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
353148024e4aSbellard 
353248024e4aSbellard /* NOTE: The mcf5200 family programmer's reference manual does not
353348024e4aSbellard    indicate the byte form of the movea instruction is invalid (as it
353407f35073SDong Xu Wang    is on 68000 family cpus).  However, experiments on the 5202 yield
353548024e4aSbellard    unexpected results.  The value is copied, but it is not sign extended
353648024e4aSbellard    (as is done with movea.w) and the top three bytes in the address
353748024e4aSbellard    register are not disturbed.  I don't know if this is the intended
353848024e4aSbellard    behavior --- it could be a hole in instruction decoding (Motorola
353948024e4aSbellard    decided not to trap all invalid instructions for performance reasons)
354048024e4aSbellard    --- but I suspect that it is not.
354148024e4aSbellard 
354248024e4aSbellard    I reported this to Motorola ISD Technical Communications Support,
354348024e4aSbellard    which replied that other coldfire assemblers reject movea.b.  For
354448024e4aSbellard    this reason I've decided to not allow moveab.
354548024e4aSbellard 
354648024e4aSbellard 	jtc@cygnus.com - 97/01/24.  */
354748024e4aSbellard 
354848024e4aSbellard {"moveal", 2,	one(0020100),	one(0170700), "*lAd", m68000up | mcfisa_a },
354948024e4aSbellard {"moveaw", 2,	one(0030100),	one(0170700), "*wAd", m68000up | mcfisa_a },
355048024e4aSbellard 
355148024e4aSbellard {"movclrl", 2,	one(0xA1C0),	one(0xf9f0), "eFRs", mcfemac },
355248024e4aSbellard 
355348024e4aSbellard {"movec", 4,	one(0047173),	one(0177777), "R1Jj", m68010up | mcfisa_a },
355448024e4aSbellard {"movec", 4,	one(0047173),	one(0177777), "R1#j", m68010up | mcfisa_a },
355548024e4aSbellard {"movec", 4,	one(0047172),	one(0177777), "JjR1", m68010up },
355648024e4aSbellard {"movec", 4,	one(0047172),	one(0177777), "#jR1", m68010up },
355748024e4aSbellard 
355848024e4aSbellard {"movemw", 4,	one(0044200),	one(0177700), "Lw&s", m68000up },
355948024e4aSbellard {"movemw", 4,	one(0044240),	one(0177770), "lw-s", m68000up },
356048024e4aSbellard {"movemw", 4,	one(0044200),	one(0177700), "#w>s", m68000up },
356148024e4aSbellard {"movemw", 4,	one(0046200),	one(0177700), "<sLw", m68000up },
356248024e4aSbellard {"movemw", 4,	one(0046200),	one(0177700), "<s#w", m68000up },
356348024e4aSbellard {"moveml", 4,	one(0044300),	one(0177700), "Lw&s", m68000up },
356448024e4aSbellard {"moveml", 4,	one(0044340),	one(0177770), "lw-s", m68000up },
356548024e4aSbellard {"moveml", 4,	one(0044300),	one(0177700), "#w>s", m68000up },
356648024e4aSbellard {"moveml", 4,	one(0046300),	one(0177700), "<sLw", m68000up },
356748024e4aSbellard {"moveml", 4,	one(0046300),	one(0177700), "<s#w", m68000up },
356848024e4aSbellard /* FIXME: need specifier for mode 2 and 5 to simplify below insn patterns.  */
356948024e4aSbellard {"moveml", 4,	one(0044320),	one(0177770), "Lwas", mcfisa_a },
357048024e4aSbellard {"moveml", 4,	one(0044320),	one(0177770), "#was", mcfisa_a },
357148024e4aSbellard {"moveml", 4,	one(0044350),	one(0177770), "Lwds", mcfisa_a },
357248024e4aSbellard {"moveml", 4,	one(0044350),	one(0177770), "#wds", mcfisa_a },
357348024e4aSbellard {"moveml", 4,	one(0046320),	one(0177770), "asLw", mcfisa_a },
357448024e4aSbellard {"moveml", 4,	one(0046320),	one(0177770), "as#w", mcfisa_a },
357548024e4aSbellard {"moveml", 4,	one(0046350),	one(0177770), "dsLw", mcfisa_a },
357648024e4aSbellard {"moveml", 4,	one(0046350),	one(0177770), "ds#w", mcfisa_a },
357748024e4aSbellard 
357848024e4aSbellard {"movepw", 2,	one(0000410),	one(0170770), "dsDd", m68000up },
357948024e4aSbellard {"movepw", 2,	one(0000610),	one(0170770), "Ddds", m68000up },
358048024e4aSbellard {"movepl", 2,	one(0000510),	one(0170770), "dsDd", m68000up },
358148024e4aSbellard {"movepl", 2,	one(0000710),	one(0170770), "Ddds", m68000up },
358248024e4aSbellard 
358348024e4aSbellard {"moveq", 2,	one(0070000),	one(0170400), "MsDd", m68000up | mcfisa_a },
358448024e4aSbellard {"moveq", 2,	one(0070000),	one(0170400), "#BDd", m68000up | mcfisa_a },
358548024e4aSbellard 
358648024e4aSbellard /* The move opcode can generate the movea and moveq instructions.  */
358748024e4aSbellard {"moveb", 2,	one(0010000),	one(0170000), ";b$d", m68000up },
358848024e4aSbellard {"moveb", 2,	one(0010000),	one(0170070), "Ds$d", mcfisa_a },
358948024e4aSbellard {"moveb", 2,	one(0010020),	one(0170070), "as$d", mcfisa_a },
359048024e4aSbellard {"moveb", 2,	one(0010030),	one(0170070), "+s$d", mcfisa_a },
359148024e4aSbellard {"moveb", 2,	one(0010040),	one(0170070), "-s$d", mcfisa_a },
359248024e4aSbellard {"moveb", 2,	one(0010000),	one(0170000), "nsqd", mcfisa_a },
359348024e4aSbellard {"moveb", 2,	one(0010000),	one(0170700), "obDd", mcfisa_a },
359448024e4aSbellard {"moveb", 2,	one(0010200),	one(0170700), "obad", mcfisa_a },
359548024e4aSbellard {"moveb", 2,	one(0010300),	one(0170700), "ob+d", mcfisa_a },
359648024e4aSbellard {"moveb", 2,	one(0010400),	one(0170700), "ob-d", mcfisa_a },
359748024e4aSbellard {"moveb", 2,	one(0010000),	one(0170000), "obnd", mcfisa_b },
359848024e4aSbellard 
359948024e4aSbellard {"movew", 2,	one(0030000),	one(0170000), "*w%d", m68000up },
360048024e4aSbellard {"movew", 2,	one(0030000),	one(0170000), "ms%d", mcfisa_a },
360148024e4aSbellard {"movew", 2,	one(0030000),	one(0170000), "nspd", mcfisa_a },
360248024e4aSbellard {"movew", 2,	one(0030000),	one(0170000), "owmd", mcfisa_a },
360348024e4aSbellard {"movew", 2,	one(0030000),	one(0170000), "ownd", mcfisa_b },
360448024e4aSbellard {"movew", 2,	one(0040300),	one(0177700), "Ss$s", m68000up },
360548024e4aSbellard {"movew", 2,	one(0040300),	one(0177770), "SsDs", mcfisa_a },
360648024e4aSbellard {"movew", 2,	one(0041300),	one(0177700), "Cs$s", m68010up },
360748024e4aSbellard {"movew", 2,	one(0041300),	one(0177770), "CsDs", mcfisa_a },
360848024e4aSbellard {"movew", 2,	one(0042300),	one(0177700), ";wCd", m68000up },
360948024e4aSbellard {"movew", 2,	one(0042300),	one(0177700), "DsCd", mcfisa_a },
361048024e4aSbellard {"movew", 4,	one(0042374),	one(0177777), "#wCd", mcfisa_a },
361148024e4aSbellard {"movew", 2,	one(0043300),	one(0177700), ";wSd", m68000up },
361248024e4aSbellard {"movew", 2,	one(0043300),	one(0177700), "DsSd", mcfisa_a },
361348024e4aSbellard {"movew", 4,	one(0043374),	one(0177777), "#wSd", mcfisa_a },
361448024e4aSbellard 
361548024e4aSbellard {"movel", 2,	one(0070000),	one(0170400), "MsDd", m68000up | mcfisa_a },
361648024e4aSbellard {"movel", 2,	one(0020000),	one(0170000), "*l%d", m68000up },
361748024e4aSbellard {"movel", 2,	one(0020000),	one(0170000), "ms%d", mcfisa_a },
361848024e4aSbellard {"movel", 2,	one(0020000),	one(0170000), "nspd", mcfisa_a },
361948024e4aSbellard {"movel", 2,	one(0020000),	one(0170000), "olmd", mcfisa_a },
362048024e4aSbellard {"movel", 2,	one(0020000),	one(0170000), "olnd", mcfisa_b },
362148024e4aSbellard {"movel", 2,	one(0047140),	one(0177770), "AsUd", m68000up | mcfusp },
362248024e4aSbellard {"movel", 2,	one(0047150),	one(0177770), "UdAs", m68000up | mcfusp },
362348024e4aSbellard {"movel", 2,	one(0120600),	one(0177760), "EsRs", mcfmac },
362448024e4aSbellard {"movel", 2,	one(0120400),	one(0177760), "RsEs", mcfmac },
362548024e4aSbellard {"movel", 6,	one(0120474),	one(0177777), "#lEs", mcfmac },
362648024e4aSbellard {"movel", 2,	one(0124600),	one(0177760), "GsRs", mcfmac },
362748024e4aSbellard {"movel", 2,	one(0124400),	one(0177760), "RsGs", mcfmac },
362848024e4aSbellard {"movel", 6,	one(0124474),	one(0177777), "#lGs", mcfmac },
362948024e4aSbellard {"movel", 2,	one(0126600),	one(0177760), "HsRs", mcfmac },
363048024e4aSbellard {"movel", 2,	one(0126400),	one(0177760), "RsHs", mcfmac },
363148024e4aSbellard {"movel", 6,	one(0126474),	one(0177777), "#lHs", mcfmac },
363248024e4aSbellard {"movel", 2,	one(0124700),	one(0177777), "GsCs", mcfmac },
363348024e4aSbellard 
363448024e4aSbellard {"movel", 2,	one(0xa180),	one(0xf9f0), "eFRs", mcfemac }, /* ACCx,Rx.  */
363548024e4aSbellard {"movel", 2,	one(0xab80),	one(0xfbf0), "g]Rs", mcfemac }, /* ACCEXTx,Rx.  */
363648024e4aSbellard {"movel", 2,	one(0xa980),	one(0xfff0), "G-Rs", mcfemac }, /* macsr,Rx.  */
363748024e4aSbellard {"movel", 2,	one(0xad80),	one(0xfff0), "H-Rs", mcfemac }, /* mask,Rx.  */
363848024e4aSbellard {"movel", 2,	one(0xa110),	one(0xf9fc), "efeF", mcfemac }, /* ACCy,ACCx.  */
363948024e4aSbellard {"movel", 2,	one(0xa9c0),	one(0xffff), "G-C-", mcfemac }, /* macsr,ccr.  */
364048024e4aSbellard {"movel", 2,	one(0xa100),	one(0xf9f0), "RseF", mcfemac }, /* Rx,ACCx.  */
364148024e4aSbellard {"movel", 6,	one(0xa13c),	one(0xf9ff), "#leF", mcfemac }, /* #,ACCx.  */
364248024e4aSbellard {"movel", 2,	one(0xab00),	one(0xfbc0), "Rsg]", mcfemac }, /* Rx,ACCEXTx.  */
364348024e4aSbellard {"movel", 6,	one(0xab3c),	one(0xfbff), "#lg]", mcfemac }, /* #,ACCEXTx.  */
364448024e4aSbellard {"movel", 2,	one(0xa900),	one(0xffc0), "RsG-", mcfemac }, /* Rx,macsr.  */
364548024e4aSbellard {"movel", 6,	one(0xa93c),	one(0xffff), "#lG-", mcfemac }, /* #,macsr.  */
364648024e4aSbellard {"movel", 2,	one(0xad00),	one(0xffc0), "RsH-", mcfemac }, /* Rx,mask.  */
364748024e4aSbellard {"movel", 6,	one(0xad3c),	one(0xffff), "#lH-", mcfemac }, /* #,mask.  */
364848024e4aSbellard 
364948024e4aSbellard {"move", 2,	one(0030000),	one(0170000), "*w%d", m68000up },
365048024e4aSbellard {"move", 2,	one(0030000),	one(0170000), "ms%d", mcfisa_a },
365148024e4aSbellard {"move", 2,	one(0030000),	one(0170000), "nspd", mcfisa_a },
365248024e4aSbellard {"move", 2,	one(0030000),	one(0170000), "owmd", mcfisa_a },
365348024e4aSbellard {"move", 2,	one(0030000),	one(0170000), "ownd", mcfisa_b },
365448024e4aSbellard {"move", 2,	one(0040300),	one(0177700), "Ss$s", m68000up },
365548024e4aSbellard {"move", 2,	one(0040300),	one(0177770), "SsDs", mcfisa_a },
365648024e4aSbellard {"move", 2,	one(0041300),	one(0177700), "Cs$s", m68010up },
365748024e4aSbellard {"move", 2,	one(0041300),	one(0177770), "CsDs", mcfisa_a },
365848024e4aSbellard {"move", 2,	one(0042300),	one(0177700), ";wCd", m68000up },
365948024e4aSbellard {"move", 2,	one(0042300),	one(0177700), "DsCd", mcfisa_a },
366048024e4aSbellard {"move", 4,	one(0042374),	one(0177777), "#wCd", mcfisa_a },
366148024e4aSbellard {"move", 2,	one(0043300),	one(0177700), ";wSd", m68000up },
366248024e4aSbellard {"move", 2,	one(0043300),	one(0177700), "DsSd", mcfisa_a },
366348024e4aSbellard {"move", 4,	one(0043374),	one(0177777), "#wSd", mcfisa_a },
366448024e4aSbellard 
366548024e4aSbellard {"move", 2,	one(0047140),	one(0177770), "AsUd", m68000up },
366648024e4aSbellard {"move", 2,	one(0047150),	one(0177770), "UdAs", m68000up },
366748024e4aSbellard 
366848024e4aSbellard {"mov3ql", 2,	one(0120500),	one(0170700), "xd%s", mcfisa_b },
366948024e4aSbellard {"mvsb", 2,	one(0070400),	one(0170700), "*bDd", mcfisa_b },
367048024e4aSbellard {"mvsw", 2,	one(0070500),	one(0170700), "*wDd", mcfisa_b },
367148024e4aSbellard {"mvzb", 2,	one(0070600),	one(0170700), "*bDd", mcfisa_b },
367248024e4aSbellard {"mvzw", 2,	one(0070700),	one(0170700), "*wDd", mcfisa_b },
367348024e4aSbellard 
367448024e4aSbellard {"movesb", 4,	two(0007000, 0),     two(0177700, 07777), "~sR1", m68010up },
367548024e4aSbellard {"movesb", 4,	two(0007000, 04000), two(0177700, 07777), "R1~s", m68010up },
367648024e4aSbellard {"movesw", 4,	two(0007100, 0),     two(0177700, 07777), "~sR1", m68010up },
367748024e4aSbellard {"movesw", 4,	two(0007100, 04000), two(0177700, 07777), "R1~s", m68010up },
367848024e4aSbellard {"movesl", 4,	two(0007200, 0),     two(0177700, 07777), "~sR1", m68010up },
367948024e4aSbellard {"movesl", 4,	two(0007200, 04000), two(0177700, 07777), "R1~s", m68010up },
368048024e4aSbellard 
368148024e4aSbellard {"move16", 4,	two(0xf620, 0x8000), two(0xfff8, 0x8fff), "+s+1", m68040up },
368248024e4aSbellard {"move16", 2,	one(0xf600),		one(0xfff8), "+s_L", m68040up },
368348024e4aSbellard {"move16", 2,	one(0xf608),		one(0xfff8), "_L+s", m68040up },
368448024e4aSbellard {"move16", 2,	one(0xf610),		one(0xfff8), "as_L", m68040up },
368548024e4aSbellard {"move16", 2,	one(0xf618),		one(0xfff8), "_Las", m68040up },
368648024e4aSbellard 
368748024e4aSbellard {"msacw", 4,  	two(0xa080, 0x0100), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
368848024e4aSbellard {"msacw", 4,  	two(0xa080, 0x0300), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
368948024e4aSbellard {"msacw", 4,  	two(0xa080, 0x0100), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac },
369048024e4aSbellard {"msacw", 4,  	two(0xa000, 0x0100), two(0xf1b0, 0x0900), "uMumiI", mcfmac },
369148024e4aSbellard {"msacw", 4,  	two(0xa000, 0x0300), two(0xf1b0, 0x0900), "uMumMh", mcfmac },
369248024e4aSbellard {"msacw", 4,  	two(0xa000, 0x0100), two(0xf1b0, 0x0f00), "uMum", mcfmac },
369348024e4aSbellard 
369448024e4aSbellard {"msacw", 4,  	two(0xa000, 0x0100), two(0xf100, 0x0900), "uMumiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX.  */
369548024e4aSbellard {"msacw", 4,  	two(0xa000, 0x0300), two(0xf100, 0x0900), "uMumMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX.  */
369648024e4aSbellard {"msacw", 4,  	two(0xa000, 0x0100), two(0xf100, 0x0f00), "uMum4/RneG", mcfemac },/* Ry,Rx,<ea>,accX.  */
369748024e4aSbellard {"msacw", 4,  	two(0xa000, 0x0100), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX.  */
369848024e4aSbellard {"msacw", 4,  	two(0xa000, 0x0300), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX.  */
369948024e4aSbellard {"msacw", 4,  	two(0xa000, 0x0100), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX.  */
370048024e4aSbellard 
370148024e4aSbellard {"msacl", 4,  	two(0xa080, 0x0900), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
370248024e4aSbellard {"msacl", 4,  	two(0xa080, 0x0b00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
370348024e4aSbellard {"msacl", 4,  	two(0xa080, 0x0900), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac },
370448024e4aSbellard {"msacl", 4,  	two(0xa000, 0x0900), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
370548024e4aSbellard {"msacl", 4,  	two(0xa000, 0x0b00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
370648024e4aSbellard {"msacl", 4,  	two(0xa000, 0x0900), two(0xf1b0, 0x0800), "RMRm", mcfmac },
370748024e4aSbellard 
370848024e4aSbellard {"msacl", 4,  	two(0xa000, 0x0900), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
370948024e4aSbellard {"msacl", 4,  	two(0xa000, 0x0b00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
371048024e4aSbellard {"msacl", 4,  	two(0xa000, 0x0900), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
371148024e4aSbellard {"msacl", 4,  	two(0xa000, 0x0900), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
371248024e4aSbellard {"msacl", 4,  	two(0xa000, 0x0b00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
371348024e4aSbellard {"msacl", 4,  	two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
371448024e4aSbellard 
371548024e4aSbellard {"mulsw", 2,	one(0140700),		one(0170700), ";wDd", m68000up|mcfisa_a },
371648024e4aSbellard {"mulsl", 4,	two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
371748024e4aSbellard {"mulsl", 4,	two(0046000,004000), two(0177700,0107770), "qsD1", mcfisa_a },
371848024e4aSbellard {"mulsl", 4,	two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
371948024e4aSbellard 
372048024e4aSbellard {"muluw", 2,	one(0140300),		one(0170700), ";wDd", m68000up|mcfisa_a },
372148024e4aSbellard {"mulul", 4,	two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
372248024e4aSbellard {"mulul", 4,	two(0046000,000000), two(0177700,0107770), "qsD1", mcfisa_a },
372348024e4aSbellard {"mulul", 4,	two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
372448024e4aSbellard 
372548024e4aSbellard {"nbcd", 2,	one(0044000),	one(0177700), "$s", m68000up },
372648024e4aSbellard 
372748024e4aSbellard {"negb", 2,	one(0042000),	one(0177700), "$s", m68000up },
372848024e4aSbellard {"negw", 2,	one(0042100),	one(0177700), "$s", m68000up },
372948024e4aSbellard {"negl", 2,	one(0042200),	one(0177700), "$s", m68000up },
373048024e4aSbellard {"negl", 2,	one(0042200),	one(0177700), "Ds", mcfisa_a},
373148024e4aSbellard 
373248024e4aSbellard {"negxb", 2,	one(0040000),	one(0177700), "$s", m68000up },
373348024e4aSbellard {"negxw", 2,	one(0040100),	one(0177700), "$s", m68000up },
373448024e4aSbellard {"negxl", 2,	one(0040200),	one(0177700), "$s", m68000up },
373548024e4aSbellard {"negxl", 2,	one(0040200),	one(0177700), "Ds", mcfisa_a},
373648024e4aSbellard 
373748024e4aSbellard {"nop", 2,	one(0047161),	one(0177777), "", m68000up | mcfisa_a},
373848024e4aSbellard 
373948024e4aSbellard {"notb", 2,	one(0043000),	one(0177700), "$s", m68000up },
374048024e4aSbellard {"notw", 2,	one(0043100),	one(0177700), "$s", m68000up },
374148024e4aSbellard {"notl", 2,	one(0043200),	one(0177700), "$s", m68000up },
374248024e4aSbellard {"notl", 2,	one(0043200),	one(0177700), "Ds", mcfisa_a},
374348024e4aSbellard 
374448024e4aSbellard {"orib", 4,	one(0000000),	one(0177700), "#b$s", m68000up },
374548024e4aSbellard {"orib", 4,	one(0000074),	one(0177777), "#bCs", m68000up },
374648024e4aSbellard {"oriw", 4,	one(0000100),	one(0177700), "#w$s", m68000up },
374748024e4aSbellard {"oriw", 4,	one(0000174),	one(0177777), "#wSs", m68000up },
374848024e4aSbellard {"oril", 6,	one(0000200),	one(0177700), "#l$s", m68000up },
374948024e4aSbellard {"oril", 6,	one(0000200),	one(0177700), "#lDs", mcfisa_a },
375048024e4aSbellard {"ori", 4,	one(0000074),	one(0177777), "#bCs", m68000up },
375148024e4aSbellard {"ori", 4,	one(0000100),	one(0177700), "#w$s", m68000up },
375248024e4aSbellard {"ori", 4,	one(0000174),	one(0177777), "#wSs", m68000up },
375348024e4aSbellard 
375448024e4aSbellard /* The or opcode can generate the ori instruction.  */
375548024e4aSbellard {"orb", 4,	one(0000000),	one(0177700), "#b$s", m68000up },
375648024e4aSbellard {"orb", 4,	one(0000074),	one(0177777), "#bCs", m68000up },
375748024e4aSbellard {"orb", 2,	one(0100000),	one(0170700), ";bDd", m68000up },
375848024e4aSbellard {"orb", 2,	one(0100400),	one(0170700), "Dd~s", m68000up },
375948024e4aSbellard {"orw", 4,	one(0000100),	one(0177700), "#w$s", m68000up },
376048024e4aSbellard {"orw", 4,	one(0000174),	one(0177777), "#wSs", m68000up },
376148024e4aSbellard {"orw", 2,	one(0100100),	one(0170700), ";wDd", m68000up },
376248024e4aSbellard {"orw", 2,	one(0100500),	one(0170700), "Dd~s", m68000up },
376348024e4aSbellard {"orl", 6,	one(0000200),	one(0177700), "#l$s", m68000up },
376448024e4aSbellard {"orl", 6,	one(0000200),	one(0177700), "#lDs", mcfisa_a },
376548024e4aSbellard {"orl", 2,	one(0100200),	one(0170700), ";lDd", m68000up | mcfisa_a },
376648024e4aSbellard {"orl", 2,	one(0100600),	one(0170700), "Dd~s", m68000up | mcfisa_a },
376748024e4aSbellard {"or", 4,	one(0000074),	one(0177777), "#bCs", m68000up },
376848024e4aSbellard {"or", 4,	one(0000100),	one(0177700), "#w$s", m68000up },
376948024e4aSbellard {"or", 4,	one(0000174),	one(0177777), "#wSs", m68000up },
377048024e4aSbellard {"or", 2,	one(0100100),	one(0170700), ";wDd", m68000up },
377148024e4aSbellard {"or", 2,	one(0100500),	one(0170700), "Dd~s", m68000up },
377248024e4aSbellard 
377348024e4aSbellard {"pack", 4,	one(0100500),	one(0170770), "DsDd#w", m68020up },
377448024e4aSbellard {"pack", 4,	one(0100510),	one(0170770), "-s-d#w", m68020up },
377548024e4aSbellard 
377648024e4aSbellard {"pbac", 2,	one(0xf087),	one(0xffbf), "Bc", m68851 },
377748024e4aSbellard {"pbacw", 2,	one(0xf087),	one(0xffff), "BW", m68851 },
377848024e4aSbellard {"pbas", 2,	one(0xf086),	one(0xffbf), "Bc", m68851 },
377948024e4aSbellard {"pbasw", 2,	one(0xf086),	one(0xffff), "BW", m68851 },
378048024e4aSbellard {"pbbc", 2,	one(0xf081),	one(0xffbf), "Bc", m68851 },
378148024e4aSbellard {"pbbcw", 2,	one(0xf081),	one(0xffff), "BW", m68851 },
378248024e4aSbellard {"pbbs", 2,	one(0xf080),	one(0xffbf), "Bc", m68851 },
378348024e4aSbellard {"pbbsw", 2,	one(0xf080),	one(0xffff), "BW", m68851 },
378448024e4aSbellard {"pbcc", 2,	one(0xf08f),	one(0xffbf), "Bc", m68851 },
378548024e4aSbellard {"pbccw", 2,	one(0xf08f),	one(0xffff), "BW", m68851 },
378648024e4aSbellard {"pbcs", 2,	one(0xf08e),	one(0xffbf), "Bc", m68851 },
378748024e4aSbellard {"pbcsw", 2,	one(0xf08e),	one(0xffff), "BW", m68851 },
378848024e4aSbellard {"pbgc", 2,	one(0xf08d),	one(0xffbf), "Bc", m68851 },
378948024e4aSbellard {"pbgcw", 2,	one(0xf08d),	one(0xffff), "BW", m68851 },
379048024e4aSbellard {"pbgs", 2,	one(0xf08c),	one(0xffbf), "Bc", m68851 },
379148024e4aSbellard {"pbgsw", 2,	one(0xf08c),	one(0xffff), "BW", m68851 },
379248024e4aSbellard {"pbic", 2,	one(0xf08b),	one(0xffbf), "Bc", m68851 },
379348024e4aSbellard {"pbicw", 2,	one(0xf08b),	one(0xffff), "BW", m68851 },
379448024e4aSbellard {"pbis", 2,	one(0xf08a),	one(0xffbf), "Bc", m68851 },
379548024e4aSbellard {"pbisw", 2,	one(0xf08a),	one(0xffff), "BW", m68851 },
379648024e4aSbellard {"pblc", 2,	one(0xf083),	one(0xffbf), "Bc", m68851 },
379748024e4aSbellard {"pblcw", 2,	one(0xf083),	one(0xffff), "BW", m68851 },
379848024e4aSbellard {"pbls", 2,	one(0xf082),	one(0xffbf), "Bc", m68851 },
379948024e4aSbellard {"pblsw", 2,	one(0xf082),	one(0xffff), "BW", m68851 },
380048024e4aSbellard {"pbsc", 2,	one(0xf085),	one(0xffbf), "Bc", m68851 },
380148024e4aSbellard {"pbscw", 2,	one(0xf085),	one(0xffff), "BW", m68851 },
380248024e4aSbellard {"pbss", 2,	one(0xf084),	one(0xffbf), "Bc", m68851 },
380348024e4aSbellard {"pbssw", 2,	one(0xf084),	one(0xffff), "BW", m68851 },
380448024e4aSbellard {"pbwc", 2,	one(0xf089),	one(0xffbf), "Bc", m68851 },
380548024e4aSbellard {"pbwcw", 2,	one(0xf089),	one(0xffff), "BW", m68851 },
380648024e4aSbellard {"pbws", 2,	one(0xf088),	one(0xffbf), "Bc", m68851 },
380748024e4aSbellard {"pbwsw", 2,	one(0xf088),	one(0xffff), "BW", m68851 },
380848024e4aSbellard 
380948024e4aSbellard {"pdbac", 4,	two(0xf048, 0x0007),	two(0xfff8, 0xffff), "DsBw", m68851 },
381048024e4aSbellard {"pdbas", 4,	two(0xf048, 0x0006),	two(0xfff8, 0xffff), "DsBw", m68851 },
381148024e4aSbellard {"pdbbc", 4,	two(0xf048, 0x0001),	two(0xfff8, 0xffff), "DsBw", m68851 },
381248024e4aSbellard {"pdbbs", 4,	two(0xf048, 0x0000),	two(0xfff8, 0xffff), "DsBw", m68851 },
381348024e4aSbellard {"pdbcc", 4,	two(0xf048, 0x000f),	two(0xfff8, 0xffff), "DsBw", m68851 },
381448024e4aSbellard {"pdbcs", 4,	two(0xf048, 0x000e),	two(0xfff8, 0xffff), "DsBw", m68851 },
381548024e4aSbellard {"pdbgc", 4,	two(0xf048, 0x000d),	two(0xfff8, 0xffff), "DsBw", m68851 },
381648024e4aSbellard {"pdbgs", 4,	two(0xf048, 0x000c),	two(0xfff8, 0xffff), "DsBw", m68851 },
381748024e4aSbellard {"pdbic", 4,	two(0xf048, 0x000b),	two(0xfff8, 0xffff), "DsBw", m68851 },
381848024e4aSbellard {"pdbis", 4,	two(0xf048, 0x000a),	two(0xfff8, 0xffff), "DsBw", m68851 },
381948024e4aSbellard {"pdblc", 4,	two(0xf048, 0x0003),	two(0xfff8, 0xffff), "DsBw", m68851 },
382048024e4aSbellard {"pdbls", 4,	two(0xf048, 0x0002),	two(0xfff8, 0xffff), "DsBw", m68851 },
382148024e4aSbellard {"pdbsc", 4,	two(0xf048, 0x0005),	two(0xfff8, 0xffff), "DsBw", m68851 },
382248024e4aSbellard {"pdbss", 4,	two(0xf048, 0x0004),	two(0xfff8, 0xffff), "DsBw", m68851 },
382348024e4aSbellard {"pdbwc", 4,	two(0xf048, 0x0009),	two(0xfff8, 0xffff), "DsBw", m68851 },
382448024e4aSbellard {"pdbws", 4,	two(0xf048, 0x0008),	two(0xfff8, 0xffff), "DsBw", m68851 },
382548024e4aSbellard 
382648024e4aSbellard {"pea", 2,	one(0044100),		one(0177700), "!s", m68000up|mcfisa_a },
382748024e4aSbellard 
382848024e4aSbellard {"pflusha", 2,	one(0xf518),		one(0xfff8), "", m68040up },
382948024e4aSbellard {"pflusha", 4,	two(0xf000,0x2400), two(0xffff,0xffff), "", m68030 | m68851 },
383048024e4aSbellard 
383148024e4aSbellard {"pflush", 4,   two(0xf000,0x3010), two(0xffc0,0xfe10), "T3T9", m68030|m68851 },
383248024e4aSbellard {"pflush", 4,   two(0xf000,0x3810), two(0xffc0,0xfe10), "T3T9&s", m68030|m68851 },
383348024e4aSbellard {"pflush", 4,   two(0xf000,0x3008), two(0xffc0,0xfe18), "D3T9", m68030|m68851 },
383448024e4aSbellard {"pflush", 4,   two(0xf000,0x3808), two(0xffc0,0xfe18), "D3T9&s", m68030|m68851 },
383548024e4aSbellard {"pflush", 4,   two(0xf000,0x3000), two(0xffc0,0xfe1e), "f3T9", m68030|m68851 },
383648024e4aSbellard {"pflush", 4,   two(0xf000,0x3800), two(0xffc0,0xfe1e), "f3T9&s", m68030|m68851 },
383748024e4aSbellard {"pflush", 2,	one(0xf508),		one(0xfff8), "as", m68040up },
383848024e4aSbellard {"pflush", 2,	one(0xf508),		one(0xfff8), "As", m68040up },
383948024e4aSbellard 
384048024e4aSbellard {"pflushan", 2,	one(0xf510),		one(0xfff8), "", m68040up },
384148024e4aSbellard {"pflushn", 2,	one(0xf500),		one(0xfff8), "as", m68040up },
384248024e4aSbellard {"pflushn", 2,	one(0xf500),		one(0xfff8), "As", m68040up },
384348024e4aSbellard 
384448024e4aSbellard {"pflushr", 4,	two(0xf000, 0xa000), two(0xffc0, 0xffff), "|s", m68851 },
384548024e4aSbellard 
384648024e4aSbellard {"pflushs", 4,	two(0xf000, 0x3410), two(0xfff8, 0xfe10), "T3T9", m68851 },
384748024e4aSbellard {"pflushs", 4,	two(0xf000, 0x3c10), two(0xfff8, 0xfe10), "T3T9&s", m68851 },
384848024e4aSbellard {"pflushs", 4,	two(0xf000, 0x3408), two(0xfff8, 0xfe18), "D3T9", m68851 },
384948024e4aSbellard {"pflushs", 4,	two(0xf000, 0x3c08), two(0xfff8, 0xfe18), "D3T9&s", m68851 },
385048024e4aSbellard {"pflushs", 4,	two(0xf000, 0x3400), two(0xfff8, 0xfe1e), "f3T9", m68851 },
385148024e4aSbellard {"pflushs", 4,	two(0xf000, 0x3c00), two(0xfff8, 0xfe1e), "f3T9&s", m68851 },
385248024e4aSbellard 
385348024e4aSbellard {"ploadr", 4,   two(0xf000,0x2210), two(0xffc0,0xfff0), "T3&s", m68030|m68851 },
385448024e4aSbellard {"ploadr", 4,   two(0xf000,0x2208), two(0xffc0,0xfff8), "D3&s", m68030|m68851 },
385548024e4aSbellard {"ploadr", 4,   two(0xf000,0x2200), two(0xffc0,0xfffe), "f3&s", m68030|m68851 },
385648024e4aSbellard {"ploadw", 4,   two(0xf000,0x2010), two(0xffc0,0xfff0), "T3&s", m68030|m68851 },
385748024e4aSbellard {"ploadw", 4,   two(0xf000,0x2008), two(0xffc0,0xfff8), "D3&s", m68030|m68851 },
385848024e4aSbellard {"ploadw", 4,   two(0xf000,0x2000), two(0xffc0,0xfffe), "f3&s", m68030|m68851 },
385948024e4aSbellard 
386048024e4aSbellard {"plpar", 2,	one(0xf5c8),		one(0xfff8), "as", m68060 },
386148024e4aSbellard {"plpaw", 2,	one(0xf588),		one(0xfff8), "as", m68060 },
386248024e4aSbellard 
386348024e4aSbellard {"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xffff), "*l08", m68030|m68851 },
386448024e4aSbellard {"pmove", 4,    two(0xf000,0x5c00), two(0xffc0,0xffff), "*w18", m68851 },
386548024e4aSbellard {"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xe3ff), "*b28", m68851 },
386648024e4aSbellard {"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xffff), "08%s", m68030|m68851 },
386748024e4aSbellard {"pmove", 4,    two(0xf000,0x5e00), two(0xffc0,0xffff), "18%s", m68851 },
386848024e4aSbellard {"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xe3ff), "28%s", m68851 },
386948024e4aSbellard {"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xe3ff), "|sW8", m68030|m68851 },
387048024e4aSbellard {"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xe3ff), "W8~s", m68030|m68851 },
387148024e4aSbellard {"pmove", 4,    two(0xf000,0x6200), two(0xffc0,0xe3e3), "*wX3", m68851 },
387248024e4aSbellard {"pmove", 4,    two(0xf000,0x6000), two(0xffc0,0xe3e3), "X3%s", m68851 },
387348024e4aSbellard {"pmove", 4,    two(0xf000,0x6000), two(0xffc0,0xffff), "*wY8", m68030|m68851 },
387448024e4aSbellard {"pmove", 4,    two(0xf000,0x6200), two(0xffc0,0xffff), "Y8%s", m68030|m68851 },
387548024e4aSbellard {"pmove", 4,    two(0xf000,0x6600), two(0xffc0,0xffff), "Z8%s", m68851 },
387648024e4aSbellard {"pmove", 4,    two(0xf000,0x0800), two(0xffc0,0xfbff), "*l38", m68030 },
387748024e4aSbellard {"pmove", 4,    two(0xf000,0x0a00), two(0xffc0,0xfbff), "38%s", m68030 },
387848024e4aSbellard 
387948024e4aSbellard {"pmovefd", 4,	two(0xf000, 0x4100),	two(0xffc0, 0xe3ff), "*l08", m68030 },
388048024e4aSbellard {"pmovefd", 4,	two(0xf000, 0x4100),	two(0xffc0, 0xe3ff), "|sW8", m68030 },
388148024e4aSbellard {"pmovefd", 4,	two(0xf000, 0x0900),	two(0xffc0, 0xfbff), "*l38", m68030 },
388248024e4aSbellard 
388348024e4aSbellard {"prestore", 2,	one(0xf140),		one(0xffc0), "<s", m68851 },
388448024e4aSbellard 
388548024e4aSbellard {"psave", 2,	one(0xf100),		one(0xffc0), ">s", m68851 },
388648024e4aSbellard 
388748024e4aSbellard {"psac", 4,	two(0xf040, 0x0007),	two(0xffc0, 0xffff), "$s", m68851 },
388848024e4aSbellard {"psas", 4,	two(0xf040, 0x0006),	two(0xffc0, 0xffff), "$s", m68851 },
388948024e4aSbellard {"psbc", 4,	two(0xf040, 0x0001),	two(0xffc0, 0xffff), "$s", m68851 },
389048024e4aSbellard {"psbs", 4,	two(0xf040, 0x0000),	two(0xffc0, 0xffff), "$s", m68851 },
389148024e4aSbellard {"pscc", 4,	two(0xf040, 0x000f),	two(0xffc0, 0xffff), "$s", m68851 },
389248024e4aSbellard {"pscs", 4,	two(0xf040, 0x000e),	two(0xffc0, 0xffff), "$s", m68851 },
389348024e4aSbellard {"psgc", 4,	two(0xf040, 0x000d),	two(0xffc0, 0xffff), "$s", m68851 },
389448024e4aSbellard {"psgs", 4,	two(0xf040, 0x000c),	two(0xffc0, 0xffff), "$s", m68851 },
389548024e4aSbellard {"psic", 4,	two(0xf040, 0x000b),	two(0xffc0, 0xffff), "$s", m68851 },
389648024e4aSbellard {"psis", 4,	two(0xf040, 0x000a),	two(0xffc0, 0xffff), "$s", m68851 },
389748024e4aSbellard {"pslc", 4,	two(0xf040, 0x0003),	two(0xffc0, 0xffff), "$s", m68851 },
389848024e4aSbellard {"psls", 4,	two(0xf040, 0x0002),	two(0xffc0, 0xffff), "$s", m68851 },
389948024e4aSbellard {"pssc", 4,	two(0xf040, 0x0005),	two(0xffc0, 0xffff), "$s", m68851 },
390048024e4aSbellard {"psss", 4,	two(0xf040, 0x0004),	two(0xffc0, 0xffff), "$s", m68851 },
390148024e4aSbellard {"pswc", 4,	two(0xf040, 0x0009),	two(0xffc0, 0xffff), "$s", m68851 },
390248024e4aSbellard {"psws", 4,	two(0xf040, 0x0008),	two(0xffc0, 0xffff), "$s", m68851 },
390348024e4aSbellard 
390448024e4aSbellard {"ptestr", 4, 	two(0xf000,0x8210), two(0xffc0, 0xe3f0), "T3&st8", m68030|m68851 },
390548024e4aSbellard {"ptestr", 4, 	two(0xf000,0x8310), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 },
390648024e4aSbellard {"ptestr", 4, 	two(0xf000,0x8208), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 },
390748024e4aSbellard {"ptestr", 4, 	two(0xf000,0x8308), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 },
390848024e4aSbellard {"ptestr", 4, 	two(0xf000,0x8200), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 },
390948024e4aSbellard {"ptestr", 4, 	two(0xf000,0x8300), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 },
391048024e4aSbellard {"ptestr", 2,	one(0xf568),		one(0xfff8), "as", m68040 },
391148024e4aSbellard 
391248024e4aSbellard {"ptestw", 4, 	two(0xf000,0x8010), two(0xffc0,0xe3f0), "T3&st8", m68030|m68851 },
391348024e4aSbellard {"ptestw", 4, 	two(0xf000,0x8110), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 },
391448024e4aSbellard {"ptestw", 4, 	two(0xf000,0x8008), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 },
391548024e4aSbellard {"ptestw", 4, 	two(0xf000,0x8108), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 },
391648024e4aSbellard {"ptestw", 4, 	two(0xf000,0x8000), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 },
391748024e4aSbellard {"ptestw", 4, 	two(0xf000,0x8100), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 },
391848024e4aSbellard {"ptestw", 2,	one(0xf548),		one(0xfff8), "as", m68040 },
391948024e4aSbellard 
392048024e4aSbellard {"ptrapacw", 6,	two(0xf07a, 0x0007),	two(0xffff, 0xffff), "#w", m68851 },
392148024e4aSbellard {"ptrapacl", 6,	two(0xf07b, 0x0007),	two(0xffff, 0xffff), "#l", m68851 },
392248024e4aSbellard {"ptrapac", 4,	two(0xf07c, 0x0007),	two(0xffff, 0xffff), "",   m68851 },
392348024e4aSbellard 
392448024e4aSbellard {"ptrapasw", 6,	two(0xf07a, 0x0006),	two(0xffff, 0xffff), "#w", m68851 },
392548024e4aSbellard {"ptrapasl", 6,	two(0xf07b, 0x0006),	two(0xffff, 0xffff), "#l", m68851 },
392648024e4aSbellard {"ptrapas", 4,	two(0xf07c, 0x0006),	two(0xffff, 0xffff), "",   m68851 },
392748024e4aSbellard 
392848024e4aSbellard {"ptrapbcw", 6,	two(0xf07a, 0x0001),	two(0xffff, 0xffff), "#w", m68851 },
392948024e4aSbellard {"ptrapbcl", 6,	two(0xf07b, 0x0001),	two(0xffff, 0xffff), "#l", m68851 },
393048024e4aSbellard {"ptrapbc", 4,	two(0xf07c, 0x0001),	two(0xffff, 0xffff), "",   m68851 },
393148024e4aSbellard 
393248024e4aSbellard {"ptrapbsw", 6,	two(0xf07a, 0x0000),	two(0xffff, 0xffff), "#w", m68851 },
393348024e4aSbellard {"ptrapbsl", 6,	two(0xf07b, 0x0000),	two(0xffff, 0xffff), "#l", m68851 },
393448024e4aSbellard {"ptrapbs", 4,	two(0xf07c, 0x0000),	two(0xffff, 0xffff), "",   m68851 },
393548024e4aSbellard 
393648024e4aSbellard {"ptrapccw", 6,	two(0xf07a, 0x000f),	two(0xffff, 0xffff), "#w", m68851 },
393748024e4aSbellard {"ptrapccl", 6,	two(0xf07b, 0x000f),	two(0xffff, 0xffff), "#l", m68851 },
393848024e4aSbellard {"ptrapcc", 4,	two(0xf07c, 0x000f),	two(0xffff, 0xffff), "",   m68851 },
393948024e4aSbellard 
394048024e4aSbellard {"ptrapcsw", 6,	two(0xf07a, 0x000e),	two(0xffff, 0xffff), "#w", m68851 },
394148024e4aSbellard {"ptrapcsl", 6,	two(0xf07b, 0x000e),	two(0xffff, 0xffff), "#l", m68851 },
394248024e4aSbellard {"ptrapcs", 4,	two(0xf07c, 0x000e),	two(0xffff, 0xffff), "",   m68851 },
394348024e4aSbellard 
394448024e4aSbellard {"ptrapgcw", 6,	two(0xf07a, 0x000d),	two(0xffff, 0xffff), "#w", m68851 },
394548024e4aSbellard {"ptrapgcl", 6,	two(0xf07b, 0x000d),	two(0xffff, 0xffff), "#l", m68851 },
394648024e4aSbellard {"ptrapgc", 4,	two(0xf07c, 0x000d),	two(0xffff, 0xffff), "",   m68851 },
394748024e4aSbellard 
394848024e4aSbellard {"ptrapgsw", 6,	two(0xf07a, 0x000c),	two(0xffff, 0xffff), "#w", m68851 },
394948024e4aSbellard {"ptrapgsl", 6,	two(0xf07b, 0x000c),	two(0xffff, 0xffff), "#l", m68851 },
395048024e4aSbellard {"ptrapgs", 4,	two(0xf07c, 0x000c),	two(0xffff, 0xffff), "",   m68851 },
395148024e4aSbellard 
395248024e4aSbellard {"ptrapicw", 6,	two(0xf07a, 0x000b),	two(0xffff, 0xffff), "#w", m68851 },
395348024e4aSbellard {"ptrapicl", 6,	two(0xf07b, 0x000b),	two(0xffff, 0xffff), "#l", m68851 },
395448024e4aSbellard {"ptrapic", 4,	two(0xf07c, 0x000b),	two(0xffff, 0xffff), "",   m68851 },
395548024e4aSbellard 
395648024e4aSbellard {"ptrapisw", 6,	two(0xf07a, 0x000a),	two(0xffff, 0xffff), "#w", m68851 },
395748024e4aSbellard {"ptrapisl", 6,	two(0xf07b, 0x000a),	two(0xffff, 0xffff), "#l", m68851 },
395848024e4aSbellard {"ptrapis", 4,	two(0xf07c, 0x000a),	two(0xffff, 0xffff), "",   m68851 },
395948024e4aSbellard 
396048024e4aSbellard {"ptraplcw", 6,	two(0xf07a, 0x0003),	two(0xffff, 0xffff), "#w", m68851 },
396148024e4aSbellard {"ptraplcl", 6,	two(0xf07b, 0x0003),	two(0xffff, 0xffff), "#l", m68851 },
396248024e4aSbellard {"ptraplc", 4,	two(0xf07c, 0x0003),	two(0xffff, 0xffff), "",   m68851 },
396348024e4aSbellard 
396448024e4aSbellard {"ptraplsw", 6,	two(0xf07a, 0x0002),	two(0xffff, 0xffff), "#w", m68851 },
396548024e4aSbellard {"ptraplsl", 6,	two(0xf07b, 0x0002),	two(0xffff, 0xffff), "#l", m68851 },
396648024e4aSbellard {"ptrapls", 4,	two(0xf07c, 0x0002),	two(0xffff, 0xffff), "",   m68851 },
396748024e4aSbellard 
396848024e4aSbellard {"ptrapscw", 6,	two(0xf07a, 0x0005),	two(0xffff, 0xffff), "#w", m68851 },
396948024e4aSbellard {"ptrapscl", 6,	two(0xf07b, 0x0005),	two(0xffff, 0xffff), "#l", m68851 },
397048024e4aSbellard {"ptrapsc", 4,	two(0xf07c, 0x0005),	two(0xffff, 0xffff), "",   m68851 },
397148024e4aSbellard 
397248024e4aSbellard {"ptrapssw", 6,	two(0xf07a, 0x0004),	two(0xffff, 0xffff), "#w", m68851 },
397348024e4aSbellard {"ptrapssl", 6,	two(0xf07b, 0x0004),	two(0xffff, 0xffff), "#l", m68851 },
397448024e4aSbellard {"ptrapss", 4,	two(0xf07c, 0x0004),	two(0xffff, 0xffff), "",   m68851 },
397548024e4aSbellard 
397648024e4aSbellard {"ptrapwcw", 6,	two(0xf07a, 0x0009),	two(0xffff, 0xffff), "#w", m68851 },
397748024e4aSbellard {"ptrapwcl", 6,	two(0xf07b, 0x0009),	two(0xffff, 0xffff), "#l", m68851 },
397848024e4aSbellard {"ptrapwc", 4,	two(0xf07c, 0x0009),	two(0xffff, 0xffff), "",   m68851 },
397948024e4aSbellard 
398048024e4aSbellard {"ptrapwsw", 6,	two(0xf07a, 0x0008),	two(0xffff, 0xffff), "#w", m68851 },
398148024e4aSbellard {"ptrapwsl", 6,	two(0xf07b, 0x0008),	two(0xffff, 0xffff), "#l", m68851 },
398248024e4aSbellard {"ptrapws", 4,	two(0xf07c, 0x0008),	two(0xffff, 0xffff), "",   m68851 },
398348024e4aSbellard 
398448024e4aSbellard {"pulse", 2,	one(0045314),		one(0177777), "", m68060 | mcfisa_a },
398548024e4aSbellard 
398648024e4aSbellard {"pvalid", 4,	two(0xf000, 0x2800),	two(0xffc0, 0xffff), "Vs&s", m68851 },
398748024e4aSbellard {"pvalid", 4,	two(0xf000, 0x2c00),	two(0xffc0, 0xfff8), "A3&s", m68851 },
398848024e4aSbellard 
398948024e4aSbellard   /* FIXME: don't allow Dw==Dx. */
399048024e4aSbellard {"remsl", 4,    two(0x4c40, 0x0800),    two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv },
399148024e4aSbellard {"remul", 4,    two(0x4c40, 0x0000),    two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv },
399248024e4aSbellard 
399348024e4aSbellard {"reset", 2,	one(0047160),		one(0177777), "", m68000up },
399448024e4aSbellard 
399548024e4aSbellard {"rolb", 2,	one(0160430),		one(0170770), "QdDs", m68000up },
399648024e4aSbellard {"rolb", 2,	one(0160470),		one(0170770), "DdDs", m68000up },
399748024e4aSbellard {"rolw", 2,	one(0160530),		one(0170770), "QdDs", m68000up },
399848024e4aSbellard {"rolw", 2,	one(0160570),		one(0170770), "DdDs", m68000up },
399948024e4aSbellard {"rolw", 2,	one(0163700),		one(0177700), "~s",   m68000up },
400048024e4aSbellard {"roll", 2,	one(0160630),		one(0170770), "QdDs", m68000up },
400148024e4aSbellard {"roll", 2,	one(0160670),		one(0170770), "DdDs", m68000up },
400248024e4aSbellard 
400348024e4aSbellard {"rorb", 2,	one(0160030),		one(0170770), "QdDs", m68000up },
400448024e4aSbellard {"rorb", 2,	one(0160070),		one(0170770), "DdDs", m68000up },
400548024e4aSbellard {"rorw", 2,	one(0160130),		one(0170770), "QdDs", m68000up },
400648024e4aSbellard {"rorw", 2,	one(0160170),		one(0170770), "DdDs", m68000up },
400748024e4aSbellard {"rorw", 2,	one(0163300),		one(0177700), "~s",   m68000up },
400848024e4aSbellard {"rorl", 2,	one(0160230),		one(0170770), "QdDs", m68000up },
400948024e4aSbellard {"rorl", 2,	one(0160270),		one(0170770), "DdDs", m68000up },
401048024e4aSbellard 
401148024e4aSbellard {"roxlb", 2,	one(0160420),		one(0170770), "QdDs", m68000up },
401248024e4aSbellard {"roxlb", 2,	one(0160460),		one(0170770), "DdDs", m68000up },
401348024e4aSbellard {"roxlw", 2,	one(0160520),		one(0170770), "QdDs", m68000up },
401448024e4aSbellard {"roxlw", 2,	one(0160560),		one(0170770), "DdDs", m68000up },
401548024e4aSbellard {"roxlw", 2,	one(0162700),		one(0177700), "~s",   m68000up },
401648024e4aSbellard {"roxll", 2,	one(0160620),		one(0170770), "QdDs", m68000up },
401748024e4aSbellard {"roxll", 2,	one(0160660),		one(0170770), "DdDs", m68000up },
401848024e4aSbellard 
401948024e4aSbellard {"roxrb", 2,	one(0160020),		one(0170770), "QdDs", m68000up },
402048024e4aSbellard {"roxrb", 2,	one(0160060),		one(0170770), "DdDs", m68000up },
402148024e4aSbellard {"roxrw", 2,	one(0160120),		one(0170770), "QdDs", m68000up },
402248024e4aSbellard {"roxrw", 2,	one(0160160),		one(0170770), "DdDs", m68000up },
402348024e4aSbellard {"roxrw", 2,	one(0162300),		one(0177700), "~s",   m68000up },
402448024e4aSbellard {"roxrl", 2,	one(0160220),		one(0170770), "QdDs", m68000up },
402548024e4aSbellard {"roxrl", 2,	one(0160260),		one(0170770), "DdDs", m68000up },
402648024e4aSbellard 
402748024e4aSbellard {"rtd", 4,	one(0047164),		one(0177777), "#w", m68010up },
402848024e4aSbellard 
402948024e4aSbellard {"rte", 2,	one(0047163),		one(0177777), "",   m68000up | mcfisa_a },
403048024e4aSbellard 
403148024e4aSbellard {"rtm", 2,	one(0003300),		one(0177760), "Rs", m68020 },
403248024e4aSbellard 
403348024e4aSbellard {"rtr", 2,	one(0047167),		one(0177777), "",   m68000up },
403448024e4aSbellard 
403548024e4aSbellard {"rts", 2,	one(0047165),		one(0177777), "",   m68000up | mcfisa_a },
403648024e4aSbellard 
403748024e4aSbellard {"satsl", 2,	one(0046200),		one(0177770), "Ds", mcfisa_b },
403848024e4aSbellard 
403948024e4aSbellard {"sbcd", 2,	one(0100400),		one(0170770), "DsDd", m68000up },
404048024e4aSbellard {"sbcd", 2,	one(0100410),		one(0170770), "-s-d", m68000up },
404148024e4aSbellard 
404248024e4aSbellard {"scc", 2,	one(0052300),	one(0177700), "$s", m68000up },
404348024e4aSbellard {"scc", 2,	one(0052300),	one(0177700), "Ds", mcfisa_a },
404448024e4aSbellard {"scs", 2,	one(0052700),	one(0177700), "$s", m68000up },
404548024e4aSbellard {"scs", 2,	one(0052700),	one(0177700), "Ds", mcfisa_a },
404648024e4aSbellard {"seq", 2,	one(0053700),	one(0177700), "$s", m68000up },
404748024e4aSbellard {"seq", 2,	one(0053700),	one(0177700), "Ds", mcfisa_a },
404848024e4aSbellard {"sf", 2,	one(0050700),	one(0177700), "$s", m68000up },
404948024e4aSbellard {"sf", 2,	one(0050700),	one(0177700), "Ds", mcfisa_a },
405048024e4aSbellard {"sge", 2,	one(0056300),	one(0177700), "$s", m68000up },
405148024e4aSbellard {"sge", 2,	one(0056300),	one(0177700), "Ds", mcfisa_a },
405248024e4aSbellard {"sgt", 2,	one(0057300),	one(0177700), "$s", m68000up },
405348024e4aSbellard {"sgt", 2,	one(0057300),	one(0177700), "Ds", mcfisa_a },
405448024e4aSbellard {"shi", 2,	one(0051300),	one(0177700), "$s", m68000up },
405548024e4aSbellard {"shi", 2,	one(0051300),	one(0177700), "Ds", mcfisa_a },
405648024e4aSbellard {"sle", 2,	one(0057700),	one(0177700), "$s", m68000up },
405748024e4aSbellard {"sle", 2,	one(0057700),	one(0177700), "Ds", mcfisa_a },
405848024e4aSbellard {"sls", 2,	one(0051700),	one(0177700), "$s", m68000up },
405948024e4aSbellard {"sls", 2,	one(0051700),	one(0177700), "Ds", mcfisa_a },
406048024e4aSbellard {"slt", 2,	one(0056700),	one(0177700), "$s", m68000up },
406148024e4aSbellard {"slt", 2,	one(0056700),	one(0177700), "Ds", mcfisa_a },
406248024e4aSbellard {"smi", 2,	one(0055700),	one(0177700), "$s", m68000up },
406348024e4aSbellard {"smi", 2,	one(0055700),	one(0177700), "Ds", mcfisa_a },
406448024e4aSbellard {"sne", 2,	one(0053300),	one(0177700), "$s", m68000up },
406548024e4aSbellard {"sne", 2,	one(0053300),	one(0177700), "Ds", mcfisa_a },
406648024e4aSbellard {"spl", 2,	one(0055300),	one(0177700), "$s", m68000up },
406748024e4aSbellard {"spl", 2,	one(0055300),	one(0177700), "Ds", mcfisa_a },
406848024e4aSbellard {"st", 2,	one(0050300),	one(0177700), "$s", m68000up },
406948024e4aSbellard {"st", 2,	one(0050300),	one(0177700), "Ds", mcfisa_a },
407048024e4aSbellard {"svc", 2,	one(0054300),	one(0177700), "$s", m68000up },
407148024e4aSbellard {"svc", 2,	one(0054300),	one(0177700), "Ds", mcfisa_a },
407248024e4aSbellard {"svs", 2,	one(0054700),	one(0177700), "$s", m68000up },
407348024e4aSbellard {"svs", 2,	one(0054700),	one(0177700), "Ds", mcfisa_a },
407448024e4aSbellard 
407548024e4aSbellard {"stop", 4,	one(0047162),	one(0177777), "#w", m68000up | mcfisa_a },
407648024e4aSbellard 
407748024e4aSbellard {"strldsr", 4, two(0040347,0043374), two(0177777,0177777), "#w", mcfisa_aa},
407848024e4aSbellard 
407948024e4aSbellard {"subal", 2,	one(0110700),	one(0170700), "*lAd", m68000up | mcfisa_a },
408048024e4aSbellard {"subaw", 2,	one(0110300),	one(0170700), "*wAd", m68000up },
408148024e4aSbellard 
408248024e4aSbellard {"subib", 4,	one(0002000),	one(0177700), "#b$s", m68000up },
408348024e4aSbellard {"subiw", 4,	one(0002100),	one(0177700), "#w$s", m68000up },
408448024e4aSbellard {"subil", 6,	one(0002200),	one(0177700), "#l$s", m68000up },
408548024e4aSbellard {"subil", 6,	one(0002200),	one(0177700), "#lDs", mcfisa_a },
408648024e4aSbellard 
408748024e4aSbellard {"subqb", 2,	one(0050400),	one(0170700), "Qd%s", m68000up },
408848024e4aSbellard {"subqw", 2,	one(0050500),	one(0170700), "Qd%s", m68000up },
408948024e4aSbellard {"subql", 2,	one(0050600),	one(0170700), "Qd%s", m68000up | mcfisa_a },
409048024e4aSbellard 
409148024e4aSbellard /* The sub opcode can generate the suba, subi, and subq instructions.  */
409248024e4aSbellard {"subb", 2,	one(0050400),	one(0170700), "Qd%s", m68000up },
409348024e4aSbellard {"subb", 4,	one(0002000),	one(0177700), "#b$s", m68000up },
409448024e4aSbellard {"subb", 2,	one(0110000),	one(0170700), ";bDd", m68000up },
409548024e4aSbellard {"subb", 2,	one(0110400),	one(0170700), "Dd~s", m68000up },
409648024e4aSbellard {"subw", 2,	one(0050500),	one(0170700), "Qd%s", m68000up },
409748024e4aSbellard {"subw", 4,	one(0002100),	one(0177700), "#w$s", m68000up },
409848024e4aSbellard {"subw", 2,	one(0110300),	one(0170700), "*wAd", m68000up },
409948024e4aSbellard {"subw", 2,	one(0110100),	one(0170700), "*wDd", m68000up },
410048024e4aSbellard {"subw", 2,	one(0110500),	one(0170700), "Dd~s", m68000up },
410148024e4aSbellard {"subl", 2,	one(0050600),	one(0170700), "Qd%s", m68000up | mcfisa_a },
410248024e4aSbellard {"subl", 6,	one(0002200),	one(0177700), "#l$s", m68000up },
410348024e4aSbellard {"subl", 6,	one(0002200),	one(0177700), "#lDs", mcfisa_a },
410448024e4aSbellard {"subl", 2,	one(0110700),	one(0170700), "*lAd", m68000up | mcfisa_a },
410548024e4aSbellard {"subl", 2,	one(0110200),	one(0170700), "*lDd", m68000up | mcfisa_a },
410648024e4aSbellard {"subl", 2,	one(0110600),	one(0170700), "Dd~s", m68000up | mcfisa_a },
410748024e4aSbellard 
410848024e4aSbellard {"subxb", 2,	one(0110400),	one(0170770), "DsDd", m68000up },
410948024e4aSbellard {"subxb", 2,	one(0110410),	one(0170770), "-s-d", m68000up },
411048024e4aSbellard {"subxw", 2,	one(0110500),	one(0170770), "DsDd", m68000up },
411148024e4aSbellard {"subxw", 2,	one(0110510),	one(0170770), "-s-d", m68000up },
411248024e4aSbellard {"subxl", 2,	one(0110600),	one(0170770), "DsDd", m68000up | mcfisa_a },
411348024e4aSbellard {"subxl", 2,	one(0110610),	one(0170770), "-s-d", m68000up },
411448024e4aSbellard 
411548024e4aSbellard {"swap", 2,	one(0044100),	one(0177770), "Ds", m68000up | mcfisa_a },
411648024e4aSbellard 
411748024e4aSbellard /* swbeg and swbegl are magic constants used on sysV68.  The compiler
411848024e4aSbellard    generates them before a switch table.  They tell the debugger and
411948024e4aSbellard    disassembler that a switch table follows.  The parameter is the
412048024e4aSbellard    number of elements in the table.  swbeg means that the entries in
412148024e4aSbellard    the table are word (2 byte) sized, and swbegl means that the
412248024e4aSbellard    entries in the table are longword (4 byte) sized.  */
412348024e4aSbellard {"swbeg", 4,	one(0045374),	one(0177777), "#w",   m68000up | mcfisa_a },
412448024e4aSbellard {"swbegl", 6,	one(0045375),	one(0177777), "#l",   m68000up | mcfisa_a },
412548024e4aSbellard 
412648024e4aSbellard {"tas", 2,	one(0045300),	one(0177700), "$s", m68000up | mcfisa_b},
412748024e4aSbellard 
412848024e4aSbellard #define TBL1(name,insn_size,signed,round,size)					\
412948024e4aSbellard   {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)|0000400),	\
413048024e4aSbellard      two(0177700,0107777), "!sD1", cpu32 },				\
413148024e4aSbellard   {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)),		\
413248024e4aSbellard      two(0177770,0107770), "DsD3D1", cpu32 }
413348024e4aSbellard #define TBL(name1, name2, name3, s, r) \
413448024e4aSbellard   TBL1(name1, 4, s, r, 0), TBL1(name2, 4, s, r, 1), TBL1(name3, 4, s, r, 2)
413548024e4aSbellard TBL("tblsb", "tblsw", "tblsl", 2, 1),
413648024e4aSbellard TBL("tblsnb", "tblsnw", "tblsnl", 2, 0),
413748024e4aSbellard TBL("tblub", "tbluw", "tblul", 0, 1),
413848024e4aSbellard TBL("tblunb", "tblunw", "tblunl", 0, 0),
413948024e4aSbellard 
414048024e4aSbellard {"trap", 2,	one(0047100),	one(0177760), "Ts", m68000up | mcfisa_a },
414148024e4aSbellard 
414248024e4aSbellard {"trapcc", 2,	one(0052374),	one(0177777), "", m68020up | cpu32 },
414348024e4aSbellard {"trapcs", 2,	one(0052774),	one(0177777), "", m68020up | cpu32 },
414448024e4aSbellard {"trapeq", 2,	one(0053774),	one(0177777), "", m68020up | cpu32 },
414548024e4aSbellard {"trapf", 2,	one(0050774),	one(0177777), "", m68020up | cpu32 | mcfisa_a },
414648024e4aSbellard {"trapge", 2,	one(0056374),	one(0177777), "", m68020up | cpu32 },
414748024e4aSbellard {"trapgt", 2,	one(0057374),	one(0177777), "", m68020up | cpu32 },
414848024e4aSbellard {"traphi", 2,	one(0051374),	one(0177777), "", m68020up | cpu32 },
414948024e4aSbellard {"traple", 2,	one(0057774),	one(0177777), "", m68020up | cpu32 },
415048024e4aSbellard {"trapls", 2,	one(0051774),	one(0177777), "", m68020up | cpu32 },
415148024e4aSbellard {"traplt", 2,	one(0056774),	one(0177777), "", m68020up | cpu32 },
415248024e4aSbellard {"trapmi", 2,	one(0055774),	one(0177777), "", m68020up | cpu32 },
415348024e4aSbellard {"trapne", 2,	one(0053374),	one(0177777), "", m68020up | cpu32 },
415448024e4aSbellard {"trappl", 2,	one(0055374),	one(0177777), "", m68020up | cpu32 },
415548024e4aSbellard {"trapt", 2,	one(0050374),	one(0177777), "", m68020up | cpu32 },
415648024e4aSbellard {"trapvc", 2,	one(0054374),	one(0177777), "", m68020up | cpu32 },
415748024e4aSbellard {"trapvs", 2,	one(0054774),	one(0177777), "", m68020up | cpu32 },
415848024e4aSbellard 
415948024e4aSbellard {"trapccw", 4,	one(0052372),	one(0177777), "#w", m68020up|cpu32 },
416048024e4aSbellard {"trapcsw", 4,	one(0052772),	one(0177777), "#w", m68020up|cpu32 },
416148024e4aSbellard {"trapeqw", 4,	one(0053772),	one(0177777), "#w", m68020up|cpu32 },
416248024e4aSbellard {"trapfw", 4,	one(0050772),	one(0177777), "#w", m68020up|cpu32|mcfisa_a},
416348024e4aSbellard {"trapgew", 4,	one(0056372),	one(0177777), "#w", m68020up|cpu32 },
416448024e4aSbellard {"trapgtw", 4,	one(0057372),	one(0177777), "#w", m68020up|cpu32 },
416548024e4aSbellard {"traphiw", 4,	one(0051372),	one(0177777), "#w", m68020up|cpu32 },
416648024e4aSbellard {"traplew", 4,	one(0057772),	one(0177777), "#w", m68020up|cpu32 },
416748024e4aSbellard {"traplsw", 4,	one(0051772),	one(0177777), "#w", m68020up|cpu32 },
416848024e4aSbellard {"trapltw", 4,	one(0056772),	one(0177777), "#w", m68020up|cpu32 },
416948024e4aSbellard {"trapmiw", 4,	one(0055772),	one(0177777), "#w", m68020up|cpu32 },
417048024e4aSbellard {"trapnew", 4,	one(0053372),	one(0177777), "#w", m68020up|cpu32 },
417148024e4aSbellard {"trapplw", 4,	one(0055372),	one(0177777), "#w", m68020up|cpu32 },
417248024e4aSbellard {"traptw", 4,	one(0050372),	one(0177777), "#w", m68020up|cpu32 },
417348024e4aSbellard {"trapvcw", 4,	one(0054372),	one(0177777), "#w", m68020up|cpu32 },
417448024e4aSbellard {"trapvsw", 4,	one(0054772),	one(0177777), "#w", m68020up|cpu32 },
417548024e4aSbellard 
417648024e4aSbellard {"trapccl", 6,	one(0052373),	one(0177777), "#l", m68020up|cpu32 },
417748024e4aSbellard {"trapcsl", 6,	one(0052773),	one(0177777), "#l", m68020up|cpu32 },
417848024e4aSbellard {"trapeql", 6,	one(0053773),	one(0177777), "#l", m68020up|cpu32 },
417948024e4aSbellard {"trapfl", 6,	one(0050773),	one(0177777), "#l", m68020up|cpu32|mcfisa_a},
418048024e4aSbellard {"trapgel", 6,	one(0056373),	one(0177777), "#l", m68020up|cpu32 },
418148024e4aSbellard {"trapgtl", 6,	one(0057373),	one(0177777), "#l", m68020up|cpu32 },
418248024e4aSbellard {"traphil", 6,	one(0051373),	one(0177777), "#l", m68020up|cpu32 },
418348024e4aSbellard {"traplel", 6,	one(0057773),	one(0177777), "#l", m68020up|cpu32 },
418448024e4aSbellard {"traplsl", 6,	one(0051773),	one(0177777), "#l", m68020up|cpu32 },
418548024e4aSbellard {"trapltl", 6,	one(0056773),	one(0177777), "#l", m68020up|cpu32 },
418648024e4aSbellard {"trapmil", 6,	one(0055773),	one(0177777), "#l", m68020up|cpu32 },
418748024e4aSbellard {"trapnel", 6,	one(0053373),	one(0177777), "#l", m68020up|cpu32 },
418848024e4aSbellard {"trappll", 6,	one(0055373),	one(0177777), "#l", m68020up|cpu32 },
418948024e4aSbellard {"traptl", 6,	one(0050373),	one(0177777), "#l", m68020up|cpu32 },
419048024e4aSbellard {"trapvcl", 6,	one(0054373),	one(0177777), "#l", m68020up|cpu32 },
419148024e4aSbellard {"trapvsl", 6,	one(0054773),	one(0177777), "#l", m68020up|cpu32 },
419248024e4aSbellard 
419348024e4aSbellard {"trapv", 2,	one(0047166),	one(0177777), "", m68000up },
419448024e4aSbellard 
419548024e4aSbellard {"tstb", 2,	one(0045000),	one(0177700), ";b", m68020up|cpu32|mcfisa_a },
419648024e4aSbellard {"tstb", 2,	one(0045000),	one(0177700), "$b", m68000up },
419748024e4aSbellard {"tstw", 2,	one(0045100),	one(0177700), "*w", m68020up|cpu32|mcfisa_a },
419848024e4aSbellard {"tstw", 2,	one(0045100),	one(0177700), "$w", m68000up },
419948024e4aSbellard {"tstl", 2,	one(0045200),	one(0177700), "*l", m68020up|cpu32|mcfisa_a },
420048024e4aSbellard {"tstl", 2,	one(0045200),	one(0177700), "$l", m68000up },
420148024e4aSbellard 
420248024e4aSbellard {"unlk", 2,	one(0047130),	one(0177770), "As", m68000up | mcfisa_a },
420348024e4aSbellard 
420448024e4aSbellard {"unpk", 4,	one(0100600),	one(0170770), "DsDd#w", m68020up },
420548024e4aSbellard {"unpk", 4,	one(0100610),	one(0170770), "-s-d#w", m68020up },
420648024e4aSbellard 
420748024e4aSbellard {"wddatab", 2,	one(0175400),   one(0177700), "~s", mcfisa_a },
420848024e4aSbellard {"wddataw", 2,	one(0175500),   one(0177700), "~s", mcfisa_a },
420948024e4aSbellard {"wddatal", 2,	one(0175600),   one(0177700), "~s", mcfisa_a },
421048024e4aSbellard 
421148024e4aSbellard {"wdebug", 4,	two(0175720, 03),	two(0177770, 0xffff), "as", mcfisa_a },
421248024e4aSbellard {"wdebug", 4,	two(0175750, 03),	two(0177770, 0xffff), "ds", mcfisa_a },
421348024e4aSbellard };
421448024e4aSbellard 
421548024e4aSbellard const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0];
421648024e4aSbellard 
421748024e4aSbellard /* These aliases used to be in the above table, each one duplicating
421848024e4aSbellard    all of the entries for its primary exactly.  This table was
421948024e4aSbellard    constructed by mechanical processing of the opcode table, with a
422048024e4aSbellard    small number of tweaks done by hand.  There are probably a lot more
422148024e4aSbellard    aliases above that could be moved down here, except for very minor
422248024e4aSbellard    differences.  */
422348024e4aSbellard 
422448024e4aSbellard const struct m68k_opcode_alias m68k_opcode_aliases[] =
422548024e4aSbellard {
422648024e4aSbellard   { "add",	"addw", },
422748024e4aSbellard   { "adda",	"addaw", },
422848024e4aSbellard   { "addi",	"addiw", },
422948024e4aSbellard   { "addq",	"addqw", },
423048024e4aSbellard   { "addx",	"addxw", },
423148024e4aSbellard   { "asl",	"aslw", },
423248024e4aSbellard   { "asr",	"asrw", },
423348024e4aSbellard   { "bhi",	"bhiw", },
423448024e4aSbellard   { "bls",	"blsw", },
423548024e4aSbellard   { "bcc",	"bccw", },
423648024e4aSbellard   { "bcs",	"bcsw", },
423748024e4aSbellard   { "bne",	"bnew", },
423848024e4aSbellard   { "beq",	"beqw", },
423948024e4aSbellard   { "bvc",	"bvcw", },
424048024e4aSbellard   { "bvs",	"bvsw", },
424148024e4aSbellard   { "bpl",	"bplw", },
424248024e4aSbellard   { "bmi",	"bmiw", },
424348024e4aSbellard   { "bge",	"bgew", },
424448024e4aSbellard   { "blt",	"bltw", },
424548024e4aSbellard   { "bgt",	"bgtw", },
424648024e4aSbellard   { "ble",	"blew", },
424748024e4aSbellard   { "bra",	"braw", },
424848024e4aSbellard   { "bsr",	"bsrw", },
424948024e4aSbellard   { "bhib",	"bhis", },
425048024e4aSbellard   { "blsb",	"blss", },
425148024e4aSbellard   { "bccb",	"bccs", },
425248024e4aSbellard   { "bcsb",	"bcss", },
425348024e4aSbellard   { "bneb",	"bnes", },
425448024e4aSbellard   { "beqb",	"beqs", },
425548024e4aSbellard   { "bvcb",	"bvcs", },
425648024e4aSbellard   { "bvsb",	"bvss", },
425748024e4aSbellard   { "bplb",	"bpls", },
425848024e4aSbellard   { "bmib",	"bmis", },
425948024e4aSbellard   { "bgeb",	"bges", },
426048024e4aSbellard   { "bltb",	"blts", },
426148024e4aSbellard   { "bgtb",	"bgts", },
426248024e4aSbellard   { "bleb",	"bles", },
426348024e4aSbellard   { "brab",	"bras", },
426448024e4aSbellard   { "bsrb",	"bsrs", },
426548024e4aSbellard   { "bhs",	"bccw" },
426648024e4aSbellard   { "bhss",	"bccs" },
426748024e4aSbellard   { "bhsb",	"bccs" },
426848024e4aSbellard   { "bhsw",	"bccw" },
426948024e4aSbellard   { "bhsl",	"bccl" },
427048024e4aSbellard   { "blo",	"bcsw" },
427148024e4aSbellard   { "blos",	"bcss" },
427248024e4aSbellard   { "blob",	"bcss" },
427348024e4aSbellard   { "blow",	"bcsw" },
427448024e4aSbellard   { "blol",	"bcsl" },
427548024e4aSbellard   { "br",	"braw", },
427648024e4aSbellard   { "brs",	"bras", },
427748024e4aSbellard   { "brb",	"bras", },
427848024e4aSbellard   { "brw",	"braw", },
427948024e4aSbellard   { "brl",	"bral", },
428048024e4aSbellard   { "jfnlt",	"bcc", },	/* Apparently a sun alias.  */
428148024e4aSbellard   { "jfngt",	"ble", },	/* Apparently a sun alias.  */
428248024e4aSbellard   { "jfeq",	"beqs", },	/* Apparently a sun alias.  */
428348024e4aSbellard   { "bchgb",	"bchg", },
428448024e4aSbellard   { "bchgl",	"bchg", },
428548024e4aSbellard   { "bclrb",	"bclr", },
428648024e4aSbellard   { "bclrl",	"bclr", },
428748024e4aSbellard   { "bsetb",	"bset", },
428848024e4aSbellard   { "bsetl",	"bset", },
428948024e4aSbellard   { "btstb",	"btst", },
429048024e4aSbellard   { "btstl",	"btst", },
429148024e4aSbellard   { "cas2",	"cas2w", },
429248024e4aSbellard   { "cas",	"casw", },
429348024e4aSbellard   { "chk2",	"chk2w", },
429448024e4aSbellard   { "chk",	"chkw", },
429548024e4aSbellard   { "clr",	"clrw", },
429648024e4aSbellard   { "cmp2",	"cmp2w", },
429748024e4aSbellard   { "cmpa",	"cmpaw", },
429848024e4aSbellard   { "cmpi",	"cmpiw", },
429948024e4aSbellard   { "cmpm",	"cmpmw", },
430048024e4aSbellard   { "cmp",	"cmpw", },
430148024e4aSbellard   { "dbccw",	"dbcc", },
430248024e4aSbellard   { "dbcsw",	"dbcs", },
430348024e4aSbellard   { "dbeqw",	"dbeq", },
430448024e4aSbellard   { "dbfw",	"dbf", },
430548024e4aSbellard   { "dbgew",	"dbge", },
430648024e4aSbellard   { "dbgtw",	"dbgt", },
430748024e4aSbellard   { "dbhiw",	"dbhi", },
430848024e4aSbellard   { "dblew",	"dble", },
430948024e4aSbellard   { "dblsw",	"dbls", },
431048024e4aSbellard   { "dbltw",	"dblt", },
431148024e4aSbellard   { "dbmiw",	"dbmi", },
431248024e4aSbellard   { "dbnew",	"dbne", },
431348024e4aSbellard   { "dbplw",	"dbpl", },
431448024e4aSbellard   { "dbtw",	"dbt", },
431548024e4aSbellard   { "dbvcw",	"dbvc", },
431648024e4aSbellard   { "dbvsw",	"dbvs", },
431748024e4aSbellard   { "dbhs",	"dbcc", },
431848024e4aSbellard   { "dbhsw",	"dbcc", },
431948024e4aSbellard   { "dbra",	"dbf", },
432048024e4aSbellard   { "dbraw",	"dbf", },
432148024e4aSbellard   { "tdivsl",	"divsl", },
432248024e4aSbellard   { "divs",	"divsw", },
432348024e4aSbellard   { "divu",	"divuw", },
432448024e4aSbellard   { "ext",	"extw", },
432548024e4aSbellard   { "extbw",	"extw", },
432648024e4aSbellard   { "extwl",	"extl", },
432748024e4aSbellard   { "fbneq",	"fbne", },
432848024e4aSbellard   { "fbsneq",	"fbsne", },
432948024e4aSbellard   { "fdbneq",	"fdbne", },
433048024e4aSbellard   { "fdbsneq",	"fdbsne", },
433148024e4aSbellard   { "fmovecr",	"fmovecrx", },
433248024e4aSbellard   { "fmovm",	"fmovem", },
433348024e4aSbellard   { "fsneq",	"fsne", },
433448024e4aSbellard   { "fssneq",	"fssne", },
433548024e4aSbellard   { "ftrapneq",	"ftrapne", },
433648024e4aSbellard   { "ftrapsneq", "ftrapsne", },
433748024e4aSbellard   { "fjneq",	"fjne", },
433848024e4aSbellard   { "fjsneq",	"fjsne", },
433948024e4aSbellard   { "jmpl",	"jmp", },
434048024e4aSbellard   { "jmps",	"jmp", },
434148024e4aSbellard   { "jsrl",	"jsr", },
434248024e4aSbellard   { "jsrs",	"jsr", },
434348024e4aSbellard   { "leal",	"lea", },
434448024e4aSbellard   { "lsl",	"lslw", },
434548024e4aSbellard   { "lsr",	"lsrw", },
434648024e4aSbellard   { "mac",	"macw" },
434748024e4aSbellard   { "movea",	"moveaw", },
434848024e4aSbellard   { "movem",	"movemw", },
434948024e4aSbellard   { "movml",	"moveml", },
435048024e4aSbellard   { "movmw",	"movemw", },
435148024e4aSbellard   { "movm",	"movemw", },
435248024e4aSbellard   { "movep",	"movepw", },
435348024e4aSbellard   { "movpw",	"movepw", },
435448024e4aSbellard   { "moves",	"movesw" },
435548024e4aSbellard   { "muls",	"mulsw", },
435648024e4aSbellard   { "mulu",	"muluw", },
435748024e4aSbellard   { "msac",	"msacw" },
435848024e4aSbellard   { "nbcdb",	"nbcd" },
435948024e4aSbellard   { "neg",	"negw", },
436048024e4aSbellard   { "negx",	"negxw", },
436148024e4aSbellard   { "not",	"notw", },
436248024e4aSbellard   { "peal",	"pea", },
436348024e4aSbellard   { "rol",	"rolw", },
436448024e4aSbellard   { "ror",	"rorw", },
436548024e4aSbellard   { "roxl",	"roxlw", },
436648024e4aSbellard   { "roxr",	"roxrw", },
436748024e4aSbellard   { "sats",	"satsl", },
436848024e4aSbellard   { "sbcdb",	"sbcd", },
436948024e4aSbellard   { "sccb",	"scc", },
437048024e4aSbellard   { "scsb",	"scs", },
437148024e4aSbellard   { "seqb",	"seq", },
437248024e4aSbellard   { "sfb",	"sf", },
437348024e4aSbellard   { "sgeb",	"sge", },
437448024e4aSbellard   { "sgtb",	"sgt", },
437548024e4aSbellard   { "shib",	"shi", },
437648024e4aSbellard   { "sleb",	"sle", },
437748024e4aSbellard   { "slsb",	"sls", },
437848024e4aSbellard   { "sltb",	"slt", },
437948024e4aSbellard   { "smib",	"smi", },
438048024e4aSbellard   { "sneb",	"sne", },
438148024e4aSbellard   { "splb",	"spl", },
438248024e4aSbellard   { "stb",	"st", },
438348024e4aSbellard   { "svcb",	"svc", },
438448024e4aSbellard   { "svsb",	"svs", },
438548024e4aSbellard   { "sfge",	"sge", },
438648024e4aSbellard   { "sfgt",	"sgt", },
438748024e4aSbellard   { "sfle",	"sle", },
438848024e4aSbellard   { "sflt",	"slt", },
438948024e4aSbellard   { "sfneq",	"sne", },
439048024e4aSbellard   { "suba",	"subaw", },
439148024e4aSbellard   { "subi",	"subiw", },
439248024e4aSbellard   { "subq",	"subqw", },
439348024e4aSbellard   { "sub",	"subw", },
439448024e4aSbellard   { "subx",	"subxw", },
439548024e4aSbellard   { "swapw",	"swap", },
439648024e4aSbellard   { "tasb",	"tas", },
439748024e4aSbellard   { "tpcc",	"trapcc", },
439848024e4aSbellard   { "tcc",	"trapcc", },
439948024e4aSbellard   { "tst",	"tstw", },
440048024e4aSbellard   { "jbra",	"jra", },
440148024e4aSbellard   { "jbhi",	"jhi", },
440248024e4aSbellard   { "jbls",	"jls", },
440348024e4aSbellard   { "jbcc",	"jcc", },
440448024e4aSbellard   { "jbcs",	"jcs", },
440548024e4aSbellard   { "jbne",	"jne", },
440648024e4aSbellard   { "jbeq",	"jeq", },
440748024e4aSbellard   { "jbvc",	"jvc", },
440848024e4aSbellard   { "jbvs",	"jvs", },
440948024e4aSbellard   { "jbpl",	"jpl", },
441048024e4aSbellard   { "jbmi",	"jmi", },
441148024e4aSbellard   { "jbge",	"jge", },
441248024e4aSbellard   { "jblt",	"jlt", },
441348024e4aSbellard   { "jbgt",	"jgt", },
441448024e4aSbellard   { "jble",	"jle", },
441548024e4aSbellard   { "movql",	"moveq", },
441648024e4aSbellard   { "moveql",	"moveq", },
441748024e4aSbellard   { "movl",	"movel", },
441848024e4aSbellard   { "movq",	"moveq", },
441948024e4aSbellard   { "moval",	"moveal", },
442048024e4aSbellard   { "movaw",	"moveaw", },
442148024e4aSbellard   { "movb",	"moveb", },
442248024e4aSbellard   { "movc",	"movec", },
442348024e4aSbellard   { "movecl",	"movec", },
442448024e4aSbellard   { "movpl",	"movepl", },
442548024e4aSbellard   { "movw",	"movew", },
442648024e4aSbellard   { "movsb",	"movesb", },
442748024e4aSbellard   { "movsl",	"movesl", },
442848024e4aSbellard   { "movsw",	"movesw", },
442948024e4aSbellard   { "mov3q",	"mov3ql", },
443048024e4aSbellard 
443148024e4aSbellard   { "tdivul",	"divul", },	/* For m68k-svr4.  */
443248024e4aSbellard   { "fmovb",	"fmoveb", },
443348024e4aSbellard   { "fsmovb",	"fsmoveb", },
443448024e4aSbellard   { "fdmovb",	"fdmoveb", },
443548024e4aSbellard   { "fmovd",	"fmoved", },
443648024e4aSbellard   { "fsmovd",	"fsmoved", },
443748024e4aSbellard   { "fmovl",	"fmovel", },
443848024e4aSbellard   { "fsmovl",	"fsmovel", },
443948024e4aSbellard   { "fdmovl",	"fdmovel", },
444048024e4aSbellard   { "fmovp",	"fmovep", },
444148024e4aSbellard   { "fsmovp",	"fsmovep", },
444248024e4aSbellard   { "fdmovp",	"fdmovep", },
444348024e4aSbellard   { "fmovs",	"fmoves", },
444448024e4aSbellard   { "fsmovs",	"fsmoves", },
444548024e4aSbellard   { "fdmovs",	"fdmoves", },
444648024e4aSbellard   { "fmovw",	"fmovew", },
444748024e4aSbellard   { "fsmovw",	"fsmovew", },
444848024e4aSbellard   { "fdmovw",	"fdmovew", },
444948024e4aSbellard   { "fmovx",	"fmovex", },
445048024e4aSbellard   { "fsmovx",	"fsmovex", },
445148024e4aSbellard   { "fdmovx",	"fdmovex", },
445248024e4aSbellard   { "fmovcr",	"fmovecr", },
445348024e4aSbellard   { "fmovcrx",	"fmovecrx", },
445448024e4aSbellard   { "ftestb",	"ftstb", },
445548024e4aSbellard   { "ftestd",	"ftstd", },
445648024e4aSbellard   { "ftestl",	"ftstl", },
445748024e4aSbellard   { "ftestp",	"ftstp", },
445848024e4aSbellard   { "ftests",	"ftsts", },
445948024e4aSbellard   { "ftestw",	"ftstw", },
446048024e4aSbellard   { "ftestx",	"ftstx", },
446148024e4aSbellard 
446248024e4aSbellard   { "bitrevl",  "bitrev", },
446348024e4aSbellard   { "byterevl", "byterev", },
446448024e4aSbellard   { "ff1l",     "ff1", },
446548024e4aSbellard 
446648024e4aSbellard };
446748024e4aSbellard 
446848024e4aSbellard const int m68k_numaliases =
446948024e4aSbellard   sizeof m68k_opcode_aliases / sizeof m68k_opcode_aliases[0];
447048024e4aSbellard /* **** End of m68k-opc.c */
447148024e4aSbellard /* **** floatformat.c from sourceware.org CVS 2005-08-14.  */
447248024e4aSbellard /* IEEE floating point support routines, for GDB, the GNU Debugger.
447348024e4aSbellard    Copyright (C) 1991, 1994, 1999, 2000, 2003 Free Software Foundation, Inc.
447448024e4aSbellard 
447548024e4aSbellard This file is part of GDB.
447648024e4aSbellard 
447748024e4aSbellard This program is free software; you can redistribute it and/or modify
447848024e4aSbellard it under the terms of the GNU General Public License as published by
447948024e4aSbellard the Free Software Foundation; either version 2 of the License, or
448048024e4aSbellard (at your option) any later version.
448148024e4aSbellard 
448248024e4aSbellard This program is distributed in the hope that it will be useful,
448348024e4aSbellard but WITHOUT ANY WARRANTY; without even the implied warranty of
448448024e4aSbellard MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
448548024e4aSbellard GNU General Public License for more details.
448648024e4aSbellard 
448748024e4aSbellard You should have received a copy of the GNU General Public License
44888167ee88SBlue Swirl along with this program; if not, see <http://www.gnu.org/licenses/>.  */
448948024e4aSbellard 
449048024e4aSbellard /* This is needed to pick up the NAN macro on some systems.  */
449148024e4aSbellard //#define _GNU_SOURCE
449248024e4aSbellard 
449348024e4aSbellard #ifndef INFINITY
449448024e4aSbellard #ifdef HUGE_VAL
449548024e4aSbellard #define INFINITY HUGE_VAL
449648024e4aSbellard #else
449748024e4aSbellard #define INFINITY (1.0 / 0.0)
449848024e4aSbellard #endif
449948024e4aSbellard #endif
450048024e4aSbellard 
450148024e4aSbellard #ifndef NAN
450248024e4aSbellard #define NAN (0.0 / 0.0)
450348024e4aSbellard #endif
450448024e4aSbellard 
450548024e4aSbellard static unsigned long get_field (const unsigned char *,
450648024e4aSbellard                                 enum floatformat_byteorders,
450748024e4aSbellard                                 unsigned int,
450848024e4aSbellard                                 unsigned int,
450948024e4aSbellard                                 unsigned int);
451048024e4aSbellard static int floatformat_always_valid (const struct floatformat *fmt,
451148024e4aSbellard                                      const char *from);
451248024e4aSbellard 
451348024e4aSbellard static int
floatformat_always_valid(const struct floatformat * fmt ATTRIBUTE_UNUSED,const char * from ATTRIBUTE_UNUSED)451448024e4aSbellard floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED,
451548024e4aSbellard                           const char *from ATTRIBUTE_UNUSED)
451648024e4aSbellard {
451748024e4aSbellard   return 1;
451848024e4aSbellard }
451948024e4aSbellard 
452048024e4aSbellard /* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not
452148024e4aSbellard    going to bother with trying to muck around with whether it is defined in
452248024e4aSbellard    a system header, what we do if not, etc.  */
452348024e4aSbellard #define FLOATFORMAT_CHAR_BIT 8
452448024e4aSbellard 
452548024e4aSbellard /* floatformats for IEEE single and double, big and little endian.  */
452648024e4aSbellard const struct floatformat floatformat_ieee_single_big =
452748024e4aSbellard {
452848024e4aSbellard   floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
452948024e4aSbellard   floatformat_intbit_no,
453048024e4aSbellard   "floatformat_ieee_single_big",
453148024e4aSbellard   floatformat_always_valid
453248024e4aSbellard };
453348024e4aSbellard const struct floatformat floatformat_ieee_single_little =
453448024e4aSbellard {
453548024e4aSbellard   floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
453648024e4aSbellard   floatformat_intbit_no,
453748024e4aSbellard   "floatformat_ieee_single_little",
453848024e4aSbellard   floatformat_always_valid
453948024e4aSbellard };
454048024e4aSbellard const struct floatformat floatformat_ieee_double_big =
454148024e4aSbellard {
454248024e4aSbellard   floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
454348024e4aSbellard   floatformat_intbit_no,
454448024e4aSbellard   "floatformat_ieee_double_big",
454548024e4aSbellard   floatformat_always_valid
454648024e4aSbellard };
454748024e4aSbellard const struct floatformat floatformat_ieee_double_little =
454848024e4aSbellard {
454948024e4aSbellard   floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
455048024e4aSbellard   floatformat_intbit_no,
455148024e4aSbellard   "floatformat_ieee_double_little",
455248024e4aSbellard   floatformat_always_valid
455348024e4aSbellard };
455448024e4aSbellard 
455548024e4aSbellard /* floatformat for IEEE double, little endian byte order, with big endian word
455648024e4aSbellard    ordering, as on the ARM.  */
455748024e4aSbellard 
455848024e4aSbellard const struct floatformat floatformat_ieee_double_littlebyte_bigword =
455948024e4aSbellard {
456048024e4aSbellard   floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
456148024e4aSbellard   floatformat_intbit_no,
456248024e4aSbellard   "floatformat_ieee_double_littlebyte_bigword",
456348024e4aSbellard   floatformat_always_valid
456448024e4aSbellard };
456548024e4aSbellard 
456648024e4aSbellard static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from);
456748024e4aSbellard 
456848024e4aSbellard static int
floatformat_i387_ext_is_valid(const struct floatformat * fmt,const char * from)456948024e4aSbellard floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from)
457048024e4aSbellard {
457148024e4aSbellard   /* In the i387 double-extended format, if the exponent is all ones,
457248024e4aSbellard      then the integer bit must be set.  If the exponent is neither 0
457348024e4aSbellard      nor ~0, the intbit must also be set.  Only if the exponent is
457448024e4aSbellard      zero can it be zero, and then it must be zero.  */
457548024e4aSbellard   unsigned long exponent, int_bit;
457648024e4aSbellard   const unsigned char *ufrom = (const unsigned char *) from;
457748024e4aSbellard 
457848024e4aSbellard   exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
457948024e4aSbellard 			fmt->exp_start, fmt->exp_len);
458048024e4aSbellard   int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize,
458148024e4aSbellard 		       fmt->man_start, 1);
458248024e4aSbellard 
458348024e4aSbellard   if ((exponent == 0) != (int_bit == 0))
458448024e4aSbellard     return 0;
458548024e4aSbellard   else
458648024e4aSbellard     return 1;
458748024e4aSbellard }
458848024e4aSbellard 
458948024e4aSbellard const struct floatformat floatformat_i387_ext =
459048024e4aSbellard {
459148024e4aSbellard   floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
459248024e4aSbellard   floatformat_intbit_yes,
459348024e4aSbellard   "floatformat_i387_ext",
459448024e4aSbellard   floatformat_i387_ext_is_valid
459548024e4aSbellard };
459648024e4aSbellard const struct floatformat floatformat_m68881_ext =
459748024e4aSbellard {
459848024e4aSbellard   /* Note that the bits from 16 to 31 are unused.  */
459948024e4aSbellard   floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
460048024e4aSbellard   floatformat_intbit_yes,
460148024e4aSbellard   "floatformat_m68881_ext",
460248024e4aSbellard   floatformat_always_valid
460348024e4aSbellard };
460448024e4aSbellard const struct floatformat floatformat_i960_ext =
460548024e4aSbellard {
460648024e4aSbellard   /* Note that the bits from 0 to 15 are unused.  */
460748024e4aSbellard   floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
460848024e4aSbellard   floatformat_intbit_yes,
460948024e4aSbellard   "floatformat_i960_ext",
461048024e4aSbellard   floatformat_always_valid
461148024e4aSbellard };
461248024e4aSbellard const struct floatformat floatformat_m88110_ext =
461348024e4aSbellard {
461448024e4aSbellard   floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
461548024e4aSbellard   floatformat_intbit_yes,
461648024e4aSbellard   "floatformat_m88110_ext",
461748024e4aSbellard   floatformat_always_valid
461848024e4aSbellard };
461948024e4aSbellard const struct floatformat floatformat_m88110_harris_ext =
462048024e4aSbellard {
462148024e4aSbellard   /* Harris uses raw format 128 bytes long, but the number is just an ieee
462248024e4aSbellard      double, and the last 64 bits are wasted. */
462348024e4aSbellard   floatformat_big,128, 0, 1, 11,  0x3ff,  0x7ff, 12, 52,
462448024e4aSbellard   floatformat_intbit_no,
462548024e4aSbellard   "floatformat_m88110_ext_harris",
462648024e4aSbellard   floatformat_always_valid
462748024e4aSbellard };
462848024e4aSbellard const struct floatformat floatformat_arm_ext_big =
462948024e4aSbellard {
463048024e4aSbellard   /* Bits 1 to 16 are unused.  */
463148024e4aSbellard   floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
463248024e4aSbellard   floatformat_intbit_yes,
463348024e4aSbellard   "floatformat_arm_ext_big",
463448024e4aSbellard   floatformat_always_valid
463548024e4aSbellard };
463648024e4aSbellard const struct floatformat floatformat_arm_ext_littlebyte_bigword =
463748024e4aSbellard {
463848024e4aSbellard   /* Bits 1 to 16 are unused.  */
463948024e4aSbellard   floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
464048024e4aSbellard   floatformat_intbit_yes,
464148024e4aSbellard   "floatformat_arm_ext_littlebyte_bigword",
464248024e4aSbellard   floatformat_always_valid
464348024e4aSbellard };
464448024e4aSbellard const struct floatformat floatformat_ia64_spill_big =
464548024e4aSbellard {
464648024e4aSbellard   floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
464748024e4aSbellard   floatformat_intbit_yes,
464848024e4aSbellard   "floatformat_ia64_spill_big",
464948024e4aSbellard   floatformat_always_valid
465048024e4aSbellard };
465148024e4aSbellard const struct floatformat floatformat_ia64_spill_little =
465248024e4aSbellard {
465348024e4aSbellard   floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
465448024e4aSbellard   floatformat_intbit_yes,
465548024e4aSbellard   "floatformat_ia64_spill_little",
465648024e4aSbellard   floatformat_always_valid
465748024e4aSbellard };
465848024e4aSbellard const struct floatformat floatformat_ia64_quad_big =
465948024e4aSbellard {
466048024e4aSbellard   floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
466148024e4aSbellard   floatformat_intbit_no,
466248024e4aSbellard   "floatformat_ia64_quad_big",
466348024e4aSbellard   floatformat_always_valid
466448024e4aSbellard };
466548024e4aSbellard const struct floatformat floatformat_ia64_quad_little =
466648024e4aSbellard {
466748024e4aSbellard   floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
466848024e4aSbellard   floatformat_intbit_no,
466948024e4aSbellard   "floatformat_ia64_quad_little",
467048024e4aSbellard   floatformat_always_valid
467148024e4aSbellard };
467248024e4aSbellard 
467348024e4aSbellard /* Extract a field which starts at START and is LEN bits long.  DATA and
467448024e4aSbellard    TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
467548024e4aSbellard static unsigned long
get_field(const unsigned char * data,enum floatformat_byteorders order,unsigned int total_len,unsigned int start,unsigned int len)467648024e4aSbellard get_field (const unsigned char *data, enum floatformat_byteorders order,
467748024e4aSbellard            unsigned int total_len, unsigned int start, unsigned int len)
467848024e4aSbellard {
467948024e4aSbellard   unsigned long result;
468048024e4aSbellard   unsigned int cur_byte;
468148024e4aSbellard   int cur_bitshift;
468248024e4aSbellard 
468348024e4aSbellard   /* Start at the least significant part of the field.  */
468448024e4aSbellard   cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
468548024e4aSbellard   if (order == floatformat_little)
468648024e4aSbellard     cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
468748024e4aSbellard   cur_bitshift =
468848024e4aSbellard     ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
468948024e4aSbellard   result = *(data + cur_byte) >> (-cur_bitshift);
469048024e4aSbellard   cur_bitshift += FLOATFORMAT_CHAR_BIT;
469148024e4aSbellard   if (order == floatformat_little)
469248024e4aSbellard     ++cur_byte;
469348024e4aSbellard   else
469448024e4aSbellard     --cur_byte;
469548024e4aSbellard 
469648024e4aSbellard   /* Move towards the most significant part of the field.  */
469748024e4aSbellard   while ((unsigned int) cur_bitshift < len)
469848024e4aSbellard     {
469948024e4aSbellard       if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
470048024e4aSbellard 	/* This is the last byte; zero out the bits which are not part of
470148024e4aSbellard 	   this field.  */
470248024e4aSbellard 	result |=
47032e3883d0SPeter Maydell 	  (unsigned long)(*(data + cur_byte)
47042e3883d0SPeter Maydell 			  & ((1 << (len - cur_bitshift)) - 1))
470548024e4aSbellard 	    << cur_bitshift;
470648024e4aSbellard       else
47072e3883d0SPeter Maydell 	result |= (unsigned long)*(data + cur_byte) << cur_bitshift;
470848024e4aSbellard       cur_bitshift += FLOATFORMAT_CHAR_BIT;
470948024e4aSbellard       if (order == floatformat_little)
471048024e4aSbellard 	++cur_byte;
471148024e4aSbellard       else
471248024e4aSbellard 	--cur_byte;
471348024e4aSbellard     }
471448024e4aSbellard   return result;
471548024e4aSbellard }
471648024e4aSbellard 
471748024e4aSbellard /* Convert from FMT to a double.
471848024e4aSbellard    FROM is the address of the extended float.
471948024e4aSbellard    Store the double in *TO.  */
472048024e4aSbellard 
472148024e4aSbellard void
floatformat_to_double(const struct floatformat * fmt,const char * from,double * to)472248024e4aSbellard floatformat_to_double (const struct floatformat *fmt,
472348024e4aSbellard                        const char *from, double *to)
472448024e4aSbellard {
472548024e4aSbellard   const unsigned char *ufrom = (const unsigned char *)from;
472648024e4aSbellard   double dto;
472748024e4aSbellard   long exponent;
472848024e4aSbellard   unsigned long mant;
472948024e4aSbellard   unsigned int mant_bits, mant_off;
473048024e4aSbellard   int mant_bits_left;
473148024e4aSbellard   int special_exponent;		/* It's a NaN, denorm or zero */
473248024e4aSbellard 
473348024e4aSbellard   exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
473448024e4aSbellard 			fmt->exp_start, fmt->exp_len);
473548024e4aSbellard 
473648024e4aSbellard   /* If the exponent indicates a NaN, we don't have information to
473748024e4aSbellard      decide what to do.  So we handle it like IEEE, except that we
473848024e4aSbellard      don't try to preserve the type of NaN.  FIXME.  */
473948024e4aSbellard   if ((unsigned long) exponent == fmt->exp_nan)
474048024e4aSbellard     {
474148024e4aSbellard       int nan;
474248024e4aSbellard 
474348024e4aSbellard       mant_off = fmt->man_start;
474448024e4aSbellard       mant_bits_left = fmt->man_len;
474548024e4aSbellard       nan = 0;
474648024e4aSbellard       while (mant_bits_left > 0)
474748024e4aSbellard 	{
4748893dcdbfSYuval Shaia           mant_bits = MIN(mant_bits_left, 32);
474948024e4aSbellard 
475048024e4aSbellard 	  if (get_field (ufrom, fmt->byteorder, fmt->totalsize,
475148024e4aSbellard 			 mant_off, mant_bits) != 0)
475248024e4aSbellard 	    {
475348024e4aSbellard 	      /* This is a NaN.  */
475448024e4aSbellard 	      nan = 1;
475548024e4aSbellard 	      break;
475648024e4aSbellard 	    }
475748024e4aSbellard 
475848024e4aSbellard 	  mant_off += mant_bits;
475948024e4aSbellard 	  mant_bits_left -= mant_bits;
476048024e4aSbellard 	}
476148024e4aSbellard 
476248024e4aSbellard       /* On certain systems (such as GNU/Linux), the use of the
476348024e4aSbellard 	 INFINITY macro below may generate a warning that can not be
476448024e4aSbellard 	 silenced due to a bug in GCC (PR preprocessor/11931).  The
476548024e4aSbellard 	 preprocessor fails to recognise the __extension__ keyword in
476648024e4aSbellard 	 conjunction with the GNU/C99 extension for hexadecimal
476748024e4aSbellard 	 floating point constants and will issue a warning when
476848024e4aSbellard 	 compiling with -pedantic.  */
476948024e4aSbellard       if (nan)
477048024e4aSbellard 	dto = NAN;
477148024e4aSbellard       else
477248024e4aSbellard 	dto = INFINITY;
477348024e4aSbellard 
477448024e4aSbellard       if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
477548024e4aSbellard 	dto = -dto;
477648024e4aSbellard 
477748024e4aSbellard       *to = dto;
477848024e4aSbellard 
477948024e4aSbellard       return;
478048024e4aSbellard     }
478148024e4aSbellard 
478248024e4aSbellard   mant_bits_left = fmt->man_len;
478348024e4aSbellard   mant_off = fmt->man_start;
478448024e4aSbellard   dto = 0.0;
478548024e4aSbellard 
478648024e4aSbellard   special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan;
478748024e4aSbellard 
478848024e4aSbellard   /* Don't bias zero's, denorms or NaNs.  */
478948024e4aSbellard   if (!special_exponent)
479048024e4aSbellard     exponent -= fmt->exp_bias;
479148024e4aSbellard 
479248024e4aSbellard   /* Build the result algebraically.  Might go infinite, underflow, etc;
479348024e4aSbellard      who cares. */
479448024e4aSbellard 
479548024e4aSbellard   /* If this format uses a hidden bit, explicitly add it in now.  Otherwise,
479648024e4aSbellard      increment the exponent by one to account for the integer bit.  */
479748024e4aSbellard 
479848024e4aSbellard   if (!special_exponent)
479948024e4aSbellard     {
480048024e4aSbellard       if (fmt->intbit == floatformat_intbit_no)
480148024e4aSbellard 	dto = ldexp (1.0, exponent);
480248024e4aSbellard       else
480348024e4aSbellard 	exponent++;
480448024e4aSbellard     }
480548024e4aSbellard 
480648024e4aSbellard   while (mant_bits_left > 0)
480748024e4aSbellard     {
4808893dcdbfSYuval Shaia       mant_bits = MIN(mant_bits_left, 32);
480948024e4aSbellard 
481048024e4aSbellard       mant = get_field (ufrom, fmt->byteorder, fmt->totalsize,
481148024e4aSbellard 			 mant_off, mant_bits);
481248024e4aSbellard 
481348024e4aSbellard       /* Handle denormalized numbers.  FIXME: What should we do for
481448024e4aSbellard 	 non-IEEE formats?  */
481548024e4aSbellard       if (exponent == 0 && mant != 0)
481648024e4aSbellard 	dto += ldexp ((double)mant,
481748024e4aSbellard 		      (- fmt->exp_bias
481848024e4aSbellard 		       - mant_bits
481948024e4aSbellard 		       - (mant_off - fmt->man_start)
482048024e4aSbellard 		       + 1));
482148024e4aSbellard       else
482248024e4aSbellard 	dto += ldexp ((double)mant, exponent - mant_bits);
482348024e4aSbellard       if (exponent != 0)
482448024e4aSbellard 	exponent -= mant_bits;
482548024e4aSbellard       mant_off += mant_bits;
482648024e4aSbellard       mant_bits_left -= mant_bits;
482748024e4aSbellard     }
482848024e4aSbellard 
482948024e4aSbellard   /* Negate it if negative.  */
483048024e4aSbellard   if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
483148024e4aSbellard     dto = -dto;
483248024e4aSbellard   *to = dto;
483348024e4aSbellard }
483448024e4aSbellard 
483548024e4aSbellard static void put_field (unsigned char *, enum floatformat_byteorders,
483648024e4aSbellard                        unsigned int,
483748024e4aSbellard                        unsigned int,
483848024e4aSbellard                        unsigned int,
483948024e4aSbellard                        unsigned long);
484048024e4aSbellard 
484148024e4aSbellard /* Set a field which starts at START and is LEN bits long.  DATA and
484248024e4aSbellard    TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
484348024e4aSbellard static void
put_field(unsigned char * data,enum floatformat_byteorders order,unsigned int total_len,unsigned int start,unsigned int len,unsigned long stuff_to_put)484448024e4aSbellard put_field (unsigned char *data, enum floatformat_byteorders order,
484548024e4aSbellard            unsigned int total_len, unsigned int start, unsigned int len,
484648024e4aSbellard            unsigned long stuff_to_put)
484748024e4aSbellard {
484848024e4aSbellard   unsigned int cur_byte;
484948024e4aSbellard   int cur_bitshift;
485048024e4aSbellard 
485148024e4aSbellard   /* Start at the least significant part of the field.  */
485248024e4aSbellard   cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
485348024e4aSbellard   if (order == floatformat_little)
485448024e4aSbellard     cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
485548024e4aSbellard   cur_bitshift =
485648024e4aSbellard     ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
485748024e4aSbellard   *(data + cur_byte) &=
485848024e4aSbellard     ~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1) << (-cur_bitshift));
485948024e4aSbellard   *(data + cur_byte) |=
486048024e4aSbellard     (stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
486148024e4aSbellard   cur_bitshift += FLOATFORMAT_CHAR_BIT;
486248024e4aSbellard   if (order == floatformat_little)
486348024e4aSbellard     ++cur_byte;
486448024e4aSbellard   else
486548024e4aSbellard     --cur_byte;
486648024e4aSbellard 
486748024e4aSbellard   /* Move towards the most significant part of the field.  */
486848024e4aSbellard   while ((unsigned int) cur_bitshift < len)
486948024e4aSbellard     {
487048024e4aSbellard       if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
487148024e4aSbellard 	{
487248024e4aSbellard 	  /* This is the last byte.  */
487348024e4aSbellard 	  *(data + cur_byte) &=
487448024e4aSbellard 	    ~((1 << (len - cur_bitshift)) - 1);
487548024e4aSbellard 	  *(data + cur_byte) |= (stuff_to_put >> cur_bitshift);
487648024e4aSbellard 	}
487748024e4aSbellard       else
487848024e4aSbellard 	*(data + cur_byte) = ((stuff_to_put >> cur_bitshift)
487948024e4aSbellard 			      & ((1 << FLOATFORMAT_CHAR_BIT) - 1));
488048024e4aSbellard       cur_bitshift += FLOATFORMAT_CHAR_BIT;
488148024e4aSbellard       if (order == floatformat_little)
488248024e4aSbellard 	++cur_byte;
488348024e4aSbellard       else
488448024e4aSbellard 	--cur_byte;
488548024e4aSbellard     }
488648024e4aSbellard }
488748024e4aSbellard 
488848024e4aSbellard /* The converse: convert the double *FROM to an extended float
488948024e4aSbellard    and store where TO points.  Neither FROM nor TO have any alignment
489048024e4aSbellard    restrictions.  */
489148024e4aSbellard 
489248024e4aSbellard void
floatformat_from_double(const struct floatformat * fmt,const double * from,char * to)489348024e4aSbellard floatformat_from_double (const struct floatformat *fmt,
489448024e4aSbellard                          const double *from, char *to)
489548024e4aSbellard {
489648024e4aSbellard   double dfrom;
489748024e4aSbellard   int exponent;
489848024e4aSbellard   double mant;
489948024e4aSbellard   unsigned int mant_bits, mant_off;
490048024e4aSbellard   int mant_bits_left;
490148024e4aSbellard   unsigned char *uto = (unsigned char *)to;
490248024e4aSbellard 
490348024e4aSbellard   dfrom = *from;
490448024e4aSbellard   memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
490548024e4aSbellard 
490648024e4aSbellard   /* If negative, set the sign bit.  */
490748024e4aSbellard   if (dfrom < 0)
490848024e4aSbellard     {
490948024e4aSbellard       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1);
491048024e4aSbellard       dfrom = -dfrom;
491148024e4aSbellard     }
491248024e4aSbellard 
491348024e4aSbellard   if (dfrom == 0)
491448024e4aSbellard     {
491548024e4aSbellard       /* 0.0.  */
491648024e4aSbellard       return;
491748024e4aSbellard     }
491848024e4aSbellard 
491948024e4aSbellard   if (dfrom != dfrom)
492048024e4aSbellard     {
492148024e4aSbellard       /* NaN.  */
492248024e4aSbellard       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
492348024e4aSbellard 		 fmt->exp_len, fmt->exp_nan);
492448024e4aSbellard       /* Be sure it's not infinity, but NaN value is irrelevant.  */
492548024e4aSbellard       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
492648024e4aSbellard 		 32, 1);
492748024e4aSbellard       return;
492848024e4aSbellard     }
492948024e4aSbellard 
493048024e4aSbellard   if (dfrom + dfrom == dfrom)
493148024e4aSbellard     {
493248024e4aSbellard       /* This can only happen for an infinite value (or zero, which we
493348024e4aSbellard 	 already handled above).  */
493448024e4aSbellard       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
493548024e4aSbellard 		 fmt->exp_len, fmt->exp_nan);
493648024e4aSbellard       return;
493748024e4aSbellard     }
493848024e4aSbellard 
493948024e4aSbellard   mant = frexp (dfrom, &exponent);
494048024e4aSbellard   if (exponent + fmt->exp_bias - 1 > 0)
494148024e4aSbellard     put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
494248024e4aSbellard 	       fmt->exp_len, exponent + fmt->exp_bias - 1);
494348024e4aSbellard   else
494448024e4aSbellard     {
494548024e4aSbellard       /* Handle a denormalized number.  FIXME: What should we do for
494648024e4aSbellard 	 non-IEEE formats?  */
494748024e4aSbellard       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
494848024e4aSbellard 		 fmt->exp_len, 0);
494948024e4aSbellard       mant = ldexp (mant, exponent + fmt->exp_bias - 1);
495048024e4aSbellard     }
495148024e4aSbellard 
495248024e4aSbellard   mant_bits_left = fmt->man_len;
495348024e4aSbellard   mant_off = fmt->man_start;
495448024e4aSbellard   while (mant_bits_left > 0)
495548024e4aSbellard     {
495648024e4aSbellard       unsigned long mant_long;
495748024e4aSbellard       mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
495848024e4aSbellard 
495948024e4aSbellard       mant *= 4294967296.0;
496048024e4aSbellard       mant_long = (unsigned long)mant;
496148024e4aSbellard       mant -= mant_long;
496248024e4aSbellard 
496348024e4aSbellard       /* If the integer bit is implicit, and we are not creating a
496448024e4aSbellard 	 denormalized number, then we need to discard it.  */
496548024e4aSbellard       if ((unsigned int) mant_bits_left == fmt->man_len
496648024e4aSbellard 	  && fmt->intbit == floatformat_intbit_no
496748024e4aSbellard 	  && exponent + fmt->exp_bias - 1 > 0)
496848024e4aSbellard 	{
496948024e4aSbellard 	  mant_long &= 0x7fffffff;
497048024e4aSbellard 	  mant_bits -= 1;
497148024e4aSbellard 	}
497248024e4aSbellard       else if (mant_bits < 32)
497348024e4aSbellard 	{
497448024e4aSbellard 	  /* The bits we want are in the most significant MANT_BITS bits of
497548024e4aSbellard 	     mant_long.  Move them to the least significant.  */
497648024e4aSbellard 	  mant_long >>= 32 - mant_bits;
497748024e4aSbellard 	}
497848024e4aSbellard 
497948024e4aSbellard       put_field (uto, fmt->byteorder, fmt->totalsize,
498048024e4aSbellard 		 mant_off, mant_bits, mant_long);
498148024e4aSbellard       mant_off += mant_bits;
498248024e4aSbellard       mant_bits_left -= mant_bits;
498348024e4aSbellard     }
498448024e4aSbellard }
498548024e4aSbellard 
498648024e4aSbellard /* Return non-zero iff the data at FROM is a valid number in format FMT.  */
498748024e4aSbellard 
498848024e4aSbellard int
floatformat_is_valid(const struct floatformat * fmt,const char * from)498948024e4aSbellard floatformat_is_valid (const struct floatformat *fmt, const char *from)
499048024e4aSbellard {
499148024e4aSbellard   return fmt->is_valid (fmt, from);
499248024e4aSbellard }
499348024e4aSbellard 
499448024e4aSbellard 
499548024e4aSbellard #ifdef IEEE_DEBUG
499648024e4aSbellard 
499748024e4aSbellard /* This is to be run on a host which uses IEEE floating point.  */
499848024e4aSbellard 
499948024e4aSbellard void
ieee_test(double n)500048024e4aSbellard ieee_test (double n)
500148024e4aSbellard {
500248024e4aSbellard   double result;
500348024e4aSbellard 
500448024e4aSbellard   floatformat_to_double (&floatformat_ieee_double_little, (char *) &n,
500548024e4aSbellard 			 &result);
500648024e4aSbellard   if ((n != result && (! isnan (n) || ! isnan (result)))
500748024e4aSbellard       || (n < 0 && result >= 0)
500848024e4aSbellard       || (n >= 0 && result < 0))
500948024e4aSbellard     printf ("Differ(to): %.20g -> %.20g\n", n, result);
501048024e4aSbellard 
501148024e4aSbellard   floatformat_from_double (&floatformat_ieee_double_little, &n,
501248024e4aSbellard 			   (char *) &result);
501348024e4aSbellard   if ((n != result && (! isnan (n) || ! isnan (result)))
501448024e4aSbellard       || (n < 0 && result >= 0)
501548024e4aSbellard       || (n >= 0 && result < 0))
501648024e4aSbellard     printf ("Differ(from): %.20g -> %.20g\n", n, result);
501748024e4aSbellard 
501848024e4aSbellard #if 0
501948024e4aSbellard   {
502048024e4aSbellard     char exten[16];
502148024e4aSbellard 
502248024e4aSbellard     floatformat_from_double (&floatformat_m68881_ext, &n, exten);
502348024e4aSbellard     floatformat_to_double (&floatformat_m68881_ext, exten, &result);
502448024e4aSbellard     if (n != result)
502548024e4aSbellard       printf ("Differ(to+from): %.20g -> %.20g\n", n, result);
502648024e4aSbellard   }
502748024e4aSbellard #endif
502848024e4aSbellard 
502948024e4aSbellard #if IEEE_DEBUG > 1
503048024e4aSbellard   /* This is to be run on a host which uses 68881 format.  */
503148024e4aSbellard   {
503248024e4aSbellard     long double ex = *(long double *)exten;
503348024e4aSbellard     if (ex != n)
503448024e4aSbellard       printf ("Differ(from vs. extended): %.20g\n", n);
503548024e4aSbellard   }
503648024e4aSbellard #endif
503748024e4aSbellard }
503848024e4aSbellard 
503948024e4aSbellard int
main(void)504048024e4aSbellard main (void)
504148024e4aSbellard {
504248024e4aSbellard   ieee_test (0.0);
504348024e4aSbellard   ieee_test (0.5);
504448024e4aSbellard   ieee_test (256.0);
504548024e4aSbellard   ieee_test (0.12345);
504648024e4aSbellard   ieee_test (234235.78907234);
504748024e4aSbellard   ieee_test (-512.0);
504848024e4aSbellard   ieee_test (-0.004321);
504948024e4aSbellard   ieee_test (1.2E-70);
505048024e4aSbellard   ieee_test (1.2E-316);
505148024e4aSbellard   ieee_test (4.9406564584124654E-324);
505248024e4aSbellard   ieee_test (- 4.9406564584124654E-324);
505348024e4aSbellard   ieee_test (- 0.0);
505448024e4aSbellard   ieee_test (- INFINITY);
505548024e4aSbellard   ieee_test (- NAN);
505648024e4aSbellard   ieee_test (INFINITY);
505748024e4aSbellard   ieee_test (NAN);
505848024e4aSbellard   return 0;
505948024e4aSbellard }
506048024e4aSbellard #endif
506148024e4aSbellard /* **** End of floatformat.c  */
5062