xref: /openbmc/qemu/disas/m68k.c (revision d16cab541ab9217977e2a39abf3d79f914146741)
176cad711SPaolo Bonzini /* This file is composed of several different files from the upstream
276cad711SPaolo Bonzini    sourceware.org CVS.  Original file boundaries marked with **** */
376cad711SPaolo Bonzini 
448d4ab25SPeter Maydell #include "qemu/osdep.h"
576cad711SPaolo Bonzini #include <math.h>
676cad711SPaolo Bonzini 
73979fca4SMarkus Armbruster #include "disas/dis-asm.h"
876cad711SPaolo Bonzini 
976cad711SPaolo Bonzini /* **** floatformat.h from sourceware.org CVS 2005-08-14.  */
1076cad711SPaolo Bonzini /* IEEE floating point support declarations, for GDB, the GNU Debugger.
1176cad711SPaolo Bonzini    Copyright 1991, 1994, 1995, 1997, 2000, 2003 Free Software Foundation, Inc.
1276cad711SPaolo Bonzini 
1376cad711SPaolo Bonzini This file is part of GDB.
1476cad711SPaolo Bonzini 
1576cad711SPaolo Bonzini This program is free software; you can redistribute it and/or modify
1676cad711SPaolo Bonzini it under the terms of the GNU General Public License as published by
1776cad711SPaolo Bonzini the Free Software Foundation; either version 2 of the License, or
1876cad711SPaolo Bonzini (at your option) any later version.
1976cad711SPaolo Bonzini 
2076cad711SPaolo Bonzini This program is distributed in the hope that it will be useful,
2176cad711SPaolo Bonzini but WITHOUT ANY WARRANTY; without even the implied warranty of
2276cad711SPaolo Bonzini MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2376cad711SPaolo Bonzini GNU General Public License for more details.
2476cad711SPaolo Bonzini 
2576cad711SPaolo Bonzini You should have received a copy of the GNU General Public License
2676cad711SPaolo Bonzini along with this program; if not, see <http://www.gnu.org/licenses/>.  */
2776cad711SPaolo Bonzini 
2876cad711SPaolo Bonzini #if !defined (FLOATFORMAT_H)
2976cad711SPaolo Bonzini #define FLOATFORMAT_H 1
3076cad711SPaolo Bonzini 
3176cad711SPaolo Bonzini /*#include "ansidecl.h" */
3276cad711SPaolo Bonzini 
3376cad711SPaolo Bonzini /* A floatformat consists of a sign bit, an exponent and a mantissa.  Once the
3476cad711SPaolo Bonzini    bytes are concatenated according to the byteorder flag, then each of those
3576cad711SPaolo Bonzini    fields is contiguous.  We number the bits with 0 being the most significant
3676cad711SPaolo Bonzini    (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field
3776cad711SPaolo Bonzini    contains with the *_start and *_len fields.  */
3876cad711SPaolo Bonzini 
3976cad711SPaolo Bonzini /* What is the order of the bytes. */
4076cad711SPaolo Bonzini 
4176cad711SPaolo Bonzini enum floatformat_byteorders {
4276cad711SPaolo Bonzini 
4376cad711SPaolo Bonzini   /* Standard little endian byte order.
4476cad711SPaolo Bonzini      EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */
4576cad711SPaolo Bonzini 
4676cad711SPaolo Bonzini   floatformat_little,
4776cad711SPaolo Bonzini 
4876cad711SPaolo Bonzini   /* Standard big endian byte order.
4976cad711SPaolo Bonzini      EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */
5076cad711SPaolo Bonzini 
5176cad711SPaolo Bonzini   floatformat_big,
5276cad711SPaolo Bonzini 
5376cad711SPaolo Bonzini   /* Little endian byte order but big endian word order.
5476cad711SPaolo Bonzini      EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */
5576cad711SPaolo Bonzini 
5676cad711SPaolo Bonzini   floatformat_littlebyte_bigword
5776cad711SPaolo Bonzini 
5876cad711SPaolo Bonzini };
5976cad711SPaolo Bonzini 
6076cad711SPaolo Bonzini enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
6176cad711SPaolo Bonzini 
6276cad711SPaolo Bonzini struct floatformat
6376cad711SPaolo Bonzini {
6476cad711SPaolo Bonzini   enum floatformat_byteorders byteorder;
6576cad711SPaolo Bonzini   unsigned int totalsize;	/* Total size of number in bits */
6676cad711SPaolo Bonzini 
6776cad711SPaolo Bonzini   /* Sign bit is always one bit long.  1 means negative, 0 means positive.  */
6876cad711SPaolo Bonzini   unsigned int sign_start;
6976cad711SPaolo Bonzini 
7076cad711SPaolo Bonzini   unsigned int exp_start;
7176cad711SPaolo Bonzini   unsigned int exp_len;
7276cad711SPaolo Bonzini   /* Bias added to a "true" exponent to form the biased exponent.  It
732dbb1308Szhaolichang      is intentionally signed as, otherwise, -exp_bias can turn into a
7476cad711SPaolo Bonzini      very large number (e.g., given the exp_bias of 0x3fff and a 64
7576cad711SPaolo Bonzini      bit long, the equation (long)(1 - exp_bias) evaluates to
7676cad711SPaolo Bonzini      4294950914) instead of -16382).  */
7776cad711SPaolo Bonzini   int exp_bias;
7876cad711SPaolo Bonzini   /* Exponent value which indicates NaN.  This is the actual value stored in
7976cad711SPaolo Bonzini      the float, not adjusted by the exp_bias.  This usually consists of all
8076cad711SPaolo Bonzini      one bits.  */
8176cad711SPaolo Bonzini   unsigned int exp_nan;
8276cad711SPaolo Bonzini 
8376cad711SPaolo Bonzini   unsigned int man_start;
8476cad711SPaolo Bonzini   unsigned int man_len;
8576cad711SPaolo Bonzini 
8676cad711SPaolo Bonzini   /* Is the integer bit explicit or implicit?  */
8776cad711SPaolo Bonzini   enum floatformat_intbit intbit;
8876cad711SPaolo Bonzini 
8976cad711SPaolo Bonzini   /* Internal name for debugging. */
9076cad711SPaolo Bonzini   const char *name;
9176cad711SPaolo Bonzini 
9276cad711SPaolo Bonzini   /* Validator method.  */
9376cad711SPaolo Bonzini   int (*is_valid) (const struct floatformat *fmt, const char *from);
9476cad711SPaolo Bonzini };
9576cad711SPaolo Bonzini 
9676cad711SPaolo Bonzini /* floatformats for IEEE single and double, big and little endian.  */
9776cad711SPaolo Bonzini 
9876cad711SPaolo Bonzini extern const struct floatformat floatformat_ieee_single_big;
9976cad711SPaolo Bonzini extern const struct floatformat floatformat_ieee_single_little;
10076cad711SPaolo Bonzini extern const struct floatformat floatformat_ieee_double_big;
10176cad711SPaolo Bonzini extern const struct floatformat floatformat_ieee_double_little;
10276cad711SPaolo Bonzini 
10376cad711SPaolo Bonzini /* floatformat for ARM IEEE double, little endian bytes and big endian words */
10476cad711SPaolo Bonzini 
10576cad711SPaolo Bonzini extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
10676cad711SPaolo Bonzini 
10776cad711SPaolo Bonzini /* floatformats for various extendeds.  */
10876cad711SPaolo Bonzini 
10976cad711SPaolo Bonzini extern const struct floatformat floatformat_i387_ext;
11076cad711SPaolo Bonzini extern const struct floatformat floatformat_m68881_ext;
11176cad711SPaolo Bonzini extern const struct floatformat floatformat_i960_ext;
11276cad711SPaolo Bonzini extern const struct floatformat floatformat_m88110_ext;
11376cad711SPaolo Bonzini extern const struct floatformat floatformat_m88110_harris_ext;
11476cad711SPaolo Bonzini extern const struct floatformat floatformat_arm_ext_big;
11576cad711SPaolo Bonzini extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
11676cad711SPaolo Bonzini /* IA-64 Floating Point register spilt into memory.  */
11776cad711SPaolo Bonzini extern const struct floatformat floatformat_ia64_spill_big;
11876cad711SPaolo Bonzini extern const struct floatformat floatformat_ia64_spill_little;
11976cad711SPaolo Bonzini extern const struct floatformat floatformat_ia64_quad_big;
12076cad711SPaolo Bonzini extern const struct floatformat floatformat_ia64_quad_little;
12176cad711SPaolo Bonzini 
12276cad711SPaolo Bonzini /* Convert from FMT to a double.
12376cad711SPaolo Bonzini    FROM is the address of the extended float.
12476cad711SPaolo Bonzini    Store the double in *TO.  */
12576cad711SPaolo Bonzini 
12676cad711SPaolo Bonzini extern void
12776cad711SPaolo Bonzini floatformat_to_double (const struct floatformat *, const char *, double *);
12876cad711SPaolo Bonzini 
12976cad711SPaolo Bonzini /* The converse: convert the double *FROM to FMT
13076cad711SPaolo Bonzini    and store where TO points.  */
13176cad711SPaolo Bonzini 
13276cad711SPaolo Bonzini extern void
13376cad711SPaolo Bonzini floatformat_from_double (const struct floatformat *, const double *, char *);
13476cad711SPaolo Bonzini 
13576cad711SPaolo Bonzini /* Return non-zero iff the data at FROM is a valid number in format FMT.  */
13676cad711SPaolo Bonzini 
13776cad711SPaolo Bonzini extern int
13876cad711SPaolo Bonzini floatformat_is_valid (const struct floatformat *fmt, const char *from);
13976cad711SPaolo Bonzini 
14076cad711SPaolo Bonzini #endif	/* defined (FLOATFORMAT_H) */
14176cad711SPaolo Bonzini /* **** End of floatformat.h */
14276cad711SPaolo Bonzini /* **** m68k-dis.h from sourceware.org CVS 2005-08-14.  */
14376cad711SPaolo Bonzini /* Opcode table header for m680[01234]0/m6888[12]/m68851.
14476cad711SPaolo Bonzini    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001,
14576cad711SPaolo Bonzini    2003, 2004 Free Software Foundation, Inc.
14676cad711SPaolo Bonzini 
14776cad711SPaolo Bonzini    This file is part of GDB, GAS, and the GNU binutils.
14876cad711SPaolo Bonzini 
14976cad711SPaolo Bonzini    GDB, GAS, and the GNU binutils are free software; you can redistribute
15076cad711SPaolo Bonzini    them and/or modify them under the terms of the GNU General Public
15176cad711SPaolo Bonzini    License as published by the Free Software Foundation; either version
15276cad711SPaolo Bonzini    1, or (at your option) any later version.
15376cad711SPaolo Bonzini 
15476cad711SPaolo Bonzini    GDB, GAS, and the GNU binutils are distributed in the hope that they
15576cad711SPaolo Bonzini    will be useful, but WITHOUT ANY WARRANTY; without even the implied
15676cad711SPaolo Bonzini    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
15776cad711SPaolo Bonzini    the GNU General Public License for more details.
15876cad711SPaolo Bonzini 
15976cad711SPaolo Bonzini    You should have received a copy of the GNU General Public License
16076cad711SPaolo Bonzini    along with this file; see the file COPYING.  If not,
16176cad711SPaolo Bonzini    see <http://www.gnu.org/licenses/>.  */
16276cad711SPaolo Bonzini 
16376cad711SPaolo Bonzini /* These are used as bit flags for the arch field in the m68k_opcode
16476cad711SPaolo Bonzini    structure.  */
16576cad711SPaolo Bonzini #define	_m68k_undef  0
16676cad711SPaolo Bonzini #define	m68000   0x001
16776cad711SPaolo Bonzini #define	m68008   m68000 /* Synonym for -m68000.  otherwise unused.  */
16876cad711SPaolo Bonzini #define	m68010   0x002
16976cad711SPaolo Bonzini #define	m68020   0x004
17076cad711SPaolo Bonzini #define	m68030   0x008
17176cad711SPaolo Bonzini #define m68ec030 m68030 /* Similar enough to -m68030 to ignore differences;
17276cad711SPaolo Bonzini 			   gas will deal with the few differences.  */
17376cad711SPaolo Bonzini #define	m68040   0x010
17476cad711SPaolo Bonzini /* There is no 68050.  */
17576cad711SPaolo Bonzini #define m68060   0x020
17676cad711SPaolo Bonzini #define	m68881   0x040
17776cad711SPaolo Bonzini #define	m68882   m68881 /* Synonym for -m68881.  otherwise unused.  */
17876cad711SPaolo Bonzini #define	m68851   0x080
17976cad711SPaolo Bonzini #define cpu32	 0x100		/* e.g., 68332 */
18076cad711SPaolo Bonzini 
18176cad711SPaolo Bonzini #define mcfmac   0x200		/* ColdFire MAC. */
18276cad711SPaolo Bonzini #define mcfemac  0x400		/* ColdFire EMAC. */
18376cad711SPaolo Bonzini #define cfloat   0x800		/* ColdFire FPU.  */
18476cad711SPaolo Bonzini #define mcfhwdiv 0x1000		/* ColdFire hardware divide.  */
18576cad711SPaolo Bonzini 
18676cad711SPaolo Bonzini #define mcfisa_a 0x2000		/* ColdFire ISA_A.  */
18776cad711SPaolo Bonzini #define mcfisa_aa 0x4000	/* ColdFire ISA_A+.  */
18876cad711SPaolo Bonzini #define mcfisa_b 0x8000		/* ColdFire ISA_B.  */
18976cad711SPaolo Bonzini #define mcfusp   0x10000	/* ColdFire USP instructions.  */
19076cad711SPaolo Bonzini 
19176cad711SPaolo Bonzini #define mcf5200  0x20000
19276cad711SPaolo Bonzini #define mcf5206e 0x40000
19376cad711SPaolo Bonzini #define mcf521x  0x80000
19476cad711SPaolo Bonzini #define mcf5249  0x100000
19576cad711SPaolo Bonzini #define mcf528x  0x200000
19676cad711SPaolo Bonzini #define mcf5307  0x400000
19776cad711SPaolo Bonzini #define mcf5407  0x800000
19876cad711SPaolo Bonzini #define mcf5470  0x1000000
19976cad711SPaolo Bonzini #define mcf5480  0x2000000
20076cad711SPaolo Bonzini 
20176cad711SPaolo Bonzini  /* Handy aliases.  */
20276cad711SPaolo Bonzini #define	m68040up   (m68040 | m68060)
20376cad711SPaolo Bonzini #define	m68030up   (m68030 | m68040up)
20476cad711SPaolo Bonzini #define	m68020up   (m68020 | m68030up)
20576cad711SPaolo Bonzini #define	m68010up   (m68010 | cpu32 | m68020up)
20676cad711SPaolo Bonzini #define	m68000up   (m68000 | m68010up)
20776cad711SPaolo Bonzini 
20876cad711SPaolo Bonzini #define	mfloat  (m68881 | m68882 | m68040 | m68060)
20976cad711SPaolo Bonzini #define	mmmu    (m68851 | m68030 | m68040 | m68060)
21076cad711SPaolo Bonzini 
21176cad711SPaolo Bonzini /* The structure used to hold information for an opcode.  */
21276cad711SPaolo Bonzini 
21376cad711SPaolo Bonzini struct m68k_opcode
21476cad711SPaolo Bonzini {
21576cad711SPaolo Bonzini   /* The opcode name.  */
21676cad711SPaolo Bonzini   const char *name;
21776cad711SPaolo Bonzini   /* The pseudo-size of the instruction(in bytes).  Used to determine
21876cad711SPaolo Bonzini      number of bytes necessary to disassemble the instruction.  */
21976cad711SPaolo Bonzini   unsigned int size;
22076cad711SPaolo Bonzini   /* The opcode itself.  */
22176cad711SPaolo Bonzini   unsigned long opcode;
22276cad711SPaolo Bonzini   /* The mask used by the disassembler.  */
22376cad711SPaolo Bonzini   unsigned long match;
22476cad711SPaolo Bonzini   /* The arguments.  */
22576cad711SPaolo Bonzini   const char *args;
22676cad711SPaolo Bonzini   /* The architectures which support this opcode.  */
22776cad711SPaolo Bonzini   unsigned int arch;
22876cad711SPaolo Bonzini };
22976cad711SPaolo Bonzini 
23076cad711SPaolo Bonzini /* The structure used to hold information for an opcode alias.  */
23176cad711SPaolo Bonzini 
23276cad711SPaolo Bonzini struct m68k_opcode_alias
23376cad711SPaolo Bonzini {
23476cad711SPaolo Bonzini   /* The alias name.  */
23576cad711SPaolo Bonzini   const char *alias;
23676cad711SPaolo Bonzini   /* The instruction for which this is an alias.  */
23776cad711SPaolo Bonzini   const char *primary;
23876cad711SPaolo Bonzini };
23976cad711SPaolo Bonzini 
24076cad711SPaolo Bonzini /* We store four bytes of opcode for all opcodes because that is the
24176cad711SPaolo Bonzini    most any of them need.  The actual length of an instruction is
24276cad711SPaolo Bonzini    always at least 2 bytes, and is as much longer as necessary to hold
24376cad711SPaolo Bonzini    the operands it has.
24476cad711SPaolo Bonzini 
24576cad711SPaolo Bonzini    The match field is a mask saying which bits must match particular
24676cad711SPaolo Bonzini    opcode in order for an instruction to be an instance of that
24776cad711SPaolo Bonzini    opcode.
24876cad711SPaolo Bonzini 
24976cad711SPaolo Bonzini    The args field is a string containing two characters for each
25076cad711SPaolo Bonzini    operand of the instruction.  The first specifies the kind of
25176cad711SPaolo Bonzini    operand; the second, the place it is stored.  */
25276cad711SPaolo Bonzini 
25376cad711SPaolo Bonzini /* Kinds of operands:
25476cad711SPaolo Bonzini    Characters used: AaBbCcDdEeFfGgHIiJkLlMmnOopQqRrSsTtU VvWwXxYyZz01234|*~%;@!&$?/<>#^+-
25576cad711SPaolo Bonzini 
25676cad711SPaolo Bonzini    D  data register only.  Stored as 3 bits.
25776cad711SPaolo Bonzini    A  address register only.  Stored as 3 bits.
25876cad711SPaolo Bonzini    a  address register indirect only.  Stored as 3 bits.
25976cad711SPaolo Bonzini    R  either kind of register.  Stored as 4 bits.
26076cad711SPaolo Bonzini    r  either kind of register indirect only.  Stored as 4 bits.
26176cad711SPaolo Bonzini       At the moment, used only for cas2 instruction.
26276cad711SPaolo Bonzini    F  floating point coprocessor register only.   Stored as 3 bits.
26376cad711SPaolo Bonzini    O  an offset (or width): immediate data 0-31 or data register.
26476cad711SPaolo Bonzini       Stored as 6 bits in special format for BF... insns.
26576cad711SPaolo Bonzini    +  autoincrement only.  Stored as 3 bits (number of the address register).
26676cad711SPaolo Bonzini    -  autodecrement only.  Stored as 3 bits (number of the address register).
26776cad711SPaolo Bonzini    Q  quick immediate data.  Stored as 3 bits.
26876cad711SPaolo Bonzini       This matches an immediate operand only when value is in range 1 .. 8.
26976cad711SPaolo Bonzini    M  moveq immediate data.  Stored as 8 bits.
27076cad711SPaolo Bonzini       This matches an immediate operand only when value is in range -128..127
27176cad711SPaolo Bonzini    T  trap vector immediate data.  Stored as 4 bits.
27276cad711SPaolo Bonzini 
27376cad711SPaolo Bonzini    k  K-factor for fmove.p instruction.   Stored as a 7-bit constant or
27476cad711SPaolo Bonzini       a three bit register offset, depending on the field type.
27576cad711SPaolo Bonzini 
27676cad711SPaolo Bonzini    #  immediate data.  Stored in special places (b, w or l)
27776cad711SPaolo Bonzini       which say how many bits to store.
27876cad711SPaolo Bonzini    ^  immediate data for floating point instructions.   Special places
27976cad711SPaolo Bonzini       are offset by 2 bytes from '#'...
28076cad711SPaolo Bonzini    B  pc-relative address, converted to an offset
28176cad711SPaolo Bonzini       that is treated as immediate data.
28276cad711SPaolo Bonzini    d  displacement and register.  Stores the register as 3 bits
28376cad711SPaolo Bonzini       and stores the displacement in the entire second word.
28476cad711SPaolo Bonzini 
28576cad711SPaolo Bonzini    C  the CCR.  No need to store it; this is just for filtering validity.
28676cad711SPaolo Bonzini    S  the SR.  No need to store, just as with CCR.
28776cad711SPaolo Bonzini    U  the USP.  No need to store, just as with CCR.
28876cad711SPaolo Bonzini    E  the MAC ACC.  No need to store, just as with CCR.
28976cad711SPaolo Bonzini    e  the EMAC ACC[0123].
29076cad711SPaolo Bonzini    G  the MAC/EMAC MACSR.  No need to store, just as with CCR.
29176cad711SPaolo Bonzini    g  the EMAC ACCEXT{01,23}.
29276cad711SPaolo Bonzini    H  the MASK.  No need to store, just as with CCR.
29376cad711SPaolo Bonzini    i  the MAC/EMAC scale factor.
29476cad711SPaolo Bonzini 
29576cad711SPaolo Bonzini    I  Coprocessor ID.   Not printed if 1.   The Coprocessor ID is always
29676cad711SPaolo Bonzini       extracted from the 'd' field of word one, which means that an extended
29776cad711SPaolo Bonzini       coprocessor opcode can be skipped using the 'i' place, if needed.
29876cad711SPaolo Bonzini 
29976cad711SPaolo Bonzini    s  System Control register for the floating point coprocessor.
30076cad711SPaolo Bonzini 
30176cad711SPaolo Bonzini    J  Misc register for movec instruction, stored in 'j' format.
30276cad711SPaolo Bonzini 	Possible values:
30376cad711SPaolo Bonzini 	0x000	SFC	Source Function Code reg	[60, 40, 30, 20, 10]
30476cad711SPaolo Bonzini 	0x001	DFC	Data Function Code reg		[60, 40, 30, 20, 10]
30576cad711SPaolo Bonzini 	0x002   CACR    Cache Control Register          [60, 40, 30, 20, mcf]
30676cad711SPaolo Bonzini 	0x003	TC	MMU Translation Control		[60, 40]
30776cad711SPaolo Bonzini 	0x004	ITT0	Instruction Transparent
30876cad711SPaolo Bonzini 				Translation reg 0	[60, 40]
30976cad711SPaolo Bonzini 	0x005	ITT1	Instruction Transparent
31076cad711SPaolo Bonzini 				Translation reg 1	[60, 40]
31176cad711SPaolo Bonzini 	0x006	DTT0	Data Transparent
31276cad711SPaolo Bonzini 				Translation reg 0	[60, 40]
31376cad711SPaolo Bonzini 	0x007	DTT1	Data Transparent
31476cad711SPaolo Bonzini 				Translation reg 1	[60, 40]
31576cad711SPaolo Bonzini 	0x008	BUSCR	Bus Control Register		[60]
31676cad711SPaolo Bonzini 	0x800	USP	User Stack Pointer		[60, 40, 30, 20, 10]
31776cad711SPaolo Bonzini         0x801   VBR     Vector Base reg                 [60, 40, 30, 20, 10, mcf]
31876cad711SPaolo Bonzini 	0x802	CAAR	Cache Address Register		[        30, 20]
31976cad711SPaolo Bonzini 	0x803	MSP	Master Stack Pointer		[    40, 30, 20]
32076cad711SPaolo Bonzini 	0x804	ISP	Interrupt Stack Pointer		[    40, 30, 20]
32176cad711SPaolo Bonzini 	0x805	MMUSR	MMU Status reg			[    40]
32276cad711SPaolo Bonzini 	0x806	URP	User Root Pointer		[60, 40]
32376cad711SPaolo Bonzini 	0x807	SRP	Supervisor Root Pointer		[60, 40]
32476cad711SPaolo Bonzini 	0x808	PCR	Processor Configuration reg	[60]
32576cad711SPaolo Bonzini 	0xC00	ROMBAR	ROM Base Address Register	[520X]
32676cad711SPaolo Bonzini 	0xC04	RAMBAR0	RAM Base Address Register 0	[520X]
32776cad711SPaolo Bonzini 	0xC05	RAMBAR1	RAM Base Address Register 0	[520X]
32876cad711SPaolo Bonzini 	0xC0F	MBAR0	RAM Base Address Register 0	[520X]
32976cad711SPaolo Bonzini         0xC04   FLASHBAR FLASH Base Address Register    [mcf528x]
33076cad711SPaolo Bonzini         0xC05   RAMBAR  Static RAM Base Address Register [mcf528x]
33176cad711SPaolo Bonzini 
33276cad711SPaolo Bonzini     L  Register list of the type d0-d7/a0-a7 etc.
33376cad711SPaolo Bonzini        (New!  Improved!  Can also hold fp0-fp7, as well!)
33476cad711SPaolo Bonzini        The assembler tries to see if the registers match the insn by
33576cad711SPaolo Bonzini        looking at where the insn wants them stored.
33676cad711SPaolo Bonzini 
33776cad711SPaolo Bonzini     l  Register list like L, but with all the bits reversed.
33876cad711SPaolo Bonzini        Used for going the other way. . .
33976cad711SPaolo Bonzini 
34076cad711SPaolo Bonzini     c  cache identifier which may be "nc" for no cache, "ic"
34176cad711SPaolo Bonzini        for instruction cache, "dc" for data cache, or "bc"
34276cad711SPaolo Bonzini        for both caches.  Used in cinv and cpush.  Always
34376cad711SPaolo Bonzini        stored in position "d".
34476cad711SPaolo Bonzini 
34576cad711SPaolo Bonzini     u  Any register, with ``upper'' or ``lower'' specification.  Used
34676cad711SPaolo Bonzini        in the mac instructions with size word.
34776cad711SPaolo Bonzini 
34876cad711SPaolo Bonzini  The remainder are all stored as 6 bits using an address mode and a
34976cad711SPaolo Bonzini  register number; they differ in which addressing modes they match.
35076cad711SPaolo Bonzini 
35176cad711SPaolo Bonzini    *  all					(modes 0-6,7.0-4)
35276cad711SPaolo Bonzini    ~  alterable memory				(modes 2-6,7.0,7.1)
35376cad711SPaolo Bonzini 						(not 0,1,7.2-4)
35476cad711SPaolo Bonzini    %  alterable					(modes 0-6,7.0,7.1)
35576cad711SPaolo Bonzini 						(not 7.2-4)
35676cad711SPaolo Bonzini    ;  data					(modes 0,2-6,7.0-4)
35776cad711SPaolo Bonzini 						(not 1)
35876cad711SPaolo Bonzini    @  data, but not immediate			(modes 0,2-6,7.0-3)
35976cad711SPaolo Bonzini 						(not 1,7.4)
36076cad711SPaolo Bonzini    !  control					(modes 2,5,6,7.0-3)
36176cad711SPaolo Bonzini 						(not 0,1,3,4,7.4)
36276cad711SPaolo Bonzini    &  alterable control				(modes 2,5,6,7.0,7.1)
36376cad711SPaolo Bonzini 						(not 0,1,3,4,7.2-4)
36476cad711SPaolo Bonzini    $  alterable data				(modes 0,2-6,7.0,7.1)
36576cad711SPaolo Bonzini 						(not 1,7.2-4)
36676cad711SPaolo Bonzini    ?  alterable control, or data register	(modes 0,2,5,6,7.0,7.1)
36776cad711SPaolo Bonzini 						(not 1,3,4,7.2-4)
36876cad711SPaolo Bonzini    /  control, or data register			(modes 0,2,5,6,7.0-3)
36976cad711SPaolo Bonzini 						(not 1,3,4,7.4)
37076cad711SPaolo Bonzini    >  *save operands				(modes 2,4,5,6,7.0,7.1)
37176cad711SPaolo Bonzini 						(not 0,1,3,7.2-4)
37276cad711SPaolo Bonzini    <  *restore operands				(modes 2,3,5,6,7.0-3)
37376cad711SPaolo Bonzini 						(not 0,1,4,7.4)
37476cad711SPaolo Bonzini 
37576cad711SPaolo Bonzini    coldfire move operands:
37676cad711SPaolo Bonzini    m  						(modes 0-4)
37776cad711SPaolo Bonzini    n						(modes 5,7.2)
37876cad711SPaolo Bonzini    o						(modes 6,7.0,7.1,7.3,7.4)
37976cad711SPaolo Bonzini    p						(modes 0-5)
38076cad711SPaolo Bonzini 
38176cad711SPaolo Bonzini    coldfire bset/bclr/btst/mulsl/mulul operands:
38276cad711SPaolo Bonzini    q						(modes 0,2-5)
38376cad711SPaolo Bonzini    v						(modes 0,2-5,7.0,7.1)
38476cad711SPaolo Bonzini    b                                            (modes 0,2-5,7.2)
38576cad711SPaolo Bonzini    w                                            (modes 2-5,7.2)
38676cad711SPaolo Bonzini    y						(modes 2,5)
38776cad711SPaolo Bonzini    z						(modes 2,5,7.2)
38876cad711SPaolo Bonzini    x  mov3q immediate operand.
38976cad711SPaolo Bonzini    4						(modes 2,3,4,5)
39076cad711SPaolo Bonzini   */
39176cad711SPaolo Bonzini 
39276cad711SPaolo Bonzini /* For the 68851:  */
39376cad711SPaolo Bonzini /* I didn't use much imagination in choosing the
39476cad711SPaolo Bonzini    following codes, so many of them aren't very
39576cad711SPaolo Bonzini    mnemonic. -rab
39676cad711SPaolo Bonzini 
39776cad711SPaolo Bonzini    0  32 bit pmmu register
39876cad711SPaolo Bonzini 	Possible values:
39976cad711SPaolo Bonzini 	000	TC	Translation Control Register (68030, 68851)
40076cad711SPaolo Bonzini 
40176cad711SPaolo Bonzini    1  16 bit pmmu register
40276cad711SPaolo Bonzini 	111	AC	Access Control (68851)
40376cad711SPaolo Bonzini 
40476cad711SPaolo Bonzini    2  8 bit pmmu register
40576cad711SPaolo Bonzini 	100	CAL	Current Access Level (68851)
40676cad711SPaolo Bonzini 	101	VAL	Validate Access Level (68851)
40776cad711SPaolo Bonzini 	110	SCC	Stack Change Control (68851)
40876cad711SPaolo Bonzini 
40976cad711SPaolo Bonzini    3  68030-only pmmu registers (32 bit)
41076cad711SPaolo Bonzini 	010	TT0	Transparent Translation reg 0
41176cad711SPaolo Bonzini 			(aka Access Control reg 0 -- AC0 -- on 68ec030)
41276cad711SPaolo Bonzini 	011	TT1	Transparent Translation reg 1
41376cad711SPaolo Bonzini 			(aka Access Control reg 1 -- AC1 -- on 68ec030)
41476cad711SPaolo Bonzini 
41576cad711SPaolo Bonzini    W  wide pmmu registers
41676cad711SPaolo Bonzini 	Possible values:
41776cad711SPaolo Bonzini 	001	DRP	Dma Root Pointer (68851)
41876cad711SPaolo Bonzini 	010	SRP	Supervisor Root Pointer (68030, 68851)
41976cad711SPaolo Bonzini 	011	CRP	Cpu Root Pointer (68030, 68851)
42076cad711SPaolo Bonzini 
42176cad711SPaolo Bonzini    f	function code register (68030, 68851)
42276cad711SPaolo Bonzini 	0	SFC
42376cad711SPaolo Bonzini 	1	DFC
42476cad711SPaolo Bonzini 
42576cad711SPaolo Bonzini    V	VAL register only (68851)
42676cad711SPaolo Bonzini 
42776cad711SPaolo Bonzini    X	BADx, BACx (16 bit)
42876cad711SPaolo Bonzini 	100	BAD	Breakpoint Acknowledge Data (68851)
42976cad711SPaolo Bonzini 	101	BAC	Breakpoint Acknowledge Control (68851)
43076cad711SPaolo Bonzini 
43176cad711SPaolo Bonzini    Y	PSR (68851) (MMUSR on 68030) (ACUSR on 68ec030)
43276cad711SPaolo Bonzini    Z	PCSR (68851)
43376cad711SPaolo Bonzini 
43476cad711SPaolo Bonzini    |	memory 		(modes 2-6, 7.*)
43576cad711SPaolo Bonzini 
43676cad711SPaolo Bonzini    t  address test level (68030 only)
43776cad711SPaolo Bonzini       Stored as 3 bits, range 0-7.
43876cad711SPaolo Bonzini       Also used for breakpoint instruction now.
43976cad711SPaolo Bonzini 
44076cad711SPaolo Bonzini */
44176cad711SPaolo Bonzini 
44276cad711SPaolo Bonzini /* Places to put an operand, for non-general operands:
44376cad711SPaolo Bonzini    Characters used: BbCcDdFfGgHhIijkLlMmNnostWw123456789/
44476cad711SPaolo Bonzini 
44576cad711SPaolo Bonzini    s  source, low bits of first word.
44676cad711SPaolo Bonzini    d  dest, shifted 9 in first word
44776cad711SPaolo Bonzini    1  second word, shifted 12
44876cad711SPaolo Bonzini    2  second word, shifted 6
44976cad711SPaolo Bonzini    3  second word, shifted 0
45076cad711SPaolo Bonzini    4  third word, shifted 12
45176cad711SPaolo Bonzini    5  third word, shifted 6
45276cad711SPaolo Bonzini    6  third word, shifted 0
45376cad711SPaolo Bonzini    7  second word, shifted 7
45476cad711SPaolo Bonzini    8  second word, shifted 10
45576cad711SPaolo Bonzini    9  second word, shifted 5
45676cad711SPaolo Bonzini    D  store in both place 1 and place 3; for divul and divsl.
45776cad711SPaolo Bonzini    B  first word, low byte, for branch displacements
45876cad711SPaolo Bonzini    W  second word (entire), for branch displacements
45976cad711SPaolo Bonzini    L  second and third words (entire), for branch displacements
46076cad711SPaolo Bonzini       (also overloaded for move16)
46176cad711SPaolo Bonzini    b  second word, low byte
46276cad711SPaolo Bonzini    w  second word (entire) [variable word/long branch offset for dbra]
46376cad711SPaolo Bonzini    W  second word (entire) (must be signed 16 bit value)
46476cad711SPaolo Bonzini    l  second and third word (entire)
46576cad711SPaolo Bonzini    g  variable branch offset for bra and similar instructions.
46676cad711SPaolo Bonzini       The place to store depends on the magnitude of offset.
46776cad711SPaolo Bonzini    t  store in both place 7 and place 8; for floating point operations
46876cad711SPaolo Bonzini    c  branch offset for cpBcc operations.
46976cad711SPaolo Bonzini       The place to store is word two if bit six of word one is zero,
47076cad711SPaolo Bonzini       and words two and three if bit six of word one is one.
47176cad711SPaolo Bonzini    i  Increment by two, to skip over coprocessor extended operands.   Only
47276cad711SPaolo Bonzini       works with the 'I' format.
47376cad711SPaolo Bonzini    k  Dynamic K-factor field.   Bits 6-4 of word 2, used as a register number.
47476cad711SPaolo Bonzini       Also used for dynamic fmovem instruction.
47576cad711SPaolo Bonzini    C  floating point coprocessor constant - 7 bits.  Also used for static
47676cad711SPaolo Bonzini       K-factors...
47776cad711SPaolo Bonzini    j  Movec register #, stored in 12 low bits of second word.
47876cad711SPaolo Bonzini    m  For M[S]ACx; 4 bits split with MSB shifted 6 bits in first word
47976cad711SPaolo Bonzini       and remaining 3 bits of register shifted 9 bits in first word.
48076cad711SPaolo Bonzini       Indicate upper/lower in 1 bit shifted 7 bits in second word.
48176cad711SPaolo Bonzini       Use with `R' or `u' format.
4822dbb1308Szhaolichang    n  `m' without upper/lower indication. (For M[S]ACx; 4 bits split
48376cad711SPaolo Bonzini       with MSB shifted 6 bits in first word and remaining 3 bits of
48476cad711SPaolo Bonzini       register shifted 9 bits in first word.  No upper/lower
48576cad711SPaolo Bonzini       indication is done.)  Use with `R' or `u' format.
48676cad711SPaolo Bonzini    o  For M[S]ACw; 4 bits shifted 12 in second word (like `1').
48776cad711SPaolo Bonzini       Indicate upper/lower in 1 bit shifted 7 bits in second word.
48876cad711SPaolo Bonzini       Use with `R' or `u' format.
48976cad711SPaolo Bonzini    M  For M[S]ACw; 4 bits in low bits of first word.  Indicate
49076cad711SPaolo Bonzini       upper/lower in 1 bit shifted 6 bits in second word.  Use with
49176cad711SPaolo Bonzini       `R' or `u' format.
49276cad711SPaolo Bonzini    N  For M[S]ACw; 4 bits in low bits of second word.  Indicate
49376cad711SPaolo Bonzini       upper/lower in 1 bit shifted 6 bits in second word.  Use with
49476cad711SPaolo Bonzini       `R' or `u' format.
49576cad711SPaolo Bonzini    h  shift indicator (scale factor), 1 bit shifted 10 in second word
49676cad711SPaolo Bonzini 
49776cad711SPaolo Bonzini  Places to put operand, for general operands:
49876cad711SPaolo Bonzini    d  destination, shifted 6 bits in first word
49976cad711SPaolo Bonzini    b  source, at low bit of first word, and immediate uses one byte
50076cad711SPaolo Bonzini    w  source, at low bit of first word, and immediate uses two bytes
50176cad711SPaolo Bonzini    l  source, at low bit of first word, and immediate uses four bytes
50276cad711SPaolo Bonzini    s  source, at low bit of first word.
50376cad711SPaolo Bonzini       Used sometimes in contexts where immediate is not allowed anyway.
50476cad711SPaolo Bonzini    f  single precision float, low bit of 1st word, immediate uses 4 bytes
50576cad711SPaolo Bonzini    F  double precision float, low bit of 1st word, immediate uses 8 bytes
50676cad711SPaolo Bonzini    x  extended precision float, low bit of 1st word, immediate uses 12 bytes
50776cad711SPaolo Bonzini    p  packed float, low bit of 1st word, immediate uses 12 bytes
50876cad711SPaolo Bonzini    G  EMAC accumulator, load  (bit 4 2nd word, !bit8 first word)
50976cad711SPaolo Bonzini    H  EMAC accumulator, non load  (bit 4 2nd word, bit 8 first word)
51076cad711SPaolo Bonzini    F  EMAC ACCx
51176cad711SPaolo Bonzini    f  EMAC ACCy
51276cad711SPaolo Bonzini    I  MAC/EMAC scale factor
51376cad711SPaolo Bonzini    /  Like 's', but set 2nd word, bit 5 if trailing_ampersand set
51476cad711SPaolo Bonzini    ]  first word, bit 10
51576cad711SPaolo Bonzini */
51676cad711SPaolo Bonzini 
51776cad711SPaolo Bonzini extern const struct m68k_opcode m68k_opcodes[];
51876cad711SPaolo Bonzini extern const struct m68k_opcode_alias m68k_opcode_aliases[];
51976cad711SPaolo Bonzini 
52076cad711SPaolo Bonzini extern const int m68k_numopcodes, m68k_numaliases;
52176cad711SPaolo Bonzini 
52276cad711SPaolo Bonzini /* **** End of m68k-opcode.h */
52376cad711SPaolo Bonzini /* **** m68k-dis.c from sourceware.org CVS 2005-08-14.  */
52476cad711SPaolo Bonzini /* Print Motorola 68k instructions.
52576cad711SPaolo Bonzini    Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
52676cad711SPaolo Bonzini    1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
52776cad711SPaolo Bonzini    Free Software Foundation, Inc.
52876cad711SPaolo Bonzini 
52976cad711SPaolo Bonzini    This file is free software; you can redistribute it and/or modify
53076cad711SPaolo Bonzini    it under the terms of the GNU General Public License as published by
53176cad711SPaolo Bonzini    the Free Software Foundation; either version 2 of the License, or
53276cad711SPaolo Bonzini    (at your option) any later version.
53376cad711SPaolo Bonzini 
53476cad711SPaolo Bonzini    This program is distributed in the hope that it will be useful,
53576cad711SPaolo Bonzini    but WITHOUT ANY WARRANTY; without even the implied warranty of
53676cad711SPaolo Bonzini    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
53776cad711SPaolo Bonzini    GNU General Public License for more details.
53876cad711SPaolo Bonzini 
53976cad711SPaolo Bonzini    You should have received a copy of the GNU General Public License
54076cad711SPaolo Bonzini    along with this program; if not, see <http://www.gnu.org/licenses/>.  */
54176cad711SPaolo Bonzini 
54276cad711SPaolo Bonzini /* Local function prototypes.  */
54376cad711SPaolo Bonzini 
54476cad711SPaolo Bonzini static const char * const fpcr_names[] =
54576cad711SPaolo Bonzini {
54676cad711SPaolo Bonzini   "", "%fpiar", "%fpsr", "%fpiar/%fpsr", "%fpcr",
54776cad711SPaolo Bonzini   "%fpiar/%fpcr", "%fpsr/%fpcr", "%fpiar/%fpsr/%fpcr"
54876cad711SPaolo Bonzini };
54976cad711SPaolo Bonzini 
55076cad711SPaolo Bonzini static const char *const reg_names[] =
55176cad711SPaolo Bonzini {
55276cad711SPaolo Bonzini   "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
55376cad711SPaolo Bonzini   "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp",
55476cad711SPaolo Bonzini   "%ps", "%pc"
55576cad711SPaolo Bonzini };
55676cad711SPaolo Bonzini 
55776cad711SPaolo Bonzini /* Name of register halves for MAC/EMAC.
55876cad711SPaolo Bonzini    Separate from reg_names since 'spu', 'fpl' look weird.  */
55976cad711SPaolo Bonzini static const char *const reg_half_names[] =
56076cad711SPaolo Bonzini {
56176cad711SPaolo Bonzini   "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
56276cad711SPaolo Bonzini   "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7",
56376cad711SPaolo Bonzini   "%ps", "%pc"
56476cad711SPaolo Bonzini };
56576cad711SPaolo Bonzini 
56676cad711SPaolo Bonzini /* Sign-extend an (unsigned char).  */
56776cad711SPaolo Bonzini #if __STDC__ == 1
56876cad711SPaolo Bonzini #define COERCE_SIGNED_CHAR(ch) ((signed char) (ch))
56976cad711SPaolo Bonzini #else
57076cad711SPaolo Bonzini #define COERCE_SIGNED_CHAR(ch) ((int) (((ch) ^ 0x80) & 0xFF) - 128)
57176cad711SPaolo Bonzini #endif
57276cad711SPaolo Bonzini 
57376cad711SPaolo Bonzini /* Get a 1 byte signed integer.  */
57476cad711SPaolo Bonzini #define NEXTBYTE(p)  (p += 2, fetch_data(info, p), COERCE_SIGNED_CHAR(p[-1]))
57576cad711SPaolo Bonzini 
57676cad711SPaolo Bonzini /* Get a 2 byte signed integer.  */
57776cad711SPaolo Bonzini #define COERCE16(x) ((int) (((x) ^ 0x8000) - 0x8000))
57876cad711SPaolo Bonzini #define NEXTWORD(p)  \
57976cad711SPaolo Bonzini   (p += 2, fetch_data(info, p), \
58076cad711SPaolo Bonzini    COERCE16 ((p[-2] << 8) + p[-1]))
58176cad711SPaolo Bonzini 
58276cad711SPaolo Bonzini /* Get a 4 byte signed integer.  */
58376cad711SPaolo Bonzini #define COERCE32(x) ((bfd_signed_vma) ((x) ^ 0x80000000) - 0x80000000)
58476cad711SPaolo Bonzini #define NEXTLONG(p)  \
58576cad711SPaolo Bonzini   (p += 4, fetch_data(info, p), \
58676cad711SPaolo Bonzini    (COERCE32 ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1])))
58776cad711SPaolo Bonzini 
58876cad711SPaolo Bonzini /* Get a 4 byte unsigned integer.  */
58976cad711SPaolo Bonzini #define NEXTULONG(p)  \
59076cad711SPaolo Bonzini   (p += 4, fetch_data(info, p), \
59176cad711SPaolo Bonzini    (unsigned int) ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1]))
59276cad711SPaolo Bonzini 
59376cad711SPaolo Bonzini /* Get a single precision float.  */
59476cad711SPaolo Bonzini #define NEXTSINGLE(val, p) \
59576cad711SPaolo Bonzini   (p += 4, fetch_data(info, p), \
59676cad711SPaolo Bonzini    floatformat_to_double (&floatformat_ieee_single_big, (char *) p - 4, &val))
59776cad711SPaolo Bonzini 
59876cad711SPaolo Bonzini /* Get a double precision float.  */
59976cad711SPaolo Bonzini #define NEXTDOUBLE(val, p) \
60076cad711SPaolo Bonzini   (p += 8, fetch_data(info, p), \
60176cad711SPaolo Bonzini    floatformat_to_double (&floatformat_ieee_double_big, (char *) p - 8, &val))
60276cad711SPaolo Bonzini 
60376cad711SPaolo Bonzini /* Get an extended precision float.  */
60476cad711SPaolo Bonzini #define NEXTEXTEND(val, p) \
60576cad711SPaolo Bonzini   (p += 12, fetch_data(info, p), \
60676cad711SPaolo Bonzini    floatformat_to_double (&floatformat_m68881_ext, (char *) p - 12, &val))
60776cad711SPaolo Bonzini 
60876cad711SPaolo Bonzini /* Need a function to convert from packed to double
60976cad711SPaolo Bonzini    precision.   Actually, it's easier to print a
61076cad711SPaolo Bonzini    packed number than a double anyway, so maybe
61176cad711SPaolo Bonzini    there should be a special case to handle this... */
61276cad711SPaolo Bonzini #define NEXTPACKED(p) \
61376cad711SPaolo Bonzini   (p += 12, fetch_data(info, p), 0.0)
61476cad711SPaolo Bonzini 
61576cad711SPaolo Bonzini /* Maximum length of an instruction.  */
61676cad711SPaolo Bonzini #define MAXLEN 22
61776cad711SPaolo Bonzini 
61876cad711SPaolo Bonzini struct private
61976cad711SPaolo Bonzini {
62076cad711SPaolo Bonzini   /* Points to first byte not fetched.  */
62176cad711SPaolo Bonzini   bfd_byte *max_fetched;
62276cad711SPaolo Bonzini   bfd_byte the_buffer[MAXLEN];
62376cad711SPaolo Bonzini   bfd_vma insn_start;
6246ab7e546SPeter Maydell   sigjmp_buf bailout;
62576cad711SPaolo Bonzini };
62676cad711SPaolo Bonzini 
62776cad711SPaolo Bonzini /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
62876cad711SPaolo Bonzini    to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
62976cad711SPaolo Bonzini    on error.  */
63076cad711SPaolo Bonzini static int
fetch_data2(struct disassemble_info * info,bfd_byte * addr)63176cad711SPaolo Bonzini fetch_data2(struct disassemble_info *info, bfd_byte *addr)
63276cad711SPaolo Bonzini {
63376cad711SPaolo Bonzini   int status;
63476cad711SPaolo Bonzini   struct private *priv = (struct private *)info->private_data;
63576cad711SPaolo Bonzini   bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
63676cad711SPaolo Bonzini 
63776cad711SPaolo Bonzini   status = (*info->read_memory_func) (start,
63876cad711SPaolo Bonzini 				      priv->max_fetched,
63976cad711SPaolo Bonzini 				      addr - priv->max_fetched,
64076cad711SPaolo Bonzini 				      info);
64176cad711SPaolo Bonzini   if (status != 0)
64276cad711SPaolo Bonzini     {
64376cad711SPaolo Bonzini       (*info->memory_error_func) (status, start, info);
6446ab7e546SPeter Maydell       siglongjmp(priv->bailout, 1);
64576cad711SPaolo Bonzini     }
64676cad711SPaolo Bonzini   else
64776cad711SPaolo Bonzini     priv->max_fetched = addr;
64876cad711SPaolo Bonzini   return 1;
64976cad711SPaolo Bonzini }
65076cad711SPaolo Bonzini 
65176cad711SPaolo Bonzini static int
fetch_data(struct disassemble_info * info,bfd_byte * addr)65276cad711SPaolo Bonzini fetch_data(struct disassemble_info *info, bfd_byte *addr)
65376cad711SPaolo Bonzini {
65476cad711SPaolo Bonzini     if (addr <= ((struct private *) (info->private_data))->max_fetched) {
65576cad711SPaolo Bonzini         return 1;
65676cad711SPaolo Bonzini     } else {
65776cad711SPaolo Bonzini         return fetch_data2(info, addr);
65876cad711SPaolo Bonzini     }
65976cad711SPaolo Bonzini }
66076cad711SPaolo Bonzini 
66176cad711SPaolo Bonzini /* This function is used to print to the bit-bucket.  */
66276cad711SPaolo Bonzini static int
dummy_printer(FILE * file ATTRIBUTE_UNUSED,const char * format ATTRIBUTE_UNUSED,...)66376cad711SPaolo Bonzini dummy_printer (FILE *file ATTRIBUTE_UNUSED,
66476cad711SPaolo Bonzini 	       const char *format ATTRIBUTE_UNUSED,
66576cad711SPaolo Bonzini 	       ...)
66676cad711SPaolo Bonzini {
66776cad711SPaolo Bonzini   return 0;
66876cad711SPaolo Bonzini }
66976cad711SPaolo Bonzini 
67076cad711SPaolo Bonzini static void
dummy_print_address(bfd_vma vma ATTRIBUTE_UNUSED,struct disassemble_info * info ATTRIBUTE_UNUSED)67176cad711SPaolo Bonzini dummy_print_address (bfd_vma vma ATTRIBUTE_UNUSED,
67276cad711SPaolo Bonzini 		     struct disassemble_info *info ATTRIBUTE_UNUSED)
67376cad711SPaolo Bonzini {
67476cad711SPaolo Bonzini }
67576cad711SPaolo Bonzini 
67676cad711SPaolo Bonzini /* Fetch BITS bits from a position in the instruction specified by CODE.
67776cad711SPaolo Bonzini    CODE is a "place to put an argument", or 'x' for a destination
67876cad711SPaolo Bonzini    that is a general address (mode and register).
67976cad711SPaolo Bonzini    BUFFER contains the instruction.  */
68076cad711SPaolo Bonzini 
68176cad711SPaolo Bonzini static int
fetch_arg(unsigned char * buffer,int code,int bits,disassemble_info * info)68276cad711SPaolo Bonzini fetch_arg (unsigned char *buffer,
68376cad711SPaolo Bonzini 	   int code,
68476cad711SPaolo Bonzini 	   int bits,
68576cad711SPaolo Bonzini 	   disassemble_info *info)
68676cad711SPaolo Bonzini {
68776cad711SPaolo Bonzini   int val = 0;
68876cad711SPaolo Bonzini 
68976cad711SPaolo Bonzini   switch (code)
69076cad711SPaolo Bonzini     {
69176cad711SPaolo Bonzini     case '/': /* MAC/EMAC mask bit.  */
69276cad711SPaolo Bonzini       val = buffer[3] >> 5;
69376cad711SPaolo Bonzini       break;
69476cad711SPaolo Bonzini 
69576cad711SPaolo Bonzini     case 'G': /* EMAC ACC load.  */
69676cad711SPaolo Bonzini       val = ((buffer[3] >> 3) & 0x2) | ((~buffer[1] >> 7) & 0x1);
69776cad711SPaolo Bonzini       break;
69876cad711SPaolo Bonzini 
69976cad711SPaolo Bonzini     case 'H': /* EMAC ACC !load.  */
70076cad711SPaolo Bonzini       val = ((buffer[3] >> 3) & 0x2) | ((buffer[1] >> 7) & 0x1);
70176cad711SPaolo Bonzini       break;
70276cad711SPaolo Bonzini 
70376cad711SPaolo Bonzini     case ']': /* EMAC ACCEXT bit.  */
70476cad711SPaolo Bonzini       val = buffer[0] >> 2;
70576cad711SPaolo Bonzini       break;
70676cad711SPaolo Bonzini 
70776cad711SPaolo Bonzini     case 'I': /* MAC/EMAC scale factor.  */
70876cad711SPaolo Bonzini       val = buffer[2] >> 1;
70976cad711SPaolo Bonzini       break;
71076cad711SPaolo Bonzini 
71176cad711SPaolo Bonzini     case 'F': /* EMAC ACCx.  */
71276cad711SPaolo Bonzini       val = buffer[0] >> 1;
71376cad711SPaolo Bonzini       break;
71476cad711SPaolo Bonzini 
71576cad711SPaolo Bonzini     case 'f':
71676cad711SPaolo Bonzini       val = buffer[1];
71776cad711SPaolo Bonzini       break;
71876cad711SPaolo Bonzini 
71976cad711SPaolo Bonzini     case 's':
72076cad711SPaolo Bonzini       val = buffer[1];
72176cad711SPaolo Bonzini       break;
72276cad711SPaolo Bonzini 
72376cad711SPaolo Bonzini     case 'd':			/* Destination, for register or quick.  */
72476cad711SPaolo Bonzini       val = (buffer[0] << 8) + buffer[1];
72576cad711SPaolo Bonzini       val >>= 9;
72676cad711SPaolo Bonzini       break;
72776cad711SPaolo Bonzini 
72876cad711SPaolo Bonzini     case 'x':			/* Destination, for general arg.  */
72976cad711SPaolo Bonzini       val = (buffer[0] << 8) + buffer[1];
73076cad711SPaolo Bonzini       val >>= 6;
73176cad711SPaolo Bonzini       break;
73276cad711SPaolo Bonzini 
73376cad711SPaolo Bonzini     case 'k':
73476cad711SPaolo Bonzini       fetch_data(info, buffer + 3);
73576cad711SPaolo Bonzini       val = (buffer[3] >> 4);
73676cad711SPaolo Bonzini       break;
73776cad711SPaolo Bonzini 
73876cad711SPaolo Bonzini     case 'C':
73976cad711SPaolo Bonzini       fetch_data(info, buffer + 3);
74076cad711SPaolo Bonzini       val = buffer[3];
74176cad711SPaolo Bonzini       break;
74276cad711SPaolo Bonzini 
74376cad711SPaolo Bonzini     case '1':
74476cad711SPaolo Bonzini       fetch_data(info, buffer + 3);
74576cad711SPaolo Bonzini       val = (buffer[2] << 8) + buffer[3];
74676cad711SPaolo Bonzini       val >>= 12;
74776cad711SPaolo Bonzini       break;
74876cad711SPaolo Bonzini 
74976cad711SPaolo Bonzini     case '2':
75076cad711SPaolo Bonzini       fetch_data(info, buffer + 3);
75176cad711SPaolo Bonzini       val = (buffer[2] << 8) + buffer[3];
75276cad711SPaolo Bonzini       val >>= 6;
75376cad711SPaolo Bonzini       break;
75476cad711SPaolo Bonzini 
75576cad711SPaolo Bonzini     case '3':
75676cad711SPaolo Bonzini     case 'j':
75776cad711SPaolo Bonzini       fetch_data(info, buffer + 3);
75876cad711SPaolo Bonzini       val = (buffer[2] << 8) + buffer[3];
75976cad711SPaolo Bonzini       break;
76076cad711SPaolo Bonzini 
76176cad711SPaolo Bonzini     case '4':
76276cad711SPaolo Bonzini       fetch_data(info, buffer + 5);
76376cad711SPaolo Bonzini       val = (buffer[4] << 8) + buffer[5];
76476cad711SPaolo Bonzini       val >>= 12;
76576cad711SPaolo Bonzini       break;
76676cad711SPaolo Bonzini 
76776cad711SPaolo Bonzini     case '5':
76876cad711SPaolo Bonzini       fetch_data(info, buffer + 5);
76976cad711SPaolo Bonzini       val = (buffer[4] << 8) + buffer[5];
77076cad711SPaolo Bonzini       val >>= 6;
77176cad711SPaolo Bonzini       break;
77276cad711SPaolo Bonzini 
77376cad711SPaolo Bonzini     case '6':
77476cad711SPaolo Bonzini       fetch_data(info, buffer + 5);
77576cad711SPaolo Bonzini       val = (buffer[4] << 8) + buffer[5];
77676cad711SPaolo Bonzini       break;
77776cad711SPaolo Bonzini 
77876cad711SPaolo Bonzini     case '7':
77976cad711SPaolo Bonzini       fetch_data(info, buffer + 3);
78076cad711SPaolo Bonzini       val = (buffer[2] << 8) + buffer[3];
78176cad711SPaolo Bonzini       val >>= 7;
78276cad711SPaolo Bonzini       break;
78376cad711SPaolo Bonzini 
78476cad711SPaolo Bonzini     case '8':
78576cad711SPaolo Bonzini       fetch_data(info, buffer + 3);
78676cad711SPaolo Bonzini       val = (buffer[2] << 8) + buffer[3];
78776cad711SPaolo Bonzini       val >>= 10;
78876cad711SPaolo Bonzini       break;
78976cad711SPaolo Bonzini 
79076cad711SPaolo Bonzini     case '9':
79176cad711SPaolo Bonzini       fetch_data(info, buffer + 3);
79276cad711SPaolo Bonzini       val = (buffer[2] << 8) + buffer[3];
79376cad711SPaolo Bonzini       val >>= 5;
79476cad711SPaolo Bonzini       break;
79576cad711SPaolo Bonzini 
79676cad711SPaolo Bonzini     case 'e':
79776cad711SPaolo Bonzini       val = (buffer[1] >> 6);
79876cad711SPaolo Bonzini       break;
79976cad711SPaolo Bonzini 
80076cad711SPaolo Bonzini     case 'm':
80176cad711SPaolo Bonzini       val = (buffer[1] & 0x40 ? 0x8 : 0)
80276cad711SPaolo Bonzini 	| ((buffer[0] >> 1) & 0x7)
80376cad711SPaolo Bonzini 	| (buffer[3] & 0x80 ? 0x10 : 0);
80476cad711SPaolo Bonzini       break;
80576cad711SPaolo Bonzini 
80676cad711SPaolo Bonzini     case 'n':
80776cad711SPaolo Bonzini       val = (buffer[1] & 0x40 ? 0x8 : 0) | ((buffer[0] >> 1) & 0x7);
80876cad711SPaolo Bonzini       break;
80976cad711SPaolo Bonzini 
81076cad711SPaolo Bonzini     case 'o':
81176cad711SPaolo Bonzini       val = (buffer[2] >> 4) | (buffer[3] & 0x80 ? 0x10 : 0);
81276cad711SPaolo Bonzini       break;
81376cad711SPaolo Bonzini 
81476cad711SPaolo Bonzini     case 'M':
81576cad711SPaolo Bonzini       val = (buffer[1] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0);
81676cad711SPaolo Bonzini       break;
81776cad711SPaolo Bonzini 
81876cad711SPaolo Bonzini     case 'N':
81976cad711SPaolo Bonzini       val = (buffer[3] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0);
82076cad711SPaolo Bonzini       break;
82176cad711SPaolo Bonzini 
82276cad711SPaolo Bonzini     case 'h':
82376cad711SPaolo Bonzini       val = buffer[2] >> 2;
82476cad711SPaolo Bonzini       break;
82576cad711SPaolo Bonzini 
82676cad711SPaolo Bonzini     default:
82776cad711SPaolo Bonzini       abort ();
82876cad711SPaolo Bonzini     }
82976cad711SPaolo Bonzini 
83076cad711SPaolo Bonzini   switch (bits)
83176cad711SPaolo Bonzini     {
83276cad711SPaolo Bonzini     case 1:
83376cad711SPaolo Bonzini       return val & 1;
83476cad711SPaolo Bonzini     case 2:
83576cad711SPaolo Bonzini       return val & 3;
83676cad711SPaolo Bonzini     case 3:
83776cad711SPaolo Bonzini       return val & 7;
83876cad711SPaolo Bonzini     case 4:
83976cad711SPaolo Bonzini       return val & 017;
84076cad711SPaolo Bonzini     case 5:
84176cad711SPaolo Bonzini       return val & 037;
84276cad711SPaolo Bonzini     case 6:
84376cad711SPaolo Bonzini       return val & 077;
84476cad711SPaolo Bonzini     case 7:
84576cad711SPaolo Bonzini       return val & 0177;
84676cad711SPaolo Bonzini     case 8:
84776cad711SPaolo Bonzini       return val & 0377;
84876cad711SPaolo Bonzini     case 12:
84976cad711SPaolo Bonzini       return val & 07777;
85076cad711SPaolo Bonzini     default:
85176cad711SPaolo Bonzini       abort ();
85276cad711SPaolo Bonzini     }
85376cad711SPaolo Bonzini }
85476cad711SPaolo Bonzini 
85576cad711SPaolo Bonzini /* Check if an EA is valid for a particular code.  This is required
85676cad711SPaolo Bonzini    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
85876cad711SPaolo Bonzini    is a non-load EMAC instruction and the bits mean register Ry.
85976cad711SPaolo Bonzini    A similar case exists for the movem instructions where the register
86076cad711SPaolo Bonzini    mask is interpreted differently for different EAs.  */
86176cad711SPaolo Bonzini 
86276cad711SPaolo Bonzini static bfd_boolean
m68k_valid_ea(char code,int val)86376cad711SPaolo Bonzini m68k_valid_ea (char code, int val)
86476cad711SPaolo Bonzini {
86576cad711SPaolo Bonzini   int mode, mask;
86676cad711SPaolo Bonzini #define M(n0,n1,n2,n3,n4,n5,n6,n70,n71,n72,n73,n74) \
86776cad711SPaolo Bonzini   (n0 | n1 << 1 | n2 << 2 | n3 << 3 | n4 << 4 | n5 << 5 | n6 << 6 \
86876cad711SPaolo Bonzini    | n70 << 7 | n71 << 8 | n72 << 9 | n73 << 10 | n74 << 11)
86976cad711SPaolo Bonzini 
87076cad711SPaolo Bonzini   switch (code)
87176cad711SPaolo Bonzini     {
87276cad711SPaolo Bonzini     case '*':
87376cad711SPaolo Bonzini       mask = M (1,1,1,1,1,1,1,1,1,1,1,1);
87476cad711SPaolo Bonzini       break;
87576cad711SPaolo Bonzini     case '~':
87676cad711SPaolo Bonzini       mask = M (0,0,1,1,1,1,1,1,1,0,0,0);
87776cad711SPaolo Bonzini       break;
87876cad711SPaolo Bonzini     case '%':
87976cad711SPaolo Bonzini       mask = M (1,1,1,1,1,1,1,1,1,0,0,0);
88076cad711SPaolo Bonzini       break;
88176cad711SPaolo Bonzini     case ';':
88276cad711SPaolo Bonzini       mask = M (1,0,1,1,1,1,1,1,1,1,1,1);
88376cad711SPaolo Bonzini       break;
88476cad711SPaolo Bonzini     case '@':
88576cad711SPaolo Bonzini       mask = M (1,0,1,1,1,1,1,1,1,1,1,0);
88676cad711SPaolo Bonzini       break;
88776cad711SPaolo Bonzini     case '!':
88876cad711SPaolo Bonzini       mask = M (0,0,1,0,0,1,1,1,1,1,1,0);
88976cad711SPaolo Bonzini       break;
89076cad711SPaolo Bonzini     case '&':
89176cad711SPaolo Bonzini       mask = M (0,0,1,0,0,1,1,1,1,0,0,0);
89276cad711SPaolo Bonzini       break;
89376cad711SPaolo Bonzini     case '$':
89476cad711SPaolo Bonzini       mask = M (1,0,1,1,1,1,1,1,1,0,0,0);
89576cad711SPaolo Bonzini       break;
89676cad711SPaolo Bonzini     case '?':
89776cad711SPaolo Bonzini       mask = M (1,0,1,0,0,1,1,1,1,0,0,0);
89876cad711SPaolo Bonzini       break;
89976cad711SPaolo Bonzini     case '/':
90076cad711SPaolo Bonzini       mask = M (1,0,1,0,0,1,1,1,1,1,1,0);
90176cad711SPaolo Bonzini       break;
90276cad711SPaolo Bonzini     case '|':
90376cad711SPaolo Bonzini       mask = M (0,0,1,0,0,1,1,1,1,1,1,0);
90476cad711SPaolo Bonzini       break;
90576cad711SPaolo Bonzini     case '>':
90676cad711SPaolo Bonzini       mask = M (0,0,1,0,1,1,1,1,1,0,0,0);
90776cad711SPaolo Bonzini       break;
90876cad711SPaolo Bonzini     case '<':
90976cad711SPaolo Bonzini       mask = M (0,0,1,1,0,1,1,1,1,1,1,0);
91076cad711SPaolo Bonzini       break;
91176cad711SPaolo Bonzini     case 'm':
91276cad711SPaolo Bonzini       mask = M (1,1,1,1,1,0,0,0,0,0,0,0);
91376cad711SPaolo Bonzini       break;
91476cad711SPaolo Bonzini     case 'n':
91576cad711SPaolo Bonzini       mask = M (0,0,0,0,0,1,0,0,0,1,0,0);
91676cad711SPaolo Bonzini       break;
91776cad711SPaolo Bonzini     case 'o':
91876cad711SPaolo Bonzini       mask = M (0,0,0,0,0,0,1,1,1,0,1,1);
91976cad711SPaolo Bonzini       break;
92076cad711SPaolo Bonzini     case 'p':
92176cad711SPaolo Bonzini       mask = M (1,1,1,1,1,1,0,0,0,0,0,0);
92276cad711SPaolo Bonzini       break;
92376cad711SPaolo Bonzini     case 'q':
92476cad711SPaolo Bonzini       mask = M (1,0,1,1,1,1,0,0,0,0,0,0);
92576cad711SPaolo Bonzini       break;
92676cad711SPaolo Bonzini     case 'v':
92776cad711SPaolo Bonzini       mask = M (1,0,1,1,1,1,0,1,1,0,0,0);
92876cad711SPaolo Bonzini       break;
92976cad711SPaolo Bonzini     case 'b':
93076cad711SPaolo Bonzini       mask = M (1,0,1,1,1,1,0,0,0,1,0,0);
93176cad711SPaolo Bonzini       break;
93276cad711SPaolo Bonzini     case 'w':
93376cad711SPaolo Bonzini       mask = M (0,0,1,1,1,1,0,0,0,1,0,0);
93476cad711SPaolo Bonzini       break;
93576cad711SPaolo Bonzini     case 'y':
93676cad711SPaolo Bonzini       mask = M (0,0,1,0,0,1,0,0,0,0,0,0);
93776cad711SPaolo Bonzini       break;
93876cad711SPaolo Bonzini     case 'z':
93976cad711SPaolo Bonzini       mask = M (0,0,1,0,0,1,0,0,0,1,0,0);
94076cad711SPaolo Bonzini       break;
94176cad711SPaolo Bonzini     case '4':
94276cad711SPaolo Bonzini       mask = M (0,0,1,1,1,1,0,0,0,0,0,0);
94376cad711SPaolo Bonzini       break;
94476cad711SPaolo Bonzini     default:
94576cad711SPaolo Bonzini       abort ();
94676cad711SPaolo Bonzini     }
94776cad711SPaolo Bonzini #undef M
94876cad711SPaolo Bonzini 
94976cad711SPaolo Bonzini   mode = (val >> 3) & 7;
95076cad711SPaolo Bonzini   if (mode == 7)
95176cad711SPaolo Bonzini     mode += val & 7;
95276cad711SPaolo Bonzini   return (mask & (1 << mode)) != 0;
95376cad711SPaolo Bonzini }
95476cad711SPaolo Bonzini 
95576cad711SPaolo Bonzini /* Print a base register REGNO and displacement DISP, on INFO->STREAM.
95676cad711SPaolo Bonzini    REGNO = -1 for pc, -2 for none (suppressed).  */
95776cad711SPaolo Bonzini 
95876cad711SPaolo Bonzini static void
print_base(int regno,bfd_vma disp,disassemble_info * info)95976cad711SPaolo Bonzini print_base (int regno, bfd_vma disp, disassemble_info *info)
96076cad711SPaolo Bonzini {
96176cad711SPaolo Bonzini   if (regno == -1)
96276cad711SPaolo Bonzini     {
96376cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%pc@(");
96476cad711SPaolo Bonzini       (*info->print_address_func) (disp, info);
96576cad711SPaolo Bonzini     }
96676cad711SPaolo Bonzini   else
96776cad711SPaolo Bonzini     {
96876cad711SPaolo Bonzini       char buf[50];
96976cad711SPaolo Bonzini 
97076cad711SPaolo Bonzini       if (regno == -2)
97176cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "@(");
97276cad711SPaolo Bonzini       else if (regno == -3)
97376cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "%%zpc@(");
97476cad711SPaolo Bonzini       else
97576cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "%s@(", reg_names[regno]);
97676cad711SPaolo Bonzini 
97776cad711SPaolo Bonzini       sprintf_vma (buf, disp);
97876cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%s", buf);
97976cad711SPaolo Bonzini     }
98076cad711SPaolo Bonzini }
98176cad711SPaolo Bonzini 
98276cad711SPaolo Bonzini /* Print an indexed argument.  The base register is BASEREG (-1 for pc).
98376cad711SPaolo Bonzini    P points to extension word, in buffer.
98476cad711SPaolo Bonzini    ADDR is the nominal core address of that extension word.  */
98576cad711SPaolo Bonzini 
98676cad711SPaolo Bonzini static unsigned char *
print_indexed(int basereg,unsigned char * p,bfd_vma addr,disassemble_info * info)98776cad711SPaolo Bonzini print_indexed (int basereg,
98876cad711SPaolo Bonzini 	       unsigned char *p,
98976cad711SPaolo Bonzini 	       bfd_vma addr,
99076cad711SPaolo Bonzini 	       disassemble_info *info)
99176cad711SPaolo Bonzini {
99276cad711SPaolo Bonzini   int word;
99376cad711SPaolo Bonzini   static const char *const scales[] = { "", ":2", ":4", ":8" };
99476cad711SPaolo Bonzini   bfd_vma base_disp;
99576cad711SPaolo Bonzini   bfd_vma outer_disp;
99676cad711SPaolo Bonzini   char buf[40];
99776cad711SPaolo Bonzini   char vmabuf[50];
99876cad711SPaolo Bonzini 
99976cad711SPaolo Bonzini   word = NEXTWORD (p);
100076cad711SPaolo Bonzini 
100176cad711SPaolo Bonzini   /* Generate the text for the index register.
100276cad711SPaolo Bonzini      Where this will be output is not yet determined.  */
1003*28d5bfc0SPhilippe Mathieu-Daudé   snprintf(buf, sizeof(buf), "%s:%c%s",
100476cad711SPaolo Bonzini 	   reg_names[(word >> 12) & 0xf],
100576cad711SPaolo Bonzini 	   (word & 0x800) ? 'l' : 'w',
100676cad711SPaolo Bonzini 	   scales[(word >> 9) & 3]);
100776cad711SPaolo Bonzini 
100876cad711SPaolo Bonzini   /* Handle the 68000 style of indexing.  */
100976cad711SPaolo Bonzini 
101076cad711SPaolo Bonzini   if ((word & 0x100) == 0)
101176cad711SPaolo Bonzini     {
101276cad711SPaolo Bonzini       base_disp = word & 0xff;
101376cad711SPaolo Bonzini       if ((base_disp & 0x80) != 0)
101476cad711SPaolo Bonzini 	base_disp -= 0x100;
101576cad711SPaolo Bonzini       if (basereg == -1)
101676cad711SPaolo Bonzini 	base_disp += addr;
101776cad711SPaolo Bonzini       print_base (basereg, base_disp, info);
101876cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, ",%s)", buf);
101976cad711SPaolo Bonzini       return p;
102076cad711SPaolo Bonzini     }
102176cad711SPaolo Bonzini 
102276cad711SPaolo Bonzini   /* Handle the generalized kind.  */
102376cad711SPaolo Bonzini   /* First, compute the displacement to add to the base register.  */
102476cad711SPaolo Bonzini   if (word & 0200)
102576cad711SPaolo Bonzini     {
102676cad711SPaolo Bonzini       if (basereg == -1)
102776cad711SPaolo Bonzini 	basereg = -3;
102876cad711SPaolo Bonzini       else
102976cad711SPaolo Bonzini 	basereg = -2;
103076cad711SPaolo Bonzini     }
103176cad711SPaolo Bonzini   if (word & 0100)
103276cad711SPaolo Bonzini     buf[0] = '\0';
103376cad711SPaolo Bonzini   base_disp = 0;
103476cad711SPaolo Bonzini   switch ((word >> 4) & 3)
103576cad711SPaolo Bonzini     {
103676cad711SPaolo Bonzini     case 2:
103776cad711SPaolo Bonzini       base_disp = NEXTWORD (p);
103876cad711SPaolo Bonzini       break;
103976cad711SPaolo Bonzini     case 3:
104076cad711SPaolo Bonzini       base_disp = NEXTLONG (p);
104176cad711SPaolo Bonzini     }
104276cad711SPaolo Bonzini   if (basereg == -1)
104376cad711SPaolo Bonzini     base_disp += addr;
104476cad711SPaolo Bonzini 
104576cad711SPaolo Bonzini   /* Handle single-level case (not indirect).  */
104676cad711SPaolo Bonzini   if ((word & 7) == 0)
104776cad711SPaolo Bonzini     {
104876cad711SPaolo Bonzini       print_base (basereg, base_disp, info);
104976cad711SPaolo Bonzini       if (buf[0] != '\0')
105076cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, ",%s", buf);
105176cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, ")");
105276cad711SPaolo Bonzini       return p;
105376cad711SPaolo Bonzini     }
105476cad711SPaolo Bonzini 
105576cad711SPaolo Bonzini   /* Two level.  Compute displacement to add after indirection.  */
105676cad711SPaolo Bonzini   outer_disp = 0;
105776cad711SPaolo Bonzini   switch (word & 3)
105876cad711SPaolo Bonzini     {
105976cad711SPaolo Bonzini     case 2:
106076cad711SPaolo Bonzini       outer_disp = NEXTWORD (p);
106176cad711SPaolo Bonzini       break;
106276cad711SPaolo Bonzini     case 3:
106376cad711SPaolo Bonzini       outer_disp = NEXTLONG (p);
106476cad711SPaolo Bonzini     }
106576cad711SPaolo Bonzini 
106676cad711SPaolo Bonzini   print_base (basereg, base_disp, info);
106776cad711SPaolo Bonzini   if ((word & 4) == 0 && buf[0] != '\0')
106876cad711SPaolo Bonzini     {
106976cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, ",%s", buf);
107076cad711SPaolo Bonzini       buf[0] = '\0';
107176cad711SPaolo Bonzini     }
107276cad711SPaolo Bonzini   sprintf_vma (vmabuf, outer_disp);
107376cad711SPaolo Bonzini   (*info->fprintf_func) (info->stream, ")@(%s", vmabuf);
107476cad711SPaolo Bonzini   if (buf[0] != '\0')
107576cad711SPaolo Bonzini     (*info->fprintf_func) (info->stream, ",%s", buf);
107676cad711SPaolo Bonzini   (*info->fprintf_func) (info->stream, ")");
107776cad711SPaolo Bonzini 
107876cad711SPaolo Bonzini   return p;
107976cad711SPaolo Bonzini }
108076cad711SPaolo Bonzini 
108176cad711SPaolo Bonzini /* Returns number of bytes "eaten" by the operand, or
108276cad711SPaolo Bonzini    return -1 if an invalid operand was found, or -2 if
10832dbb1308Szhaolichang    an opcode table error was found.
108476cad711SPaolo Bonzini    ADDR is the pc for this arg to be relative to.  */
108576cad711SPaolo Bonzini 
108676cad711SPaolo Bonzini static int
print_insn_arg(const char * d,unsigned char * buffer,unsigned char * p0,bfd_vma addr,disassemble_info * info)108776cad711SPaolo Bonzini print_insn_arg (const char *d,
108876cad711SPaolo Bonzini 		unsigned char *buffer,
108976cad711SPaolo Bonzini 		unsigned char *p0,
109076cad711SPaolo Bonzini 		bfd_vma addr,
109176cad711SPaolo Bonzini 		disassemble_info *info)
109276cad711SPaolo Bonzini {
109376cad711SPaolo Bonzini   int val = 0;
109476cad711SPaolo Bonzini   int place = d[1];
109576cad711SPaolo Bonzini   unsigned char *p = p0;
109676cad711SPaolo Bonzini   int regno;
109776cad711SPaolo Bonzini   const char *regname;
109876cad711SPaolo Bonzini   unsigned char *p1;
109976cad711SPaolo Bonzini   double flval;
110076cad711SPaolo Bonzini   int flt_p;
110176cad711SPaolo Bonzini   bfd_signed_vma disp;
110276cad711SPaolo Bonzini   unsigned int uval;
110376cad711SPaolo Bonzini 
110476cad711SPaolo Bonzini   switch (*d)
110576cad711SPaolo Bonzini     {
110676cad711SPaolo Bonzini     case 'c':		/* Cache identifier.  */
110776cad711SPaolo Bonzini       {
110876cad711SPaolo Bonzini         static const char *const cacheFieldName[] = { "nc", "dc", "ic", "bc" };
110976cad711SPaolo Bonzini         val = fetch_arg (buffer, place, 2, info);
111076cad711SPaolo Bonzini         (*info->fprintf_func) (info->stream, "%s", cacheFieldName[val]);
111176cad711SPaolo Bonzini         break;
111276cad711SPaolo Bonzini       }
111376cad711SPaolo Bonzini 
111476cad711SPaolo Bonzini     case 'a':		/* Address register indirect only. Cf. case '+'.  */
111576cad711SPaolo Bonzini       {
111676cad711SPaolo Bonzini         (*info->fprintf_func)
111776cad711SPaolo Bonzini 	  (info->stream,
111876cad711SPaolo Bonzini 	   "%s@",
111976cad711SPaolo Bonzini 	   reg_names[fetch_arg (buffer, place, 3, info) + 8]);
112076cad711SPaolo Bonzini         break;
112176cad711SPaolo Bonzini       }
112276cad711SPaolo Bonzini 
112376cad711SPaolo Bonzini     case '_':		/* 32-bit absolute address for move16.  */
112476cad711SPaolo Bonzini       {
112576cad711SPaolo Bonzini         uval = NEXTULONG (p);
112676cad711SPaolo Bonzini 	(*info->print_address_func) (uval, info);
112776cad711SPaolo Bonzini         break;
112876cad711SPaolo Bonzini       }
112976cad711SPaolo Bonzini 
113076cad711SPaolo Bonzini     case 'C':
113176cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%ccr");
113276cad711SPaolo Bonzini       break;
113376cad711SPaolo Bonzini 
113476cad711SPaolo Bonzini     case 'S':
113576cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%sr");
113676cad711SPaolo Bonzini       break;
113776cad711SPaolo Bonzini 
113876cad711SPaolo Bonzini     case 'U':
113976cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%usp");
114076cad711SPaolo Bonzini       break;
114176cad711SPaolo Bonzini 
114276cad711SPaolo Bonzini     case 'E':
114376cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%acc");
114476cad711SPaolo Bonzini       break;
114576cad711SPaolo Bonzini 
114676cad711SPaolo Bonzini     case 'G':
114776cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%macsr");
114876cad711SPaolo Bonzini       break;
114976cad711SPaolo Bonzini 
115076cad711SPaolo Bonzini     case 'H':
115176cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%mask");
115276cad711SPaolo Bonzini       break;
115376cad711SPaolo Bonzini 
115476cad711SPaolo Bonzini     case 'J':
115576cad711SPaolo Bonzini       {
115676cad711SPaolo Bonzini 	/* FIXME: There's a problem here, different m68k processors call the
115776cad711SPaolo Bonzini 	   same address different names. This table can't get it right
115876cad711SPaolo Bonzini 	   because it doesn't know which processor it's disassembling for.  */
115976cad711SPaolo Bonzini 	static const struct { const char *name; int value; } names[]
116076cad711SPaolo Bonzini 	  = {{"%sfc", 0x000}, {"%dfc", 0x001}, {"%cacr", 0x002},
116176cad711SPaolo Bonzini 	     {"%tc",  0x003}, {"%itt0",0x004}, {"%itt1", 0x005},
116276cad711SPaolo Bonzini              {"%dtt0",0x006}, {"%dtt1",0x007}, {"%buscr",0x008},
116376cad711SPaolo Bonzini 	     {"%usp", 0x800}, {"%vbr", 0x801}, {"%caar", 0x802},
116476cad711SPaolo Bonzini 	     {"%msp", 0x803}, {"%isp", 0x804},
116576cad711SPaolo Bonzini 	     {"%flashbar", 0xc04}, {"%rambar", 0xc05}, /* mcf528x added these.  */
116676cad711SPaolo Bonzini 
116776cad711SPaolo Bonzini 	     /* Should we be calling this psr like we do in case 'Y'?  */
116876cad711SPaolo Bonzini 	     {"%mmusr",0x805},
116976cad711SPaolo Bonzini 
117076cad711SPaolo Bonzini              {"%urp", 0x806}, {"%srp", 0x807}, {"%pcr", 0x808}};
117176cad711SPaolo Bonzini 
117276cad711SPaolo Bonzini 	val = fetch_arg (buffer, place, 12, info);
117376cad711SPaolo Bonzini 	for (regno = sizeof names / sizeof names[0] - 1; regno >= 0; regno--)
117476cad711SPaolo Bonzini 	  if (names[regno].value == val)
117576cad711SPaolo Bonzini 	    {
117676cad711SPaolo Bonzini 	      (*info->fprintf_func) (info->stream, "%s", names[regno].name);
117776cad711SPaolo Bonzini 	      break;
117876cad711SPaolo Bonzini 	    }
117976cad711SPaolo Bonzini 	if (regno < 0)
118076cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%d", val);
118176cad711SPaolo Bonzini       }
118276cad711SPaolo Bonzini       break;
118376cad711SPaolo Bonzini 
118476cad711SPaolo Bonzini     case 'Q':
118576cad711SPaolo Bonzini       val = fetch_arg (buffer, place, 3, info);
118676cad711SPaolo Bonzini       /* 0 means 8, except for the bkpt instruction... */
118776cad711SPaolo Bonzini       if (val == 0 && d[1] != 's')
118876cad711SPaolo Bonzini 	val = 8;
118976cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "#%d", val);
119076cad711SPaolo Bonzini       break;
119176cad711SPaolo Bonzini 
119276cad711SPaolo Bonzini     case 'x':
119376cad711SPaolo Bonzini       val = fetch_arg (buffer, place, 3, info);
119476cad711SPaolo Bonzini       /* 0 means -1.  */
119576cad711SPaolo Bonzini       if (val == 0)
119676cad711SPaolo Bonzini 	val = -1;
119776cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "#%d", val);
119876cad711SPaolo Bonzini       break;
119976cad711SPaolo Bonzini 
120076cad711SPaolo Bonzini     case 'M':
120176cad711SPaolo Bonzini       if (place == 'h')
120276cad711SPaolo Bonzini 	{
120376cad711SPaolo Bonzini 	  static const char *const scalefactor_name[] = { "<<", ">>" };
120476cad711SPaolo Bonzini 	  val = fetch_arg (buffer, place, 1, info);
120576cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%s", scalefactor_name[val]);
120676cad711SPaolo Bonzini 	}
120776cad711SPaolo Bonzini       else
120876cad711SPaolo Bonzini 	{
120976cad711SPaolo Bonzini 	  val = fetch_arg (buffer, place, 8, info);
121076cad711SPaolo Bonzini 	  if (val & 0x80)
121176cad711SPaolo Bonzini 	    val = val - 0x100;
121276cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "#%d", val);
121376cad711SPaolo Bonzini 	}
121476cad711SPaolo Bonzini       break;
121576cad711SPaolo Bonzini 
121676cad711SPaolo Bonzini     case 'T':
121776cad711SPaolo Bonzini       val = fetch_arg (buffer, place, 4, info);
121876cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "#%d", val);
121976cad711SPaolo Bonzini       break;
122076cad711SPaolo Bonzini 
122176cad711SPaolo Bonzini     case 'D':
122276cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%s",
122376cad711SPaolo Bonzini 			     reg_names[fetch_arg (buffer, place, 3, info)]);
122476cad711SPaolo Bonzini       break;
122576cad711SPaolo Bonzini 
122676cad711SPaolo Bonzini     case 'A':
122776cad711SPaolo Bonzini       (*info->fprintf_func)
122876cad711SPaolo Bonzini 	(info->stream, "%s",
122976cad711SPaolo Bonzini 	 reg_names[fetch_arg (buffer, place, 3, info) + 010]);
123076cad711SPaolo Bonzini       break;
123176cad711SPaolo Bonzini 
123276cad711SPaolo Bonzini     case 'R':
123376cad711SPaolo Bonzini       (*info->fprintf_func)
123476cad711SPaolo Bonzini 	(info->stream, "%s",
123576cad711SPaolo Bonzini 	 reg_names[fetch_arg (buffer, place, 4, info)]);
123676cad711SPaolo Bonzini       break;
123776cad711SPaolo Bonzini 
123876cad711SPaolo Bonzini     case 'r':
123976cad711SPaolo Bonzini       regno = fetch_arg (buffer, place, 4, info);
124076cad711SPaolo Bonzini       if (regno > 7)
124176cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "%s@", reg_names[regno]);
124276cad711SPaolo Bonzini       else
124376cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "@(%s)", reg_names[regno]);
124476cad711SPaolo Bonzini       break;
124576cad711SPaolo Bonzini 
124676cad711SPaolo Bonzini     case 'F':
124776cad711SPaolo Bonzini       (*info->fprintf_func)
124876cad711SPaolo Bonzini 	(info->stream, "%%fp%d",
124976cad711SPaolo Bonzini 	 fetch_arg (buffer, place, 3, info));
125076cad711SPaolo Bonzini       break;
125176cad711SPaolo Bonzini 
125276cad711SPaolo Bonzini     case 'O':
125376cad711SPaolo Bonzini       val = fetch_arg (buffer, place, 6, info);
125476cad711SPaolo Bonzini       if (val & 0x20)
125576cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "%s", reg_names[val & 7]);
125676cad711SPaolo Bonzini       else
125776cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "%d", val);
125876cad711SPaolo Bonzini       break;
125976cad711SPaolo Bonzini 
126076cad711SPaolo Bonzini     case '+':
126176cad711SPaolo Bonzini       (*info->fprintf_func)
126276cad711SPaolo Bonzini 	(info->stream, "%s@+",
126376cad711SPaolo Bonzini 	 reg_names[fetch_arg (buffer, place, 3, info) + 8]);
126476cad711SPaolo Bonzini       break;
126576cad711SPaolo Bonzini 
126676cad711SPaolo Bonzini     case '-':
126776cad711SPaolo Bonzini       (*info->fprintf_func)
126876cad711SPaolo Bonzini 	(info->stream, "%s@-",
126976cad711SPaolo Bonzini 	 reg_names[fetch_arg (buffer, place, 3, info) + 8]);
127076cad711SPaolo Bonzini       break;
127176cad711SPaolo Bonzini 
127276cad711SPaolo Bonzini     case 'k':
127376cad711SPaolo Bonzini       if (place == 'k')
127476cad711SPaolo Bonzini 	(*info->fprintf_func)
127576cad711SPaolo Bonzini 	  (info->stream, "{%s}",
127676cad711SPaolo Bonzini 	   reg_names[fetch_arg (buffer, place, 3, info)]);
127776cad711SPaolo Bonzini       else if (place == 'C')
127876cad711SPaolo Bonzini 	{
127976cad711SPaolo Bonzini 	  val = fetch_arg (buffer, place, 7, info);
128076cad711SPaolo Bonzini 	  if (val > 63)		/* This is a signed constant.  */
128176cad711SPaolo Bonzini 	    val -= 128;
128276cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "{#%d}", val);
128376cad711SPaolo Bonzini 	}
128476cad711SPaolo Bonzini       else
128576cad711SPaolo Bonzini 	return -2;
128676cad711SPaolo Bonzini       break;
128776cad711SPaolo Bonzini 
128876cad711SPaolo Bonzini     case '#':
128976cad711SPaolo Bonzini     case '^':
129076cad711SPaolo Bonzini       p1 = buffer + (*d == '#' ? 2 : 4);
129176cad711SPaolo Bonzini       if (place == 's')
129276cad711SPaolo Bonzini 	val = fetch_arg (buffer, place, 4, info);
129376cad711SPaolo Bonzini       else if (place == 'C')
129476cad711SPaolo Bonzini 	val = fetch_arg (buffer, place, 7, info);
129576cad711SPaolo Bonzini       else if (place == '8')
129676cad711SPaolo Bonzini 	val = fetch_arg (buffer, place, 3, info);
129776cad711SPaolo Bonzini       else if (place == '3')
129876cad711SPaolo Bonzini 	val = fetch_arg (buffer, place, 8, info);
129976cad711SPaolo Bonzini       else if (place == 'b')
130076cad711SPaolo Bonzini 	val = NEXTBYTE (p1);
130176cad711SPaolo Bonzini       else if (place == 'w' || place == 'W')
130276cad711SPaolo Bonzini 	val = NEXTWORD (p1);
130376cad711SPaolo Bonzini       else if (place == 'l')
130476cad711SPaolo Bonzini 	val = NEXTLONG (p1);
130576cad711SPaolo Bonzini       else
130676cad711SPaolo Bonzini 	return -2;
130776cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "#%d", val);
130876cad711SPaolo Bonzini       break;
130976cad711SPaolo Bonzini 
131076cad711SPaolo Bonzini     case 'B':
131176cad711SPaolo Bonzini       if (place == 'b')
131276cad711SPaolo Bonzini 	disp = NEXTBYTE (p);
131376cad711SPaolo Bonzini       else if (place == 'B')
131476cad711SPaolo Bonzini 	disp = COERCE_SIGNED_CHAR (buffer[1]);
131576cad711SPaolo Bonzini       else if (place == 'w' || place == 'W')
131676cad711SPaolo Bonzini 	disp = NEXTWORD (p);
131776cad711SPaolo Bonzini       else if (place == 'l' || place == 'L' || place == 'C')
131876cad711SPaolo Bonzini 	disp = NEXTLONG (p);
131976cad711SPaolo Bonzini       else if (place == 'g')
132076cad711SPaolo Bonzini 	{
132176cad711SPaolo Bonzini 	  disp = NEXTBYTE (buffer);
132276cad711SPaolo Bonzini 	  if (disp == 0)
132376cad711SPaolo Bonzini 	    disp = NEXTWORD (p);
132476cad711SPaolo Bonzini 	  else if (disp == -1)
132576cad711SPaolo Bonzini 	    disp = NEXTLONG (p);
132676cad711SPaolo Bonzini 	}
132776cad711SPaolo Bonzini       else if (place == 'c')
132876cad711SPaolo Bonzini 	{
132976cad711SPaolo Bonzini 	  if (buffer[1] & 0x40)		/* If bit six is one, long offset.  */
133076cad711SPaolo Bonzini 	    disp = NEXTLONG (p);
133176cad711SPaolo Bonzini 	  else
133276cad711SPaolo Bonzini 	    disp = NEXTWORD (p);
133376cad711SPaolo Bonzini 	}
133476cad711SPaolo Bonzini       else
133576cad711SPaolo Bonzini 	return -2;
133676cad711SPaolo Bonzini 
133776cad711SPaolo Bonzini       (*info->print_address_func) (addr + disp, info);
133876cad711SPaolo Bonzini       break;
133976cad711SPaolo Bonzini 
134076cad711SPaolo Bonzini     case 'd':
134176cad711SPaolo Bonzini       val = NEXTWORD (p);
134276cad711SPaolo Bonzini       (*info->fprintf_func)
134376cad711SPaolo Bonzini 	(info->stream, "%s@(%d)",
134476cad711SPaolo Bonzini 	 reg_names[fetch_arg (buffer, place, 3, info) + 8], val);
134576cad711SPaolo Bonzini       break;
134676cad711SPaolo Bonzini 
134776cad711SPaolo Bonzini     case 's':
134876cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%s",
134976cad711SPaolo Bonzini 			     fpcr_names[fetch_arg (buffer, place, 3, info)]);
135076cad711SPaolo Bonzini       break;
135176cad711SPaolo Bonzini 
135276cad711SPaolo Bonzini     case 'e':
135376cad711SPaolo Bonzini       val = fetch_arg(buffer, place, 2, info);
135476cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%acc%d", val);
135576cad711SPaolo Bonzini       break;
135676cad711SPaolo Bonzini 
135776cad711SPaolo Bonzini     case 'g':
135876cad711SPaolo Bonzini       val = fetch_arg(buffer, place, 1, info);
135976cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%accext%s", val==0 ? "01" : "23");
136076cad711SPaolo Bonzini       break;
136176cad711SPaolo Bonzini 
136276cad711SPaolo Bonzini     case 'i':
136376cad711SPaolo Bonzini       val = fetch_arg(buffer, place, 2, info);
136476cad711SPaolo Bonzini       if (val == 1)
136576cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "<<");
136676cad711SPaolo Bonzini       else if (val == 3)
136776cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, ">>");
136876cad711SPaolo Bonzini       else
136976cad711SPaolo Bonzini 	return -1;
137076cad711SPaolo Bonzini       break;
137176cad711SPaolo Bonzini 
137276cad711SPaolo Bonzini     case 'I':
137376cad711SPaolo Bonzini       /* Get coprocessor ID... */
137476cad711SPaolo Bonzini       val = fetch_arg (buffer, 'd', 3, info);
137576cad711SPaolo Bonzini 
137676cad711SPaolo Bonzini       if (val != 1)				/* Unusual coprocessor ID?  */
137776cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "(cpid=%d) ", val);
137876cad711SPaolo Bonzini       break;
137976cad711SPaolo Bonzini 
138076cad711SPaolo Bonzini     case '4':
138176cad711SPaolo Bonzini     case '*':
138276cad711SPaolo Bonzini     case '~':
138376cad711SPaolo Bonzini     case '%':
138476cad711SPaolo Bonzini     case ';':
138576cad711SPaolo Bonzini     case '@':
138676cad711SPaolo Bonzini     case '!':
138776cad711SPaolo Bonzini     case '$':
138876cad711SPaolo Bonzini     case '?':
138976cad711SPaolo Bonzini     case '/':
139076cad711SPaolo Bonzini     case '&':
139176cad711SPaolo Bonzini     case '|':
139276cad711SPaolo Bonzini     case '<':
139376cad711SPaolo Bonzini     case '>':
139476cad711SPaolo Bonzini     case 'm':
139576cad711SPaolo Bonzini     case 'n':
139676cad711SPaolo Bonzini     case 'o':
139776cad711SPaolo Bonzini     case 'p':
139876cad711SPaolo Bonzini     case 'q':
139976cad711SPaolo Bonzini     case 'v':
140076cad711SPaolo Bonzini     case 'b':
140176cad711SPaolo Bonzini     case 'w':
140276cad711SPaolo Bonzini     case 'y':
140376cad711SPaolo Bonzini     case 'z':
140476cad711SPaolo Bonzini       if (place == 'd')
140576cad711SPaolo Bonzini 	{
140676cad711SPaolo Bonzini 	  val = fetch_arg (buffer, 'x', 6, info);
140776cad711SPaolo Bonzini 	  val = ((val & 7) << 3) + ((val >> 3) & 7);
140876cad711SPaolo Bonzini 	}
140976cad711SPaolo Bonzini       else
141076cad711SPaolo Bonzini 	val = fetch_arg (buffer, 's', 6, info);
141176cad711SPaolo Bonzini 
141276cad711SPaolo Bonzini       /* If the <ea> is invalid for *d, then reject this match.  */
141376cad711SPaolo Bonzini       if (!m68k_valid_ea (*d, val))
141476cad711SPaolo Bonzini 	return -1;
141576cad711SPaolo Bonzini 
141676cad711SPaolo Bonzini       /* Get register number assuming address register.  */
141776cad711SPaolo Bonzini       regno = (val & 7) + 8;
141876cad711SPaolo Bonzini       regname = reg_names[regno];
141976cad711SPaolo Bonzini       switch (val >> 3)
142076cad711SPaolo Bonzini 	{
142176cad711SPaolo Bonzini 	case 0:
142276cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%s", reg_names[val]);
142376cad711SPaolo Bonzini 	  break;
142476cad711SPaolo Bonzini 
142576cad711SPaolo Bonzini 	case 1:
142676cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%s", regname);
142776cad711SPaolo Bonzini 	  break;
142876cad711SPaolo Bonzini 
142976cad711SPaolo Bonzini 	case 2:
143076cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%s@", regname);
143176cad711SPaolo Bonzini 	  break;
143276cad711SPaolo Bonzini 
143376cad711SPaolo Bonzini 	case 3:
143476cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%s@+", regname);
143576cad711SPaolo Bonzini 	  break;
143676cad711SPaolo Bonzini 
143776cad711SPaolo Bonzini 	case 4:
143876cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%s@-", regname);
143976cad711SPaolo Bonzini 	  break;
144076cad711SPaolo Bonzini 
144176cad711SPaolo Bonzini 	case 5:
144276cad711SPaolo Bonzini 	  val = NEXTWORD (p);
144376cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%s@(%d)", regname, val);
144476cad711SPaolo Bonzini 	  break;
144576cad711SPaolo Bonzini 
144676cad711SPaolo Bonzini 	case 6:
144776cad711SPaolo Bonzini 	  p = print_indexed (regno, p, addr, info);
144876cad711SPaolo Bonzini 	  break;
144976cad711SPaolo Bonzini 
145076cad711SPaolo Bonzini 	case 7:
145176cad711SPaolo Bonzini 	  switch (val & 7)
145276cad711SPaolo Bonzini 	    {
145376cad711SPaolo Bonzini 	    case 0:
145476cad711SPaolo Bonzini 	      val = NEXTWORD (p);
145576cad711SPaolo Bonzini 	      (*info->print_address_func) (val, info);
145676cad711SPaolo Bonzini 	      break;
145776cad711SPaolo Bonzini 
145876cad711SPaolo Bonzini 	    case 1:
145976cad711SPaolo Bonzini 	      uval = NEXTULONG (p);
146076cad711SPaolo Bonzini 	      (*info->print_address_func) (uval, info);
146176cad711SPaolo Bonzini 	      break;
146276cad711SPaolo Bonzini 
146376cad711SPaolo Bonzini 	    case 2:
146476cad711SPaolo Bonzini 	      val = NEXTWORD (p);
146576cad711SPaolo Bonzini 	      (*info->fprintf_func) (info->stream, "%%pc@(");
146676cad711SPaolo Bonzini 	      (*info->print_address_func) (addr + val, info);
146776cad711SPaolo Bonzini 	      (*info->fprintf_func) (info->stream, ")");
146876cad711SPaolo Bonzini 	      break;
146976cad711SPaolo Bonzini 
147076cad711SPaolo Bonzini 	    case 3:
147176cad711SPaolo Bonzini 	      p = print_indexed (-1, p, addr, info);
147276cad711SPaolo Bonzini 	      break;
147376cad711SPaolo Bonzini 
147476cad711SPaolo Bonzini 	    case 4:
147576cad711SPaolo Bonzini 	      flt_p = 1;	/* Assume it's a float... */
147676cad711SPaolo Bonzini 	      switch (place)
147776cad711SPaolo Bonzini 	      {
147876cad711SPaolo Bonzini 		case 'b':
147976cad711SPaolo Bonzini 		  val = NEXTBYTE (p);
148076cad711SPaolo Bonzini 		  flt_p = 0;
148176cad711SPaolo Bonzini 		  break;
148276cad711SPaolo Bonzini 
148376cad711SPaolo Bonzini 		case 'w':
148476cad711SPaolo Bonzini 		  val = NEXTWORD (p);
148576cad711SPaolo Bonzini 		  flt_p = 0;
148676cad711SPaolo Bonzini 		  break;
148776cad711SPaolo Bonzini 
148876cad711SPaolo Bonzini 		case 'l':
148976cad711SPaolo Bonzini 		  val = NEXTLONG (p);
149076cad711SPaolo Bonzini 		  flt_p = 0;
149176cad711SPaolo Bonzini 		  break;
149276cad711SPaolo Bonzini 
149376cad711SPaolo Bonzini 		case 'f':
149476cad711SPaolo Bonzini 		  NEXTSINGLE (flval, p);
149576cad711SPaolo Bonzini 		  break;
149676cad711SPaolo Bonzini 
149776cad711SPaolo Bonzini 		case 'F':
149876cad711SPaolo Bonzini 		  NEXTDOUBLE (flval, p);
149976cad711SPaolo Bonzini 		  break;
150076cad711SPaolo Bonzini 
150176cad711SPaolo Bonzini 		case 'x':
150276cad711SPaolo Bonzini 		  NEXTEXTEND (flval, p);
150376cad711SPaolo Bonzini 		  break;
150476cad711SPaolo Bonzini 
150576cad711SPaolo Bonzini 		case 'p':
150676cad711SPaolo Bonzini 		  flval = NEXTPACKED (p);
150776cad711SPaolo Bonzini 		  break;
150876cad711SPaolo Bonzini 
150976cad711SPaolo Bonzini 		default:
151076cad711SPaolo Bonzini 		  return -1;
151176cad711SPaolo Bonzini 	      }
151276cad711SPaolo Bonzini 	      if (flt_p)	/* Print a float? */
151376cad711SPaolo Bonzini 		(*info->fprintf_func) (info->stream, "#%g", flval);
151476cad711SPaolo Bonzini 	      else
151576cad711SPaolo Bonzini 		(*info->fprintf_func) (info->stream, "#%d", val);
151676cad711SPaolo Bonzini 	      break;
151776cad711SPaolo Bonzini 
151876cad711SPaolo Bonzini 	    default:
151976cad711SPaolo Bonzini 	      return -1;
152076cad711SPaolo Bonzini 	    }
152176cad711SPaolo Bonzini 	}
152276cad711SPaolo Bonzini 
152376cad711SPaolo Bonzini       /* If place is '/', then this is the case of the mask bit for
152476cad711SPaolo Bonzini 	 mac/emac loads. Now that the arg has been printed, grab the
152576cad711SPaolo Bonzini 	 mask bit and if set, add a '&' to the arg.  */
152676cad711SPaolo Bonzini       if (place == '/')
152776cad711SPaolo Bonzini 	{
152876cad711SPaolo Bonzini 	  val = fetch_arg (buffer, place, 1, info);
152976cad711SPaolo Bonzini 	  if (val)
153076cad711SPaolo Bonzini 	    info->fprintf_func (info->stream, "&");
153176cad711SPaolo Bonzini 	}
153276cad711SPaolo Bonzini       break;
153376cad711SPaolo Bonzini 
153476cad711SPaolo Bonzini     case 'L':
153576cad711SPaolo Bonzini     case 'l':
153676cad711SPaolo Bonzini 	if (place == 'w')
153776cad711SPaolo Bonzini 	  {
153876cad711SPaolo Bonzini 	    char doneany;
153976cad711SPaolo Bonzini 	    p1 = buffer + 2;
154076cad711SPaolo Bonzini 	    val = NEXTWORD (p1);
154176cad711SPaolo Bonzini 	    /* Move the pointer ahead if this point is farther ahead
154276cad711SPaolo Bonzini 	       than the last.  */
154376cad711SPaolo Bonzini 	    p = p1 > p ? p1 : p;
154476cad711SPaolo Bonzini 	    if (val == 0)
154576cad711SPaolo Bonzini 	      {
154676cad711SPaolo Bonzini 		(*info->fprintf_func) (info->stream, "#0");
154776cad711SPaolo Bonzini 		break;
154876cad711SPaolo Bonzini 	      }
154976cad711SPaolo Bonzini 	    if (*d == 'l')
155076cad711SPaolo Bonzini 	      {
155176cad711SPaolo Bonzini 		int newval = 0;
155276cad711SPaolo Bonzini 
155376cad711SPaolo Bonzini 		for (regno = 0; regno < 16; ++regno)
155476cad711SPaolo Bonzini 		  if (val & (0x8000 >> regno))
155576cad711SPaolo Bonzini 		    newval |= 1 << regno;
155676cad711SPaolo Bonzini 		val = newval;
155776cad711SPaolo Bonzini 	      }
155876cad711SPaolo Bonzini 	    val &= 0xffff;
155976cad711SPaolo Bonzini 	    doneany = 0;
156076cad711SPaolo Bonzini 	    for (regno = 0; regno < 16; ++regno)
156176cad711SPaolo Bonzini 	      if (val & (1 << regno))
156276cad711SPaolo Bonzini 		{
156376cad711SPaolo Bonzini 		  int first_regno;
156476cad711SPaolo Bonzini 
156576cad711SPaolo Bonzini 		  if (doneany)
156676cad711SPaolo Bonzini 		    (*info->fprintf_func) (info->stream, "/");
156776cad711SPaolo Bonzini 		  doneany = 1;
156876cad711SPaolo Bonzini 		  (*info->fprintf_func) (info->stream, "%s", reg_names[regno]);
156976cad711SPaolo Bonzini 		  first_regno = regno;
157076cad711SPaolo Bonzini 		  while (val & (1 << (regno + 1)))
157176cad711SPaolo Bonzini 		    ++regno;
157276cad711SPaolo Bonzini 		  if (regno > first_regno)
157376cad711SPaolo Bonzini 		    (*info->fprintf_func) (info->stream, "-%s",
157476cad711SPaolo Bonzini 					   reg_names[regno]);
157576cad711SPaolo Bonzini 		}
157676cad711SPaolo Bonzini 	  }
157776cad711SPaolo Bonzini 	else if (place == '3')
157876cad711SPaolo Bonzini 	  {
157976cad711SPaolo Bonzini 	    /* `fmovem' insn.  */
158076cad711SPaolo Bonzini 	    char doneany;
158176cad711SPaolo Bonzini 	    val = fetch_arg (buffer, place, 8, info);
158276cad711SPaolo Bonzini 	    if (val == 0)
158376cad711SPaolo Bonzini 	      {
158476cad711SPaolo Bonzini 		(*info->fprintf_func) (info->stream, "#0");
158576cad711SPaolo Bonzini 		break;
158676cad711SPaolo Bonzini 	      }
158776cad711SPaolo Bonzini 	    if (*d == 'l')
158876cad711SPaolo Bonzini 	      {
158976cad711SPaolo Bonzini 		int newval = 0;
159076cad711SPaolo Bonzini 
159176cad711SPaolo Bonzini 		for (regno = 0; regno < 8; ++regno)
159276cad711SPaolo Bonzini 		  if (val & (0x80 >> regno))
159376cad711SPaolo Bonzini 		    newval |= 1 << regno;
159476cad711SPaolo Bonzini 		val = newval;
159576cad711SPaolo Bonzini 	      }
159676cad711SPaolo Bonzini 	    val &= 0xff;
159776cad711SPaolo Bonzini 	    doneany = 0;
159876cad711SPaolo Bonzini 	    for (regno = 0; regno < 8; ++regno)
159976cad711SPaolo Bonzini 	      if (val & (1 << regno))
160076cad711SPaolo Bonzini 		{
160176cad711SPaolo Bonzini 		  int first_regno;
160276cad711SPaolo Bonzini 		  if (doneany)
160376cad711SPaolo Bonzini 		    (*info->fprintf_func) (info->stream, "/");
160476cad711SPaolo Bonzini 		  doneany = 1;
160576cad711SPaolo Bonzini 		  (*info->fprintf_func) (info->stream, "%%fp%d", regno);
160676cad711SPaolo Bonzini 		  first_regno = regno;
160776cad711SPaolo Bonzini 		  while (val & (1 << (regno + 1)))
160876cad711SPaolo Bonzini 		    ++regno;
160976cad711SPaolo Bonzini 		  if (regno > first_regno)
161076cad711SPaolo Bonzini 		    (*info->fprintf_func) (info->stream, "-%%fp%d", regno);
161176cad711SPaolo Bonzini 		}
161276cad711SPaolo Bonzini 	  }
161376cad711SPaolo Bonzini 	else if (place == '8')
161476cad711SPaolo Bonzini 	  {
161576cad711SPaolo Bonzini 	    /* fmoveml for FP status registers.  */
161676cad711SPaolo Bonzini 	    (*info->fprintf_func) (info->stream, "%s",
161776cad711SPaolo Bonzini 				   fpcr_names[fetch_arg (buffer, place, 3,
161876cad711SPaolo Bonzini 							 info)]);
161976cad711SPaolo Bonzini 	  }
162076cad711SPaolo Bonzini 	else
162176cad711SPaolo Bonzini 	  return -2;
162276cad711SPaolo Bonzini       break;
162376cad711SPaolo Bonzini 
162476cad711SPaolo Bonzini     case 'X':
162576cad711SPaolo Bonzini       place = '8';
1626edd7541bSPaolo Bonzini       /* fall through */
162776cad711SPaolo Bonzini     case 'Y':
162876cad711SPaolo Bonzini     case 'Z':
162976cad711SPaolo Bonzini     case 'W':
163076cad711SPaolo Bonzini     case '0':
163176cad711SPaolo Bonzini     case '1':
163276cad711SPaolo Bonzini     case '2':
163376cad711SPaolo Bonzini     case '3':
163476cad711SPaolo Bonzini       {
16354dba9141SLaurent Vivier 	int reg = fetch_arg (buffer, place, 5, info);
163676cad711SPaolo Bonzini         const char *name = 0;
163776cad711SPaolo Bonzini 
16384dba9141SLaurent Vivier 	switch (reg)
163976cad711SPaolo Bonzini 	  {
164076cad711SPaolo Bonzini 	  case 2: name = "%tt0"; break;
164176cad711SPaolo Bonzini 	  case 3: name = "%tt1"; break;
164276cad711SPaolo Bonzini 	  case 0x10: name = "%tc"; break;
164376cad711SPaolo Bonzini 	  case 0x11: name = "%drp"; break;
164476cad711SPaolo Bonzini 	  case 0x12: name = "%srp"; break;
164576cad711SPaolo Bonzini 	  case 0x13: name = "%crp"; break;
164676cad711SPaolo Bonzini 	  case 0x14: name = "%cal"; break;
164776cad711SPaolo Bonzini 	  case 0x15: name = "%val"; break;
164876cad711SPaolo Bonzini 	  case 0x16: name = "%scc"; break;
164976cad711SPaolo Bonzini 	  case 0x17: name = "%ac"; break;
165076cad711SPaolo Bonzini 	  case 0x18: name = "%psr"; break;
165176cad711SPaolo Bonzini 	  case 0x19: name = "%pcsr"; break;
165276cad711SPaolo Bonzini 	  case 0x1c:
165376cad711SPaolo Bonzini 	  case 0x1d:
165476cad711SPaolo Bonzini 	    {
165576cad711SPaolo Bonzini 	      int break_reg = ((buffer[3] >> 2) & 7);
165676cad711SPaolo Bonzini 
165776cad711SPaolo Bonzini 	      (*info->fprintf_func)
16584dba9141SLaurent Vivier 		(info->stream, reg == 0x1c ? "%%bad%d" : "%%bac%d",
165976cad711SPaolo Bonzini 		 break_reg);
166076cad711SPaolo Bonzini 	    }
166176cad711SPaolo Bonzini 	    break;
166276cad711SPaolo Bonzini 	  default:
16634dba9141SLaurent Vivier 	    (*info->fprintf_func) (info->stream, "<mmu register %d>", reg);
166476cad711SPaolo Bonzini 	  }
166576cad711SPaolo Bonzini 	if (name)
166676cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%s", name);
166776cad711SPaolo Bonzini       }
166876cad711SPaolo Bonzini       break;
166976cad711SPaolo Bonzini 
167076cad711SPaolo Bonzini     case 'f':
167176cad711SPaolo Bonzini       {
167276cad711SPaolo Bonzini 	int fc = fetch_arg (buffer, place, 5, info);
167376cad711SPaolo Bonzini 
167476cad711SPaolo Bonzini 	if (fc == 1)
167576cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%%dfc");
167676cad711SPaolo Bonzini 	else if (fc == 0)
167776cad711SPaolo Bonzini 	  (*info->fprintf_func) (info->stream, "%%sfc");
167876cad711SPaolo Bonzini 	else
167976cad711SPaolo Bonzini 	  /* xgettext:c-format */
1680ca66f1a1SLluís Vilanova 	  (*info->fprintf_func) (info->stream, "<function code %d>", fc);
168176cad711SPaolo Bonzini       }
168276cad711SPaolo Bonzini       break;
168376cad711SPaolo Bonzini 
168476cad711SPaolo Bonzini     case 'V':
168576cad711SPaolo Bonzini       (*info->fprintf_func) (info->stream, "%%val");
168676cad711SPaolo Bonzini       break;
168776cad711SPaolo Bonzini 
168876cad711SPaolo Bonzini     case 't':
168976cad711SPaolo Bonzini       {
169076cad711SPaolo Bonzini 	int level = fetch_arg (buffer, place, 3, info);
169176cad711SPaolo Bonzini 
169276cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "%d", level);
169376cad711SPaolo Bonzini       }
169476cad711SPaolo Bonzini       break;
169576cad711SPaolo Bonzini 
169676cad711SPaolo Bonzini     case 'u':
169776cad711SPaolo Bonzini       {
169876cad711SPaolo Bonzini 	short is_upper = 0;
169976cad711SPaolo Bonzini 	int reg = fetch_arg (buffer, place, 5, info);
170076cad711SPaolo Bonzini 
170176cad711SPaolo Bonzini 	if (reg & 0x10)
170276cad711SPaolo Bonzini 	  {
170376cad711SPaolo Bonzini 	    is_upper = 1;
170476cad711SPaolo Bonzini 	    reg &= 0xf;
170576cad711SPaolo Bonzini 	  }
170676cad711SPaolo Bonzini 	(*info->fprintf_func) (info->stream, "%s%s",
170776cad711SPaolo Bonzini 			       reg_half_names[reg],
170876cad711SPaolo Bonzini 			       is_upper ? "u" : "l");
170976cad711SPaolo Bonzini       }
171076cad711SPaolo Bonzini       break;
171176cad711SPaolo Bonzini 
171276cad711SPaolo Bonzini     default:
171376cad711SPaolo Bonzini       return -2;
171476cad711SPaolo Bonzini     }
171576cad711SPaolo Bonzini 
171676cad711SPaolo Bonzini   return p - p0;
171776cad711SPaolo Bonzini }
171876cad711SPaolo Bonzini 
171976cad711SPaolo Bonzini /* Try to match the current instruction to best and if so, return the
172076cad711SPaolo Bonzini    number of bytes consumed from the instruction stream, else zero.  */
172176cad711SPaolo Bonzini 
172276cad711SPaolo Bonzini static int
match_insn_m68k(bfd_vma memaddr,disassemble_info * info,const struct m68k_opcode * best,struct private * priv)172376cad711SPaolo Bonzini match_insn_m68k (bfd_vma memaddr,
172476cad711SPaolo Bonzini 		 disassemble_info * info,
172576cad711SPaolo Bonzini 		 const struct m68k_opcode * best,
172676cad711SPaolo Bonzini 		 struct private * priv)
172776cad711SPaolo Bonzini {
172876cad711SPaolo Bonzini   unsigned char *save_p;
172976cad711SPaolo Bonzini   unsigned char *p;
173076cad711SPaolo Bonzini   const char *d;
173176cad711SPaolo Bonzini 
173276cad711SPaolo Bonzini   bfd_byte *buffer = priv->the_buffer;
173376cad711SPaolo Bonzini   fprintf_function save_printer = info->fprintf_func;
173476cad711SPaolo Bonzini   void (* save_print_address) (bfd_vma, struct disassemble_info *)
173576cad711SPaolo Bonzini     = info->print_address_func;
173676cad711SPaolo Bonzini 
173776cad711SPaolo Bonzini   /* Point at first word of argument data,
173876cad711SPaolo Bonzini      and at descriptor for first argument.  */
173976cad711SPaolo Bonzini   p = buffer + 2;
174076cad711SPaolo Bonzini 
174176cad711SPaolo Bonzini   /* Figure out how long the fixed-size portion of the instruction is.
174276cad711SPaolo Bonzini      The only place this is stored in the opcode table is
174376cad711SPaolo Bonzini      in the arguments--look for arguments which specify fields in the 2nd
174476cad711SPaolo Bonzini      or 3rd words of the instruction.  */
174576cad711SPaolo Bonzini   for (d = best->args; *d; d += 2)
174676cad711SPaolo Bonzini     {
174776cad711SPaolo Bonzini       /* I don't think it is necessary to be checking d[0] here;
174876cad711SPaolo Bonzini 	 I suspect all this could be moved to the case statement below.  */
174976cad711SPaolo Bonzini       if (d[0] == '#')
175076cad711SPaolo Bonzini 	{
175176cad711SPaolo Bonzini 	  if (d[1] == 'l' && p - buffer < 6)
175276cad711SPaolo Bonzini 	    p = buffer + 6;
175376cad711SPaolo Bonzini 	  else if (p - buffer < 4 && d[1] != 'C' && d[1] != '8')
175476cad711SPaolo Bonzini 	    p = buffer + 4;
175576cad711SPaolo Bonzini 	}
175676cad711SPaolo Bonzini 
175776cad711SPaolo Bonzini       if ((d[0] == 'L' || d[0] == 'l') && d[1] == 'w' && p - buffer < 4)
175876cad711SPaolo Bonzini 	p = buffer + 4;
175976cad711SPaolo Bonzini 
176076cad711SPaolo Bonzini       switch (d[1])
176176cad711SPaolo Bonzini 	{
176276cad711SPaolo Bonzini 	case '1':
176376cad711SPaolo Bonzini 	case '2':
176476cad711SPaolo Bonzini 	case '3':
176576cad711SPaolo Bonzini 	case '7':
176676cad711SPaolo Bonzini 	case '8':
176776cad711SPaolo Bonzini 	case '9':
176876cad711SPaolo Bonzini 	case 'i':
176976cad711SPaolo Bonzini 	  if (p - buffer < 4)
177076cad711SPaolo Bonzini 	    p = buffer + 4;
177176cad711SPaolo Bonzini 	  break;
177276cad711SPaolo Bonzini 	case '4':
177376cad711SPaolo Bonzini 	case '5':
177476cad711SPaolo Bonzini 	case '6':
177576cad711SPaolo Bonzini 	  if (p - buffer < 6)
177676cad711SPaolo Bonzini 	    p = buffer + 6;
177776cad711SPaolo Bonzini 	  break;
177876cad711SPaolo Bonzini 	default:
177976cad711SPaolo Bonzini 	  break;
178076cad711SPaolo Bonzini 	}
178176cad711SPaolo Bonzini     }
178276cad711SPaolo Bonzini 
178376cad711SPaolo Bonzini   /* pflusha is an exceptions.  It takes no arguments but is two words
178476cad711SPaolo Bonzini      long.  Recognize it by looking at the lower 16 bits of the mask.  */
178576cad711SPaolo Bonzini   if (p - buffer < 4 && (best->match & 0xFFFF) != 0)
178676cad711SPaolo Bonzini     p = buffer + 4;
178776cad711SPaolo Bonzini 
178876cad711SPaolo Bonzini   /* lpstop is another exception.  It takes a one word argument but is
178976cad711SPaolo Bonzini      three words long.  */
179076cad711SPaolo Bonzini   if (p - buffer < 6
179176cad711SPaolo Bonzini       && (best->match & 0xffff) == 0xffff
179276cad711SPaolo Bonzini       && best->args[0] == '#'
179376cad711SPaolo Bonzini       && best->args[1] == 'w')
179476cad711SPaolo Bonzini     {
179576cad711SPaolo Bonzini       /* Copy the one word argument into the usual location for a one
179676cad711SPaolo Bonzini 	 word argument, to simplify printing it.  We can get away with
179776cad711SPaolo Bonzini 	 this because we know exactly what the second word is, and we
179876cad711SPaolo Bonzini 	 aren't going to print anything based on it.  */
179976cad711SPaolo Bonzini       p = buffer + 6;
180076cad711SPaolo Bonzini       fetch_data(info, p);
180176cad711SPaolo Bonzini       buffer[2] = buffer[4];
180276cad711SPaolo Bonzini       buffer[3] = buffer[5];
180376cad711SPaolo Bonzini     }
180476cad711SPaolo Bonzini 
180576cad711SPaolo Bonzini   fetch_data(info, p);
180676cad711SPaolo Bonzini 
180776cad711SPaolo Bonzini   d = best->args;
180876cad711SPaolo Bonzini 
180976cad711SPaolo Bonzini   save_p = p;
181076cad711SPaolo Bonzini   info->print_address_func = dummy_print_address;
181176cad711SPaolo Bonzini   info->fprintf_func = dummy_printer;
181276cad711SPaolo Bonzini 
181376cad711SPaolo Bonzini   /* We scan the operands twice.  The first time we don't print anything,
181476cad711SPaolo Bonzini      but look for errors.  */
181576cad711SPaolo Bonzini   for (; *d; d += 2)
181676cad711SPaolo Bonzini     {
181776cad711SPaolo Bonzini       int eaten = print_insn_arg (d, buffer, p, memaddr + (p - buffer), info);
181876cad711SPaolo Bonzini 
181976cad711SPaolo Bonzini       if (eaten >= 0)
182076cad711SPaolo Bonzini 	p += eaten;
182176cad711SPaolo Bonzini       else if (eaten == -1)
182276cad711SPaolo Bonzini 	{
182376cad711SPaolo Bonzini 	  info->fprintf_func = save_printer;
182476cad711SPaolo Bonzini 	  info->print_address_func = save_print_address;
182576cad711SPaolo Bonzini 	  return 0;
182676cad711SPaolo Bonzini 	}
182776cad711SPaolo Bonzini       else
182876cad711SPaolo Bonzini 	{
182976cad711SPaolo Bonzini 	  info->fprintf_func (info->stream,
183076cad711SPaolo Bonzini 			      /* xgettext:c-format */
1831ca66f1a1SLluís Vilanova 			      "<internal error in opcode table: %s %s>\n",
183276cad711SPaolo Bonzini 			      best->name,  best->args);
183376cad711SPaolo Bonzini 	  info->fprintf_func = save_printer;
183476cad711SPaolo Bonzini 	  info->print_address_func = save_print_address;
183576cad711SPaolo Bonzini 	  return 2;
183676cad711SPaolo Bonzini 	}
183776cad711SPaolo Bonzini     }
183876cad711SPaolo Bonzini 
183976cad711SPaolo Bonzini   p = save_p;
184076cad711SPaolo Bonzini   info->fprintf_func = save_printer;
184176cad711SPaolo Bonzini   info->print_address_func = save_print_address;
184276cad711SPaolo Bonzini 
184376cad711SPaolo Bonzini   d = best->args;
184476cad711SPaolo Bonzini 
184576cad711SPaolo Bonzini   info->fprintf_func (info->stream, "%s", best->name);
184676cad711SPaolo Bonzini 
184776cad711SPaolo Bonzini   if (*d)
184876cad711SPaolo Bonzini     info->fprintf_func (info->stream, " ");
184976cad711SPaolo Bonzini 
185076cad711SPaolo Bonzini   while (*d)
185176cad711SPaolo Bonzini     {
185276cad711SPaolo Bonzini       p += print_insn_arg (d, buffer, p, memaddr + (p - buffer), info);
185376cad711SPaolo Bonzini       d += 2;
185476cad711SPaolo Bonzini 
185576cad711SPaolo Bonzini       if (*d && *(d - 2) != 'I' && *d != 'k')
185676cad711SPaolo Bonzini 	info->fprintf_func (info->stream, ",");
185776cad711SPaolo Bonzini     }
185876cad711SPaolo Bonzini 
185976cad711SPaolo Bonzini   return p - buffer;
186076cad711SPaolo Bonzini }
186176cad711SPaolo Bonzini 
186276cad711SPaolo Bonzini /* Print the m68k instruction at address MEMADDR in debugged memory,
186376cad711SPaolo Bonzini    on INFO->STREAM.  Returns length of the instruction, in bytes.  */
186476cad711SPaolo Bonzini 
186576cad711SPaolo Bonzini int
print_insn_m68k(bfd_vma memaddr,disassemble_info * info)186676cad711SPaolo Bonzini print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
186776cad711SPaolo Bonzini {
186876cad711SPaolo Bonzini   int i;
186976cad711SPaolo Bonzini   const char *d;
187076cad711SPaolo Bonzini   unsigned int arch_mask;
187176cad711SPaolo Bonzini   struct private priv;
187276cad711SPaolo Bonzini   bfd_byte *buffer = priv.the_buffer;
187376cad711SPaolo Bonzini   int major_opcode;
187476cad711SPaolo Bonzini   static int numopcodes[16];
187576cad711SPaolo Bonzini   static const struct m68k_opcode **opcodes[16];
187676cad711SPaolo Bonzini   int val;
187776cad711SPaolo Bonzini 
187876cad711SPaolo Bonzini   if (!opcodes[0])
187976cad711SPaolo Bonzini     {
188076cad711SPaolo Bonzini       /* Speed up the matching by sorting the opcode
188176cad711SPaolo Bonzini 	 table on the upper four bits of the opcode.  */
188276cad711SPaolo Bonzini       const struct m68k_opcode **opc_pointer[16];
188376cad711SPaolo Bonzini 
188476cad711SPaolo Bonzini       /* First count how many opcodes are in each of the sixteen buckets.  */
188576cad711SPaolo Bonzini       for (i = 0; i < m68k_numopcodes; i++)
188676cad711SPaolo Bonzini 	numopcodes[(m68k_opcodes[i].opcode >> 28) & 15]++;
188776cad711SPaolo Bonzini 
188876cad711SPaolo Bonzini       /* Then create a sorted table of pointers
188976cad711SPaolo Bonzini 	 that point into the unsorted table.  */
189076cad711SPaolo Bonzini       opc_pointer[0] = malloc (sizeof (struct m68k_opcode *)
189176cad711SPaolo Bonzini                                * m68k_numopcodes);
189276cad711SPaolo Bonzini       opcodes[0] = opc_pointer[0];
189376cad711SPaolo Bonzini 
189476cad711SPaolo Bonzini       for (i = 1; i < 16; i++)
189576cad711SPaolo Bonzini 	{
189676cad711SPaolo Bonzini 	  opc_pointer[i] = opc_pointer[i - 1] + numopcodes[i - 1];
189776cad711SPaolo Bonzini 	  opcodes[i] = opc_pointer[i];
189876cad711SPaolo Bonzini 	}
189976cad711SPaolo Bonzini 
190076cad711SPaolo Bonzini       for (i = 0; i < m68k_numopcodes; i++)
190176cad711SPaolo Bonzini 	*opc_pointer[(m68k_opcodes[i].opcode >> 28) & 15]++ = &m68k_opcodes[i];
190276cad711SPaolo Bonzini     }
190376cad711SPaolo Bonzini 
190476cad711SPaolo Bonzini   info->private_data = (PTR) &priv;
190576cad711SPaolo Bonzini   /* Tell objdump to use two bytes per chunk
190676cad711SPaolo Bonzini      and six bytes per line for displaying raw data.  */
190776cad711SPaolo Bonzini   info->bytes_per_chunk = 2;
190876cad711SPaolo Bonzini   info->bytes_per_line = 6;
190976cad711SPaolo Bonzini   info->display_endian = BFD_ENDIAN_BIG;
191076cad711SPaolo Bonzini   priv.max_fetched = priv.the_buffer;
191176cad711SPaolo Bonzini   priv.insn_start = memaddr;
191276cad711SPaolo Bonzini 
19136ab7e546SPeter Maydell   if (sigsetjmp(priv.bailout, 0) != 0) {
191476cad711SPaolo Bonzini       /* Error return.  */
191576cad711SPaolo Bonzini       return -1;
19166ab7e546SPeter Maydell   }
191776cad711SPaolo Bonzini 
191876cad711SPaolo Bonzini   switch (info->mach)
191976cad711SPaolo Bonzini     {
192076cad711SPaolo Bonzini     default:
192176cad711SPaolo Bonzini     case 0:
192276cad711SPaolo Bonzini       arch_mask = (unsigned int) -1;
192376cad711SPaolo Bonzini       break;
192476cad711SPaolo Bonzini     case bfd_mach_m68000:
192576cad711SPaolo Bonzini       arch_mask = m68000|m68881|m68851;
192676cad711SPaolo Bonzini       break;
192776cad711SPaolo Bonzini     case bfd_mach_m68008:
192876cad711SPaolo Bonzini       arch_mask = m68008|m68881|m68851;
192976cad711SPaolo Bonzini       break;
193076cad711SPaolo Bonzini     case bfd_mach_m68010:
193176cad711SPaolo Bonzini       arch_mask = m68010|m68881|m68851;
193276cad711SPaolo Bonzini       break;
193376cad711SPaolo Bonzini     case bfd_mach_m68020:
193476cad711SPaolo Bonzini       arch_mask = m68020|m68881|m68851;
193576cad711SPaolo Bonzini       break;
193676cad711SPaolo Bonzini     case bfd_mach_m68030:
193776cad711SPaolo Bonzini       arch_mask = m68030|m68881|m68851;
193876cad711SPaolo Bonzini       break;
193976cad711SPaolo Bonzini     case bfd_mach_m68040:
194076cad711SPaolo Bonzini       arch_mask = m68040|m68881|m68851;
194176cad711SPaolo Bonzini       break;
194276cad711SPaolo Bonzini     case bfd_mach_m68060:
194376cad711SPaolo Bonzini       arch_mask = m68060|m68881|m68851;
194476cad711SPaolo Bonzini       break;
194576cad711SPaolo Bonzini     case bfd_mach_mcf5200:
194676cad711SPaolo Bonzini       arch_mask = mcfisa_a;
194776cad711SPaolo Bonzini       break;
194876cad711SPaolo Bonzini     case bfd_mach_mcf521x:
194976cad711SPaolo Bonzini     case bfd_mach_mcf528x:
195076cad711SPaolo Bonzini       arch_mask = mcfisa_a|mcfhwdiv|mcfisa_aa|mcfusp|mcfemac;
195176cad711SPaolo Bonzini       break;
195276cad711SPaolo Bonzini     case bfd_mach_mcf5206e:
195376cad711SPaolo Bonzini       arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
195476cad711SPaolo Bonzini       break;
195576cad711SPaolo Bonzini     case bfd_mach_mcf5249:
195676cad711SPaolo Bonzini       arch_mask = mcfisa_a|mcfhwdiv|mcfemac;
195776cad711SPaolo Bonzini       break;
195876cad711SPaolo Bonzini     case bfd_mach_mcf5307:
195976cad711SPaolo Bonzini       arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
196076cad711SPaolo Bonzini       break;
196176cad711SPaolo Bonzini     case bfd_mach_mcf5407:
196276cad711SPaolo Bonzini       arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac;
196376cad711SPaolo Bonzini       break;
196476cad711SPaolo Bonzini     case bfd_mach_mcf547x:
196576cad711SPaolo Bonzini     case bfd_mach_mcf548x:
196676cad711SPaolo Bonzini     case bfd_mach_mcfv4e:
196776cad711SPaolo Bonzini       arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfemac;
196876cad711SPaolo Bonzini       break;
196976cad711SPaolo Bonzini     }
197076cad711SPaolo Bonzini 
197176cad711SPaolo Bonzini   fetch_data(info, buffer + 2);
197276cad711SPaolo Bonzini   major_opcode = (buffer[0] >> 4) & 15;
197376cad711SPaolo Bonzini 
197476cad711SPaolo Bonzini   for (i = 0; i < numopcodes[major_opcode]; i++)
197576cad711SPaolo Bonzini     {
197676cad711SPaolo Bonzini       const struct m68k_opcode *opc = opcodes[major_opcode][i];
197776cad711SPaolo Bonzini       unsigned long opcode = opc->opcode;
197876cad711SPaolo Bonzini       unsigned long match = opc->match;
197976cad711SPaolo Bonzini 
198076cad711SPaolo Bonzini       if (((0xff & buffer[0] & (match >> 24)) == (0xff & (opcode >> 24)))
198176cad711SPaolo Bonzini 	  && ((0xff & buffer[1] & (match >> 16)) == (0xff & (opcode >> 16)))
198276cad711SPaolo Bonzini 	  /* Only fetch the next two bytes if we need to.  */
198376cad711SPaolo Bonzini 	  && (((0xffff & match) == 0)
198476cad711SPaolo Bonzini 	      ||
198576cad711SPaolo Bonzini               (fetch_data(info, buffer + 4)
198676cad711SPaolo Bonzini 	       && ((0xff & buffer[2] & (match >> 8)) == (0xff & (opcode >> 8)))
198776cad711SPaolo Bonzini 	       && ((0xff & buffer[3] & match) == (0xff & opcode)))
198876cad711SPaolo Bonzini 	      )
198976cad711SPaolo Bonzini 	  && (opc->arch & arch_mask) != 0)
199076cad711SPaolo Bonzini 	{
199176cad711SPaolo Bonzini 	  /* Don't use for printout the variants of divul and divsl
199276cad711SPaolo Bonzini 	     that have the same register number in two places.
199376cad711SPaolo Bonzini 	     The more general variants will match instead.  */
199476cad711SPaolo Bonzini 	  for (d = opc->args; *d; d += 2)
199576cad711SPaolo Bonzini 	    if (d[1] == 'D')
199676cad711SPaolo Bonzini 	      break;
199776cad711SPaolo Bonzini 
199876cad711SPaolo Bonzini 	  /* Don't use for printout the variants of most floating
199976cad711SPaolo Bonzini 	     point coprocessor instructions which use the same
200076cad711SPaolo Bonzini 	     register number in two places, as above.  */
200176cad711SPaolo Bonzini 	  if (*d == '\0')
200276cad711SPaolo Bonzini 	    for (d = opc->args; *d; d += 2)
200376cad711SPaolo Bonzini 	      if (d[1] == 't')
200476cad711SPaolo Bonzini 		break;
200576cad711SPaolo Bonzini 
200676cad711SPaolo Bonzini 	  /* Don't match fmovel with more than one register;
200776cad711SPaolo Bonzini 	     wait for fmoveml.  */
200876cad711SPaolo Bonzini 	  if (*d == '\0')
200976cad711SPaolo Bonzini 	    {
201076cad711SPaolo Bonzini 	      for (d = opc->args; *d; d += 2)
201176cad711SPaolo Bonzini 		{
201276cad711SPaolo Bonzini 		  if (d[0] == 's' && d[1] == '8')
201376cad711SPaolo Bonzini 		    {
201476cad711SPaolo Bonzini 		      val = fetch_arg (buffer, d[1], 3, info);
201576cad711SPaolo Bonzini 		      if ((val & (val - 1)) != 0)
201676cad711SPaolo Bonzini 			break;
201776cad711SPaolo Bonzini 		    }
201876cad711SPaolo Bonzini 		}
201976cad711SPaolo Bonzini 	    }
202076cad711SPaolo Bonzini 
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 
203576cad711SPaolo Bonzini 	  if (*d == '\0')
203676cad711SPaolo Bonzini 	    if ((val = match_insn_m68k (memaddr, info, opc, & priv)))
203776cad711SPaolo Bonzini 	      return val;
203876cad711SPaolo Bonzini 	}
203976cad711SPaolo Bonzini     }
204076cad711SPaolo Bonzini 
204176cad711SPaolo Bonzini   /* Handle undefined instructions.  */
204276cad711SPaolo Bonzini   info->fprintf_func (info->stream, "0%o", (buffer[0] << 8) + buffer[1]);
204376cad711SPaolo Bonzini   return 2;
204476cad711SPaolo Bonzini }
204576cad711SPaolo Bonzini /* **** End of m68k-dis.c */
204676cad711SPaolo Bonzini /* **** m68k-opc.h from sourceware.org CVS 2005-08-14.  */
204776cad711SPaolo Bonzini /* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
204876cad711SPaolo Bonzini    Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
204976cad711SPaolo Bonzini    2000, 2001, 2003, 2004, 2005
205076cad711SPaolo Bonzini    Free Software Foundation, Inc.
205176cad711SPaolo Bonzini 
205276cad711SPaolo Bonzini    This file is part of GDB, GAS, and the GNU binutils.
205376cad711SPaolo Bonzini 
205476cad711SPaolo Bonzini    GDB, GAS, and the GNU binutils are free software; you can redistribute
205576cad711SPaolo Bonzini    them and/or modify them under the terms of the GNU General Public
205676cad711SPaolo Bonzini    License as published by the Free Software Foundation; either version
205776cad711SPaolo Bonzini    1, or (at your option) any later version.
205876cad711SPaolo Bonzini 
205976cad711SPaolo Bonzini    GDB, GAS, and the GNU binutils are distributed in the hope that they
206076cad711SPaolo Bonzini    will be useful, but WITHOUT ANY WARRANTY; without even the implied
206176cad711SPaolo Bonzini    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
206276cad711SPaolo Bonzini    the GNU General Public License for more details.
206376cad711SPaolo Bonzini 
206476cad711SPaolo Bonzini    You should have received a copy of the GNU General Public License
206576cad711SPaolo Bonzini    along with this file; see the file COPYING.  If not,
206676cad711SPaolo Bonzini    see <http://www.gnu.org/licenses/>.  */
206776cad711SPaolo Bonzini 
206876cad711SPaolo Bonzini #define one(x) ((unsigned int) (x) << 16)
206976cad711SPaolo Bonzini #define two(x, y) (((unsigned int) (x) << 16) + (y))
207076cad711SPaolo Bonzini 
207176cad711SPaolo Bonzini /* The assembler requires that all instances of the same mnemonic must
207276cad711SPaolo Bonzini    be consecutive.  If they aren't, the assembler will bomb at
207376cad711SPaolo Bonzini    runtime.  */
207476cad711SPaolo Bonzini 
207576cad711SPaolo Bonzini const struct m68k_opcode m68k_opcodes[] =
207676cad711SPaolo Bonzini {
207776cad711SPaolo Bonzini {"abcd", 2,	one(0140400),	one(0170770), "DsDd", m68000up },
207876cad711SPaolo Bonzini {"abcd", 2,	one(0140410),	one(0170770), "-s-d", m68000up },
207976cad711SPaolo Bonzini 
208076cad711SPaolo Bonzini {"addaw", 2,	one(0150300),	one(0170700), "*wAd", m68000up },
208176cad711SPaolo Bonzini {"addal", 2,	one(0150700),	one(0170700), "*lAd", m68000up | mcfisa_a },
208276cad711SPaolo Bonzini 
208376cad711SPaolo Bonzini {"addib", 4,	one(0003000),	one(0177700), "#b$s", m68000up },
208476cad711SPaolo Bonzini {"addiw", 4,	one(0003100),	one(0177700), "#w$s", m68000up },
208576cad711SPaolo Bonzini {"addil", 6,	one(0003200),	one(0177700), "#l$s", m68000up },
208676cad711SPaolo Bonzini {"addil", 6,	one(0003200),	one(0177700), "#lDs", mcfisa_a },
208776cad711SPaolo Bonzini 
208876cad711SPaolo Bonzini {"addqb", 2,	one(0050000),	one(0170700), "Qd$b", m68000up },
208976cad711SPaolo Bonzini {"addqw", 2,	one(0050100),	one(0170700), "Qd%w", m68000up },
209076cad711SPaolo Bonzini {"addql", 2,	one(0050200),	one(0170700), "Qd%l", m68000up | mcfisa_a },
209176cad711SPaolo Bonzini 
209276cad711SPaolo Bonzini /* The add opcode can generate the adda, addi, and addq instructions.  */
209376cad711SPaolo Bonzini {"addb", 2,	one(0050000),	one(0170700), "Qd$b", m68000up },
209476cad711SPaolo Bonzini {"addb", 4,	one(0003000),	one(0177700), "#b$s", m68000up },
209576cad711SPaolo Bonzini {"addb", 2,	one(0150000),	one(0170700), ";bDd", m68000up },
209676cad711SPaolo Bonzini {"addb", 2,	one(0150400),	one(0170700), "Dd~b", m68000up },
209776cad711SPaolo Bonzini {"addw", 2,	one(0050100),	one(0170700), "Qd%w", m68000up },
209876cad711SPaolo Bonzini {"addw", 2,	one(0150300),	one(0170700), "*wAd", m68000up },
209976cad711SPaolo Bonzini {"addw", 4,	one(0003100),	one(0177700), "#w$s", m68000up },
210076cad711SPaolo Bonzini {"addw", 2,	one(0150100),	one(0170700), "*wDd", m68000up },
210176cad711SPaolo Bonzini {"addw", 2,	one(0150500),	one(0170700), "Dd~w", m68000up },
210276cad711SPaolo Bonzini {"addl", 2,	one(0050200),	one(0170700), "Qd%l", m68000up | mcfisa_a },
210376cad711SPaolo Bonzini {"addl", 6,	one(0003200),	one(0177700), "#l$s", m68000up },
210476cad711SPaolo Bonzini {"addl", 6,	one(0003200),	one(0177700), "#lDs", mcfisa_a },
210576cad711SPaolo Bonzini {"addl", 2,	one(0150700),	one(0170700), "*lAd", m68000up | mcfisa_a },
210676cad711SPaolo Bonzini {"addl", 2,	one(0150200),	one(0170700), "*lDd", m68000up | mcfisa_a },
210776cad711SPaolo Bonzini {"addl", 2,	one(0150600),	one(0170700), "Dd~l", m68000up | mcfisa_a },
210876cad711SPaolo Bonzini 
210976cad711SPaolo Bonzini {"addxb", 2,	one(0150400),	one(0170770), "DsDd", m68000up },
211076cad711SPaolo Bonzini {"addxb", 2,	one(0150410),	one(0170770), "-s-d", m68000up },
211176cad711SPaolo Bonzini {"addxw", 2,	one(0150500),	one(0170770), "DsDd", m68000up },
211276cad711SPaolo Bonzini {"addxw", 2,	one(0150510),	one(0170770), "-s-d", m68000up },
211376cad711SPaolo Bonzini {"addxl", 2,	one(0150600),	one(0170770), "DsDd", m68000up | mcfisa_a },
211476cad711SPaolo Bonzini {"addxl", 2,	one(0150610),	one(0170770), "-s-d", m68000up },
211576cad711SPaolo Bonzini 
211676cad711SPaolo Bonzini {"andib", 4,	one(0001000),	one(0177700), "#b$s", m68000up },
211776cad711SPaolo Bonzini {"andib", 4,	one(0001074),	one(0177777), "#bCs", m68000up },
211876cad711SPaolo Bonzini {"andiw", 4,	one(0001100),	one(0177700), "#w$s", m68000up },
211976cad711SPaolo Bonzini {"andiw", 4,	one(0001174),	one(0177777), "#wSs", m68000up },
212076cad711SPaolo Bonzini {"andil", 6,	one(0001200),	one(0177700), "#l$s", m68000up },
212176cad711SPaolo Bonzini {"andil", 6,	one(0001200),	one(0177700), "#lDs", mcfisa_a },
212276cad711SPaolo Bonzini {"andi", 4,	one(0001100),	one(0177700), "#w$s", m68000up },
212376cad711SPaolo Bonzini {"andi", 4,	one(0001074),	one(0177777), "#bCs", m68000up },
212476cad711SPaolo Bonzini {"andi", 4,	one(0001174),	one(0177777), "#wSs", m68000up },
212576cad711SPaolo Bonzini 
212676cad711SPaolo Bonzini /* The and opcode can generate the andi instruction.  */
212776cad711SPaolo Bonzini {"andb", 4,	one(0001000),	one(0177700), "#b$s", m68000up },
212876cad711SPaolo Bonzini {"andb", 4,	one(0001074),	one(0177777), "#bCs", m68000up },
212976cad711SPaolo Bonzini {"andb", 2,	one(0140000),	one(0170700), ";bDd", m68000up },
213076cad711SPaolo Bonzini {"andb", 2,	one(0140400),	one(0170700), "Dd~b", m68000up },
213176cad711SPaolo Bonzini {"andw", 4,	one(0001100),	one(0177700), "#w$s", m68000up },
213276cad711SPaolo Bonzini {"andw", 4,	one(0001174),	one(0177777), "#wSs", m68000up },
213376cad711SPaolo Bonzini {"andw", 2,	one(0140100),	one(0170700), ";wDd", m68000up },
213476cad711SPaolo Bonzini {"andw", 2,	one(0140500),	one(0170700), "Dd~w", m68000up },
213576cad711SPaolo Bonzini {"andl", 6,	one(0001200),	one(0177700), "#l$s", m68000up },
213676cad711SPaolo Bonzini {"andl", 6,	one(0001200),	one(0177700), "#lDs", mcfisa_a },
213776cad711SPaolo Bonzini {"andl", 2,	one(0140200),	one(0170700), ";lDd", m68000up | mcfisa_a },
213876cad711SPaolo Bonzini {"andl", 2,	one(0140600),	one(0170700), "Dd~l", m68000up | mcfisa_a },
213976cad711SPaolo Bonzini {"and", 4,	one(0001100),	one(0177700), "#w$w", m68000up },
214076cad711SPaolo Bonzini {"and", 4,	one(0001074),	one(0177777), "#bCs", m68000up },
214176cad711SPaolo Bonzini {"and", 4,	one(0001174),	one(0177777), "#wSs", m68000up },
214276cad711SPaolo Bonzini {"and", 2,	one(0140100),	one(0170700), ";wDd", m68000up },
214376cad711SPaolo Bonzini {"and", 2,	one(0140500),	one(0170700), "Dd~w", m68000up },
214476cad711SPaolo Bonzini 
214576cad711SPaolo Bonzini {"aslb", 2,	one(0160400),	one(0170770), "QdDs", m68000up },
214676cad711SPaolo Bonzini {"aslb", 2,	one(0160440),	one(0170770), "DdDs", m68000up },
214776cad711SPaolo Bonzini {"aslw", 2,	one(0160500),	one(0170770), "QdDs", m68000up },
214876cad711SPaolo Bonzini {"aslw", 2,	one(0160540),	one(0170770), "DdDs", m68000up },
214976cad711SPaolo Bonzini {"aslw", 2,	one(0160700),	one(0177700), "~s",   m68000up },
215076cad711SPaolo Bonzini {"asll", 2,	one(0160600),	one(0170770), "QdDs", m68000up | mcfisa_a },
215176cad711SPaolo Bonzini {"asll", 2,	one(0160640),	one(0170770), "DdDs", m68000up | mcfisa_a },
215276cad711SPaolo Bonzini 
215376cad711SPaolo Bonzini {"asrb", 2,	one(0160000),	one(0170770), "QdDs", m68000up },
215476cad711SPaolo Bonzini {"asrb", 2,	one(0160040),	one(0170770), "DdDs", m68000up },
215576cad711SPaolo Bonzini {"asrw", 2,	one(0160100),	one(0170770), "QdDs", m68000up },
215676cad711SPaolo Bonzini {"asrw", 2,	one(0160140),	one(0170770), "DdDs", m68000up },
215776cad711SPaolo Bonzini {"asrw", 2,	one(0160300),	one(0177700), "~s",   m68000up },
215876cad711SPaolo Bonzini {"asrl", 2,	one(0160200),	one(0170770), "QdDs", m68000up | mcfisa_a },
215976cad711SPaolo Bonzini {"asrl", 2,	one(0160240),	one(0170770), "DdDs", m68000up | mcfisa_a },
216076cad711SPaolo Bonzini 
216176cad711SPaolo Bonzini {"bhiw", 2,	one(0061000),	one(0177777), "BW", m68000up | mcfisa_a },
216276cad711SPaolo Bonzini {"blsw", 2,	one(0061400),	one(0177777), "BW", m68000up | mcfisa_a },
216376cad711SPaolo Bonzini {"bccw", 2,	one(0062000),	one(0177777), "BW", m68000up | mcfisa_a },
216476cad711SPaolo Bonzini {"bcsw", 2,	one(0062400),	one(0177777), "BW", m68000up | mcfisa_a },
216576cad711SPaolo Bonzini {"bnew", 2,	one(0063000),	one(0177777), "BW", m68000up | mcfisa_a },
216676cad711SPaolo Bonzini {"beqw", 2,	one(0063400),	one(0177777), "BW", m68000up | mcfisa_a },
216776cad711SPaolo Bonzini {"bvcw", 2,	one(0064000),	one(0177777), "BW", m68000up | mcfisa_a },
216876cad711SPaolo Bonzini {"bvsw", 2,	one(0064400),	one(0177777), "BW", m68000up | mcfisa_a },
216976cad711SPaolo Bonzini {"bplw", 2,	one(0065000),	one(0177777), "BW", m68000up | mcfisa_a },
217076cad711SPaolo Bonzini {"bmiw", 2,	one(0065400),	one(0177777), "BW", m68000up | mcfisa_a },
217176cad711SPaolo Bonzini {"bgew", 2,	one(0066000),	one(0177777), "BW", m68000up | mcfisa_a },
217276cad711SPaolo Bonzini {"bltw", 2,	one(0066400),	one(0177777), "BW", m68000up | mcfisa_a },
217376cad711SPaolo Bonzini {"bgtw", 2,	one(0067000),	one(0177777), "BW", m68000up | mcfisa_a },
217476cad711SPaolo Bonzini {"blew", 2,	one(0067400),	one(0177777), "BW", m68000up | mcfisa_a },
217576cad711SPaolo Bonzini 
217676cad711SPaolo Bonzini {"bhil", 2,	one(0061377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
217776cad711SPaolo Bonzini {"blsl", 2,	one(0061777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
217876cad711SPaolo Bonzini {"bccl", 2,	one(0062377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
217976cad711SPaolo Bonzini {"bcsl", 2,	one(0062777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218076cad711SPaolo Bonzini {"bnel", 2,	one(0063377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218176cad711SPaolo Bonzini {"beql", 2,	one(0063777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218276cad711SPaolo Bonzini {"bvcl", 2,	one(0064377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218376cad711SPaolo Bonzini {"bvsl", 2,	one(0064777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218476cad711SPaolo Bonzini {"bpll", 2,	one(0065377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218576cad711SPaolo Bonzini {"bmil", 2,	one(0065777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218676cad711SPaolo Bonzini {"bgel", 2,	one(0066377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218776cad711SPaolo Bonzini {"bltl", 2,	one(0066777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218876cad711SPaolo Bonzini {"bgtl", 2,	one(0067377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
218976cad711SPaolo Bonzini {"blel", 2,	one(0067777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
219076cad711SPaolo Bonzini 
219176cad711SPaolo Bonzini {"bhis", 2,	one(0061000),	one(0177400), "BB", m68000up | mcfisa_a },
219276cad711SPaolo Bonzini {"blss", 2,	one(0061400),	one(0177400), "BB", m68000up | mcfisa_a },
219376cad711SPaolo Bonzini {"bccs", 2,	one(0062000),	one(0177400), "BB", m68000up | mcfisa_a },
219476cad711SPaolo Bonzini {"bcss", 2,	one(0062400),	one(0177400), "BB", m68000up | mcfisa_a },
219576cad711SPaolo Bonzini {"bnes", 2,	one(0063000),	one(0177400), "BB", m68000up | mcfisa_a },
219676cad711SPaolo Bonzini {"beqs", 2,	one(0063400),	one(0177400), "BB", m68000up | mcfisa_a },
219776cad711SPaolo Bonzini {"bvcs", 2,	one(0064000),	one(0177400), "BB", m68000up | mcfisa_a },
219876cad711SPaolo Bonzini {"bvss", 2,	one(0064400),	one(0177400), "BB", m68000up | mcfisa_a },
219976cad711SPaolo Bonzini {"bpls", 2,	one(0065000),	one(0177400), "BB", m68000up | mcfisa_a },
220076cad711SPaolo Bonzini {"bmis", 2,	one(0065400),	one(0177400), "BB", m68000up | mcfisa_a },
220176cad711SPaolo Bonzini {"bges", 2,	one(0066000),	one(0177400), "BB", m68000up | mcfisa_a },
220276cad711SPaolo Bonzini {"blts", 2,	one(0066400),	one(0177400), "BB", m68000up | mcfisa_a },
220376cad711SPaolo Bonzini {"bgts", 2,	one(0067000),	one(0177400), "BB", m68000up | mcfisa_a },
220476cad711SPaolo Bonzini {"bles", 2,	one(0067400),	one(0177400), "BB", m68000up | mcfisa_a },
220576cad711SPaolo Bonzini 
220676cad711SPaolo Bonzini {"jhi", 2,	one(0061000),	one(0177400), "Bg", m68000up | mcfisa_a },
220776cad711SPaolo Bonzini {"jls", 2,	one(0061400),	one(0177400), "Bg", m68000up | mcfisa_a },
220876cad711SPaolo Bonzini {"jcc", 2,	one(0062000),	one(0177400), "Bg", m68000up | mcfisa_a },
220976cad711SPaolo Bonzini {"jcs", 2,	one(0062400),	one(0177400), "Bg", m68000up | mcfisa_a },
221076cad711SPaolo Bonzini {"jne", 2,	one(0063000),	one(0177400), "Bg", m68000up | mcfisa_a },
221176cad711SPaolo Bonzini {"jeq", 2,	one(0063400),	one(0177400), "Bg", m68000up | mcfisa_a },
221276cad711SPaolo Bonzini {"jvc", 2,	one(0064000),	one(0177400), "Bg", m68000up | mcfisa_a },
221376cad711SPaolo Bonzini {"jvs", 2,	one(0064400),	one(0177400), "Bg", m68000up | mcfisa_a },
221476cad711SPaolo Bonzini {"jpl", 2,	one(0065000),	one(0177400), "Bg", m68000up | mcfisa_a },
221576cad711SPaolo Bonzini {"jmi", 2,	one(0065400),	one(0177400), "Bg", m68000up | mcfisa_a },
221676cad711SPaolo Bonzini {"jge", 2,	one(0066000),	one(0177400), "Bg", m68000up | mcfisa_a },
221776cad711SPaolo Bonzini {"jlt", 2,	one(0066400),	one(0177400), "Bg", m68000up | mcfisa_a },
221876cad711SPaolo Bonzini {"jgt", 2,	one(0067000),	one(0177400), "Bg", m68000up | mcfisa_a },
221976cad711SPaolo Bonzini {"jle", 2,	one(0067400),	one(0177400), "Bg", m68000up | mcfisa_a },
222076cad711SPaolo Bonzini 
222176cad711SPaolo Bonzini {"bchg", 2,	one(0000500),	one(0170700), "Dd$s", m68000up | mcfisa_a },
222276cad711SPaolo Bonzini {"bchg", 4,	one(0004100),	one(0177700), "#b$s", m68000up },
222376cad711SPaolo Bonzini {"bchg", 4,	one(0004100),	one(0177700), "#bqs", mcfisa_a },
222476cad711SPaolo Bonzini 
222576cad711SPaolo Bonzini {"bclr", 2,	one(0000600),	one(0170700), "Dd$s", m68000up | mcfisa_a },
222676cad711SPaolo Bonzini {"bclr", 4,	one(0004200),	one(0177700), "#b$s", m68000up },
222776cad711SPaolo Bonzini {"bclr", 4,	one(0004200),	one(0177700), "#bqs", mcfisa_a },
222876cad711SPaolo Bonzini 
222976cad711SPaolo Bonzini {"bfchg", 4,	two(0165300, 0), two(0177700, 0170000),	"?sO2O3",   m68020up },
223076cad711SPaolo Bonzini {"bfclr", 4,	two(0166300, 0), two(0177700, 0170000),	"?sO2O3",   m68020up },
223176cad711SPaolo Bonzini {"bfexts", 4,	two(0165700, 0), two(0177700, 0100000),	"/sO2O3D1", m68020up },
223276cad711SPaolo Bonzini {"bfextu", 4,	two(0164700, 0), two(0177700, 0100000),	"/sO2O3D1", m68020up },
223376cad711SPaolo Bonzini {"bfffo", 4,	two(0166700, 0), two(0177700, 0100000),	"/sO2O3D1", m68020up },
223476cad711SPaolo Bonzini {"bfins", 4,	two(0167700, 0), two(0177700, 0100000),	"D1?sO2O3", m68020up },
223576cad711SPaolo Bonzini {"bfset", 4,	two(0167300, 0), two(0177700, 0170000),	"?sO2O3",   m68020up },
223676cad711SPaolo Bonzini {"bftst", 4,	two(0164300, 0), two(0177700, 0170000),	"/sO2O3",   m68020up },
223776cad711SPaolo Bonzini 
223876cad711SPaolo Bonzini {"bgnd", 2,	one(0045372),	one(0177777), "", cpu32 },
223976cad711SPaolo Bonzini 
224076cad711SPaolo Bonzini {"bitrev", 2,	one(0000300),	one(0177770), "Ds", mcfisa_aa},
224176cad711SPaolo Bonzini 
224276cad711SPaolo Bonzini {"bkpt", 2,	one(0044110),	one(0177770), "ts", m68010up },
224376cad711SPaolo Bonzini 
224476cad711SPaolo Bonzini {"braw", 2,	one(0060000),	one(0177777), "BW", m68000up | mcfisa_a },
224576cad711SPaolo Bonzini {"bral", 2,	one(0060377),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
224676cad711SPaolo Bonzini {"bras", 2,	one(0060000),	one(0177400), "BB", m68000up | mcfisa_a },
224776cad711SPaolo Bonzini 
224876cad711SPaolo Bonzini {"bset", 2,	one(0000700),	one(0170700), "Dd$s", m68000up | mcfisa_a },
224976cad711SPaolo Bonzini {"bset", 2,	one(0000700),	one(0170700), "Ddvs", mcfisa_a },
225076cad711SPaolo Bonzini {"bset", 4,	one(0004300),	one(0177700), "#b$s", m68000up },
225176cad711SPaolo Bonzini {"bset", 4,	one(0004300),	one(0177700), "#bqs", mcfisa_a },
225276cad711SPaolo Bonzini 
225376cad711SPaolo Bonzini {"bsrw", 2,	one(0060400),	one(0177777), "BW", m68000up | mcfisa_a },
225476cad711SPaolo Bonzini {"bsrl", 2,	one(0060777),	one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
225576cad711SPaolo Bonzini {"bsrs", 2,	one(0060400),	one(0177400), "BB", m68000up | mcfisa_a },
225676cad711SPaolo Bonzini 
225776cad711SPaolo Bonzini {"btst", 2,	one(0000400),	one(0170700), "Dd;b", m68000up | mcfisa_a },
225876cad711SPaolo Bonzini {"btst", 4,	one(0004000),	one(0177700), "#b@s", m68000up },
225976cad711SPaolo Bonzini {"btst", 4,	one(0004000),	one(0177700), "#bqs", mcfisa_a },
226076cad711SPaolo Bonzini 
226176cad711SPaolo Bonzini {"byterev", 2,	one(0001300),	one(0177770), "Ds", mcfisa_aa},
226276cad711SPaolo Bonzini 
226376cad711SPaolo Bonzini {"callm", 4,	one(0003300),	one(0177700), "#b!s", m68020 },
226476cad711SPaolo Bonzini 
226576cad711SPaolo Bonzini {"cas2w", 6,    two(0006374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up },
226676cad711SPaolo Bonzini {"cas2w", 6,    two(0006374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up },
226776cad711SPaolo Bonzini {"cas2l", 6,    two(0007374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up },
226876cad711SPaolo Bonzini {"cas2l", 6,    two(0007374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up },
226976cad711SPaolo Bonzini 
227076cad711SPaolo Bonzini {"casb", 4,	two(0005300, 0), two(0177700, 0177070),	"D3D2~s", m68020up },
227176cad711SPaolo Bonzini {"casw", 4,	two(0006300, 0), two(0177700, 0177070),	"D3D2~s", m68020up },
227276cad711SPaolo Bonzini {"casl", 4,	two(0007300, 0), two(0177700, 0177070),	"D3D2~s", m68020up },
227376cad711SPaolo Bonzini 
227476cad711SPaolo Bonzini {"chk2b", 4, 	two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
227576cad711SPaolo Bonzini {"chk2w", 4, 	two(0001300,0004000),	two(0177700,07777), "!sR1", m68020up | cpu32 },
227676cad711SPaolo Bonzini {"chk2l", 4, 	two(0002300,0004000),	two(0177700,07777), "!sR1", m68020up | cpu32 },
227776cad711SPaolo Bonzini 
227876cad711SPaolo Bonzini {"chkl", 2,	one(0040400),		one(0170700), ";lDd", m68000up },
227976cad711SPaolo Bonzini {"chkw", 2,	one(0040600),		one(0170700), ";wDd", m68000up },
228076cad711SPaolo Bonzini 
228176cad711SPaolo Bonzini #define SCOPE_LINE (0x1 << 3)
228276cad711SPaolo Bonzini #define SCOPE_PAGE (0x2 << 3)
228376cad711SPaolo Bonzini #define SCOPE_ALL  (0x3 << 3)
228476cad711SPaolo Bonzini 
228576cad711SPaolo Bonzini {"cinva", 2,	one(0xf400|SCOPE_ALL),  one(0xff38), "ce",   m68040up },
228676cad711SPaolo Bonzini {"cinvl", 2,	one(0xf400|SCOPE_LINE), one(0xff38), "ceas", m68040up },
228776cad711SPaolo Bonzini {"cinvp", 2,	one(0xf400|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
228876cad711SPaolo Bonzini 
228976cad711SPaolo Bonzini {"cpusha", 2,	one(0xf420|SCOPE_ALL),  one(0xff38), "ce",   m68040up },
229076cad711SPaolo Bonzini {"cpushl", 2,	one(0xf420|SCOPE_LINE), one(0xff38), "ceas", m68040up | mcfisa_a },
229176cad711SPaolo Bonzini {"cpushp", 2,	one(0xf420|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
229276cad711SPaolo Bonzini 
229376cad711SPaolo Bonzini #undef SCOPE_LINE
229476cad711SPaolo Bonzini #undef SCOPE_PAGE
229576cad711SPaolo Bonzini #undef SCOPE_ALL
229676cad711SPaolo Bonzini 
229776cad711SPaolo Bonzini {"clrb", 2,	one(0041000),	one(0177700), "$s", m68000up | mcfisa_a },
229876cad711SPaolo Bonzini {"clrw", 2,	one(0041100),	one(0177700), "$s", m68000up | mcfisa_a },
229976cad711SPaolo Bonzini {"clrl", 2,	one(0041200),	one(0177700), "$s", m68000up | mcfisa_a },
230076cad711SPaolo Bonzini 
230176cad711SPaolo Bonzini {"cmp2b", 4,	two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
230276cad711SPaolo Bonzini {"cmp2w", 4,	two(0001300,0),	two(0177700,07777), "!sR1", m68020up | cpu32 },
230376cad711SPaolo Bonzini {"cmp2l", 4,	two(0002300,0),	two(0177700,07777), "!sR1", m68020up | cpu32 },
230476cad711SPaolo Bonzini 
230576cad711SPaolo Bonzini {"cmpaw", 2,	one(0130300),	one(0170700), "*wAd", m68000up },
230676cad711SPaolo Bonzini {"cmpal", 2,	one(0130700),	one(0170700), "*lAd", m68000up | mcfisa_a },
230776cad711SPaolo Bonzini 
230876cad711SPaolo Bonzini {"cmpib", 4,	one(0006000),	one(0177700), "#b@s", m68000up },
230976cad711SPaolo Bonzini {"cmpib", 4,	one(0006000),	one(0177700), "#bDs", mcfisa_b },
231076cad711SPaolo Bonzini {"cmpiw", 4,	one(0006100),	one(0177700), "#w@s", m68000up },
231176cad711SPaolo Bonzini {"cmpiw", 4,	one(0006100),	one(0177700), "#wDs", mcfisa_b },
231276cad711SPaolo Bonzini {"cmpil", 6,	one(0006200),	one(0177700), "#l@s", m68000up },
231376cad711SPaolo Bonzini {"cmpil", 6,	one(0006200),	one(0177700), "#lDs", mcfisa_a },
231476cad711SPaolo Bonzini 
231576cad711SPaolo Bonzini {"cmpmb", 2,	one(0130410),	one(0170770), "+s+d", m68000up },
231676cad711SPaolo Bonzini {"cmpmw", 2,	one(0130510),	one(0170770), "+s+d", m68000up },
231776cad711SPaolo Bonzini {"cmpml", 2,	one(0130610),	one(0170770), "+s+d", m68000up },
231876cad711SPaolo Bonzini 
231976cad711SPaolo Bonzini /* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions.  */
232076cad711SPaolo Bonzini {"cmpb", 4,	one(0006000),	one(0177700), "#b@s", m68000up },
232176cad711SPaolo Bonzini {"cmpb", 4,	one(0006000),	one(0177700), "#bDs", mcfisa_b },
232276cad711SPaolo Bonzini {"cmpb", 2,	one(0130410),	one(0170770), "+s+d", m68000up },
232376cad711SPaolo Bonzini {"cmpb", 2,	one(0130000),	one(0170700), ";bDd", m68000up },
232476cad711SPaolo Bonzini {"cmpb", 2,	one(0130000),	one(0170700), "*bDd", mcfisa_b },
232576cad711SPaolo Bonzini {"cmpw", 2,	one(0130300),	one(0170700), "*wAd", m68000up },
232676cad711SPaolo Bonzini {"cmpw", 4,	one(0006100),	one(0177700), "#w@s", m68000up },
232776cad711SPaolo Bonzini {"cmpw", 4,	one(0006100),	one(0177700), "#wDs", mcfisa_b },
232876cad711SPaolo Bonzini {"cmpw", 2,	one(0130510),	one(0170770), "+s+d", m68000up },
232976cad711SPaolo Bonzini {"cmpw", 2,	one(0130100),	one(0170700), "*wDd", m68000up | mcfisa_b },
233076cad711SPaolo Bonzini {"cmpl", 2,	one(0130700),	one(0170700), "*lAd", m68000up | mcfisa_a },
233176cad711SPaolo Bonzini {"cmpl", 6,	one(0006200),	one(0177700), "#l@s", m68000up },
233276cad711SPaolo Bonzini {"cmpl", 6,	one(0006200),	one(0177700), "#lDs", mcfisa_a },
233376cad711SPaolo Bonzini {"cmpl", 2,	one(0130610),	one(0170770), "+s+d", m68000up },
233476cad711SPaolo Bonzini {"cmpl", 2,	one(0130200),	one(0170700), "*lDd", m68000up | mcfisa_a },
233576cad711SPaolo Bonzini 
233676cad711SPaolo Bonzini {"dbcc", 2,	one(0052310),	one(0177770), "DsBw", m68000up },
233776cad711SPaolo Bonzini {"dbcs", 2,	one(0052710),	one(0177770), "DsBw", m68000up },
233876cad711SPaolo Bonzini {"dbeq", 2,	one(0053710),	one(0177770), "DsBw", m68000up },
233976cad711SPaolo Bonzini {"dbf", 2,	one(0050710),	one(0177770), "DsBw", m68000up },
234076cad711SPaolo Bonzini {"dbge", 2,	one(0056310),	one(0177770), "DsBw", m68000up },
234176cad711SPaolo Bonzini {"dbgt", 2,	one(0057310),	one(0177770), "DsBw", m68000up },
234276cad711SPaolo Bonzini {"dbhi", 2,	one(0051310),	one(0177770), "DsBw", m68000up },
234376cad711SPaolo Bonzini {"dble", 2,	one(0057710),	one(0177770), "DsBw", m68000up },
234476cad711SPaolo Bonzini {"dbls", 2,	one(0051710),	one(0177770), "DsBw", m68000up },
234576cad711SPaolo Bonzini {"dblt", 2,	one(0056710),	one(0177770), "DsBw", m68000up },
234676cad711SPaolo Bonzini {"dbmi", 2,	one(0055710),	one(0177770), "DsBw", m68000up },
234776cad711SPaolo Bonzini {"dbne", 2,	one(0053310),	one(0177770), "DsBw", m68000up },
234876cad711SPaolo Bonzini {"dbpl", 2,	one(0055310),	one(0177770), "DsBw", m68000up },
234976cad711SPaolo Bonzini {"dbt", 2,	one(0050310),	one(0177770), "DsBw", m68000up },
235076cad711SPaolo Bonzini {"dbvc", 2,	one(0054310),	one(0177770), "DsBw", m68000up },
235176cad711SPaolo Bonzini {"dbvs", 2,	one(0054710),	one(0177770), "DsBw", m68000up },
235276cad711SPaolo Bonzini 
235376cad711SPaolo Bonzini {"divsw", 2,	one(0100700),	one(0170700), ";wDd", m68000up | mcfhwdiv },
235476cad711SPaolo Bonzini 
235576cad711SPaolo Bonzini {"divsl", 4, 	two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
235676cad711SPaolo Bonzini {"divsl", 4, 	two(0046100,0004000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
235776cad711SPaolo Bonzini {"divsl", 4, 	two(0046100,0004000),two(0177700,0107770),"qsDD",   mcfhwdiv },
235876cad711SPaolo Bonzini 
235976cad711SPaolo Bonzini {"divsll", 4, 	two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
236076cad711SPaolo Bonzini {"divsll", 4, 	two(0046100,0004000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
236176cad711SPaolo Bonzini 
236276cad711SPaolo Bonzini {"divuw", 2,	one(0100300),		one(0170700), ";wDd", m68000up | mcfhwdiv },
236376cad711SPaolo Bonzini 
236476cad711SPaolo Bonzini {"divul", 4,	two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
236576cad711SPaolo Bonzini {"divul", 4,	two(0046100,0000000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
236676cad711SPaolo Bonzini {"divul", 4,	two(0046100,0000000),two(0177700,0107770),"qsDD",   mcfhwdiv },
236776cad711SPaolo Bonzini 
236876cad711SPaolo Bonzini {"divull", 4,	two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
236976cad711SPaolo Bonzini {"divull", 4,	two(0046100,0000000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
237076cad711SPaolo Bonzini 
237176cad711SPaolo Bonzini {"eorib", 4,	one(0005000),	one(0177700), "#b$s", m68000up },
237276cad711SPaolo Bonzini {"eorib", 4,	one(0005074),	one(0177777), "#bCs", m68000up },
237376cad711SPaolo Bonzini {"eoriw", 4,	one(0005100),	one(0177700), "#w$s", m68000up },
237476cad711SPaolo Bonzini {"eoriw", 4,	one(0005174),	one(0177777), "#wSs", m68000up },
237576cad711SPaolo Bonzini {"eoril", 6,	one(0005200),	one(0177700), "#l$s", m68000up },
237676cad711SPaolo Bonzini {"eoril", 6,	one(0005200),	one(0177700), "#lDs", mcfisa_a },
237776cad711SPaolo Bonzini {"eori", 4,	one(0005074),	one(0177777), "#bCs", m68000up },
237876cad711SPaolo Bonzini {"eori", 4,	one(0005174),	one(0177777), "#wSs", m68000up },
237976cad711SPaolo Bonzini {"eori", 4,	one(0005100),	one(0177700), "#w$s", m68000up },
238076cad711SPaolo Bonzini 
238176cad711SPaolo Bonzini /* The eor opcode can generate the eori instruction.  */
238276cad711SPaolo Bonzini {"eorb", 4,	one(0005000),	one(0177700), "#b$s", m68000up },
238376cad711SPaolo Bonzini {"eorb", 4,	one(0005074),	one(0177777), "#bCs", m68000up },
238476cad711SPaolo Bonzini {"eorb", 2,	one(0130400),	one(0170700), "Dd$s", m68000up },
238576cad711SPaolo Bonzini {"eorw", 4,	one(0005100),	one(0177700), "#w$s", m68000up },
238676cad711SPaolo Bonzini {"eorw", 4,	one(0005174),	one(0177777), "#wSs", m68000up },
238776cad711SPaolo Bonzini {"eorw", 2,	one(0130500),	one(0170700), "Dd$s", m68000up },
238876cad711SPaolo Bonzini {"eorl", 6,	one(0005200),	one(0177700), "#l$s", m68000up },
238976cad711SPaolo Bonzini {"eorl", 6,	one(0005200),	one(0177700), "#lDs", mcfisa_a },
239076cad711SPaolo Bonzini {"eorl", 2,	one(0130600),	one(0170700), "Dd$s", m68000up | mcfisa_a },
239176cad711SPaolo Bonzini {"eor", 4,	one(0005074),	one(0177777), "#bCs", m68000up },
239276cad711SPaolo Bonzini {"eor", 4,	one(0005174),	one(0177777), "#wSs", m68000up },
239376cad711SPaolo Bonzini {"eor", 4,	one(0005100),	one(0177700), "#w$s", m68000up },
239476cad711SPaolo Bonzini {"eor", 2,	one(0130500),	one(0170700), "Dd$s", m68000up },
239576cad711SPaolo Bonzini 
239676cad711SPaolo Bonzini {"exg", 2,	one(0140500),	one(0170770), "DdDs", m68000up },
239776cad711SPaolo Bonzini {"exg", 2,	one(0140510),	one(0170770), "AdAs", m68000up },
239876cad711SPaolo Bonzini {"exg", 2,	one(0140610),	one(0170770), "DdAs", m68000up },
239976cad711SPaolo Bonzini {"exg", 2,	one(0140610),	one(0170770), "AsDd", m68000up },
240076cad711SPaolo Bonzini 
240176cad711SPaolo Bonzini {"extw", 2,	one(0044200),	one(0177770), "Ds", m68000up|mcfisa_a },
240276cad711SPaolo Bonzini {"extl", 2,	one(0044300),	one(0177770), "Ds", m68000up|mcfisa_a },
240376cad711SPaolo Bonzini {"extbl", 2,	one(0044700),	one(0177770), "Ds", m68020up|cpu32|mcfisa_a },
240476cad711SPaolo Bonzini 
240576cad711SPaolo Bonzini {"ff1", 2,   	one(0002300), one(0177770), "Ds", mcfisa_aa},
240676cad711SPaolo Bonzini 
240776cad711SPaolo Bonzini /* float stuff starts here */
240876cad711SPaolo Bonzini 
240976cad711SPaolo Bonzini {"fabsb", 4,	two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
241076cad711SPaolo Bonzini {"fabsb", 4,	two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
241176cad711SPaolo Bonzini {"fabsd", 4,	two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
241276cad711SPaolo Bonzini {"fabsd", 4,	two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt", cfloat },
241376cad711SPaolo Bonzini {"fabsd", 4,	two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
241476cad711SPaolo Bonzini {"fabsd", 4,	two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
241576cad711SPaolo Bonzini {"fabsl", 4,	two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
241676cad711SPaolo Bonzini {"fabsl", 4,	two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
241776cad711SPaolo Bonzini {"fabsp", 4,	two(0xF000, 0x4C18), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
241876cad711SPaolo Bonzini {"fabss", 4,	two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", cfloat },
241976cad711SPaolo Bonzini {"fabss", 4,	two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
242076cad711SPaolo Bonzini {"fabsw", 4,	two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
242176cad711SPaolo Bonzini {"fabsw", 4,	two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
242276cad711SPaolo Bonzini {"fabsx", 4,	two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
242376cad711SPaolo Bonzini {"fabsx", 4,	two(0xF000, 0x4818), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
242476cad711SPaolo Bonzini {"fabsx", 4,	two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
242576cad711SPaolo Bonzini 
242676cad711SPaolo Bonzini {"fsabsb", 4,	two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
242776cad711SPaolo Bonzini {"fsabsb", 4,	two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
242876cad711SPaolo Bonzini {"fsabsd", 4,	two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
242976cad711SPaolo Bonzini {"fsabsd", 4,	two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt", cfloat },
243076cad711SPaolo Bonzini {"fsabsd", 4,	two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
243176cad711SPaolo Bonzini {"fsabsd", 4,	two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
243276cad711SPaolo Bonzini {"fsabsl", 4,	two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
243376cad711SPaolo Bonzini {"fsabsl", 4,	two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
243476cad711SPaolo Bonzini {"fsabsp", 4,	two(0xF000, 0x4C58), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
243576cad711SPaolo Bonzini {"fsabss", 4,	two(0xF000, 0x4258), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
243676cad711SPaolo Bonzini {"fsabss", 4,	two(0xF000, 0x4458), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
243776cad711SPaolo Bonzini {"fsabsw", 4,	two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
243876cad711SPaolo Bonzini {"fsabsw", 4,	two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
243976cad711SPaolo Bonzini {"fsabsx", 4,	two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
244076cad711SPaolo Bonzini {"fsabsx", 4,	two(0xF000, 0x4858), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
244176cad711SPaolo Bonzini {"fsabsx", 4,	two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
244276cad711SPaolo Bonzini 
244376cad711SPaolo Bonzini {"fdabsb", 4,	two(0xF000, 0x585C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
244476cad711SPaolo Bonzini {"fdabsb", 4,	two(0xF000, 0x585c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up},
244576cad711SPaolo Bonzini {"fdabsd", 4,	two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
244676cad711SPaolo Bonzini {"fdabsd", 4,	two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiFt", cfloat },
244776cad711SPaolo Bonzini {"fdabsd", 4,	two(0xF000, 0x545C), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
244876cad711SPaolo Bonzini {"fdabsd", 4,	two(0xF000, 0x545c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up},
244976cad711SPaolo Bonzini {"fdabsl", 4,	two(0xF000, 0x405C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
245076cad711SPaolo Bonzini {"fdabsl", 4,	two(0xF000, 0x405c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up},
245176cad711SPaolo Bonzini {"fdabsp", 4,	two(0xF000, 0x4C5c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up},
245276cad711SPaolo Bonzini {"fdabss", 4,	two(0xF000, 0x425C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
245376cad711SPaolo Bonzini {"fdabss", 4,	two(0xF000, 0x445c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up},
245476cad711SPaolo Bonzini {"fdabsw", 4,	two(0xF000, 0x505C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
245576cad711SPaolo Bonzini {"fdabsw", 4,	two(0xF000, 0x505c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up},
245676cad711SPaolo Bonzini {"fdabsx", 4,	two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up},
245776cad711SPaolo Bonzini {"fdabsx", 4,	two(0xF000, 0x485c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up},
245876cad711SPaolo Bonzini {"fdabsx", 4,	two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiFt",   m68040up},
245976cad711SPaolo Bonzini 
246076cad711SPaolo Bonzini {"facosb", 4,	two(0xF000, 0x581C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
246176cad711SPaolo Bonzini {"facosd", 4,	two(0xF000, 0x541C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
246276cad711SPaolo Bonzini {"facosl", 4,	two(0xF000, 0x401C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
246376cad711SPaolo Bonzini {"facosp", 4,	two(0xF000, 0x4C1C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
246476cad711SPaolo Bonzini {"facoss", 4,	two(0xF000, 0x441C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
246576cad711SPaolo Bonzini {"facosw", 4,	two(0xF000, 0x501C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
246676cad711SPaolo Bonzini {"facosx", 4,	two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
246776cad711SPaolo Bonzini {"facosx", 4,	two(0xF000, 0x481C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
246876cad711SPaolo Bonzini {"facosx", 4,	two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
246976cad711SPaolo Bonzini 
247076cad711SPaolo Bonzini {"faddb", 4,	two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
247176cad711SPaolo Bonzini {"faddb", 4,	two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
247276cad711SPaolo Bonzini {"faddd", 4,	two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
247376cad711SPaolo Bonzini {"faddd", 4,	two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
247476cad711SPaolo Bonzini {"faddd", 4,	two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
247576cad711SPaolo Bonzini {"faddd", 4,	two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
247676cad711SPaolo Bonzini {"faddl", 4,	two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
247776cad711SPaolo Bonzini {"faddl", 4,	two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
247876cad711SPaolo Bonzini {"faddp", 4,	two(0xF000, 0x4C22), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
247976cad711SPaolo Bonzini {"fadds", 4,	two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
248076cad711SPaolo Bonzini {"fadds", 4,	two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
248176cad711SPaolo Bonzini {"faddw", 4,	two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
248276cad711SPaolo Bonzini {"faddw", 4,	two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
248376cad711SPaolo Bonzini {"faddx", 4,	two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
248476cad711SPaolo Bonzini {"faddx", 4,	two(0xF000, 0x4822), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
248576cad711SPaolo Bonzini 
248676cad711SPaolo Bonzini {"fsaddb", 4,	two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
248776cad711SPaolo Bonzini {"fsaddb", 4,	two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
248876cad711SPaolo Bonzini {"fsaddd", 4,	two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
248976cad711SPaolo Bonzini {"fsaddd", 4,	two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
249076cad711SPaolo Bonzini {"fsaddd", 4,	two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
249176cad711SPaolo Bonzini {"fsaddl", 4,	two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
249276cad711SPaolo Bonzini {"fsaddl", 4,	two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
249376cad711SPaolo Bonzini {"fsaddp", 4,	two(0xF000, 0x4C62), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
249476cad711SPaolo Bonzini {"fsadds", 4,	two(0xF000, 0x4462), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
249576cad711SPaolo Bonzini {"fsadds", 4,	two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
249676cad711SPaolo Bonzini {"fsaddw", 4,	two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
249776cad711SPaolo Bonzini {"fsaddw", 4,	two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
249876cad711SPaolo Bonzini {"fsaddx", 4,	two(0xF000, 0x0062), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
249976cad711SPaolo Bonzini {"fsaddx", 4,	two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
250076cad711SPaolo Bonzini 
250176cad711SPaolo Bonzini {"fdaddb", 4,	two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
250276cad711SPaolo Bonzini {"fdaddb", 4,	two(0xF000, 0x5866), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
250376cad711SPaolo Bonzini {"fdaddd", 4,	two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
250476cad711SPaolo Bonzini {"fdaddd", 4,	two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
250576cad711SPaolo Bonzini {"fdaddd", 4,	two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
250676cad711SPaolo Bonzini {"fdaddl", 4,	two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
250776cad711SPaolo Bonzini {"fdaddl", 4,	two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
250876cad711SPaolo Bonzini {"fdaddp", 4,	two(0xF000, 0x4C66), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
250976cad711SPaolo Bonzini {"fdadds", 4,	two(0xF000, 0x4466), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
251076cad711SPaolo Bonzini {"fdadds", 4,	two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
251176cad711SPaolo Bonzini {"fdaddw", 4,	two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
251276cad711SPaolo Bonzini {"fdaddw", 4,	two(0xF000, 0x5066), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
251376cad711SPaolo Bonzini {"fdaddx", 4,	two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
251476cad711SPaolo Bonzini {"fdaddx", 4,	two(0xF000, 0x4866), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
251576cad711SPaolo Bonzini 
251676cad711SPaolo Bonzini {"fasinb", 4,	two(0xF000, 0x580C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
251776cad711SPaolo Bonzini {"fasind", 4,	two(0xF000, 0x540C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
251876cad711SPaolo Bonzini {"fasinl", 4,	two(0xF000, 0x400C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
251976cad711SPaolo Bonzini {"fasinp", 4,	two(0xF000, 0x4C0C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
252076cad711SPaolo Bonzini {"fasins", 4,	two(0xF000, 0x440C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
252176cad711SPaolo Bonzini {"fasinw", 4,	two(0xF000, 0x500C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
252276cad711SPaolo Bonzini {"fasinx", 4,	two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
252376cad711SPaolo Bonzini {"fasinx", 4,	two(0xF000, 0x480C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
252476cad711SPaolo Bonzini {"fasinx", 4,	two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
252576cad711SPaolo Bonzini 
252676cad711SPaolo Bonzini {"fatanb", 4,	two(0xF000, 0x580A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
252776cad711SPaolo Bonzini {"fatand", 4,	two(0xF000, 0x540A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
252876cad711SPaolo Bonzini {"fatanl", 4,	two(0xF000, 0x400A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
252976cad711SPaolo Bonzini {"fatanp", 4,	two(0xF000, 0x4C0A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
253076cad711SPaolo Bonzini {"fatans", 4,	two(0xF000, 0x440A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
253176cad711SPaolo Bonzini {"fatanw", 4,	two(0xF000, 0x500A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
253276cad711SPaolo Bonzini {"fatanx", 4,	two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
253376cad711SPaolo Bonzini {"fatanx", 4,	two(0xF000, 0x480A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
253476cad711SPaolo Bonzini {"fatanx", 4,	two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
253576cad711SPaolo Bonzini 
253676cad711SPaolo Bonzini {"fatanhb", 4,	two(0xF000, 0x580D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
253776cad711SPaolo Bonzini {"fatanhd", 4,	two(0xF000, 0x540D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
253876cad711SPaolo Bonzini {"fatanhl", 4,	two(0xF000, 0x400D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
253976cad711SPaolo Bonzini {"fatanhp", 4,	two(0xF000, 0x4C0D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
254076cad711SPaolo Bonzini {"fatanhs", 4,	two(0xF000, 0x440D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
254176cad711SPaolo Bonzini {"fatanhw", 4,	two(0xF000, 0x500D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
254276cad711SPaolo Bonzini {"fatanhx", 4,	two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
254376cad711SPaolo Bonzini {"fatanhx", 4,	two(0xF000, 0x480D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
254476cad711SPaolo Bonzini {"fatanhx", 4,	two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
254576cad711SPaolo Bonzini 
254676cad711SPaolo Bonzini {"fbeq", 2,	one(0xF081),		one(0xF1FF), "IdBW", mfloat | cfloat },
254776cad711SPaolo Bonzini {"fbf", 2,	one(0xF080),		one(0xF1FF), "IdBW", mfloat | cfloat },
254876cad711SPaolo Bonzini {"fbge", 2,	one(0xF093),		one(0xF1FF), "IdBW", mfloat | cfloat },
254976cad711SPaolo Bonzini {"fbgl", 2,	one(0xF096),		one(0xF1FF), "IdBW", mfloat | cfloat },
255076cad711SPaolo Bonzini {"fbgle", 2,	one(0xF097),		one(0xF1FF), "IdBW", mfloat | cfloat },
255176cad711SPaolo Bonzini {"fbgt", 2,	one(0xF092),		one(0xF1FF), "IdBW", mfloat | cfloat },
255276cad711SPaolo Bonzini {"fble", 2,	one(0xF095),		one(0xF1FF), "IdBW", mfloat | cfloat },
255376cad711SPaolo Bonzini {"fblt", 2,	one(0xF094),		one(0xF1FF), "IdBW", mfloat | cfloat },
255476cad711SPaolo Bonzini {"fbne", 2,	one(0xF08E),		one(0xF1FF), "IdBW", mfloat | cfloat },
255576cad711SPaolo Bonzini {"fbnge", 2,	one(0xF09C),		one(0xF1FF), "IdBW", mfloat | cfloat },
255676cad711SPaolo Bonzini {"fbngl", 2,	one(0xF099),		one(0xF1FF), "IdBW", mfloat | cfloat },
255776cad711SPaolo Bonzini {"fbngle", 2,	one(0xF098),		one(0xF1FF), "IdBW", mfloat | cfloat },
255876cad711SPaolo Bonzini {"fbngt", 2,	one(0xF09D),		one(0xF1FF), "IdBW", mfloat | cfloat },
255976cad711SPaolo Bonzini {"fbnle", 2,	one(0xF09A),		one(0xF1FF), "IdBW", mfloat | cfloat },
256076cad711SPaolo Bonzini {"fbnlt", 2,	one(0xF09B),		one(0xF1FF), "IdBW", mfloat | cfloat },
256176cad711SPaolo Bonzini {"fboge", 2,	one(0xF083),		one(0xF1FF), "IdBW", mfloat | cfloat },
256276cad711SPaolo Bonzini {"fbogl", 2,	one(0xF086),		one(0xF1FF), "IdBW", mfloat | cfloat },
256376cad711SPaolo Bonzini {"fbogt", 2,	one(0xF082),		one(0xF1FF), "IdBW", mfloat | cfloat },
256476cad711SPaolo Bonzini {"fbole", 2,	one(0xF085),		one(0xF1FF), "IdBW", mfloat | cfloat },
256576cad711SPaolo Bonzini {"fbolt", 2,	one(0xF084),		one(0xF1FF), "IdBW", mfloat | cfloat },
256676cad711SPaolo Bonzini {"fbor", 2,	one(0xF087),		one(0xF1FF), "IdBW", mfloat | cfloat },
256776cad711SPaolo Bonzini {"fbseq", 2,	one(0xF091),		one(0xF1FF), "IdBW", mfloat | cfloat },
256876cad711SPaolo Bonzini {"fbsf", 2,	one(0xF090),		one(0xF1FF), "IdBW", mfloat | cfloat },
256976cad711SPaolo Bonzini {"fbsne", 2,	one(0xF09E),		one(0xF1FF), "IdBW", mfloat | cfloat },
257076cad711SPaolo Bonzini {"fbst", 2,	one(0xF09F),		one(0xF1FF), "IdBW", mfloat | cfloat },
257176cad711SPaolo Bonzini {"fbt", 2,	one(0xF08F),		one(0xF1FF), "IdBW", mfloat | cfloat },
257276cad711SPaolo Bonzini {"fbueq", 2,	one(0xF089),		one(0xF1FF), "IdBW", mfloat | cfloat },
257376cad711SPaolo Bonzini {"fbuge", 2,	one(0xF08B),		one(0xF1FF), "IdBW", mfloat | cfloat },
257476cad711SPaolo Bonzini {"fbugt", 2,	one(0xF08A),		one(0xF1FF), "IdBW", mfloat | cfloat },
257576cad711SPaolo Bonzini {"fbule", 2,	one(0xF08D),		one(0xF1FF), "IdBW", mfloat | cfloat },
257676cad711SPaolo Bonzini {"fbult", 2,	one(0xF08C),		one(0xF1FF), "IdBW", mfloat | cfloat },
257776cad711SPaolo Bonzini {"fbun", 2,	one(0xF088),		one(0xF1FF), "IdBW", mfloat | cfloat },
257876cad711SPaolo Bonzini 
257976cad711SPaolo Bonzini {"fbeql", 2,	one(0xF0C1),		one(0xF1FF), "IdBC", mfloat | cfloat },
258076cad711SPaolo Bonzini {"fbfl", 2,	one(0xF0C0),		one(0xF1FF), "IdBC", mfloat | cfloat },
258176cad711SPaolo Bonzini {"fbgel", 2,	one(0xF0D3),		one(0xF1FF), "IdBC", mfloat | cfloat },
258276cad711SPaolo Bonzini {"fbgll", 2,	one(0xF0D6),		one(0xF1FF), "IdBC", mfloat | cfloat },
258376cad711SPaolo Bonzini {"fbglel", 2,	one(0xF0D7),		one(0xF1FF), "IdBC", mfloat | cfloat },
258476cad711SPaolo Bonzini {"fbgtl", 2,	one(0xF0D2),		one(0xF1FF), "IdBC", mfloat | cfloat },
258576cad711SPaolo Bonzini {"fblel", 2,	one(0xF0D5),		one(0xF1FF), "IdBC", mfloat | cfloat },
258676cad711SPaolo Bonzini {"fbltl", 2,	one(0xF0D4),		one(0xF1FF), "IdBC", mfloat | cfloat },
258776cad711SPaolo Bonzini {"fbnel", 2,	one(0xF0CE),		one(0xF1FF), "IdBC", mfloat | cfloat },
258876cad711SPaolo Bonzini {"fbngel", 2,	one(0xF0DC),		one(0xF1FF), "IdBC", mfloat | cfloat },
258976cad711SPaolo Bonzini {"fbngll", 2,	one(0xF0D9),		one(0xF1FF), "IdBC", mfloat | cfloat },
259076cad711SPaolo Bonzini {"fbnglel", 2,	one(0xF0D8),		one(0xF1FF), "IdBC", mfloat | cfloat },
259176cad711SPaolo Bonzini {"fbngtl", 2,	one(0xF0DD),		one(0xF1FF), "IdBC", mfloat | cfloat },
259276cad711SPaolo Bonzini {"fbnlel", 2,	one(0xF0DA),		one(0xF1FF), "IdBC", mfloat | cfloat },
259376cad711SPaolo Bonzini {"fbnltl", 2,	one(0xF0DB),		one(0xF1FF), "IdBC", mfloat | cfloat },
259476cad711SPaolo Bonzini {"fbogel", 2,	one(0xF0C3),		one(0xF1FF), "IdBC", mfloat | cfloat },
259576cad711SPaolo Bonzini {"fbogll", 2,	one(0xF0C6),		one(0xF1FF), "IdBC", mfloat | cfloat },
259676cad711SPaolo Bonzini {"fbogtl", 2,	one(0xF0C2),		one(0xF1FF), "IdBC", mfloat | cfloat },
259776cad711SPaolo Bonzini {"fbolel", 2,	one(0xF0C5),		one(0xF1FF), "IdBC", mfloat | cfloat },
259876cad711SPaolo Bonzini {"fboltl", 2,	one(0xF0C4),		one(0xF1FF), "IdBC", mfloat | cfloat },
259976cad711SPaolo Bonzini {"fborl", 2,	one(0xF0C7),		one(0xF1FF), "IdBC", mfloat | cfloat },
260076cad711SPaolo Bonzini {"fbseql", 2,	one(0xF0D1),		one(0xF1FF), "IdBC", mfloat | cfloat },
260176cad711SPaolo Bonzini {"fbsfl", 2,	one(0xF0D0),		one(0xF1FF), "IdBC", mfloat | cfloat },
260276cad711SPaolo Bonzini {"fbsnel", 2,	one(0xF0DE),		one(0xF1FF), "IdBC", mfloat | cfloat },
260376cad711SPaolo Bonzini {"fbstl", 2,	one(0xF0DF),		one(0xF1FF), "IdBC", mfloat | cfloat },
260476cad711SPaolo Bonzini {"fbtl", 2,	one(0xF0CF),		one(0xF1FF), "IdBC", mfloat | cfloat },
260576cad711SPaolo Bonzini {"fbueql", 2,	one(0xF0C9),		one(0xF1FF), "IdBC", mfloat | cfloat },
260676cad711SPaolo Bonzini {"fbugel", 2,	one(0xF0CB),		one(0xF1FF), "IdBC", mfloat | cfloat },
260776cad711SPaolo Bonzini {"fbugtl", 2,	one(0xF0CA),		one(0xF1FF), "IdBC", mfloat | cfloat },
260876cad711SPaolo Bonzini {"fbulel", 2,	one(0xF0CD),		one(0xF1FF), "IdBC", mfloat | cfloat },
260976cad711SPaolo Bonzini {"fbultl", 2,	one(0xF0CC),		one(0xF1FF), "IdBC", mfloat | cfloat },
261076cad711SPaolo Bonzini {"fbunl", 2,	one(0xF0C8),		one(0xF1FF), "IdBC", mfloat | cfloat },
261176cad711SPaolo Bonzini 
261276cad711SPaolo Bonzini {"fjeq", 2,	one(0xF081),		one(0xF1BF), "IdBc", mfloat | cfloat },
261376cad711SPaolo Bonzini {"fjf", 2,	one(0xF080),		one(0xF1BF), "IdBc", mfloat | cfloat },
261476cad711SPaolo Bonzini {"fjge", 2,	one(0xF093),		one(0xF1BF), "IdBc", mfloat | cfloat },
261576cad711SPaolo Bonzini {"fjgl", 2,	one(0xF096),		one(0xF1BF), "IdBc", mfloat | cfloat },
261676cad711SPaolo Bonzini {"fjgle", 2,	one(0xF097),		one(0xF1BF), "IdBc", mfloat | cfloat },
261776cad711SPaolo Bonzini {"fjgt", 2,	one(0xF092),		one(0xF1BF), "IdBc", mfloat | cfloat },
261876cad711SPaolo Bonzini {"fjle", 2,	one(0xF095),		one(0xF1BF), "IdBc", mfloat | cfloat },
261976cad711SPaolo Bonzini {"fjlt", 2,	one(0xF094),		one(0xF1BF), "IdBc", mfloat | cfloat },
262076cad711SPaolo Bonzini {"fjne", 2,	one(0xF08E),		one(0xF1BF), "IdBc", mfloat | cfloat },
262176cad711SPaolo Bonzini {"fjnge", 2,	one(0xF09C),		one(0xF1BF), "IdBc", mfloat | cfloat },
262276cad711SPaolo Bonzini {"fjngl", 2,	one(0xF099),		one(0xF1BF), "IdBc", mfloat | cfloat },
262376cad711SPaolo Bonzini {"fjngle", 2,	one(0xF098),		one(0xF1BF), "IdBc", mfloat | cfloat },
262476cad711SPaolo Bonzini {"fjngt", 2,	one(0xF09D),		one(0xF1BF), "IdBc", mfloat | cfloat },
262576cad711SPaolo Bonzini {"fjnle", 2,	one(0xF09A),		one(0xF1BF), "IdBc", mfloat | cfloat },
262676cad711SPaolo Bonzini {"fjnlt", 2,	one(0xF09B),		one(0xF1BF), "IdBc", mfloat | cfloat },
262776cad711SPaolo Bonzini {"fjoge", 2,	one(0xF083),		one(0xF1BF), "IdBc", mfloat | cfloat },
262876cad711SPaolo Bonzini {"fjogl", 2,	one(0xF086),		one(0xF1BF), "IdBc", mfloat | cfloat },
262976cad711SPaolo Bonzini {"fjogt", 2,	one(0xF082),		one(0xF1BF), "IdBc", mfloat | cfloat },
263076cad711SPaolo Bonzini {"fjole", 2,	one(0xF085),		one(0xF1BF), "IdBc", mfloat | cfloat },
263176cad711SPaolo Bonzini {"fjolt", 2,	one(0xF084),		one(0xF1BF), "IdBc", mfloat | cfloat },
263276cad711SPaolo Bonzini {"fjor", 2,	one(0xF087),		one(0xF1BF), "IdBc", mfloat | cfloat },
263376cad711SPaolo Bonzini {"fjseq", 2,	one(0xF091),		one(0xF1BF), "IdBc", mfloat | cfloat },
263476cad711SPaolo Bonzini {"fjsf", 2,	one(0xF090),		one(0xF1BF), "IdBc", mfloat | cfloat },
263576cad711SPaolo Bonzini {"fjsne", 2,	one(0xF09E),		one(0xF1BF), "IdBc", mfloat | cfloat },
263676cad711SPaolo Bonzini {"fjst", 2,	one(0xF09F),		one(0xF1BF), "IdBc", mfloat | cfloat },
263776cad711SPaolo Bonzini {"fjt", 2,	one(0xF08F),		one(0xF1BF), "IdBc", mfloat | cfloat },
263876cad711SPaolo Bonzini {"fjueq", 2,	one(0xF089),		one(0xF1BF), "IdBc", mfloat | cfloat },
263976cad711SPaolo Bonzini {"fjuge", 2,	one(0xF08B),		one(0xF1BF), "IdBc", mfloat | cfloat },
264076cad711SPaolo Bonzini {"fjugt", 2,	one(0xF08A),		one(0xF1BF), "IdBc", mfloat | cfloat },
264176cad711SPaolo Bonzini {"fjule", 2,	one(0xF08D),		one(0xF1BF), "IdBc", mfloat | cfloat },
264276cad711SPaolo Bonzini {"fjult", 2,	one(0xF08C),		one(0xF1BF), "IdBc", mfloat | cfloat },
264376cad711SPaolo Bonzini {"fjun", 2,	one(0xF088),		one(0xF1BF), "IdBc", mfloat | cfloat },
264476cad711SPaolo Bonzini 
264576cad711SPaolo Bonzini {"fcmpb", 4,	two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
264676cad711SPaolo Bonzini {"fcmpb", 4,	two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
264776cad711SPaolo Bonzini {"fcmpd", 4,	two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
264876cad711SPaolo Bonzini {"fcmpd", 4,	two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
264976cad711SPaolo Bonzini {"fcmpd", 4,	two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
265076cad711SPaolo Bonzini {"fcmpl", 4,	two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
265176cad711SPaolo Bonzini {"fcmpl", 4,	two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
265276cad711SPaolo Bonzini {"fcmpp", 4,	two(0xF000, 0x4C38), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
265376cad711SPaolo Bonzini {"fcmps", 4,	two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
265476cad711SPaolo Bonzini {"fcmps", 4,	two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
265576cad711SPaolo Bonzini {"fcmpw", 4,	two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
265676cad711SPaolo Bonzini {"fcmpw", 4,	two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
265776cad711SPaolo Bonzini {"fcmpx", 4,	two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
265876cad711SPaolo Bonzini {"fcmpx", 4,	two(0xF000, 0x4838), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
265976cad711SPaolo Bonzini 
266076cad711SPaolo Bonzini {"fcosb", 4,	two(0xF000, 0x581D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
266176cad711SPaolo Bonzini {"fcosd", 4,	two(0xF000, 0x541D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
266276cad711SPaolo Bonzini {"fcosl", 4,	two(0xF000, 0x401D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
266376cad711SPaolo Bonzini {"fcosp", 4,	two(0xF000, 0x4C1D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
266476cad711SPaolo Bonzini {"fcoss", 4,	two(0xF000, 0x441D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
266576cad711SPaolo Bonzini {"fcosw", 4,	two(0xF000, 0x501D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
266676cad711SPaolo Bonzini {"fcosx", 4,	two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
266776cad711SPaolo Bonzini {"fcosx", 4,	two(0xF000, 0x481D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
266876cad711SPaolo Bonzini {"fcosx", 4,	two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
266976cad711SPaolo Bonzini 
267076cad711SPaolo Bonzini {"fcoshb", 4,	two(0xF000, 0x5819), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
267176cad711SPaolo Bonzini {"fcoshd", 4,	two(0xF000, 0x5419), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
267276cad711SPaolo Bonzini {"fcoshl", 4,	two(0xF000, 0x4019), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
267376cad711SPaolo Bonzini {"fcoshp", 4,	two(0xF000, 0x4C19), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
267476cad711SPaolo Bonzini {"fcoshs", 4,	two(0xF000, 0x4419), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
267576cad711SPaolo Bonzini {"fcoshw", 4,	two(0xF000, 0x5019), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
267676cad711SPaolo Bonzini {"fcoshx", 4,	two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
267776cad711SPaolo Bonzini {"fcoshx", 4,	two(0xF000, 0x4819), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
267876cad711SPaolo Bonzini {"fcoshx", 4,	two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
267976cad711SPaolo Bonzini 
268076cad711SPaolo Bonzini {"fdbeq", 4,	two(0xF048, 0x0001), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268176cad711SPaolo Bonzini {"fdbf", 4,	two(0xF048, 0x0000), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268276cad711SPaolo Bonzini {"fdbge", 4,	two(0xF048, 0x0013), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268376cad711SPaolo Bonzini {"fdbgl", 4,	two(0xF048, 0x0016), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268476cad711SPaolo Bonzini {"fdbgle", 4,	two(0xF048, 0x0017), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268576cad711SPaolo Bonzini {"fdbgt", 4,	two(0xF048, 0x0012), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268676cad711SPaolo Bonzini {"fdble", 4,	two(0xF048, 0x0015), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268776cad711SPaolo Bonzini {"fdblt", 4,	two(0xF048, 0x0014), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268876cad711SPaolo Bonzini {"fdbne", 4,	two(0xF048, 0x000E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
268976cad711SPaolo Bonzini {"fdbnge", 4,	two(0xF048, 0x001C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269076cad711SPaolo Bonzini {"fdbngl", 4,	two(0xF048, 0x0019), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269176cad711SPaolo Bonzini {"fdbngle", 4,	two(0xF048, 0x0018), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269276cad711SPaolo Bonzini {"fdbngt", 4,	two(0xF048, 0x001D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269376cad711SPaolo Bonzini {"fdbnle", 4,	two(0xF048, 0x001A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269476cad711SPaolo Bonzini {"fdbnlt", 4,	two(0xF048, 0x001B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269576cad711SPaolo Bonzini {"fdboge", 4,	two(0xF048, 0x0003), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269676cad711SPaolo Bonzini {"fdbogl", 4,	two(0xF048, 0x0006), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269776cad711SPaolo Bonzini {"fdbogt", 4,	two(0xF048, 0x0002), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269876cad711SPaolo Bonzini {"fdbole", 4,	two(0xF048, 0x0005), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
269976cad711SPaolo Bonzini {"fdbolt", 4,	two(0xF048, 0x0004), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270076cad711SPaolo Bonzini {"fdbor", 4,	two(0xF048, 0x0007), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270176cad711SPaolo Bonzini {"fdbseq", 4,	two(0xF048, 0x0011), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270276cad711SPaolo Bonzini {"fdbsf", 4,	two(0xF048, 0x0010), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270376cad711SPaolo Bonzini {"fdbsne", 4,	two(0xF048, 0x001E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270476cad711SPaolo Bonzini {"fdbst", 4,	two(0xF048, 0x001F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270576cad711SPaolo Bonzini {"fdbt", 4,	two(0xF048, 0x000F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270676cad711SPaolo Bonzini {"fdbueq", 4,	two(0xF048, 0x0009), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270776cad711SPaolo Bonzini {"fdbuge", 4,	two(0xF048, 0x000B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270876cad711SPaolo Bonzini {"fdbugt", 4,	two(0xF048, 0x000A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
270976cad711SPaolo Bonzini {"fdbule", 4,	two(0xF048, 0x000D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
271076cad711SPaolo Bonzini {"fdbult", 4,	two(0xF048, 0x000C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
271176cad711SPaolo Bonzini {"fdbun", 4,	two(0xF048, 0x0008), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
271276cad711SPaolo Bonzini 
271376cad711SPaolo Bonzini {"fdivb", 4,	two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
271476cad711SPaolo Bonzini {"fdivb", 4,	two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
271576cad711SPaolo Bonzini {"fdivd", 4,	two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
271676cad711SPaolo Bonzini {"fdivd", 4,	two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
271776cad711SPaolo Bonzini {"fdivd", 4,	two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
271876cad711SPaolo Bonzini {"fdivl", 4,	two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
271976cad711SPaolo Bonzini {"fdivl", 4,	two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
272076cad711SPaolo Bonzini {"fdivp", 4,	two(0xF000, 0x4C20), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
272176cad711SPaolo Bonzini {"fdivs", 4,	two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
272276cad711SPaolo Bonzini {"fdivs", 4,	two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
272376cad711SPaolo Bonzini {"fdivw", 4,	two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
272476cad711SPaolo Bonzini {"fdivw", 4,	two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
272576cad711SPaolo Bonzini {"fdivx", 4,	two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
272676cad711SPaolo Bonzini {"fdivx", 4,	two(0xF000, 0x4820), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
272776cad711SPaolo Bonzini 
272876cad711SPaolo Bonzini {"fsdivb", 4,	two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
272976cad711SPaolo Bonzini {"fsdivb", 4,	two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
273076cad711SPaolo Bonzini {"fsdivd", 4,	two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
273176cad711SPaolo Bonzini {"fsdivd", 4,	two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
273276cad711SPaolo Bonzini {"fsdivd", 4,	two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
273376cad711SPaolo Bonzini {"fsdivl", 4,	two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
273476cad711SPaolo Bonzini {"fsdivl", 4,	two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
273576cad711SPaolo Bonzini {"fsdivp", 4,	two(0xF000, 0x4C60), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
273676cad711SPaolo Bonzini {"fsdivs", 4,	two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
273776cad711SPaolo Bonzini {"fsdivs", 4,	two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
273876cad711SPaolo Bonzini {"fsdivw", 4,	two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
273976cad711SPaolo Bonzini {"fsdivw", 4,	two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
274076cad711SPaolo Bonzini {"fsdivx", 4,	two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
274176cad711SPaolo Bonzini {"fsdivx", 4,	two(0xF000, 0x4860), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
274276cad711SPaolo Bonzini 
274376cad711SPaolo Bonzini {"fddivb", 4,	two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
274476cad711SPaolo Bonzini {"fddivb", 4,	two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
274576cad711SPaolo Bonzini {"fddivd", 4,	two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
274676cad711SPaolo Bonzini {"fddivd", 4,	two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
274776cad711SPaolo Bonzini {"fddivd", 4,	two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
274876cad711SPaolo Bonzini {"fddivl", 4,	two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
274976cad711SPaolo Bonzini {"fddivl", 4,	two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
275076cad711SPaolo Bonzini {"fddivp", 4,	two(0xF000, 0x4C64), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
275176cad711SPaolo Bonzini {"fddivs", 4,	two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
275276cad711SPaolo Bonzini {"fddivs", 4,	two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
275376cad711SPaolo Bonzini {"fddivw", 4,	two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
275476cad711SPaolo Bonzini {"fddivw", 4,	two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
275576cad711SPaolo Bonzini {"fddivx", 4,	two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
275676cad711SPaolo Bonzini {"fddivx", 4,	two(0xF000, 0x4864), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
275776cad711SPaolo Bonzini 
275876cad711SPaolo Bonzini {"fetoxb", 4,	two(0xF000, 0x5810), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
275976cad711SPaolo Bonzini {"fetoxd", 4,	two(0xF000, 0x5410), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
276076cad711SPaolo Bonzini {"fetoxl", 4,	two(0xF000, 0x4010), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
276176cad711SPaolo Bonzini {"fetoxp", 4,	two(0xF000, 0x4C10), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
276276cad711SPaolo Bonzini {"fetoxs", 4,	two(0xF000, 0x4410), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
276376cad711SPaolo Bonzini {"fetoxw", 4,	two(0xF000, 0x5010), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
276476cad711SPaolo Bonzini {"fetoxx", 4,	two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
276576cad711SPaolo Bonzini {"fetoxx", 4,	two(0xF000, 0x4810), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
276676cad711SPaolo Bonzini {"fetoxx", 4,	two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
276776cad711SPaolo Bonzini 
276876cad711SPaolo Bonzini {"fetoxm1b", 4,	two(0xF000, 0x5808), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
276976cad711SPaolo Bonzini {"fetoxm1d", 4,	two(0xF000, 0x5408), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
277076cad711SPaolo Bonzini {"fetoxm1l", 4,	two(0xF000, 0x4008), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
277176cad711SPaolo Bonzini {"fetoxm1p", 4,	two(0xF000, 0x4C08), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
277276cad711SPaolo Bonzini {"fetoxm1s", 4,	two(0xF000, 0x4408), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
277376cad711SPaolo Bonzini {"fetoxm1w", 4,	two(0xF000, 0x5008), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
277476cad711SPaolo Bonzini {"fetoxm1x", 4,	two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
277576cad711SPaolo Bonzini {"fetoxm1x", 4,	two(0xF000, 0x4808), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
277676cad711SPaolo Bonzini {"fetoxm1x", 4,	two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
277776cad711SPaolo Bonzini 
277876cad711SPaolo Bonzini {"fgetexpb", 4,	two(0xF000, 0x581E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
277976cad711SPaolo Bonzini {"fgetexpd", 4,	two(0xF000, 0x541E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
278076cad711SPaolo Bonzini {"fgetexpl", 4,	two(0xF000, 0x401E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
278176cad711SPaolo Bonzini {"fgetexpp", 4,	two(0xF000, 0x4C1E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
278276cad711SPaolo Bonzini {"fgetexps", 4,	two(0xF000, 0x441E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
278376cad711SPaolo Bonzini {"fgetexpw", 4,	two(0xF000, 0x501E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
278476cad711SPaolo Bonzini {"fgetexpx", 4,	two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
278576cad711SPaolo Bonzini {"fgetexpx", 4,	two(0xF000, 0x481E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
278676cad711SPaolo Bonzini {"fgetexpx", 4,	two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
278776cad711SPaolo Bonzini 
278876cad711SPaolo Bonzini {"fgetmanb", 4,	two(0xF000, 0x581F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
278976cad711SPaolo Bonzini {"fgetmand", 4,	two(0xF000, 0x541F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
279076cad711SPaolo Bonzini {"fgetmanl", 4,	two(0xF000, 0x401F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
279176cad711SPaolo Bonzini {"fgetmanp", 4,	two(0xF000, 0x4C1F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
279276cad711SPaolo Bonzini {"fgetmans", 4,	two(0xF000, 0x441F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
279376cad711SPaolo Bonzini {"fgetmanw", 4,	two(0xF000, 0x501F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
279476cad711SPaolo Bonzini {"fgetmanx", 4,	two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
279576cad711SPaolo Bonzini {"fgetmanx", 4,	two(0xF000, 0x481F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
279676cad711SPaolo Bonzini {"fgetmanx", 4,	two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
279776cad711SPaolo Bonzini 
279876cad711SPaolo Bonzini {"fintb", 4,	two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
279976cad711SPaolo Bonzini {"fintb", 4,	two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
280076cad711SPaolo Bonzini {"fintd", 4,	two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
280176cad711SPaolo Bonzini {"fintd", 4,	two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt", cfloat },
280276cad711SPaolo Bonzini {"fintd", 4,	two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
280376cad711SPaolo Bonzini {"fintd", 4,	two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
280476cad711SPaolo Bonzini {"fintl", 4,	two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
280576cad711SPaolo Bonzini {"fintl", 4,	two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
280676cad711SPaolo Bonzini {"fintp", 4,	two(0xF000, 0x4C01), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
280776cad711SPaolo Bonzini {"fints", 4,	two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
280876cad711SPaolo Bonzini {"fints", 4,	two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
280976cad711SPaolo Bonzini {"fintw", 4,	two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
281076cad711SPaolo Bonzini {"fintw", 4,	two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
281176cad711SPaolo Bonzini {"fintx", 4,	two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
281276cad711SPaolo Bonzini {"fintx", 4,	two(0xF000, 0x4801), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
281376cad711SPaolo Bonzini {"fintx", 4,	two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
281476cad711SPaolo Bonzini 
281576cad711SPaolo Bonzini {"fintrzb", 4,	two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
281676cad711SPaolo Bonzini {"fintrzb", 4,	two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
281776cad711SPaolo Bonzini {"fintrzd", 4,	two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
281876cad711SPaolo Bonzini {"fintrzd", 4,	two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
281976cad711SPaolo Bonzini {"fintrzd", 4,	two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
282076cad711SPaolo Bonzini {"fintrzd", 4,	two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
282176cad711SPaolo Bonzini {"fintrzl", 4,	two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
282276cad711SPaolo Bonzini {"fintrzl", 4,	two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
282376cad711SPaolo Bonzini {"fintrzp", 4,	two(0xF000, 0x4C03), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
282476cad711SPaolo Bonzini {"fintrzs", 4,	two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
282576cad711SPaolo Bonzini {"fintrzs", 4,	two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
282676cad711SPaolo Bonzini {"fintrzw", 4,	two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
282776cad711SPaolo Bonzini {"fintrzw", 4,	two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
282876cad711SPaolo Bonzini {"fintrzx", 4,	two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
282976cad711SPaolo Bonzini {"fintrzx", 4,	two(0xF000, 0x4803), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
283076cad711SPaolo Bonzini {"fintrzx", 4,	two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
283176cad711SPaolo Bonzini 
283276cad711SPaolo Bonzini {"flog10b", 4,	two(0xF000, 0x5815), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
283376cad711SPaolo Bonzini {"flog10d", 4,	two(0xF000, 0x5415), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
283476cad711SPaolo Bonzini {"flog10l", 4,	two(0xF000, 0x4015), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
283576cad711SPaolo Bonzini {"flog10p", 4,	two(0xF000, 0x4C15), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
283676cad711SPaolo Bonzini {"flog10s", 4,	two(0xF000, 0x4415), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
283776cad711SPaolo Bonzini {"flog10w", 4,	two(0xF000, 0x5015), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
283876cad711SPaolo Bonzini {"flog10x", 4,	two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
283976cad711SPaolo Bonzini {"flog10x", 4,	two(0xF000, 0x4815), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
284076cad711SPaolo Bonzini {"flog10x", 4,	two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
284176cad711SPaolo Bonzini 
284276cad711SPaolo Bonzini {"flog2b", 4,	two(0xF000, 0x5816), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
284376cad711SPaolo Bonzini {"flog2d", 4,	two(0xF000, 0x5416), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
284476cad711SPaolo Bonzini {"flog2l", 4,	two(0xF000, 0x4016), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
284576cad711SPaolo Bonzini {"flog2p", 4,	two(0xF000, 0x4C16), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
284676cad711SPaolo Bonzini {"flog2s", 4,	two(0xF000, 0x4416), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
284776cad711SPaolo Bonzini {"flog2w", 4,	two(0xF000, 0x5016), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
284876cad711SPaolo Bonzini {"flog2x", 4,	two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
284976cad711SPaolo Bonzini {"flog2x", 4,	two(0xF000, 0x4816), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
285076cad711SPaolo Bonzini {"flog2x", 4,	two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
285176cad711SPaolo Bonzini 
285276cad711SPaolo Bonzini {"flognb", 4,	two(0xF000, 0x5814), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
285376cad711SPaolo Bonzini {"flognd", 4,	two(0xF000, 0x5414), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
285476cad711SPaolo Bonzini {"flognl", 4,	two(0xF000, 0x4014), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
285576cad711SPaolo Bonzini {"flognp", 4,	two(0xF000, 0x4C14), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
285676cad711SPaolo Bonzini {"flogns", 4,	two(0xF000, 0x4414), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
285776cad711SPaolo Bonzini {"flognw", 4,	two(0xF000, 0x5014), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
285876cad711SPaolo Bonzini {"flognx", 4,	two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
285976cad711SPaolo Bonzini {"flognx", 4,	two(0xF000, 0x4814), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
286076cad711SPaolo Bonzini {"flognx", 4,	two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
286176cad711SPaolo Bonzini 
286276cad711SPaolo Bonzini {"flognp1b", 4,	two(0xF000, 0x5806), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
286376cad711SPaolo Bonzini {"flognp1d", 4,	two(0xF000, 0x5406), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
286476cad711SPaolo Bonzini {"flognp1l", 4,	two(0xF000, 0x4006), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
286576cad711SPaolo Bonzini {"flognp1p", 4,	two(0xF000, 0x4C06), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
286676cad711SPaolo Bonzini {"flognp1s", 4,	two(0xF000, 0x4406), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
286776cad711SPaolo Bonzini {"flognp1w", 4,	two(0xF000, 0x5006), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
286876cad711SPaolo Bonzini {"flognp1x", 4,	two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
286976cad711SPaolo Bonzini {"flognp1x", 4,	two(0xF000, 0x4806), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
287076cad711SPaolo Bonzini {"flognp1x", 4,	two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
287176cad711SPaolo Bonzini 
287276cad711SPaolo Bonzini {"fmodb", 4,	two(0xF000, 0x5821), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
287376cad711SPaolo Bonzini {"fmodd", 4,	two(0xF000, 0x5421), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
287476cad711SPaolo Bonzini {"fmodl", 4,	two(0xF000, 0x4021), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
287576cad711SPaolo Bonzini {"fmodp", 4,	two(0xF000, 0x4C21), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
287676cad711SPaolo Bonzini {"fmods", 4,	two(0xF000, 0x4421), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
287776cad711SPaolo Bonzini {"fmodw", 4,	two(0xF000, 0x5021), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
287876cad711SPaolo Bonzini {"fmodx", 4,	two(0xF000, 0x0021), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
287976cad711SPaolo Bonzini {"fmodx", 4,	two(0xF000, 0x4821), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
288076cad711SPaolo Bonzini 
288176cad711SPaolo Bonzini {"fmoveb", 4,	two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
288276cad711SPaolo Bonzini {"fmoveb", 4,	two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
288376cad711SPaolo Bonzini {"fmoveb", 4,	two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
288476cad711SPaolo Bonzini {"fmoveb", 4,	two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7$b", mfloat },
288576cad711SPaolo Bonzini {"fmoved", 4,	two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
288676cad711SPaolo Bonzini {"fmoved", 4,	two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7~F", mfloat },
288776cad711SPaolo Bonzini {"fmoved", 4,	two(0xF000, 0x0000), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
288876cad711SPaolo Bonzini {"fmoved", 4,	two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
288976cad711SPaolo Bonzini {"fmoved", 4,	two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
289076cad711SPaolo Bonzini {"fmovel", 4,	two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
289176cad711SPaolo Bonzini {"fmovel", 4,	two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7$l", mfloat },
289276cad711SPaolo Bonzini /* FIXME: the next two variants should not permit moving an address
289376cad711SPaolo Bonzini    register to anything but the floating point instruction register.  */
289476cad711SPaolo Bonzini {"fmovel", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
289576cad711SPaolo Bonzini {"fmovel", 4,	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", mfloat },
289676cad711SPaolo Bonzini {"fmovel", 4,	two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
289776cad711SPaolo Bonzini {"fmovel", 4,	two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
289876cad711SPaolo Bonzini   /* Move the FP control registers.  */
289976cad711SPaolo Bonzini {"fmovel", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8ps", cfloat },
290076cad711SPaolo Bonzini {"fmovel", 4,	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Iibss8", cfloat },
290176cad711SPaolo Bonzini {"fmovep", 4,	two(0xF000, 0x4C00), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
290276cad711SPaolo Bonzini {"fmovep", 4,	two(0xF000, 0x6C00), two(0xF1C0, 0xFC00), "IiF7~pkC", mfloat },
290376cad711SPaolo Bonzini {"fmovep", 4,	two(0xF000, 0x7C00), two(0xF1C0, 0xFC0F), "IiF7~pDk", mfloat },
290476cad711SPaolo Bonzini {"fmoves", 4,	two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
290576cad711SPaolo Bonzini {"fmoves", 4,	two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7$f", mfloat },
290676cad711SPaolo Bonzini {"fmoves", 4,	two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
290776cad711SPaolo Bonzini {"fmoves", 4,	two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
290876cad711SPaolo Bonzini {"fmovew", 4,	two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
290976cad711SPaolo Bonzini {"fmovew", 4,	two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7$w", mfloat },
291076cad711SPaolo Bonzini {"fmovew", 4,	two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
291176cad711SPaolo Bonzini {"fmovew", 4,	two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
291276cad711SPaolo Bonzini {"fmovex", 4,	two(0xF000, 0x0000), two(0xF1FF, 0xE07F), "IiF8F7", mfloat },
291376cad711SPaolo Bonzini {"fmovex", 4,	two(0xF000, 0x4800), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
291476cad711SPaolo Bonzini {"fmovex", 4,	two(0xF000, 0x6800), two(0xF1C0, 0xFC7F), "IiF7~x", mfloat },
291576cad711SPaolo Bonzini 
291676cad711SPaolo Bonzini {"fsmoveb", 4,	two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
291776cad711SPaolo Bonzini {"fsmoveb", 4,	two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
291876cad711SPaolo Bonzini {"fsmoveb", 4,	two(0xF000, 0x7840), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
291976cad711SPaolo Bonzini {"fsmoved", 4,	two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
292076cad711SPaolo Bonzini {"fsmoved", 4,	two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
292176cad711SPaolo Bonzini {"fsmoved", 4,	two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
292276cad711SPaolo Bonzini {"fsmoved", 4,	two(0xF000, 0x7440), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
292376cad711SPaolo Bonzini {"fsmovel", 4,	two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
292476cad711SPaolo Bonzini {"fsmovel", 4,	two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
292576cad711SPaolo Bonzini {"fsmovel", 4,	two(0xF000, 0x6040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
292676cad711SPaolo Bonzini {"fsmoves", 4,	two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
292776cad711SPaolo Bonzini {"fsmoves", 4,	two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
292876cad711SPaolo Bonzini {"fsmoves", 4,	two(0xF000, 0x6440), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
292976cad711SPaolo Bonzini {"fsmovew", 4,	two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
293076cad711SPaolo Bonzini {"fsmovew", 4,	two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
293176cad711SPaolo Bonzini {"fsmovew", 4,	two(0xF000, 0x7040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
293276cad711SPaolo Bonzini {"fsmovex", 4,	two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
293376cad711SPaolo Bonzini {"fsmovex", 4,	two(0xF000, 0x4840), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
293476cad711SPaolo Bonzini {"fsmovep", 4,	two(0xF000, 0x4C40), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
293576cad711SPaolo Bonzini 
293676cad711SPaolo Bonzini {"fdmoveb", 4,	two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
293776cad711SPaolo Bonzini {"fdmoveb", 4,	two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
293876cad711SPaolo Bonzini {"fdmoveb", 4,	two(0xF000, 0x7844), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
293976cad711SPaolo Bonzini {"fdmoved", 4,	two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
294076cad711SPaolo Bonzini {"fdmoved", 4,	two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
294176cad711SPaolo Bonzini {"fdmoved", 4,	two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
294276cad711SPaolo Bonzini {"fdmoved", 4,	two(0xF000, 0x7444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
294376cad711SPaolo Bonzini {"fdmovel", 4,	two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
294476cad711SPaolo Bonzini {"fdmovel", 4,	two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
294576cad711SPaolo Bonzini {"fdmovel", 4,	two(0xF000, 0x6044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
294676cad711SPaolo Bonzini {"fdmoves", 4,	two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
294776cad711SPaolo Bonzini {"fdmoves", 4,	two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
294876cad711SPaolo Bonzini {"fdmoves", 4,	two(0xF000, 0x6444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
294976cad711SPaolo Bonzini {"fdmovew", 4,	two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
295076cad711SPaolo Bonzini {"fdmovew", 4,	two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
295176cad711SPaolo Bonzini {"fdmovew", 4,	two(0xF000, 0x7044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
295276cad711SPaolo Bonzini {"fdmovex", 4,	two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
295376cad711SPaolo Bonzini {"fdmovex", 4,	two(0xF000, 0x4844), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
295476cad711SPaolo Bonzini {"fdmovep", 4,	two(0xF000, 0x4C44), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
295576cad711SPaolo Bonzini 
295676cad711SPaolo Bonzini {"fmovecrx", 4,	two(0xF000, 0x5C00), two(0xF1FF, 0xFC00), "Ii#CF7", mfloat },
295776cad711SPaolo Bonzini 
295876cad711SPaolo Bonzini {"fmovemd", 4,	two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizsl3", cfloat },
295976cad711SPaolo Bonzini {"fmovemd", 4,	two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
296076cad711SPaolo Bonzini {"fmovemd", 4,	two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
296176cad711SPaolo Bonzini {"fmovemd", 4,	two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Iil3ys", cfloat },
296276cad711SPaolo Bonzini 
296376cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat },
296476cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
296576cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat },
296676cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
296776cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
296876cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat },
296976cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat },
297076cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat },
297176cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
297276cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat },
297376cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
297476cad711SPaolo Bonzini {"fmovemx", 4,	two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat },
297576cad711SPaolo Bonzini 
297676cad711SPaolo Bonzini {"fmoveml", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
297776cad711SPaolo Bonzini {"fmoveml", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat },
297876cad711SPaolo Bonzini /* FIXME: In the next instruction, we should only permit %dn if the
297976cad711SPaolo Bonzini    target is a single register.  We should only permit %an if the
298076cad711SPaolo Bonzini    target is a single %fpiar.  */
298176cad711SPaolo Bonzini {"fmoveml", 4,	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*lL8", mfloat },
298276cad711SPaolo Bonzini 
298376cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "IizsL3", cfloat },
298476cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
298576cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
298676cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "IiL3ys", cfloat },
298776cad711SPaolo Bonzini 
298876cad711SPaolo Bonzini {"fmovem", 4,	two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
298976cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
299076cad711SPaolo Bonzini {"fmovem", 4,	two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
299176cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat },
299276cad711SPaolo Bonzini {"fmovem", 4,	two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat },
299376cad711SPaolo Bonzini {"fmovem", 4,	two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
299476cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat },
299576cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat },
299676cad711SPaolo Bonzini {"fmovem", 4,	two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat },
299776cad711SPaolo Bonzini {"fmovem", 4,	two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
299876cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat },
299976cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat },
300076cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
300176cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ss8", mfloat },
300276cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat },
300376cad711SPaolo Bonzini {"fmovem", 4,	two(0xF000, 0x8000), two(0xF2C0, 0xE3FF), "Ii*sL8", mfloat },
300476cad711SPaolo Bonzini 
300576cad711SPaolo Bonzini {"fmulb", 4,	two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
300676cad711SPaolo Bonzini {"fmulb", 4,	two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
300776cad711SPaolo Bonzini {"fmuld", 4,	two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
300876cad711SPaolo Bonzini {"fmuld", 4,	two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
300976cad711SPaolo Bonzini {"fmuld", 4,	two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
301076cad711SPaolo Bonzini {"fmull", 4,	two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
301176cad711SPaolo Bonzini {"fmull", 4,	two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
301276cad711SPaolo Bonzini {"fmulp", 4,	two(0xF000, 0x4C23), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
301376cad711SPaolo Bonzini {"fmuls", 4,	two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
301476cad711SPaolo Bonzini {"fmuls", 4,	two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
301576cad711SPaolo Bonzini {"fmulw", 4,	two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
301676cad711SPaolo Bonzini {"fmulw", 4,	two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
301776cad711SPaolo Bonzini {"fmulx", 4,	two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
301876cad711SPaolo Bonzini {"fmulx", 4,	two(0xF000, 0x4823), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
301976cad711SPaolo Bonzini 
302076cad711SPaolo Bonzini {"fsmulb", 4,	two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
302176cad711SPaolo Bonzini {"fsmulb", 4,	two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
302276cad711SPaolo Bonzini {"fsmuld", 4,	two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
302376cad711SPaolo Bonzini {"fsmuld", 4,	two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
302476cad711SPaolo Bonzini {"fsmuld", 4,	two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
302576cad711SPaolo Bonzini {"fsmull", 4,	two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
302676cad711SPaolo Bonzini {"fsmull", 4,	two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
302776cad711SPaolo Bonzini {"fsmulp", 4,	two(0xF000, 0x4C63), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
302876cad711SPaolo Bonzini {"fsmuls", 4,	two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
302976cad711SPaolo Bonzini {"fsmuls", 4,	two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
303076cad711SPaolo Bonzini {"fsmulw", 4,	two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
303176cad711SPaolo Bonzini {"fsmulw", 4,	two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
303276cad711SPaolo Bonzini {"fsmulx", 4,	two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
303376cad711SPaolo Bonzini {"fsmulx", 4,	two(0xF000, 0x4863), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
303476cad711SPaolo Bonzini 
303576cad711SPaolo Bonzini {"fdmulb", 4,	two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
303676cad711SPaolo Bonzini {"fdmulb", 4,	two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
303776cad711SPaolo Bonzini {"fdmuld", 4,	two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
303876cad711SPaolo Bonzini {"fdmuld", 4,	two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
303976cad711SPaolo Bonzini {"fdmuld", 4,	two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
304076cad711SPaolo Bonzini {"fdmull", 4,	two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
304176cad711SPaolo Bonzini {"fdmull", 4,	two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
304276cad711SPaolo Bonzini {"fdmulp", 4,	two(0xF000, 0x4C67), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
304376cad711SPaolo Bonzini {"fdmuls", 4,	two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
304476cad711SPaolo Bonzini {"fdmuls", 4,	two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
304576cad711SPaolo Bonzini {"fdmulw", 4,	two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
304676cad711SPaolo Bonzini {"fdmulw", 4,	two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
304776cad711SPaolo Bonzini {"fdmulx", 4,	two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
304876cad711SPaolo Bonzini {"fdmulx", 4,	two(0xF000, 0x4867), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
304976cad711SPaolo Bonzini 
305076cad711SPaolo Bonzini {"fnegb", 4,	two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
305176cad711SPaolo Bonzini {"fnegb", 4,	two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
305276cad711SPaolo Bonzini {"fnegd", 4,	two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
305376cad711SPaolo Bonzini {"fnegd", 4,	two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
305476cad711SPaolo Bonzini {"fnegd", 4,	two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
305576cad711SPaolo Bonzini {"fnegd", 4,	two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
305676cad711SPaolo Bonzini {"fnegl", 4,	two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
305776cad711SPaolo Bonzini {"fnegl", 4,	two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
305876cad711SPaolo Bonzini {"fnegp", 4,	two(0xF000, 0x4C1A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
305976cad711SPaolo Bonzini {"fnegs", 4,	two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
306076cad711SPaolo Bonzini {"fnegs", 4,	two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
306176cad711SPaolo Bonzini {"fnegw", 4,	two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
306276cad711SPaolo Bonzini {"fnegw", 4,	two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
306376cad711SPaolo Bonzini {"fnegx", 4,	two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
306476cad711SPaolo Bonzini {"fnegx", 4,	two(0xF000, 0x481A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
306576cad711SPaolo Bonzini {"fnegx", 4,	two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
306676cad711SPaolo Bonzini 
306776cad711SPaolo Bonzini {"fsnegb", 4,	two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
306876cad711SPaolo Bonzini {"fsnegb", 4,	two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
306976cad711SPaolo Bonzini {"fsnegd", 4,	two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
307076cad711SPaolo Bonzini {"fsnegd", 4,	two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
307176cad711SPaolo Bonzini {"fsnegd", 4,	two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
307276cad711SPaolo Bonzini {"fsnegd", 4,	two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
307376cad711SPaolo Bonzini {"fsnegl", 4,	two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
307476cad711SPaolo Bonzini {"fsnegl", 4,	two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
307576cad711SPaolo Bonzini {"fsnegp", 4,	two(0xF000, 0x4C5A), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
307676cad711SPaolo Bonzini {"fsnegs", 4,	two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
307776cad711SPaolo Bonzini {"fsnegs", 4,	two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
307876cad711SPaolo Bonzini {"fsnegw", 4,	two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
307976cad711SPaolo Bonzini {"fsnegw", 4,	two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
308076cad711SPaolo Bonzini {"fsnegx", 4,	two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
308176cad711SPaolo Bonzini {"fsnegx", 4,	two(0xF000, 0x485A), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
308276cad711SPaolo Bonzini {"fsnegx", 4,	two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
308376cad711SPaolo Bonzini 
308476cad711SPaolo Bonzini {"fdnegb", 4,	two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
308576cad711SPaolo Bonzini {"fdnegb", 4,	two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
308676cad711SPaolo Bonzini {"fdnegd", 4,	two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
308776cad711SPaolo Bonzini {"fdnegd", 4,	two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
308876cad711SPaolo Bonzini {"fdnegd", 4,	two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
308976cad711SPaolo Bonzini {"fdnegd", 4,	two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
309076cad711SPaolo Bonzini {"fdnegl", 4,	two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
309176cad711SPaolo Bonzini {"fdnegl", 4,	two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
309276cad711SPaolo Bonzini {"fdnegp", 4,	two(0xF000, 0x4C5E), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
309376cad711SPaolo Bonzini {"fdnegs", 4,	two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
309476cad711SPaolo Bonzini {"fdnegs", 4,	two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
309576cad711SPaolo Bonzini {"fdnegw", 4,	two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
309676cad711SPaolo Bonzini {"fdnegw", 4,	two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
309776cad711SPaolo Bonzini {"fdnegx", 4,	two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
309876cad711SPaolo Bonzini {"fdnegx", 4,	two(0xF000, 0x485E), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
309976cad711SPaolo Bonzini {"fdnegx", 4,	two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
310076cad711SPaolo Bonzini 
310176cad711SPaolo Bonzini {"fnop", 4,	two(0xF280, 0x0000), two(0xFFFF, 0xFFFF), "Ii", mfloat | cfloat },
310276cad711SPaolo Bonzini 
310376cad711SPaolo Bonzini {"fremb", 4,	two(0xF000, 0x5825), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
310476cad711SPaolo Bonzini {"fremd", 4,	two(0xF000, 0x5425), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
310576cad711SPaolo Bonzini {"freml", 4,	two(0xF000, 0x4025), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
310676cad711SPaolo Bonzini {"fremp", 4,	two(0xF000, 0x4C25), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
310776cad711SPaolo Bonzini {"frems", 4,	two(0xF000, 0x4425), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
310876cad711SPaolo Bonzini {"fremw", 4,	two(0xF000, 0x5025), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
310976cad711SPaolo Bonzini {"fremx", 4,	two(0xF000, 0x0025), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
311076cad711SPaolo Bonzini {"fremx", 4,	two(0xF000, 0x4825), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
311176cad711SPaolo Bonzini 
311276cad711SPaolo Bonzini {"frestore", 2,	one(0xF140),		one(0xF1C0), "Id<s", mfloat },
311376cad711SPaolo Bonzini {"frestore", 2,	one(0xF140),		one(0xF1C0), "Idys", cfloat },
311476cad711SPaolo Bonzini 
311576cad711SPaolo Bonzini {"fsave", 2,	one(0xF100),		one(0xF1C0), "Id>s", mfloat },
311676cad711SPaolo Bonzini {"fsave", 2,	one(0xF100),		one(0xF1C0), "Idzs", cfloat },
311776cad711SPaolo Bonzini 
311876cad711SPaolo Bonzini {"fscaleb", 4,	two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
311976cad711SPaolo Bonzini {"fscaled", 4,	two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
312076cad711SPaolo Bonzini {"fscalel", 4,	two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
312176cad711SPaolo Bonzini {"fscalep", 4,	two(0xF000, 0x4C26), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
312276cad711SPaolo Bonzini {"fscales", 4,	two(0xF000, 0x4426), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
312376cad711SPaolo Bonzini {"fscalew", 4,	two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
312476cad711SPaolo Bonzini {"fscalex", 4,	two(0xF000, 0x0026), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
312576cad711SPaolo Bonzini {"fscalex", 4,	two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
312676cad711SPaolo Bonzini 
312776cad711SPaolo Bonzini /* $ is necessary to prevent the assembler from using PC-relative.
312876cad711SPaolo Bonzini    If @ were used, "label: fseq label" could produce "ftrapeq", 2,
312976cad711SPaolo Bonzini    because "label" became "pc@label".  */
313076cad711SPaolo Bonzini {"fseq", 4,	two(0xF040, 0x0001), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313176cad711SPaolo Bonzini {"fsf", 4,	two(0xF040, 0x0000), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313276cad711SPaolo Bonzini {"fsge", 4,	two(0xF040, 0x0013), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313376cad711SPaolo Bonzini {"fsgl", 4,	two(0xF040, 0x0016), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313476cad711SPaolo Bonzini {"fsgle", 4,	two(0xF040, 0x0017), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313576cad711SPaolo Bonzini {"fsgt", 4,	two(0xF040, 0x0012), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313676cad711SPaolo Bonzini {"fsle", 4,	two(0xF040, 0x0015), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313776cad711SPaolo Bonzini {"fslt", 4,	two(0xF040, 0x0014), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313876cad711SPaolo Bonzini {"fsne", 4,	two(0xF040, 0x000E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
313976cad711SPaolo Bonzini {"fsnge", 4,	two(0xF040, 0x001C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314076cad711SPaolo Bonzini {"fsngl", 4,	two(0xF040, 0x0019), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314176cad711SPaolo Bonzini {"fsngle", 4,	two(0xF040, 0x0018), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314276cad711SPaolo Bonzini {"fsngt", 4,	two(0xF040, 0x001D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314376cad711SPaolo Bonzini {"fsnle", 4,	two(0xF040, 0x001A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314476cad711SPaolo Bonzini {"fsnlt", 4,	two(0xF040, 0x001B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314576cad711SPaolo Bonzini {"fsoge", 4,	two(0xF040, 0x0003), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314676cad711SPaolo Bonzini {"fsogl", 4,	two(0xF040, 0x0006), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314776cad711SPaolo Bonzini {"fsogt", 4,	two(0xF040, 0x0002), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314876cad711SPaolo Bonzini {"fsole", 4,	two(0xF040, 0x0005), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
314976cad711SPaolo Bonzini {"fsolt", 4,	two(0xF040, 0x0004), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315076cad711SPaolo Bonzini {"fsor", 4,	two(0xF040, 0x0007), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315176cad711SPaolo Bonzini {"fsseq", 4,	two(0xF040, 0x0011), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315276cad711SPaolo Bonzini {"fssf", 4,	two(0xF040, 0x0010), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315376cad711SPaolo Bonzini {"fssne", 4,	two(0xF040, 0x001E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315476cad711SPaolo Bonzini {"fsst", 4,	two(0xF040, 0x001F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315576cad711SPaolo Bonzini {"fst", 4,	two(0xF040, 0x000F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315676cad711SPaolo Bonzini {"fsueq", 4,	two(0xF040, 0x0009), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315776cad711SPaolo Bonzini {"fsuge", 4,	two(0xF040, 0x000B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315876cad711SPaolo Bonzini {"fsugt", 4,	two(0xF040, 0x000A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
315976cad711SPaolo Bonzini {"fsule", 4,	two(0xF040, 0x000D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
316076cad711SPaolo Bonzini {"fsult", 4,	two(0xF040, 0x000C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
316176cad711SPaolo Bonzini {"fsun", 4,	two(0xF040, 0x0008), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
316276cad711SPaolo Bonzini 
316376cad711SPaolo Bonzini {"fsgldivb", 4,	two(0xF000, 0x5824), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
316476cad711SPaolo Bonzini {"fsgldivd", 4,	two(0xF000, 0x5424), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
316576cad711SPaolo Bonzini {"fsgldivl", 4,	two(0xF000, 0x4024), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
316676cad711SPaolo Bonzini {"fsgldivp", 4,	two(0xF000, 0x4C24), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
316776cad711SPaolo Bonzini {"fsgldivs", 4,	two(0xF000, 0x4424), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
316876cad711SPaolo Bonzini {"fsgldivw", 4,	two(0xF000, 0x5024), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
316976cad711SPaolo Bonzini {"fsgldivx", 4,	two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
317076cad711SPaolo Bonzini {"fsgldivx", 4,	two(0xF000, 0x4824), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
317176cad711SPaolo Bonzini {"fsgldivx", 4,	two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
317276cad711SPaolo Bonzini 
317376cad711SPaolo Bonzini {"fsglmulb", 4,	two(0xF000, 0x5827), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
317476cad711SPaolo Bonzini {"fsglmuld", 4,	two(0xF000, 0x5427), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
317576cad711SPaolo Bonzini {"fsglmull", 4,	two(0xF000, 0x4027), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
317676cad711SPaolo Bonzini {"fsglmulp", 4,	two(0xF000, 0x4C27), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
317776cad711SPaolo Bonzini {"fsglmuls", 4,	two(0xF000, 0x4427), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
317876cad711SPaolo Bonzini {"fsglmulw", 4,	two(0xF000, 0x5027), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
317976cad711SPaolo Bonzini {"fsglmulx", 4,	two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
318076cad711SPaolo Bonzini {"fsglmulx", 4,	two(0xF000, 0x4827), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
318176cad711SPaolo Bonzini {"fsglmulx", 4,	two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
318276cad711SPaolo Bonzini 
318376cad711SPaolo Bonzini {"fsinb", 4,	two(0xF000, 0x580E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
318476cad711SPaolo Bonzini {"fsind", 4,	two(0xF000, 0x540E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
318576cad711SPaolo Bonzini {"fsinl", 4,	two(0xF000, 0x400E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
318676cad711SPaolo Bonzini {"fsinp", 4,	two(0xF000, 0x4C0E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
318776cad711SPaolo Bonzini {"fsins", 4,	two(0xF000, 0x440E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
318876cad711SPaolo Bonzini {"fsinw", 4,	two(0xF000, 0x500E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
318976cad711SPaolo Bonzini {"fsinx", 4,	two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
319076cad711SPaolo Bonzini {"fsinx", 4,	two(0xF000, 0x480E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
319176cad711SPaolo Bonzini {"fsinx", 4,	two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
319276cad711SPaolo Bonzini 
319376cad711SPaolo Bonzini {"fsincosb", 4,	two(0xF000, 0x5830), two(0xF1C0, 0xFC78), "Ii;bF3F7", mfloat },
319476cad711SPaolo Bonzini {"fsincosd", 4,	two(0xF000, 0x5430), two(0xF1C0, 0xFC78), "Ii;FF3F7", mfloat },
319576cad711SPaolo Bonzini {"fsincosl", 4,	two(0xF000, 0x4030), two(0xF1C0, 0xFC78), "Ii;lF3F7", mfloat },
319676cad711SPaolo Bonzini {"fsincosp", 4,	two(0xF000, 0x4C30), two(0xF1C0, 0xFC78), "Ii;pF3F7", mfloat },
319776cad711SPaolo Bonzini {"fsincoss", 4,	two(0xF000, 0x4430), two(0xF1C0, 0xFC78), "Ii;fF3F7", mfloat },
319876cad711SPaolo Bonzini {"fsincosw", 4,	two(0xF000, 0x5030), two(0xF1C0, 0xFC78), "Ii;wF3F7", mfloat },
319976cad711SPaolo Bonzini {"fsincosx", 4,	two(0xF000, 0x0030), two(0xF1C0, 0xE078), "IiF8F3F7", mfloat },
320076cad711SPaolo Bonzini {"fsincosx", 4,	two(0xF000, 0x4830), two(0xF1C0, 0xFC78), "Ii;xF3F7", mfloat },
320176cad711SPaolo Bonzini 
320276cad711SPaolo Bonzini {"fsinhb", 4,	two(0xF000, 0x5802), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
320376cad711SPaolo Bonzini {"fsinhd", 4,	two(0xF000, 0x5402), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
320476cad711SPaolo Bonzini {"fsinhl", 4,	two(0xF000, 0x4002), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
320576cad711SPaolo Bonzini {"fsinhp", 4,	two(0xF000, 0x4C02), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
320676cad711SPaolo Bonzini {"fsinhs", 4,	two(0xF000, 0x4402), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
320776cad711SPaolo Bonzini {"fsinhw", 4,	two(0xF000, 0x5002), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
320876cad711SPaolo Bonzini {"fsinhx", 4,	two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
320976cad711SPaolo Bonzini {"fsinhx", 4,	two(0xF000, 0x4802), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
321076cad711SPaolo Bonzini {"fsinhx", 4,	two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
321176cad711SPaolo Bonzini 
321276cad711SPaolo Bonzini {"fsqrtb", 4,	two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
321376cad711SPaolo Bonzini {"fsqrtb", 4,	two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
321476cad711SPaolo Bonzini {"fsqrtd", 4,	two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
321576cad711SPaolo Bonzini {"fsqrtd", 4,	two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
321676cad711SPaolo Bonzini {"fsqrtd", 4,	two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
321776cad711SPaolo Bonzini {"fsqrtd", 4,	two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
321876cad711SPaolo Bonzini {"fsqrtl", 4,	two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
321976cad711SPaolo Bonzini {"fsqrtl", 4,	two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
322076cad711SPaolo Bonzini {"fsqrtp", 4,	two(0xF000, 0x4C04), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
322176cad711SPaolo Bonzini {"fsqrts", 4,	two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
322276cad711SPaolo Bonzini {"fsqrts", 4,	two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
322376cad711SPaolo Bonzini {"fsqrtw", 4,	two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
322476cad711SPaolo Bonzini {"fsqrtw", 4,	two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
322576cad711SPaolo Bonzini {"fsqrtx", 4,	two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
322676cad711SPaolo Bonzini {"fsqrtx", 4,	two(0xF000, 0x4804), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
322776cad711SPaolo Bonzini {"fsqrtx", 4,	two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
322876cad711SPaolo Bonzini 
322976cad711SPaolo Bonzini {"fssqrtb", 4,	two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
323076cad711SPaolo Bonzini {"fssqrtb", 4,	two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
323176cad711SPaolo Bonzini {"fssqrtd", 4,	two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
323276cad711SPaolo Bonzini {"fssqrtd", 4,	two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
323376cad711SPaolo Bonzini {"fssqrtd", 4,	two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
323476cad711SPaolo Bonzini {"fssqrtd", 4,	two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
323576cad711SPaolo Bonzini {"fssqrtl", 4,	two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
323676cad711SPaolo Bonzini {"fssqrtl", 4,	two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
323776cad711SPaolo Bonzini {"fssqrtp", 4,	two(0xF000, 0x4C41), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
323876cad711SPaolo Bonzini {"fssqrts", 4,	two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
323976cad711SPaolo Bonzini {"fssqrts", 4,	two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
324076cad711SPaolo Bonzini {"fssqrtw", 4,	two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
324176cad711SPaolo Bonzini {"fssqrtw", 4,	two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
324276cad711SPaolo Bonzini {"fssqrtx", 4,	two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
324376cad711SPaolo Bonzini {"fssqrtx", 4,	two(0xF000, 0x4841), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
324476cad711SPaolo Bonzini {"fssqrtx", 4,	two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
324576cad711SPaolo Bonzini 
324676cad711SPaolo Bonzini {"fdsqrtb", 4,	two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
324776cad711SPaolo Bonzini {"fdsqrtb", 4,	two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
324876cad711SPaolo Bonzini {"fdsqrtd", 4,	two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
324976cad711SPaolo Bonzini {"fdsqrtd", 4,	two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
325076cad711SPaolo Bonzini {"fdsqrtd", 4,	two(0xF000, 0x5445), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
325176cad711SPaolo Bonzini {"fdsqrtl", 4,	two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
325276cad711SPaolo Bonzini {"fdsqrtl", 4,	two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
325376cad711SPaolo Bonzini {"fdsqrtp", 4,	two(0xF000, 0x4C45), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
325476cad711SPaolo Bonzini {"fdsqrts", 4,	two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
325576cad711SPaolo Bonzini {"fdsqrts", 4,	two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
325676cad711SPaolo Bonzini {"fdsqrtw", 4,	two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
325776cad711SPaolo Bonzini {"fdsqrtw", 4,	two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
325876cad711SPaolo Bonzini {"fdsqrtx", 4,	two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
325976cad711SPaolo Bonzini {"fdsqrtx", 4,	two(0xF000, 0x4845), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
326076cad711SPaolo Bonzini {"fdsqrtx", 4,	two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
326176cad711SPaolo Bonzini 
326276cad711SPaolo Bonzini {"fsubb", 4,	two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
326376cad711SPaolo Bonzini {"fsubb", 4,	two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
326476cad711SPaolo Bonzini {"fsubd", 4,	two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
326576cad711SPaolo Bonzini {"fsubd", 4,	two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
326676cad711SPaolo Bonzini {"fsubd", 4,	two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
326776cad711SPaolo Bonzini {"fsubl", 4,	two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
326876cad711SPaolo Bonzini {"fsubl", 4,	two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
326976cad711SPaolo Bonzini {"fsubp", 4,	two(0xF000, 0x4C28), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
327076cad711SPaolo Bonzini {"fsubs", 4,	two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
327176cad711SPaolo Bonzini {"fsubs", 4,	two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
327276cad711SPaolo Bonzini {"fsubw", 4,	two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
327376cad711SPaolo Bonzini {"fsubw", 4,	two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
327476cad711SPaolo Bonzini {"fsubx", 4,	two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
327576cad711SPaolo Bonzini {"fsubx", 4,	two(0xF000, 0x4828), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
327676cad711SPaolo Bonzini {"fsubx", 4,	two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
327776cad711SPaolo Bonzini 
327876cad711SPaolo Bonzini {"fssubb", 4,	two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
327976cad711SPaolo Bonzini {"fssubb", 4,	two(0xF000, 0x5868), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
328076cad711SPaolo Bonzini {"fssubd", 4,	two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
328176cad711SPaolo Bonzini {"fssubd", 4,	two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
328276cad711SPaolo Bonzini {"fssubd", 4,	two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
328376cad711SPaolo Bonzini {"fssubl", 4,	two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
328476cad711SPaolo Bonzini {"fssubl", 4,	two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
328576cad711SPaolo Bonzini {"fssubp", 4,	two(0xF000, 0x4C68), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
328676cad711SPaolo Bonzini {"fssubs", 4,	two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
328776cad711SPaolo Bonzini {"fssubs", 4,	two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
328876cad711SPaolo Bonzini {"fssubw", 4,	two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
328976cad711SPaolo Bonzini {"fssubw", 4,	two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
329076cad711SPaolo Bonzini {"fssubx", 4,	two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
329176cad711SPaolo Bonzini {"fssubx", 4,	two(0xF000, 0x4868), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
329276cad711SPaolo Bonzini {"fssubx", 4,	two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
329376cad711SPaolo Bonzini 
329476cad711SPaolo Bonzini {"fdsubb", 4,	two(0xF000, 0x586A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
329576cad711SPaolo Bonzini {"fdsubb", 4,	two(0xF000, 0x586c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
329676cad711SPaolo Bonzini {"fdsubd", 4,	two(0xF000, 0x006A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
329776cad711SPaolo Bonzini {"fdsubd", 4,	two(0xF000, 0x546A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
329876cad711SPaolo Bonzini {"fdsubd", 4,	two(0xF000, 0x546c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
329976cad711SPaolo Bonzini {"fdsubl", 4,	two(0xF000, 0x406A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
330076cad711SPaolo Bonzini {"fdsubl", 4,	two(0xF000, 0x406c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
330176cad711SPaolo Bonzini {"fdsubp", 4,	two(0xF000, 0x4C6c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
330276cad711SPaolo Bonzini {"fdsubs", 4,	two(0xF000, 0x446A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
330376cad711SPaolo Bonzini {"fdsubs", 4,	two(0xF000, 0x446c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
330476cad711SPaolo Bonzini {"fdsubw", 4,	two(0xF000, 0x506A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
330576cad711SPaolo Bonzini {"fdsubw", 4,	two(0xF000, 0x506c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
330676cad711SPaolo Bonzini {"fdsubx", 4,	two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
330776cad711SPaolo Bonzini {"fdsubx", 4,	two(0xF000, 0x486c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
330876cad711SPaolo Bonzini {"fdsubx", 4,	two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
330976cad711SPaolo Bonzini 
331076cad711SPaolo Bonzini {"ftanb", 4,	two(0xF000, 0x580F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
331176cad711SPaolo Bonzini {"ftand", 4,	two(0xF000, 0x540F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
331276cad711SPaolo Bonzini {"ftanl", 4,	two(0xF000, 0x400F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
331376cad711SPaolo Bonzini {"ftanp", 4,	two(0xF000, 0x4C0F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
331476cad711SPaolo Bonzini {"ftans", 4,	two(0xF000, 0x440F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
331576cad711SPaolo Bonzini {"ftanw", 4,	two(0xF000, 0x500F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
331676cad711SPaolo Bonzini {"ftanx", 4,	two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
331776cad711SPaolo Bonzini {"ftanx", 4,	two(0xF000, 0x480F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
331876cad711SPaolo Bonzini {"ftanx", 4,	two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
331976cad711SPaolo Bonzini 
332076cad711SPaolo Bonzini {"ftanhb", 4,	two(0xF000, 0x5809), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
332176cad711SPaolo Bonzini {"ftanhd", 4,	two(0xF000, 0x5409), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
332276cad711SPaolo Bonzini {"ftanhl", 4,	two(0xF000, 0x4009), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
332376cad711SPaolo Bonzini {"ftanhp", 4,	two(0xF000, 0x4C09), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
332476cad711SPaolo Bonzini {"ftanhs", 4,	two(0xF000, 0x4409), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
332576cad711SPaolo Bonzini {"ftanhw", 4,	two(0xF000, 0x5009), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
332676cad711SPaolo Bonzini {"ftanhx", 4,	two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
332776cad711SPaolo Bonzini {"ftanhx", 4,	two(0xF000, 0x4809), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
332876cad711SPaolo Bonzini {"ftanhx", 4,	two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
332976cad711SPaolo Bonzini 
333076cad711SPaolo Bonzini {"ftentoxb", 4,	two(0xF000, 0x5812), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
333176cad711SPaolo Bonzini {"ftentoxd", 4,	two(0xF000, 0x5412), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
333276cad711SPaolo Bonzini {"ftentoxl", 4,	two(0xF000, 0x4012), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
333376cad711SPaolo Bonzini {"ftentoxp", 4,	two(0xF000, 0x4C12), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
333476cad711SPaolo Bonzini {"ftentoxs", 4,	two(0xF000, 0x4412), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
333576cad711SPaolo Bonzini {"ftentoxw", 4,	two(0xF000, 0x5012), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
333676cad711SPaolo Bonzini {"ftentoxx", 4,	two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
333776cad711SPaolo Bonzini {"ftentoxx", 4,	two(0xF000, 0x4812), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
333876cad711SPaolo Bonzini {"ftentoxx", 4,	two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
333976cad711SPaolo Bonzini 
334076cad711SPaolo Bonzini {"ftrapeq", 4,	two(0xF07C, 0x0001), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334176cad711SPaolo Bonzini {"ftrapf", 4,	two(0xF07C, 0x0000), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334276cad711SPaolo Bonzini {"ftrapge", 4,	two(0xF07C, 0x0013), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334376cad711SPaolo Bonzini {"ftrapgl", 4,	two(0xF07C, 0x0016), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334476cad711SPaolo Bonzini {"ftrapgle", 4,	two(0xF07C, 0x0017), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334576cad711SPaolo Bonzini {"ftrapgt", 4,	two(0xF07C, 0x0012), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334676cad711SPaolo Bonzini {"ftraple", 4,	two(0xF07C, 0x0015), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334776cad711SPaolo Bonzini {"ftraplt", 4,	two(0xF07C, 0x0014), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334876cad711SPaolo Bonzini {"ftrapne", 4,	two(0xF07C, 0x000E), two(0xF1FF, 0xFFFF), "Ii", mfloat },
334976cad711SPaolo Bonzini {"ftrapnge", 4,	two(0xF07C, 0x001C), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335076cad711SPaolo Bonzini {"ftrapngl", 4,	two(0xF07C, 0x0019), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335176cad711SPaolo Bonzini {"ftrapngle", 4,two(0xF07C, 0x0018), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335276cad711SPaolo Bonzini {"ftrapngt", 4,	two(0xF07C, 0x001D), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335376cad711SPaolo Bonzini {"ftrapnle", 4,	two(0xF07C, 0x001A), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335476cad711SPaolo Bonzini {"ftrapnlt", 4,	two(0xF07C, 0x001B), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335576cad711SPaolo Bonzini {"ftrapoge", 4,	two(0xF07C, 0x0003), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335676cad711SPaolo Bonzini {"ftrapogl", 4,	two(0xF07C, 0x0006), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335776cad711SPaolo Bonzini {"ftrapogt", 4,	two(0xF07C, 0x0002), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335876cad711SPaolo Bonzini {"ftrapole", 4,	two(0xF07C, 0x0005), two(0xF1FF, 0xFFFF), "Ii", mfloat },
335976cad711SPaolo Bonzini {"ftrapolt", 4,	two(0xF07C, 0x0004), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336076cad711SPaolo Bonzini {"ftrapor", 4,	two(0xF07C, 0x0007), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336176cad711SPaolo Bonzini {"ftrapseq", 4,	two(0xF07C, 0x0011), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336276cad711SPaolo Bonzini {"ftrapsf", 4,	two(0xF07C, 0x0010), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336376cad711SPaolo Bonzini {"ftrapsne", 4,	two(0xF07C, 0x001E), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336476cad711SPaolo Bonzini {"ftrapst", 4,	two(0xF07C, 0x001F), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336576cad711SPaolo Bonzini {"ftrapt", 4,	two(0xF07C, 0x000F), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336676cad711SPaolo Bonzini {"ftrapueq", 4,	two(0xF07C, 0x0009), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336776cad711SPaolo Bonzini {"ftrapuge", 4,	two(0xF07C, 0x000B), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336876cad711SPaolo Bonzini {"ftrapugt", 4,	two(0xF07C, 0x000A), two(0xF1FF, 0xFFFF), "Ii", mfloat },
336976cad711SPaolo Bonzini {"ftrapule", 4,	two(0xF07C, 0x000D), two(0xF1FF, 0xFFFF), "Ii", mfloat },
337076cad711SPaolo Bonzini {"ftrapult", 4,	two(0xF07C, 0x000C), two(0xF1FF, 0xFFFF), "Ii", mfloat },
337176cad711SPaolo Bonzini {"ftrapun", 4,	two(0xF07C, 0x0008), two(0xF1FF, 0xFFFF), "Ii", mfloat },
337276cad711SPaolo Bonzini 
337376cad711SPaolo Bonzini {"ftrapeqw", 4,	two(0xF07A, 0x0001), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337476cad711SPaolo Bonzini {"ftrapfw", 4,	two(0xF07A, 0x0000), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337576cad711SPaolo Bonzini {"ftrapgew", 4,	two(0xF07A, 0x0013), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337676cad711SPaolo Bonzini {"ftrapglw", 4,	two(0xF07A, 0x0016), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337776cad711SPaolo Bonzini {"ftrapglew", 4,two(0xF07A, 0x0017), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337876cad711SPaolo Bonzini {"ftrapgtw", 4,	two(0xF07A, 0x0012), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
337976cad711SPaolo Bonzini {"ftraplew", 4,	two(0xF07A, 0x0015), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338076cad711SPaolo Bonzini {"ftrapltw", 4,	two(0xF07A, 0x0014), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338176cad711SPaolo Bonzini {"ftrapnew", 4,	two(0xF07A, 0x000E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338276cad711SPaolo Bonzini {"ftrapngew", 4,two(0xF07A, 0x001C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338376cad711SPaolo Bonzini {"ftrapnglw", 4,two(0xF07A, 0x0019), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338476cad711SPaolo Bonzini {"ftrapnglew", 4,two(0xF07A, 0x0018), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338576cad711SPaolo Bonzini {"ftrapngtw", 4,two(0xF07A, 0x001D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338676cad711SPaolo Bonzini {"ftrapnlew", 4,two(0xF07A, 0x001A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338776cad711SPaolo Bonzini {"ftrapnltw", 4,two(0xF07A, 0x001B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338876cad711SPaolo Bonzini {"ftrapogew", 4,two(0xF07A, 0x0003), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
338976cad711SPaolo Bonzini {"ftrapoglw", 4,two(0xF07A, 0x0006), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339076cad711SPaolo Bonzini {"ftrapogtw", 4,two(0xF07A, 0x0002), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339176cad711SPaolo Bonzini {"ftrapolew", 4,two(0xF07A, 0x0005), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339276cad711SPaolo Bonzini {"ftrapoltw", 4,two(0xF07A, 0x0004), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339376cad711SPaolo Bonzini {"ftraporw", 4,	two(0xF07A, 0x0007), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339476cad711SPaolo Bonzini {"ftrapseqw", 4,two(0xF07A, 0x0011), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339576cad711SPaolo Bonzini {"ftrapsfw", 4,	two(0xF07A, 0x0010), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339676cad711SPaolo Bonzini {"ftrapsnew", 4,two(0xF07A, 0x001E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339776cad711SPaolo Bonzini {"ftrapstw", 4,	two(0xF07A, 0x001F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339876cad711SPaolo Bonzini {"ftraptw", 4,	two(0xF07A, 0x000F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
339976cad711SPaolo Bonzini {"ftrapueqw", 4,two(0xF07A, 0x0009), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340076cad711SPaolo Bonzini {"ftrapugew", 4,two(0xF07A, 0x000B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340176cad711SPaolo Bonzini {"ftrapugtw", 4,two(0xF07A, 0x000A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340276cad711SPaolo Bonzini {"ftrapulew", 4,two(0xF07A, 0x000D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340376cad711SPaolo Bonzini {"ftrapultw", 4,two(0xF07A, 0x000C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340476cad711SPaolo Bonzini {"ftrapunw", 4,	two(0xF07A, 0x0008), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
340576cad711SPaolo Bonzini 
340676cad711SPaolo Bonzini {"ftrapeql", 4,	two(0xF07B, 0x0001), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
340776cad711SPaolo Bonzini {"ftrapfl", 4,	two(0xF07B, 0x0000), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
340876cad711SPaolo Bonzini {"ftrapgel", 4,	two(0xF07B, 0x0013), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
340976cad711SPaolo Bonzini {"ftrapgll", 4,	two(0xF07B, 0x0016), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341076cad711SPaolo Bonzini {"ftrapglel", 4,two(0xF07B, 0x0017), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341176cad711SPaolo Bonzini {"ftrapgtl", 4,	two(0xF07B, 0x0012), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341276cad711SPaolo Bonzini {"ftraplel", 4,	two(0xF07B, 0x0015), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341376cad711SPaolo Bonzini {"ftrapltl", 4,	two(0xF07B, 0x0014), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341476cad711SPaolo Bonzini {"ftrapnel", 4,	two(0xF07B, 0x000E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341576cad711SPaolo Bonzini {"ftrapngel", 4,two(0xF07B, 0x001C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341676cad711SPaolo Bonzini {"ftrapngll", 4,two(0xF07B, 0x0019), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341776cad711SPaolo Bonzini {"ftrapnglel", 4,two(0xF07B, 0x0018), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341876cad711SPaolo Bonzini {"ftrapngtl", 4,two(0xF07B, 0x001D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
341976cad711SPaolo Bonzini {"ftrapnlel", 4,two(0xF07B, 0x001A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342076cad711SPaolo Bonzini {"ftrapnltl", 4,two(0xF07B, 0x001B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342176cad711SPaolo Bonzini {"ftrapogel", 4,two(0xF07B, 0x0003), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342276cad711SPaolo Bonzini {"ftrapogll", 4,two(0xF07B, 0x0006), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342376cad711SPaolo Bonzini {"ftrapogtl", 4,two(0xF07B, 0x0002), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342476cad711SPaolo Bonzini {"ftrapolel", 4,two(0xF07B, 0x0005), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342576cad711SPaolo Bonzini {"ftrapoltl", 4,two(0xF07B, 0x0004), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342676cad711SPaolo Bonzini {"ftraporl", 4,	two(0xF07B, 0x0007), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342776cad711SPaolo Bonzini {"ftrapseql", 4,two(0xF07B, 0x0011), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342876cad711SPaolo Bonzini {"ftrapsfl", 4,	two(0xF07B, 0x0010), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
342976cad711SPaolo Bonzini {"ftrapsnel", 4,two(0xF07B, 0x001E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343076cad711SPaolo Bonzini {"ftrapstl", 4,	two(0xF07B, 0x001F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343176cad711SPaolo Bonzini {"ftraptl", 4,	two(0xF07B, 0x000F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343276cad711SPaolo Bonzini {"ftrapueql", 4,two(0xF07B, 0x0009), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343376cad711SPaolo Bonzini {"ftrapugel", 4,two(0xF07B, 0x000B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343476cad711SPaolo Bonzini {"ftrapugtl", 4,two(0xF07B, 0x000A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343576cad711SPaolo Bonzini {"ftrapulel", 4,two(0xF07B, 0x000D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343676cad711SPaolo Bonzini {"ftrapultl", 4,two(0xF07B, 0x000C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343776cad711SPaolo Bonzini {"ftrapunl", 4,	two(0xF07B, 0x0008), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
343876cad711SPaolo Bonzini 
343976cad711SPaolo Bonzini {"ftstb", 4,	two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Ii;b", mfloat },
344076cad711SPaolo Bonzini {"ftstb", 4,	two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
344176cad711SPaolo Bonzini {"ftstd", 4,	two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", cfloat },
344276cad711SPaolo Bonzini {"ftstd", 4,	two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Ii;F", mfloat },
344376cad711SPaolo Bonzini {"ftstd", 4,	two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
344476cad711SPaolo Bonzini {"ftstl", 4,	two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Ii;l", mfloat },
344576cad711SPaolo Bonzini {"ftstl", 4,	two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
344676cad711SPaolo Bonzini {"ftstp", 4,	two(0xF000, 0x4C3A), two(0xF1C0, 0xFC7F), "Ii;p", mfloat },
344776cad711SPaolo Bonzini {"ftsts", 4,	two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Ii;f", mfloat },
344876cad711SPaolo Bonzini {"ftsts", 4,	two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
344976cad711SPaolo Bonzini {"ftstw", 4,	two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Ii;w", mfloat },
345076cad711SPaolo Bonzini {"ftstw", 4,	two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
345176cad711SPaolo Bonzini {"ftstx", 4,	two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", mfloat },
345276cad711SPaolo Bonzini {"ftstx", 4,	two(0xF000, 0x483A), two(0xF1C0, 0xFC7F), "Ii;x", mfloat },
345376cad711SPaolo Bonzini 
345476cad711SPaolo Bonzini {"ftwotoxb", 4,	two(0xF000, 0x5811), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
345576cad711SPaolo Bonzini {"ftwotoxd", 4,	two(0xF000, 0x5411), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
345676cad711SPaolo Bonzini {"ftwotoxl", 4,	two(0xF000, 0x4011), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
345776cad711SPaolo Bonzini {"ftwotoxp", 4,	two(0xF000, 0x4C11), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
345876cad711SPaolo Bonzini {"ftwotoxs", 4,	two(0xF000, 0x4411), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
345976cad711SPaolo Bonzini {"ftwotoxw", 4,	two(0xF000, 0x5011), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
346076cad711SPaolo Bonzini {"ftwotoxx", 4,	two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
346176cad711SPaolo Bonzini {"ftwotoxx", 4,	two(0xF000, 0x4811), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
346276cad711SPaolo Bonzini {"ftwotoxx", 4,	two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
346376cad711SPaolo Bonzini 
346476cad711SPaolo Bonzini {"halt", 2,	one(0045310),	one(0177777), "",     m68060 | mcfisa_a },
346576cad711SPaolo Bonzini 
346676cad711SPaolo Bonzini {"illegal", 2,	one(0045374),	one(0177777), "",     m68000up | mcfisa_a },
346776cad711SPaolo Bonzini {"intouch", 2,	one(0xf428),	one(0xfff8), "As",    mcfisa_b },
346876cad711SPaolo Bonzini 
346976cad711SPaolo Bonzini {"jmp", 2,	one(0047300),	one(0177700), "!s", m68000up | mcfisa_a },
347076cad711SPaolo Bonzini 
347176cad711SPaolo Bonzini {"jra", 2,	one(0060000),	one(0177400), "Bg", m68000up | mcfisa_a },
347276cad711SPaolo Bonzini {"jra", 2,	one(0047300),	one(0177700), "!s", m68000up | mcfisa_a },
347376cad711SPaolo Bonzini 
347476cad711SPaolo Bonzini {"jsr", 2,	one(0047200),	one(0177700), "!s", m68000up | mcfisa_a },
347576cad711SPaolo Bonzini 
347676cad711SPaolo Bonzini {"jbsr", 2,	one(0060400),	one(0177400), "Bg", m68000up | mcfisa_a },
347776cad711SPaolo Bonzini {"jbsr", 2,	one(0047200),	one(0177700), "!s", m68000up | mcfisa_a },
347876cad711SPaolo Bonzini 
347976cad711SPaolo Bonzini {"lea", 2,	one(0040700),	one(0170700), "!sAd", m68000up | mcfisa_a },
348076cad711SPaolo Bonzini 
348176cad711SPaolo Bonzini {"lpstop", 6,	two(0174000,0000700),two(0177777,0177777),"#w", cpu32|m68060 },
348276cad711SPaolo Bonzini 
348376cad711SPaolo Bonzini {"linkw", 4,	one(0047120),	one(0177770), "As#w", m68000up | mcfisa_a },
348476cad711SPaolo Bonzini {"linkl", 6,	one(0044010),	one(0177770), "As#l", m68020up | cpu32 },
348576cad711SPaolo Bonzini {"link", 4,	one(0047120),	one(0177770), "As#W", m68000up | mcfisa_a },
348676cad711SPaolo Bonzini {"link", 6,	one(0044010),	one(0177770), "As#l", m68020up | cpu32 },
348776cad711SPaolo Bonzini 
348876cad711SPaolo Bonzini {"lslb", 2,	one(0160410),	one(0170770), "QdDs", m68000up },
348976cad711SPaolo Bonzini {"lslb", 2,	one(0160450),	one(0170770), "DdDs", m68000up },
349076cad711SPaolo Bonzini {"lslw", 2,	one(0160510),	one(0170770), "QdDs", m68000up },
349176cad711SPaolo Bonzini {"lslw", 2,	one(0160550),	one(0170770), "DdDs", m68000up },
349276cad711SPaolo Bonzini {"lslw", 2,	one(0161700),	one(0177700), "~s",   m68000up },
349376cad711SPaolo Bonzini {"lsll", 2,	one(0160610),	one(0170770), "QdDs", m68000up | mcfisa_a },
349476cad711SPaolo Bonzini {"lsll", 2,	one(0160650),	one(0170770), "DdDs", m68000up | mcfisa_a },
349576cad711SPaolo Bonzini 
349676cad711SPaolo Bonzini {"lsrb", 2,	one(0160010),	one(0170770), "QdDs", m68000up },
349776cad711SPaolo Bonzini {"lsrb", 2,	one(0160050),	one(0170770), "DdDs", m68000up },
349876cad711SPaolo Bonzini {"lsrw", 2,	one(0160110),	one(0170770), "QdDs", m68000up },
349976cad711SPaolo Bonzini {"lsrw", 2,	one(0160150),	one(0170770), "DdDs", m68000up },
350076cad711SPaolo Bonzini {"lsrw", 2,	one(0161300),	one(0177700), "~s",   m68000up },
350176cad711SPaolo Bonzini {"lsrl", 2,	one(0160210),	one(0170770), "QdDs", m68000up | mcfisa_a },
350276cad711SPaolo Bonzini {"lsrl", 2,	one(0160250),	one(0170770), "DdDs", m68000up | mcfisa_a },
350376cad711SPaolo Bonzini 
350476cad711SPaolo Bonzini {"macw", 4,  	two(0xa080, 0x0000), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
350576cad711SPaolo Bonzini {"macw", 4,  	two(0xa080, 0x0200), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
350676cad711SPaolo Bonzini {"macw", 4,  	two(0xa080, 0x0000), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac },
350776cad711SPaolo Bonzini {"macw", 4,  	two(0xa000, 0x0000), two(0xf1b0, 0x0900), "uMumiI", mcfmac },
350876cad711SPaolo Bonzini {"macw", 4,  	two(0xa000, 0x0200), two(0xf1b0, 0x0900), "uMumMh", mcfmac },
350976cad711SPaolo Bonzini {"macw", 4,  	two(0xa000, 0x0000), two(0xf1b0, 0x0f00), "uMum", mcfmac },
351076cad711SPaolo Bonzini 
351176cad711SPaolo Bonzini {"macw", 4,  	two(0xa000, 0x0000), two(0xf100, 0x0900), "uNuoiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX.  */
351276cad711SPaolo Bonzini {"macw", 4,  	two(0xa000, 0x0200), two(0xf100, 0x0900), "uNuoMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX.  */
351376cad711SPaolo Bonzini {"macw", 4,  	two(0xa000, 0x0000), two(0xf100, 0x0f00), "uNuo4/RneG", mcfemac },/* Ry,Rx,<ea>,accX.  */
351476cad711SPaolo Bonzini {"macw", 4,  	two(0xa000, 0x0000), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX.  */
351576cad711SPaolo Bonzini {"macw", 4,  	two(0xa000, 0x0200), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX.  */
351676cad711SPaolo Bonzini {"macw", 4,  	two(0xa000, 0x0000), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX.  */
351776cad711SPaolo Bonzini 
351876cad711SPaolo Bonzini {"macl", 4,  	two(0xa080, 0x0800), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
351976cad711SPaolo Bonzini {"macl", 4,  	two(0xa080, 0x0a00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
352076cad711SPaolo Bonzini {"macl", 4,  	two(0xa080, 0x0800), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac },
352176cad711SPaolo Bonzini {"macl", 4,  	two(0xa000, 0x0800), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
352276cad711SPaolo Bonzini {"macl", 4,  	two(0xa000, 0x0a00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
352376cad711SPaolo Bonzini {"macl", 4,  	two(0xa000, 0x0800), two(0xf1b0, 0x0800), "RMRm", mcfmac },
352476cad711SPaolo Bonzini 
352576cad711SPaolo Bonzini {"macl", 4,  	two(0xa000, 0x0800), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
352676cad711SPaolo Bonzini {"macl", 4,  	two(0xa000, 0x0a00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
352776cad711SPaolo Bonzini {"macl", 4,  	two(0xa000, 0x0800), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
352876cad711SPaolo Bonzini {"macl", 4,  	two(0xa000, 0x0800), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
352976cad711SPaolo Bonzini {"macl", 4,  	two(0xa000, 0x0a00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
353076cad711SPaolo Bonzini {"macl", 4,  	two(0xa000, 0x0800), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
353176cad711SPaolo Bonzini 
353276cad711SPaolo Bonzini /* NOTE: The mcf5200 family programmer's reference manual does not
353376cad711SPaolo Bonzini    indicate the byte form of the movea instruction is invalid (as it
353476cad711SPaolo Bonzini    is on 68000 family cpus).  However, experiments on the 5202 yield
353576cad711SPaolo Bonzini    unexpected results.  The value is copied, but it is not sign extended
353676cad711SPaolo Bonzini    (as is done with movea.w) and the top three bytes in the address
353776cad711SPaolo Bonzini    register are not disturbed.  I don't know if this is the intended
353876cad711SPaolo Bonzini    behavior --- it could be a hole in instruction decoding (Motorola
353976cad711SPaolo Bonzini    decided not to trap all invalid instructions for performance reasons)
354076cad711SPaolo Bonzini    --- but I suspect that it is not.
354176cad711SPaolo Bonzini 
354276cad711SPaolo Bonzini    I reported this to Motorola ISD Technical Communications Support,
354376cad711SPaolo Bonzini    which replied that other coldfire assemblers reject movea.b.  For
354476cad711SPaolo Bonzini    this reason I've decided to not allow moveab.
354576cad711SPaolo Bonzini 
354676cad711SPaolo Bonzini 	jtc@cygnus.com - 97/01/24.  */
354776cad711SPaolo Bonzini 
354876cad711SPaolo Bonzini {"moveal", 2,	one(0020100),	one(0170700), "*lAd", m68000up | mcfisa_a },
354976cad711SPaolo Bonzini {"moveaw", 2,	one(0030100),	one(0170700), "*wAd", m68000up | mcfisa_a },
355076cad711SPaolo Bonzini 
355176cad711SPaolo Bonzini {"movclrl", 2,	one(0xA1C0),	one(0xf9f0), "eFRs", mcfemac },
355276cad711SPaolo Bonzini 
355376cad711SPaolo Bonzini {"movec", 4,	one(0047173),	one(0177777), "R1Jj", m68010up | mcfisa_a },
355476cad711SPaolo Bonzini {"movec", 4,	one(0047173),	one(0177777), "R1#j", m68010up | mcfisa_a },
355576cad711SPaolo Bonzini {"movec", 4,	one(0047172),	one(0177777), "JjR1", m68010up },
355676cad711SPaolo Bonzini {"movec", 4,	one(0047172),	one(0177777), "#jR1", m68010up },
355776cad711SPaolo Bonzini 
355876cad711SPaolo Bonzini {"movemw", 4,	one(0044200),	one(0177700), "Lw&s", m68000up },
355976cad711SPaolo Bonzini {"movemw", 4,	one(0044240),	one(0177770), "lw-s", m68000up },
356076cad711SPaolo Bonzini {"movemw", 4,	one(0044200),	one(0177700), "#w>s", m68000up },
356176cad711SPaolo Bonzini {"movemw", 4,	one(0046200),	one(0177700), "<sLw", m68000up },
356276cad711SPaolo Bonzini {"movemw", 4,	one(0046200),	one(0177700), "<s#w", m68000up },
356376cad711SPaolo Bonzini {"moveml", 4,	one(0044300),	one(0177700), "Lw&s", m68000up },
356476cad711SPaolo Bonzini {"moveml", 4,	one(0044340),	one(0177770), "lw-s", m68000up },
356576cad711SPaolo Bonzini {"moveml", 4,	one(0044300),	one(0177700), "#w>s", m68000up },
356676cad711SPaolo Bonzini {"moveml", 4,	one(0046300),	one(0177700), "<sLw", m68000up },
356776cad711SPaolo Bonzini {"moveml", 4,	one(0046300),	one(0177700), "<s#w", m68000up },
356876cad711SPaolo Bonzini /* FIXME: need specifier for mode 2 and 5 to simplify below insn patterns.  */
356976cad711SPaolo Bonzini {"moveml", 4,	one(0044320),	one(0177770), "Lwas", mcfisa_a },
357076cad711SPaolo Bonzini {"moveml", 4,	one(0044320),	one(0177770), "#was", mcfisa_a },
357176cad711SPaolo Bonzini {"moveml", 4,	one(0044350),	one(0177770), "Lwds", mcfisa_a },
357276cad711SPaolo Bonzini {"moveml", 4,	one(0044350),	one(0177770), "#wds", mcfisa_a },
357376cad711SPaolo Bonzini {"moveml", 4,	one(0046320),	one(0177770), "asLw", mcfisa_a },
357476cad711SPaolo Bonzini {"moveml", 4,	one(0046320),	one(0177770), "as#w", mcfisa_a },
357576cad711SPaolo Bonzini {"moveml", 4,	one(0046350),	one(0177770), "dsLw", mcfisa_a },
357676cad711SPaolo Bonzini {"moveml", 4,	one(0046350),	one(0177770), "ds#w", mcfisa_a },
357776cad711SPaolo Bonzini 
357876cad711SPaolo Bonzini {"movepw", 2,	one(0000410),	one(0170770), "dsDd", m68000up },
357976cad711SPaolo Bonzini {"movepw", 2,	one(0000610),	one(0170770), "Ddds", m68000up },
358076cad711SPaolo Bonzini {"movepl", 2,	one(0000510),	one(0170770), "dsDd", m68000up },
358176cad711SPaolo Bonzini {"movepl", 2,	one(0000710),	one(0170770), "Ddds", m68000up },
358276cad711SPaolo Bonzini 
358376cad711SPaolo Bonzini {"moveq", 2,	one(0070000),	one(0170400), "MsDd", m68000up | mcfisa_a },
358476cad711SPaolo Bonzini {"moveq", 2,	one(0070000),	one(0170400), "#BDd", m68000up | mcfisa_a },
358576cad711SPaolo Bonzini 
358676cad711SPaolo Bonzini /* The move opcode can generate the movea and moveq instructions.  */
358776cad711SPaolo Bonzini {"moveb", 2,	one(0010000),	one(0170000), ";b$d", m68000up },
358876cad711SPaolo Bonzini {"moveb", 2,	one(0010000),	one(0170070), "Ds$d", mcfisa_a },
358976cad711SPaolo Bonzini {"moveb", 2,	one(0010020),	one(0170070), "as$d", mcfisa_a },
359076cad711SPaolo Bonzini {"moveb", 2,	one(0010030),	one(0170070), "+s$d", mcfisa_a },
359176cad711SPaolo Bonzini {"moveb", 2,	one(0010040),	one(0170070), "-s$d", mcfisa_a },
359276cad711SPaolo Bonzini {"moveb", 2,	one(0010000),	one(0170000), "nsqd", mcfisa_a },
359376cad711SPaolo Bonzini {"moveb", 2,	one(0010000),	one(0170700), "obDd", mcfisa_a },
359476cad711SPaolo Bonzini {"moveb", 2,	one(0010200),	one(0170700), "obad", mcfisa_a },
359576cad711SPaolo Bonzini {"moveb", 2,	one(0010300),	one(0170700), "ob+d", mcfisa_a },
359676cad711SPaolo Bonzini {"moveb", 2,	one(0010400),	one(0170700), "ob-d", mcfisa_a },
359776cad711SPaolo Bonzini {"moveb", 2,	one(0010000),	one(0170000), "obnd", mcfisa_b },
359876cad711SPaolo Bonzini 
359976cad711SPaolo Bonzini {"movew", 2,	one(0030000),	one(0170000), "*w%d", m68000up },
360076cad711SPaolo Bonzini {"movew", 2,	one(0030000),	one(0170000), "ms%d", mcfisa_a },
360176cad711SPaolo Bonzini {"movew", 2,	one(0030000),	one(0170000), "nspd", mcfisa_a },
360276cad711SPaolo Bonzini {"movew", 2,	one(0030000),	one(0170000), "owmd", mcfisa_a },
360376cad711SPaolo Bonzini {"movew", 2,	one(0030000),	one(0170000), "ownd", mcfisa_b },
360476cad711SPaolo Bonzini {"movew", 2,	one(0040300),	one(0177700), "Ss$s", m68000up },
360576cad711SPaolo Bonzini {"movew", 2,	one(0040300),	one(0177770), "SsDs", mcfisa_a },
360676cad711SPaolo Bonzini {"movew", 2,	one(0041300),	one(0177700), "Cs$s", m68010up },
360776cad711SPaolo Bonzini {"movew", 2,	one(0041300),	one(0177770), "CsDs", mcfisa_a },
360876cad711SPaolo Bonzini {"movew", 2,	one(0042300),	one(0177700), ";wCd", m68000up },
360976cad711SPaolo Bonzini {"movew", 2,	one(0042300),	one(0177700), "DsCd", mcfisa_a },
361076cad711SPaolo Bonzini {"movew", 4,	one(0042374),	one(0177777), "#wCd", mcfisa_a },
361176cad711SPaolo Bonzini {"movew", 2,	one(0043300),	one(0177700), ";wSd", m68000up },
361276cad711SPaolo Bonzini {"movew", 2,	one(0043300),	one(0177700), "DsSd", mcfisa_a },
361376cad711SPaolo Bonzini {"movew", 4,	one(0043374),	one(0177777), "#wSd", mcfisa_a },
361476cad711SPaolo Bonzini 
361576cad711SPaolo Bonzini {"movel", 2,	one(0070000),	one(0170400), "MsDd", m68000up | mcfisa_a },
361676cad711SPaolo Bonzini {"movel", 2,	one(0020000),	one(0170000), "*l%d", m68000up },
361776cad711SPaolo Bonzini {"movel", 2,	one(0020000),	one(0170000), "ms%d", mcfisa_a },
361876cad711SPaolo Bonzini {"movel", 2,	one(0020000),	one(0170000), "nspd", mcfisa_a },
361976cad711SPaolo Bonzini {"movel", 2,	one(0020000),	one(0170000), "olmd", mcfisa_a },
362076cad711SPaolo Bonzini {"movel", 2,	one(0020000),	one(0170000), "olnd", mcfisa_b },
362176cad711SPaolo Bonzini {"movel", 2,	one(0047140),	one(0177770), "AsUd", m68000up | mcfusp },
362276cad711SPaolo Bonzini {"movel", 2,	one(0047150),	one(0177770), "UdAs", m68000up | mcfusp },
362376cad711SPaolo Bonzini {"movel", 2,	one(0120600),	one(0177760), "EsRs", mcfmac },
362476cad711SPaolo Bonzini {"movel", 2,	one(0120400),	one(0177760), "RsEs", mcfmac },
362576cad711SPaolo Bonzini {"movel", 6,	one(0120474),	one(0177777), "#lEs", mcfmac },
362676cad711SPaolo Bonzini {"movel", 2,	one(0124600),	one(0177760), "GsRs", mcfmac },
362776cad711SPaolo Bonzini {"movel", 2,	one(0124400),	one(0177760), "RsGs", mcfmac },
362876cad711SPaolo Bonzini {"movel", 6,	one(0124474),	one(0177777), "#lGs", mcfmac },
362976cad711SPaolo Bonzini {"movel", 2,	one(0126600),	one(0177760), "HsRs", mcfmac },
363076cad711SPaolo Bonzini {"movel", 2,	one(0126400),	one(0177760), "RsHs", mcfmac },
363176cad711SPaolo Bonzini {"movel", 6,	one(0126474),	one(0177777), "#lHs", mcfmac },
363276cad711SPaolo Bonzini {"movel", 2,	one(0124700),	one(0177777), "GsCs", mcfmac },
363376cad711SPaolo Bonzini 
363476cad711SPaolo Bonzini {"movel", 2,	one(0xa180),	one(0xf9f0), "eFRs", mcfemac }, /* ACCx,Rx.  */
363576cad711SPaolo Bonzini {"movel", 2,	one(0xab80),	one(0xfbf0), "g]Rs", mcfemac }, /* ACCEXTx,Rx.  */
363676cad711SPaolo Bonzini {"movel", 2,	one(0xa980),	one(0xfff0), "G-Rs", mcfemac }, /* macsr,Rx.  */
363776cad711SPaolo Bonzini {"movel", 2,	one(0xad80),	one(0xfff0), "H-Rs", mcfemac }, /* mask,Rx.  */
363876cad711SPaolo Bonzini {"movel", 2,	one(0xa110),	one(0xf9fc), "efeF", mcfemac }, /* ACCy,ACCx.  */
363976cad711SPaolo Bonzini {"movel", 2,	one(0xa9c0),	one(0xffff), "G-C-", mcfemac }, /* macsr,ccr.  */
364076cad711SPaolo Bonzini {"movel", 2,	one(0xa100),	one(0xf9f0), "RseF", mcfemac }, /* Rx,ACCx.  */
364176cad711SPaolo Bonzini {"movel", 6,	one(0xa13c),	one(0xf9ff), "#leF", mcfemac }, /* #,ACCx.  */
364276cad711SPaolo Bonzini {"movel", 2,	one(0xab00),	one(0xfbc0), "Rsg]", mcfemac }, /* Rx,ACCEXTx.  */
364376cad711SPaolo Bonzini {"movel", 6,	one(0xab3c),	one(0xfbff), "#lg]", mcfemac }, /* #,ACCEXTx.  */
364476cad711SPaolo Bonzini {"movel", 2,	one(0xa900),	one(0xffc0), "RsG-", mcfemac }, /* Rx,macsr.  */
364576cad711SPaolo Bonzini {"movel", 6,	one(0xa93c),	one(0xffff), "#lG-", mcfemac }, /* #,macsr.  */
364676cad711SPaolo Bonzini {"movel", 2,	one(0xad00),	one(0xffc0), "RsH-", mcfemac }, /* Rx,mask.  */
364776cad711SPaolo Bonzini {"movel", 6,	one(0xad3c),	one(0xffff), "#lH-", mcfemac }, /* #,mask.  */
364876cad711SPaolo Bonzini 
364976cad711SPaolo Bonzini {"move", 2,	one(0030000),	one(0170000), "*w%d", m68000up },
365076cad711SPaolo Bonzini {"move", 2,	one(0030000),	one(0170000), "ms%d", mcfisa_a },
365176cad711SPaolo Bonzini {"move", 2,	one(0030000),	one(0170000), "nspd", mcfisa_a },
365276cad711SPaolo Bonzini {"move", 2,	one(0030000),	one(0170000), "owmd", mcfisa_a },
365376cad711SPaolo Bonzini {"move", 2,	one(0030000),	one(0170000), "ownd", mcfisa_b },
365476cad711SPaolo Bonzini {"move", 2,	one(0040300),	one(0177700), "Ss$s", m68000up },
365576cad711SPaolo Bonzini {"move", 2,	one(0040300),	one(0177770), "SsDs", mcfisa_a },
365676cad711SPaolo Bonzini {"move", 2,	one(0041300),	one(0177700), "Cs$s", m68010up },
365776cad711SPaolo Bonzini {"move", 2,	one(0041300),	one(0177770), "CsDs", mcfisa_a },
365876cad711SPaolo Bonzini {"move", 2,	one(0042300),	one(0177700), ";wCd", m68000up },
365976cad711SPaolo Bonzini {"move", 2,	one(0042300),	one(0177700), "DsCd", mcfisa_a },
366076cad711SPaolo Bonzini {"move", 4,	one(0042374),	one(0177777), "#wCd", mcfisa_a },
366176cad711SPaolo Bonzini {"move", 2,	one(0043300),	one(0177700), ";wSd", m68000up },
366276cad711SPaolo Bonzini {"move", 2,	one(0043300),	one(0177700), "DsSd", mcfisa_a },
366376cad711SPaolo Bonzini {"move", 4,	one(0043374),	one(0177777), "#wSd", mcfisa_a },
366476cad711SPaolo Bonzini 
366576cad711SPaolo Bonzini {"move", 2,	one(0047140),	one(0177770), "AsUd", m68000up },
366676cad711SPaolo Bonzini {"move", 2,	one(0047150),	one(0177770), "UdAs", m68000up },
366776cad711SPaolo Bonzini 
366876cad711SPaolo Bonzini {"mov3ql", 2,	one(0120500),	one(0170700), "xd%s", mcfisa_b },
366976cad711SPaolo Bonzini {"mvsb", 2,	one(0070400),	one(0170700), "*bDd", mcfisa_b },
367076cad711SPaolo Bonzini {"mvsw", 2,	one(0070500),	one(0170700), "*wDd", mcfisa_b },
367176cad711SPaolo Bonzini {"mvzb", 2,	one(0070600),	one(0170700), "*bDd", mcfisa_b },
367276cad711SPaolo Bonzini {"mvzw", 2,	one(0070700),	one(0170700), "*wDd", mcfisa_b },
367376cad711SPaolo Bonzini 
367476cad711SPaolo Bonzini {"movesb", 4,	two(0007000, 0),     two(0177700, 07777), "~sR1", m68010up },
367576cad711SPaolo Bonzini {"movesb", 4,	two(0007000, 04000), two(0177700, 07777), "R1~s", m68010up },
367676cad711SPaolo Bonzini {"movesw", 4,	two(0007100, 0),     two(0177700, 07777), "~sR1", m68010up },
367776cad711SPaolo Bonzini {"movesw", 4,	two(0007100, 04000), two(0177700, 07777), "R1~s", m68010up },
367876cad711SPaolo Bonzini {"movesl", 4,	two(0007200, 0),     two(0177700, 07777), "~sR1", m68010up },
367976cad711SPaolo Bonzini {"movesl", 4,	two(0007200, 04000), two(0177700, 07777), "R1~s", m68010up },
368076cad711SPaolo Bonzini 
368176cad711SPaolo Bonzini {"move16", 4,	two(0xf620, 0x8000), two(0xfff8, 0x8fff), "+s+1", m68040up },
368276cad711SPaolo Bonzini {"move16", 2,	one(0xf600),		one(0xfff8), "+s_L", m68040up },
368376cad711SPaolo Bonzini {"move16", 2,	one(0xf608),		one(0xfff8), "_L+s", m68040up },
368476cad711SPaolo Bonzini {"move16", 2,	one(0xf610),		one(0xfff8), "as_L", m68040up },
368576cad711SPaolo Bonzini {"move16", 2,	one(0xf618),		one(0xfff8), "_Las", m68040up },
368676cad711SPaolo Bonzini 
368776cad711SPaolo Bonzini {"msacw", 4,  	two(0xa080, 0x0100), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
368876cad711SPaolo Bonzini {"msacw", 4,  	two(0xa080, 0x0300), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
368976cad711SPaolo Bonzini {"msacw", 4,  	two(0xa080, 0x0100), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac },
369076cad711SPaolo Bonzini {"msacw", 4,  	two(0xa000, 0x0100), two(0xf1b0, 0x0900), "uMumiI", mcfmac },
369176cad711SPaolo Bonzini {"msacw", 4,  	two(0xa000, 0x0300), two(0xf1b0, 0x0900), "uMumMh", mcfmac },
369276cad711SPaolo Bonzini {"msacw", 4,  	two(0xa000, 0x0100), two(0xf1b0, 0x0f00), "uMum", mcfmac },
369376cad711SPaolo Bonzini 
369476cad711SPaolo Bonzini {"msacw", 4,  	two(0xa000, 0x0100), two(0xf100, 0x0900), "uMumiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX.  */
369576cad711SPaolo Bonzini {"msacw", 4,  	two(0xa000, 0x0300), two(0xf100, 0x0900), "uMumMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX.  */
369676cad711SPaolo Bonzini {"msacw", 4,  	two(0xa000, 0x0100), two(0xf100, 0x0f00), "uMum4/RneG", mcfemac },/* Ry,Rx,<ea>,accX.  */
369776cad711SPaolo Bonzini {"msacw", 4,  	two(0xa000, 0x0100), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX.  */
369876cad711SPaolo Bonzini {"msacw", 4,  	two(0xa000, 0x0300), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX.  */
369976cad711SPaolo Bonzini {"msacw", 4,  	two(0xa000, 0x0100), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX.  */
370076cad711SPaolo Bonzini 
370176cad711SPaolo Bonzini {"msacl", 4,  	two(0xa080, 0x0900), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
370276cad711SPaolo Bonzini {"msacl", 4,  	two(0xa080, 0x0b00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
370376cad711SPaolo Bonzini {"msacl", 4,  	two(0xa080, 0x0900), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac },
370476cad711SPaolo Bonzini {"msacl", 4,  	two(0xa000, 0x0900), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
370576cad711SPaolo Bonzini {"msacl", 4,  	two(0xa000, 0x0b00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
370676cad711SPaolo Bonzini {"msacl", 4,  	two(0xa000, 0x0900), two(0xf1b0, 0x0800), "RMRm", mcfmac },
370776cad711SPaolo Bonzini 
370876cad711SPaolo Bonzini {"msacl", 4,  	two(0xa000, 0x0900), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
370976cad711SPaolo Bonzini {"msacl", 4,  	two(0xa000, 0x0b00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
371076cad711SPaolo Bonzini {"msacl", 4,  	two(0xa000, 0x0900), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
371176cad711SPaolo Bonzini {"msacl", 4,  	two(0xa000, 0x0900), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
371276cad711SPaolo Bonzini {"msacl", 4,  	two(0xa000, 0x0b00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
371376cad711SPaolo Bonzini {"msacl", 4,  	two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
371476cad711SPaolo Bonzini 
371576cad711SPaolo Bonzini {"mulsw", 2,	one(0140700),		one(0170700), ";wDd", m68000up|mcfisa_a },
371676cad711SPaolo Bonzini {"mulsl", 4,	two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
371776cad711SPaolo Bonzini {"mulsl", 4,	two(0046000,004000), two(0177700,0107770), "qsD1", mcfisa_a },
371876cad711SPaolo Bonzini {"mulsl", 4,	two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
371976cad711SPaolo Bonzini 
372076cad711SPaolo Bonzini {"muluw", 2,	one(0140300),		one(0170700), ";wDd", m68000up|mcfisa_a },
372176cad711SPaolo Bonzini {"mulul", 4,	two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
372276cad711SPaolo Bonzini {"mulul", 4,	two(0046000,000000), two(0177700,0107770), "qsD1", mcfisa_a },
372376cad711SPaolo Bonzini {"mulul", 4,	two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
372476cad711SPaolo Bonzini 
372576cad711SPaolo Bonzini {"nbcd", 2,	one(0044000),	one(0177700), "$s", m68000up },
372676cad711SPaolo Bonzini 
372776cad711SPaolo Bonzini {"negb", 2,	one(0042000),	one(0177700), "$s", m68000up },
372876cad711SPaolo Bonzini {"negw", 2,	one(0042100),	one(0177700), "$s", m68000up },
372976cad711SPaolo Bonzini {"negl", 2,	one(0042200),	one(0177700), "$s", m68000up },
373076cad711SPaolo Bonzini {"negl", 2,	one(0042200),	one(0177700), "Ds", mcfisa_a},
373176cad711SPaolo Bonzini 
373276cad711SPaolo Bonzini {"negxb", 2,	one(0040000),	one(0177700), "$s", m68000up },
373376cad711SPaolo Bonzini {"negxw", 2,	one(0040100),	one(0177700), "$s", m68000up },
373476cad711SPaolo Bonzini {"negxl", 2,	one(0040200),	one(0177700), "$s", m68000up },
373576cad711SPaolo Bonzini {"negxl", 2,	one(0040200),	one(0177700), "Ds", mcfisa_a},
373676cad711SPaolo Bonzini 
373776cad711SPaolo Bonzini {"nop", 2,	one(0047161),	one(0177777), "", m68000up | mcfisa_a},
373876cad711SPaolo Bonzini 
373976cad711SPaolo Bonzini {"notb", 2,	one(0043000),	one(0177700), "$s", m68000up },
374076cad711SPaolo Bonzini {"notw", 2,	one(0043100),	one(0177700), "$s", m68000up },
374176cad711SPaolo Bonzini {"notl", 2,	one(0043200),	one(0177700), "$s", m68000up },
374276cad711SPaolo Bonzini {"notl", 2,	one(0043200),	one(0177700), "Ds", mcfisa_a},
374376cad711SPaolo Bonzini 
374476cad711SPaolo Bonzini {"orib", 4,	one(0000000),	one(0177700), "#b$s", m68000up },
374576cad711SPaolo Bonzini {"orib", 4,	one(0000074),	one(0177777), "#bCs", m68000up },
374676cad711SPaolo Bonzini {"oriw", 4,	one(0000100),	one(0177700), "#w$s", m68000up },
374776cad711SPaolo Bonzini {"oriw", 4,	one(0000174),	one(0177777), "#wSs", m68000up },
374876cad711SPaolo Bonzini {"oril", 6,	one(0000200),	one(0177700), "#l$s", m68000up },
374976cad711SPaolo Bonzini {"oril", 6,	one(0000200),	one(0177700), "#lDs", mcfisa_a },
375076cad711SPaolo Bonzini {"ori", 4,	one(0000074),	one(0177777), "#bCs", m68000up },
375176cad711SPaolo Bonzini {"ori", 4,	one(0000100),	one(0177700), "#w$s", m68000up },
375276cad711SPaolo Bonzini {"ori", 4,	one(0000174),	one(0177777), "#wSs", m68000up },
375376cad711SPaolo Bonzini 
375476cad711SPaolo Bonzini /* The or opcode can generate the ori instruction.  */
375576cad711SPaolo Bonzini {"orb", 4,	one(0000000),	one(0177700), "#b$s", m68000up },
375676cad711SPaolo Bonzini {"orb", 4,	one(0000074),	one(0177777), "#bCs", m68000up },
375776cad711SPaolo Bonzini {"orb", 2,	one(0100000),	one(0170700), ";bDd", m68000up },
375876cad711SPaolo Bonzini {"orb", 2,	one(0100400),	one(0170700), "Dd~s", m68000up },
375976cad711SPaolo Bonzini {"orw", 4,	one(0000100),	one(0177700), "#w$s", m68000up },
376076cad711SPaolo Bonzini {"orw", 4,	one(0000174),	one(0177777), "#wSs", m68000up },
376176cad711SPaolo Bonzini {"orw", 2,	one(0100100),	one(0170700), ";wDd", m68000up },
376276cad711SPaolo Bonzini {"orw", 2,	one(0100500),	one(0170700), "Dd~s", m68000up },
376376cad711SPaolo Bonzini {"orl", 6,	one(0000200),	one(0177700), "#l$s", m68000up },
376476cad711SPaolo Bonzini {"orl", 6,	one(0000200),	one(0177700), "#lDs", mcfisa_a },
376576cad711SPaolo Bonzini {"orl", 2,	one(0100200),	one(0170700), ";lDd", m68000up | mcfisa_a },
376676cad711SPaolo Bonzini {"orl", 2,	one(0100600),	one(0170700), "Dd~s", m68000up | mcfisa_a },
376776cad711SPaolo Bonzini {"or", 4,	one(0000074),	one(0177777), "#bCs", m68000up },
376876cad711SPaolo Bonzini {"or", 4,	one(0000100),	one(0177700), "#w$s", m68000up },
376976cad711SPaolo Bonzini {"or", 4,	one(0000174),	one(0177777), "#wSs", m68000up },
377076cad711SPaolo Bonzini {"or", 2,	one(0100100),	one(0170700), ";wDd", m68000up },
377176cad711SPaolo Bonzini {"or", 2,	one(0100500),	one(0170700), "Dd~s", m68000up },
377276cad711SPaolo Bonzini 
377376cad711SPaolo Bonzini {"pack", 4,	one(0100500),	one(0170770), "DsDd#w", m68020up },
377476cad711SPaolo Bonzini {"pack", 4,	one(0100510),	one(0170770), "-s-d#w", m68020up },
377576cad711SPaolo Bonzini 
377676cad711SPaolo Bonzini {"pbac", 2,	one(0xf087),	one(0xffbf), "Bc", m68851 },
377776cad711SPaolo Bonzini {"pbacw", 2,	one(0xf087),	one(0xffff), "BW", m68851 },
377876cad711SPaolo Bonzini {"pbas", 2,	one(0xf086),	one(0xffbf), "Bc", m68851 },
377976cad711SPaolo Bonzini {"pbasw", 2,	one(0xf086),	one(0xffff), "BW", m68851 },
378076cad711SPaolo Bonzini {"pbbc", 2,	one(0xf081),	one(0xffbf), "Bc", m68851 },
378176cad711SPaolo Bonzini {"pbbcw", 2,	one(0xf081),	one(0xffff), "BW", m68851 },
378276cad711SPaolo Bonzini {"pbbs", 2,	one(0xf080),	one(0xffbf), "Bc", m68851 },
378376cad711SPaolo Bonzini {"pbbsw", 2,	one(0xf080),	one(0xffff), "BW", m68851 },
378476cad711SPaolo Bonzini {"pbcc", 2,	one(0xf08f),	one(0xffbf), "Bc", m68851 },
378576cad711SPaolo Bonzini {"pbccw", 2,	one(0xf08f),	one(0xffff), "BW", m68851 },
378676cad711SPaolo Bonzini {"pbcs", 2,	one(0xf08e),	one(0xffbf), "Bc", m68851 },
378776cad711SPaolo Bonzini {"pbcsw", 2,	one(0xf08e),	one(0xffff), "BW", m68851 },
378876cad711SPaolo Bonzini {"pbgc", 2,	one(0xf08d),	one(0xffbf), "Bc", m68851 },
378976cad711SPaolo Bonzini {"pbgcw", 2,	one(0xf08d),	one(0xffff), "BW", m68851 },
379076cad711SPaolo Bonzini {"pbgs", 2,	one(0xf08c),	one(0xffbf), "Bc", m68851 },
379176cad711SPaolo Bonzini {"pbgsw", 2,	one(0xf08c),	one(0xffff), "BW", m68851 },
379276cad711SPaolo Bonzini {"pbic", 2,	one(0xf08b),	one(0xffbf), "Bc", m68851 },
379376cad711SPaolo Bonzini {"pbicw", 2,	one(0xf08b),	one(0xffff), "BW", m68851 },
379476cad711SPaolo Bonzini {"pbis", 2,	one(0xf08a),	one(0xffbf), "Bc", m68851 },
379576cad711SPaolo Bonzini {"pbisw", 2,	one(0xf08a),	one(0xffff), "BW", m68851 },
379676cad711SPaolo Bonzini {"pblc", 2,	one(0xf083),	one(0xffbf), "Bc", m68851 },
379776cad711SPaolo Bonzini {"pblcw", 2,	one(0xf083),	one(0xffff), "BW", m68851 },
379876cad711SPaolo Bonzini {"pbls", 2,	one(0xf082),	one(0xffbf), "Bc", m68851 },
379976cad711SPaolo Bonzini {"pblsw", 2,	one(0xf082),	one(0xffff), "BW", m68851 },
380076cad711SPaolo Bonzini {"pbsc", 2,	one(0xf085),	one(0xffbf), "Bc", m68851 },
380176cad711SPaolo Bonzini {"pbscw", 2,	one(0xf085),	one(0xffff), "BW", m68851 },
380276cad711SPaolo Bonzini {"pbss", 2,	one(0xf084),	one(0xffbf), "Bc", m68851 },
380376cad711SPaolo Bonzini {"pbssw", 2,	one(0xf084),	one(0xffff), "BW", m68851 },
380476cad711SPaolo Bonzini {"pbwc", 2,	one(0xf089),	one(0xffbf), "Bc", m68851 },
380576cad711SPaolo Bonzini {"pbwcw", 2,	one(0xf089),	one(0xffff), "BW", m68851 },
380676cad711SPaolo Bonzini {"pbws", 2,	one(0xf088),	one(0xffbf), "Bc", m68851 },
380776cad711SPaolo Bonzini {"pbwsw", 2,	one(0xf088),	one(0xffff), "BW", m68851 },
380876cad711SPaolo Bonzini 
380976cad711SPaolo Bonzini {"pdbac", 4,	two(0xf048, 0x0007),	two(0xfff8, 0xffff), "DsBw", m68851 },
381076cad711SPaolo Bonzini {"pdbas", 4,	two(0xf048, 0x0006),	two(0xfff8, 0xffff), "DsBw", m68851 },
381176cad711SPaolo Bonzini {"pdbbc", 4,	two(0xf048, 0x0001),	two(0xfff8, 0xffff), "DsBw", m68851 },
381276cad711SPaolo Bonzini {"pdbbs", 4,	two(0xf048, 0x0000),	two(0xfff8, 0xffff), "DsBw", m68851 },
381376cad711SPaolo Bonzini {"pdbcc", 4,	two(0xf048, 0x000f),	two(0xfff8, 0xffff), "DsBw", m68851 },
381476cad711SPaolo Bonzini {"pdbcs", 4,	two(0xf048, 0x000e),	two(0xfff8, 0xffff), "DsBw", m68851 },
381576cad711SPaolo Bonzini {"pdbgc", 4,	two(0xf048, 0x000d),	two(0xfff8, 0xffff), "DsBw", m68851 },
381676cad711SPaolo Bonzini {"pdbgs", 4,	two(0xf048, 0x000c),	two(0xfff8, 0xffff), "DsBw", m68851 },
381776cad711SPaolo Bonzini {"pdbic", 4,	two(0xf048, 0x000b),	two(0xfff8, 0xffff), "DsBw", m68851 },
381876cad711SPaolo Bonzini {"pdbis", 4,	two(0xf048, 0x000a),	two(0xfff8, 0xffff), "DsBw", m68851 },
381976cad711SPaolo Bonzini {"pdblc", 4,	two(0xf048, 0x0003),	two(0xfff8, 0xffff), "DsBw", m68851 },
382076cad711SPaolo Bonzini {"pdbls", 4,	two(0xf048, 0x0002),	two(0xfff8, 0xffff), "DsBw", m68851 },
382176cad711SPaolo Bonzini {"pdbsc", 4,	two(0xf048, 0x0005),	two(0xfff8, 0xffff), "DsBw", m68851 },
382276cad711SPaolo Bonzini {"pdbss", 4,	two(0xf048, 0x0004),	two(0xfff8, 0xffff), "DsBw", m68851 },
382376cad711SPaolo Bonzini {"pdbwc", 4,	two(0xf048, 0x0009),	two(0xfff8, 0xffff), "DsBw", m68851 },
382476cad711SPaolo Bonzini {"pdbws", 4,	two(0xf048, 0x0008),	two(0xfff8, 0xffff), "DsBw", m68851 },
382576cad711SPaolo Bonzini 
382676cad711SPaolo Bonzini {"pea", 2,	one(0044100),		one(0177700), "!s", m68000up|mcfisa_a },
382776cad711SPaolo Bonzini 
382876cad711SPaolo Bonzini {"pflusha", 2,	one(0xf518),		one(0xfff8), "", m68040up },
382976cad711SPaolo Bonzini {"pflusha", 4,	two(0xf000,0x2400), two(0xffff,0xffff), "", m68030 | m68851 },
383076cad711SPaolo Bonzini 
383176cad711SPaolo Bonzini {"pflush", 4,   two(0xf000,0x3010), two(0xffc0,0xfe10), "T3T9", m68030|m68851 },
383276cad711SPaolo Bonzini {"pflush", 4,   two(0xf000,0x3810), two(0xffc0,0xfe10), "T3T9&s", m68030|m68851 },
383376cad711SPaolo Bonzini {"pflush", 4,   two(0xf000,0x3008), two(0xffc0,0xfe18), "D3T9", m68030|m68851 },
383476cad711SPaolo Bonzini {"pflush", 4,   two(0xf000,0x3808), two(0xffc0,0xfe18), "D3T9&s", m68030|m68851 },
383576cad711SPaolo Bonzini {"pflush", 4,   two(0xf000,0x3000), two(0xffc0,0xfe1e), "f3T9", m68030|m68851 },
383676cad711SPaolo Bonzini {"pflush", 4,   two(0xf000,0x3800), two(0xffc0,0xfe1e), "f3T9&s", m68030|m68851 },
383776cad711SPaolo Bonzini {"pflush", 2,	one(0xf508),		one(0xfff8), "as", m68040up },
383876cad711SPaolo Bonzini {"pflush", 2,	one(0xf508),		one(0xfff8), "As", m68040up },
383976cad711SPaolo Bonzini 
384076cad711SPaolo Bonzini {"pflushan", 2,	one(0xf510),		one(0xfff8), "", m68040up },
384176cad711SPaolo Bonzini {"pflushn", 2,	one(0xf500),		one(0xfff8), "as", m68040up },
384276cad711SPaolo Bonzini {"pflushn", 2,	one(0xf500),		one(0xfff8), "As", m68040up },
384376cad711SPaolo Bonzini 
384476cad711SPaolo Bonzini {"pflushr", 4,	two(0xf000, 0xa000), two(0xffc0, 0xffff), "|s", m68851 },
384576cad711SPaolo Bonzini 
384676cad711SPaolo Bonzini {"pflushs", 4,	two(0xf000, 0x3410), two(0xfff8, 0xfe10), "T3T9", m68851 },
384776cad711SPaolo Bonzini {"pflushs", 4,	two(0xf000, 0x3c10), two(0xfff8, 0xfe10), "T3T9&s", m68851 },
384876cad711SPaolo Bonzini {"pflushs", 4,	two(0xf000, 0x3408), two(0xfff8, 0xfe18), "D3T9", m68851 },
384976cad711SPaolo Bonzini {"pflushs", 4,	two(0xf000, 0x3c08), two(0xfff8, 0xfe18), "D3T9&s", m68851 },
385076cad711SPaolo Bonzini {"pflushs", 4,	two(0xf000, 0x3400), two(0xfff8, 0xfe1e), "f3T9", m68851 },
385176cad711SPaolo Bonzini {"pflushs", 4,	two(0xf000, 0x3c00), two(0xfff8, 0xfe1e), "f3T9&s", m68851 },
385276cad711SPaolo Bonzini 
385376cad711SPaolo Bonzini {"ploadr", 4,   two(0xf000,0x2210), two(0xffc0,0xfff0), "T3&s", m68030|m68851 },
385476cad711SPaolo Bonzini {"ploadr", 4,   two(0xf000,0x2208), two(0xffc0,0xfff8), "D3&s", m68030|m68851 },
385576cad711SPaolo Bonzini {"ploadr", 4,   two(0xf000,0x2200), two(0xffc0,0xfffe), "f3&s", m68030|m68851 },
385676cad711SPaolo Bonzini {"ploadw", 4,   two(0xf000,0x2010), two(0xffc0,0xfff0), "T3&s", m68030|m68851 },
385776cad711SPaolo Bonzini {"ploadw", 4,   two(0xf000,0x2008), two(0xffc0,0xfff8), "D3&s", m68030|m68851 },
385876cad711SPaolo Bonzini {"ploadw", 4,   two(0xf000,0x2000), two(0xffc0,0xfffe), "f3&s", m68030|m68851 },
385976cad711SPaolo Bonzini 
386076cad711SPaolo Bonzini {"plpar", 2,	one(0xf5c8),		one(0xfff8), "as", m68060 },
386176cad711SPaolo Bonzini {"plpaw", 2,	one(0xf588),		one(0xfff8), "as", m68060 },
386276cad711SPaolo Bonzini 
386376cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xffff), "*l08", m68030|m68851 },
386476cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x5c00), two(0xffc0,0xffff), "*w18", m68851 },
386576cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xe3ff), "*b28", m68851 },
386676cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xffff), "08%s", m68030|m68851 },
386776cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x5e00), two(0xffc0,0xffff), "18%s", m68851 },
386876cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xe3ff), "28%s", m68851 },
386976cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xe3ff), "|sW8", m68030|m68851 },
387076cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xe3ff), "W8~s", m68030|m68851 },
387176cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x6200), two(0xffc0,0xe3e3), "*wX3", m68851 },
387276cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x6000), two(0xffc0,0xe3e3), "X3%s", m68851 },
387376cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x6000), two(0xffc0,0xffff), "*wY8", m68030|m68851 },
387476cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x6200), two(0xffc0,0xffff), "Y8%s", m68030|m68851 },
387576cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x6600), two(0xffc0,0xffff), "Z8%s", m68851 },
387676cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x0800), two(0xffc0,0xfbff), "*l38", m68030 },
387776cad711SPaolo Bonzini {"pmove", 4,    two(0xf000,0x0a00), two(0xffc0,0xfbff), "38%s", m68030 },
387876cad711SPaolo Bonzini 
387976cad711SPaolo Bonzini {"pmovefd", 4,	two(0xf000, 0x4100),	two(0xffc0, 0xe3ff), "*l08", m68030 },
388076cad711SPaolo Bonzini {"pmovefd", 4,	two(0xf000, 0x4100),	two(0xffc0, 0xe3ff), "|sW8", m68030 },
388176cad711SPaolo Bonzini {"pmovefd", 4,	two(0xf000, 0x0900),	two(0xffc0, 0xfbff), "*l38", m68030 },
388276cad711SPaolo Bonzini 
388376cad711SPaolo Bonzini {"prestore", 2,	one(0xf140),		one(0xffc0), "<s", m68851 },
388476cad711SPaolo Bonzini 
388576cad711SPaolo Bonzini {"psave", 2,	one(0xf100),		one(0xffc0), ">s", m68851 },
388676cad711SPaolo Bonzini 
388776cad711SPaolo Bonzini {"psac", 4,	two(0xf040, 0x0007),	two(0xffc0, 0xffff), "$s", m68851 },
388876cad711SPaolo Bonzini {"psas", 4,	two(0xf040, 0x0006),	two(0xffc0, 0xffff), "$s", m68851 },
388976cad711SPaolo Bonzini {"psbc", 4,	two(0xf040, 0x0001),	two(0xffc0, 0xffff), "$s", m68851 },
389076cad711SPaolo Bonzini {"psbs", 4,	two(0xf040, 0x0000),	two(0xffc0, 0xffff), "$s", m68851 },
389176cad711SPaolo Bonzini {"pscc", 4,	two(0xf040, 0x000f),	two(0xffc0, 0xffff), "$s", m68851 },
389276cad711SPaolo Bonzini {"pscs", 4,	two(0xf040, 0x000e),	two(0xffc0, 0xffff), "$s", m68851 },
389376cad711SPaolo Bonzini {"psgc", 4,	two(0xf040, 0x000d),	two(0xffc0, 0xffff), "$s", m68851 },
389476cad711SPaolo Bonzini {"psgs", 4,	two(0xf040, 0x000c),	two(0xffc0, 0xffff), "$s", m68851 },
389576cad711SPaolo Bonzini {"psic", 4,	two(0xf040, 0x000b),	two(0xffc0, 0xffff), "$s", m68851 },
389676cad711SPaolo Bonzini {"psis", 4,	two(0xf040, 0x000a),	two(0xffc0, 0xffff), "$s", m68851 },
389776cad711SPaolo Bonzini {"pslc", 4,	two(0xf040, 0x0003),	two(0xffc0, 0xffff), "$s", m68851 },
389876cad711SPaolo Bonzini {"psls", 4,	two(0xf040, 0x0002),	two(0xffc0, 0xffff), "$s", m68851 },
389976cad711SPaolo Bonzini {"pssc", 4,	two(0xf040, 0x0005),	two(0xffc0, 0xffff), "$s", m68851 },
390076cad711SPaolo Bonzini {"psss", 4,	two(0xf040, 0x0004),	two(0xffc0, 0xffff), "$s", m68851 },
390176cad711SPaolo Bonzini {"pswc", 4,	two(0xf040, 0x0009),	two(0xffc0, 0xffff), "$s", m68851 },
390276cad711SPaolo Bonzini {"psws", 4,	two(0xf040, 0x0008),	two(0xffc0, 0xffff), "$s", m68851 },
390376cad711SPaolo Bonzini 
390476cad711SPaolo Bonzini {"ptestr", 4, 	two(0xf000,0x8210), two(0xffc0, 0xe3f0), "T3&st8", m68030|m68851 },
390576cad711SPaolo Bonzini {"ptestr", 4, 	two(0xf000,0x8310), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 },
390676cad711SPaolo Bonzini {"ptestr", 4, 	two(0xf000,0x8208), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 },
390776cad711SPaolo Bonzini {"ptestr", 4, 	two(0xf000,0x8308), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 },
390876cad711SPaolo Bonzini {"ptestr", 4, 	two(0xf000,0x8200), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 },
390976cad711SPaolo Bonzini {"ptestr", 4, 	two(0xf000,0x8300), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 },
391076cad711SPaolo Bonzini {"ptestr", 2,	one(0xf568),		one(0xfff8), "as", m68040 },
391176cad711SPaolo Bonzini 
391276cad711SPaolo Bonzini {"ptestw", 4, 	two(0xf000,0x8010), two(0xffc0,0xe3f0), "T3&st8", m68030|m68851 },
391376cad711SPaolo Bonzini {"ptestw", 4, 	two(0xf000,0x8110), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 },
391476cad711SPaolo Bonzini {"ptestw", 4, 	two(0xf000,0x8008), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 },
391576cad711SPaolo Bonzini {"ptestw", 4, 	two(0xf000,0x8108), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 },
391676cad711SPaolo Bonzini {"ptestw", 4, 	two(0xf000,0x8000), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 },
391776cad711SPaolo Bonzini {"ptestw", 4, 	two(0xf000,0x8100), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 },
391876cad711SPaolo Bonzini {"ptestw", 2,	one(0xf548),		one(0xfff8), "as", m68040 },
391976cad711SPaolo Bonzini 
392076cad711SPaolo Bonzini {"ptrapacw", 6,	two(0xf07a, 0x0007),	two(0xffff, 0xffff), "#w", m68851 },
392176cad711SPaolo Bonzini {"ptrapacl", 6,	two(0xf07b, 0x0007),	two(0xffff, 0xffff), "#l", m68851 },
392276cad711SPaolo Bonzini {"ptrapac", 4,	two(0xf07c, 0x0007),	two(0xffff, 0xffff), "",   m68851 },
392376cad711SPaolo Bonzini 
392476cad711SPaolo Bonzini {"ptrapasw", 6,	two(0xf07a, 0x0006),	two(0xffff, 0xffff), "#w", m68851 },
392576cad711SPaolo Bonzini {"ptrapasl", 6,	two(0xf07b, 0x0006),	two(0xffff, 0xffff), "#l", m68851 },
392676cad711SPaolo Bonzini {"ptrapas", 4,	two(0xf07c, 0x0006),	two(0xffff, 0xffff), "",   m68851 },
392776cad711SPaolo Bonzini 
392876cad711SPaolo Bonzini {"ptrapbcw", 6,	two(0xf07a, 0x0001),	two(0xffff, 0xffff), "#w", m68851 },
392976cad711SPaolo Bonzini {"ptrapbcl", 6,	two(0xf07b, 0x0001),	two(0xffff, 0xffff), "#l", m68851 },
393076cad711SPaolo Bonzini {"ptrapbc", 4,	two(0xf07c, 0x0001),	two(0xffff, 0xffff), "",   m68851 },
393176cad711SPaolo Bonzini 
393276cad711SPaolo Bonzini {"ptrapbsw", 6,	two(0xf07a, 0x0000),	two(0xffff, 0xffff), "#w", m68851 },
393376cad711SPaolo Bonzini {"ptrapbsl", 6,	two(0xf07b, 0x0000),	two(0xffff, 0xffff), "#l", m68851 },
393476cad711SPaolo Bonzini {"ptrapbs", 4,	two(0xf07c, 0x0000),	two(0xffff, 0xffff), "",   m68851 },
393576cad711SPaolo Bonzini 
393676cad711SPaolo Bonzini {"ptrapccw", 6,	two(0xf07a, 0x000f),	two(0xffff, 0xffff), "#w", m68851 },
393776cad711SPaolo Bonzini {"ptrapccl", 6,	two(0xf07b, 0x000f),	two(0xffff, 0xffff), "#l", m68851 },
393876cad711SPaolo Bonzini {"ptrapcc", 4,	two(0xf07c, 0x000f),	two(0xffff, 0xffff), "",   m68851 },
393976cad711SPaolo Bonzini 
394076cad711SPaolo Bonzini {"ptrapcsw", 6,	two(0xf07a, 0x000e),	two(0xffff, 0xffff), "#w", m68851 },
394176cad711SPaolo Bonzini {"ptrapcsl", 6,	two(0xf07b, 0x000e),	two(0xffff, 0xffff), "#l", m68851 },
394276cad711SPaolo Bonzini {"ptrapcs", 4,	two(0xf07c, 0x000e),	two(0xffff, 0xffff), "",   m68851 },
394376cad711SPaolo Bonzini 
394476cad711SPaolo Bonzini {"ptrapgcw", 6,	two(0xf07a, 0x000d),	two(0xffff, 0xffff), "#w", m68851 },
394576cad711SPaolo Bonzini {"ptrapgcl", 6,	two(0xf07b, 0x000d),	two(0xffff, 0xffff), "#l", m68851 },
394676cad711SPaolo Bonzini {"ptrapgc", 4,	two(0xf07c, 0x000d),	two(0xffff, 0xffff), "",   m68851 },
394776cad711SPaolo Bonzini 
394876cad711SPaolo Bonzini {"ptrapgsw", 6,	two(0xf07a, 0x000c),	two(0xffff, 0xffff), "#w", m68851 },
394976cad711SPaolo Bonzini {"ptrapgsl", 6,	two(0xf07b, 0x000c),	two(0xffff, 0xffff), "#l", m68851 },
395076cad711SPaolo Bonzini {"ptrapgs", 4,	two(0xf07c, 0x000c),	two(0xffff, 0xffff), "",   m68851 },
395176cad711SPaolo Bonzini 
395276cad711SPaolo Bonzini {"ptrapicw", 6,	two(0xf07a, 0x000b),	two(0xffff, 0xffff), "#w", m68851 },
395376cad711SPaolo Bonzini {"ptrapicl", 6,	two(0xf07b, 0x000b),	two(0xffff, 0xffff), "#l", m68851 },
395476cad711SPaolo Bonzini {"ptrapic", 4,	two(0xf07c, 0x000b),	two(0xffff, 0xffff), "",   m68851 },
395576cad711SPaolo Bonzini 
395676cad711SPaolo Bonzini {"ptrapisw", 6,	two(0xf07a, 0x000a),	two(0xffff, 0xffff), "#w", m68851 },
395776cad711SPaolo Bonzini {"ptrapisl", 6,	two(0xf07b, 0x000a),	two(0xffff, 0xffff), "#l", m68851 },
395876cad711SPaolo Bonzini {"ptrapis", 4,	two(0xf07c, 0x000a),	two(0xffff, 0xffff), "",   m68851 },
395976cad711SPaolo Bonzini 
396076cad711SPaolo Bonzini {"ptraplcw", 6,	two(0xf07a, 0x0003),	two(0xffff, 0xffff), "#w", m68851 },
396176cad711SPaolo Bonzini {"ptraplcl", 6,	two(0xf07b, 0x0003),	two(0xffff, 0xffff), "#l", m68851 },
396276cad711SPaolo Bonzini {"ptraplc", 4,	two(0xf07c, 0x0003),	two(0xffff, 0xffff), "",   m68851 },
396376cad711SPaolo Bonzini 
396476cad711SPaolo Bonzini {"ptraplsw", 6,	two(0xf07a, 0x0002),	two(0xffff, 0xffff), "#w", m68851 },
396576cad711SPaolo Bonzini {"ptraplsl", 6,	two(0xf07b, 0x0002),	two(0xffff, 0xffff), "#l", m68851 },
396676cad711SPaolo Bonzini {"ptrapls", 4,	two(0xf07c, 0x0002),	two(0xffff, 0xffff), "",   m68851 },
396776cad711SPaolo Bonzini 
396876cad711SPaolo Bonzini {"ptrapscw", 6,	two(0xf07a, 0x0005),	two(0xffff, 0xffff), "#w", m68851 },
396976cad711SPaolo Bonzini {"ptrapscl", 6,	two(0xf07b, 0x0005),	two(0xffff, 0xffff), "#l", m68851 },
397076cad711SPaolo Bonzini {"ptrapsc", 4,	two(0xf07c, 0x0005),	two(0xffff, 0xffff), "",   m68851 },
397176cad711SPaolo Bonzini 
397276cad711SPaolo Bonzini {"ptrapssw", 6,	two(0xf07a, 0x0004),	two(0xffff, 0xffff), "#w", m68851 },
397376cad711SPaolo Bonzini {"ptrapssl", 6,	two(0xf07b, 0x0004),	two(0xffff, 0xffff), "#l", m68851 },
397476cad711SPaolo Bonzini {"ptrapss", 4,	two(0xf07c, 0x0004),	two(0xffff, 0xffff), "",   m68851 },
397576cad711SPaolo Bonzini 
397676cad711SPaolo Bonzini {"ptrapwcw", 6,	two(0xf07a, 0x0009),	two(0xffff, 0xffff), "#w", m68851 },
397776cad711SPaolo Bonzini {"ptrapwcl", 6,	two(0xf07b, 0x0009),	two(0xffff, 0xffff), "#l", m68851 },
397876cad711SPaolo Bonzini {"ptrapwc", 4,	two(0xf07c, 0x0009),	two(0xffff, 0xffff), "",   m68851 },
397976cad711SPaolo Bonzini 
398076cad711SPaolo Bonzini {"ptrapwsw", 6,	two(0xf07a, 0x0008),	two(0xffff, 0xffff), "#w", m68851 },
398176cad711SPaolo Bonzini {"ptrapwsl", 6,	two(0xf07b, 0x0008),	two(0xffff, 0xffff), "#l", m68851 },
398276cad711SPaolo Bonzini {"ptrapws", 4,	two(0xf07c, 0x0008),	two(0xffff, 0xffff), "",   m68851 },
398376cad711SPaolo Bonzini 
398476cad711SPaolo Bonzini {"pulse", 2,	one(0045314),		one(0177777), "", m68060 | mcfisa_a },
398576cad711SPaolo Bonzini 
398676cad711SPaolo Bonzini {"pvalid", 4,	two(0xf000, 0x2800),	two(0xffc0, 0xffff), "Vs&s", m68851 },
398776cad711SPaolo Bonzini {"pvalid", 4,	two(0xf000, 0x2c00),	two(0xffc0, 0xfff8), "A3&s", m68851 },
398876cad711SPaolo Bonzini 
398976cad711SPaolo Bonzini   /* FIXME: don't allow Dw==Dx. */
399076cad711SPaolo Bonzini {"remsl", 4,    two(0x4c40, 0x0800),    two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv },
399176cad711SPaolo Bonzini {"remul", 4,    two(0x4c40, 0x0000),    two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv },
399276cad711SPaolo Bonzini 
399376cad711SPaolo Bonzini {"reset", 2,	one(0047160),		one(0177777), "", m68000up },
399476cad711SPaolo Bonzini 
399576cad711SPaolo Bonzini {"rolb", 2,	one(0160430),		one(0170770), "QdDs", m68000up },
399676cad711SPaolo Bonzini {"rolb", 2,	one(0160470),		one(0170770), "DdDs", m68000up },
399776cad711SPaolo Bonzini {"rolw", 2,	one(0160530),		one(0170770), "QdDs", m68000up },
399876cad711SPaolo Bonzini {"rolw", 2,	one(0160570),		one(0170770), "DdDs", m68000up },
399976cad711SPaolo Bonzini {"rolw", 2,	one(0163700),		one(0177700), "~s",   m68000up },
400076cad711SPaolo Bonzini {"roll", 2,	one(0160630),		one(0170770), "QdDs", m68000up },
400176cad711SPaolo Bonzini {"roll", 2,	one(0160670),		one(0170770), "DdDs", m68000up },
400276cad711SPaolo Bonzini 
400376cad711SPaolo Bonzini {"rorb", 2,	one(0160030),		one(0170770), "QdDs", m68000up },
400476cad711SPaolo Bonzini {"rorb", 2,	one(0160070),		one(0170770), "DdDs", m68000up },
400576cad711SPaolo Bonzini {"rorw", 2,	one(0160130),		one(0170770), "QdDs", m68000up },
400676cad711SPaolo Bonzini {"rorw", 2,	one(0160170),		one(0170770), "DdDs", m68000up },
400776cad711SPaolo Bonzini {"rorw", 2,	one(0163300),		one(0177700), "~s",   m68000up },
400876cad711SPaolo Bonzini {"rorl", 2,	one(0160230),		one(0170770), "QdDs", m68000up },
400976cad711SPaolo Bonzini {"rorl", 2,	one(0160270),		one(0170770), "DdDs", m68000up },
401076cad711SPaolo Bonzini 
401176cad711SPaolo Bonzini {"roxlb", 2,	one(0160420),		one(0170770), "QdDs", m68000up },
401276cad711SPaolo Bonzini {"roxlb", 2,	one(0160460),		one(0170770), "DdDs", m68000up },
401376cad711SPaolo Bonzini {"roxlw", 2,	one(0160520),		one(0170770), "QdDs", m68000up },
401476cad711SPaolo Bonzini {"roxlw", 2,	one(0160560),		one(0170770), "DdDs", m68000up },
401576cad711SPaolo Bonzini {"roxlw", 2,	one(0162700),		one(0177700), "~s",   m68000up },
401676cad711SPaolo Bonzini {"roxll", 2,	one(0160620),		one(0170770), "QdDs", m68000up },
401776cad711SPaolo Bonzini {"roxll", 2,	one(0160660),		one(0170770), "DdDs", m68000up },
401876cad711SPaolo Bonzini 
401976cad711SPaolo Bonzini {"roxrb", 2,	one(0160020),		one(0170770), "QdDs", m68000up },
402076cad711SPaolo Bonzini {"roxrb", 2,	one(0160060),		one(0170770), "DdDs", m68000up },
402176cad711SPaolo Bonzini {"roxrw", 2,	one(0160120),		one(0170770), "QdDs", m68000up },
402276cad711SPaolo Bonzini {"roxrw", 2,	one(0160160),		one(0170770), "DdDs", m68000up },
402376cad711SPaolo Bonzini {"roxrw", 2,	one(0162300),		one(0177700), "~s",   m68000up },
402476cad711SPaolo Bonzini {"roxrl", 2,	one(0160220),		one(0170770), "QdDs", m68000up },
402576cad711SPaolo Bonzini {"roxrl", 2,	one(0160260),		one(0170770), "DdDs", m68000up },
402676cad711SPaolo Bonzini 
402776cad711SPaolo Bonzini {"rtd", 4,	one(0047164),		one(0177777), "#w", m68010up },
402876cad711SPaolo Bonzini 
402976cad711SPaolo Bonzini {"rte", 2,	one(0047163),		one(0177777), "",   m68000up | mcfisa_a },
403076cad711SPaolo Bonzini 
403176cad711SPaolo Bonzini {"rtm", 2,	one(0003300),		one(0177760), "Rs", m68020 },
403276cad711SPaolo Bonzini 
403376cad711SPaolo Bonzini {"rtr", 2,	one(0047167),		one(0177777), "",   m68000up },
403476cad711SPaolo Bonzini 
403576cad711SPaolo Bonzini {"rts", 2,	one(0047165),		one(0177777), "",   m68000up | mcfisa_a },
403676cad711SPaolo Bonzini 
403776cad711SPaolo Bonzini {"satsl", 2,	one(0046200),		one(0177770), "Ds", mcfisa_b },
403876cad711SPaolo Bonzini 
403976cad711SPaolo Bonzini {"sbcd", 2,	one(0100400),		one(0170770), "DsDd", m68000up },
404076cad711SPaolo Bonzini {"sbcd", 2,	one(0100410),		one(0170770), "-s-d", m68000up },
404176cad711SPaolo Bonzini 
404276cad711SPaolo Bonzini {"scc", 2,	one(0052300),	one(0177700), "$s", m68000up },
404376cad711SPaolo Bonzini {"scc", 2,	one(0052300),	one(0177700), "Ds", mcfisa_a },
404476cad711SPaolo Bonzini {"scs", 2,	one(0052700),	one(0177700), "$s", m68000up },
404576cad711SPaolo Bonzini {"scs", 2,	one(0052700),	one(0177700), "Ds", mcfisa_a },
404676cad711SPaolo Bonzini {"seq", 2,	one(0053700),	one(0177700), "$s", m68000up },
404776cad711SPaolo Bonzini {"seq", 2,	one(0053700),	one(0177700), "Ds", mcfisa_a },
404876cad711SPaolo Bonzini {"sf", 2,	one(0050700),	one(0177700), "$s", m68000up },
404976cad711SPaolo Bonzini {"sf", 2,	one(0050700),	one(0177700), "Ds", mcfisa_a },
405076cad711SPaolo Bonzini {"sge", 2,	one(0056300),	one(0177700), "$s", m68000up },
405176cad711SPaolo Bonzini {"sge", 2,	one(0056300),	one(0177700), "Ds", mcfisa_a },
405276cad711SPaolo Bonzini {"sgt", 2,	one(0057300),	one(0177700), "$s", m68000up },
405376cad711SPaolo Bonzini {"sgt", 2,	one(0057300),	one(0177700), "Ds", mcfisa_a },
405476cad711SPaolo Bonzini {"shi", 2,	one(0051300),	one(0177700), "$s", m68000up },
405576cad711SPaolo Bonzini {"shi", 2,	one(0051300),	one(0177700), "Ds", mcfisa_a },
405676cad711SPaolo Bonzini {"sle", 2,	one(0057700),	one(0177700), "$s", m68000up },
405776cad711SPaolo Bonzini {"sle", 2,	one(0057700),	one(0177700), "Ds", mcfisa_a },
405876cad711SPaolo Bonzini {"sls", 2,	one(0051700),	one(0177700), "$s", m68000up },
405976cad711SPaolo Bonzini {"sls", 2,	one(0051700),	one(0177700), "Ds", mcfisa_a },
406076cad711SPaolo Bonzini {"slt", 2,	one(0056700),	one(0177700), "$s", m68000up },
406176cad711SPaolo Bonzini {"slt", 2,	one(0056700),	one(0177700), "Ds", mcfisa_a },
406276cad711SPaolo Bonzini {"smi", 2,	one(0055700),	one(0177700), "$s", m68000up },
406376cad711SPaolo Bonzini {"smi", 2,	one(0055700),	one(0177700), "Ds", mcfisa_a },
406476cad711SPaolo Bonzini {"sne", 2,	one(0053300),	one(0177700), "$s", m68000up },
406576cad711SPaolo Bonzini {"sne", 2,	one(0053300),	one(0177700), "Ds", mcfisa_a },
406676cad711SPaolo Bonzini {"spl", 2,	one(0055300),	one(0177700), "$s", m68000up },
406776cad711SPaolo Bonzini {"spl", 2,	one(0055300),	one(0177700), "Ds", mcfisa_a },
406876cad711SPaolo Bonzini {"st", 2,	one(0050300),	one(0177700), "$s", m68000up },
406976cad711SPaolo Bonzini {"st", 2,	one(0050300),	one(0177700), "Ds", mcfisa_a },
407076cad711SPaolo Bonzini {"svc", 2,	one(0054300),	one(0177700), "$s", m68000up },
407176cad711SPaolo Bonzini {"svc", 2,	one(0054300),	one(0177700), "Ds", mcfisa_a },
407276cad711SPaolo Bonzini {"svs", 2,	one(0054700),	one(0177700), "$s", m68000up },
407376cad711SPaolo Bonzini {"svs", 2,	one(0054700),	one(0177700), "Ds", mcfisa_a },
407476cad711SPaolo Bonzini 
407576cad711SPaolo Bonzini {"stop", 4,	one(0047162),	one(0177777), "#w", m68000up | mcfisa_a },
407676cad711SPaolo Bonzini 
407776cad711SPaolo Bonzini {"strldsr", 4, two(0040347,0043374), two(0177777,0177777), "#w", mcfisa_aa},
407876cad711SPaolo Bonzini 
407976cad711SPaolo Bonzini {"subal", 2,	one(0110700),	one(0170700), "*lAd", m68000up | mcfisa_a },
408076cad711SPaolo Bonzini {"subaw", 2,	one(0110300),	one(0170700), "*wAd", m68000up },
408176cad711SPaolo Bonzini 
408276cad711SPaolo Bonzini {"subib", 4,	one(0002000),	one(0177700), "#b$s", m68000up },
408376cad711SPaolo Bonzini {"subiw", 4,	one(0002100),	one(0177700), "#w$s", m68000up },
408476cad711SPaolo Bonzini {"subil", 6,	one(0002200),	one(0177700), "#l$s", m68000up },
408576cad711SPaolo Bonzini {"subil", 6,	one(0002200),	one(0177700), "#lDs", mcfisa_a },
408676cad711SPaolo Bonzini 
408776cad711SPaolo Bonzini {"subqb", 2,	one(0050400),	one(0170700), "Qd%s", m68000up },
408876cad711SPaolo Bonzini {"subqw", 2,	one(0050500),	one(0170700), "Qd%s", m68000up },
408976cad711SPaolo Bonzini {"subql", 2,	one(0050600),	one(0170700), "Qd%s", m68000up | mcfisa_a },
409076cad711SPaolo Bonzini 
409176cad711SPaolo Bonzini /* The sub opcode can generate the suba, subi, and subq instructions.  */
409276cad711SPaolo Bonzini {"subb", 2,	one(0050400),	one(0170700), "Qd%s", m68000up },
409376cad711SPaolo Bonzini {"subb", 4,	one(0002000),	one(0177700), "#b$s", m68000up },
409476cad711SPaolo Bonzini {"subb", 2,	one(0110000),	one(0170700), ";bDd", m68000up },
409576cad711SPaolo Bonzini {"subb", 2,	one(0110400),	one(0170700), "Dd~s", m68000up },
409676cad711SPaolo Bonzini {"subw", 2,	one(0050500),	one(0170700), "Qd%s", m68000up },
409776cad711SPaolo Bonzini {"subw", 4,	one(0002100),	one(0177700), "#w$s", m68000up },
409876cad711SPaolo Bonzini {"subw", 2,	one(0110300),	one(0170700), "*wAd", m68000up },
409976cad711SPaolo Bonzini {"subw", 2,	one(0110100),	one(0170700), "*wDd", m68000up },
410076cad711SPaolo Bonzini {"subw", 2,	one(0110500),	one(0170700), "Dd~s", m68000up },
410176cad711SPaolo Bonzini {"subl", 2,	one(0050600),	one(0170700), "Qd%s", m68000up | mcfisa_a },
410276cad711SPaolo Bonzini {"subl", 6,	one(0002200),	one(0177700), "#l$s", m68000up },
410376cad711SPaolo Bonzini {"subl", 6,	one(0002200),	one(0177700), "#lDs", mcfisa_a },
410476cad711SPaolo Bonzini {"subl", 2,	one(0110700),	one(0170700), "*lAd", m68000up | mcfisa_a },
410576cad711SPaolo Bonzini {"subl", 2,	one(0110200),	one(0170700), "*lDd", m68000up | mcfisa_a },
410676cad711SPaolo Bonzini {"subl", 2,	one(0110600),	one(0170700), "Dd~s", m68000up | mcfisa_a },
410776cad711SPaolo Bonzini 
410876cad711SPaolo Bonzini {"subxb", 2,	one(0110400),	one(0170770), "DsDd", m68000up },
410976cad711SPaolo Bonzini {"subxb", 2,	one(0110410),	one(0170770), "-s-d", m68000up },
411076cad711SPaolo Bonzini {"subxw", 2,	one(0110500),	one(0170770), "DsDd", m68000up },
411176cad711SPaolo Bonzini {"subxw", 2,	one(0110510),	one(0170770), "-s-d", m68000up },
411276cad711SPaolo Bonzini {"subxl", 2,	one(0110600),	one(0170770), "DsDd", m68000up | mcfisa_a },
411376cad711SPaolo Bonzini {"subxl", 2,	one(0110610),	one(0170770), "-s-d", m68000up },
411476cad711SPaolo Bonzini 
411576cad711SPaolo Bonzini {"swap", 2,	one(0044100),	one(0177770), "Ds", m68000up | mcfisa_a },
411676cad711SPaolo Bonzini 
411776cad711SPaolo Bonzini /* swbeg and swbegl are magic constants used on sysV68.  The compiler
411876cad711SPaolo Bonzini    generates them before a switch table.  They tell the debugger and
411976cad711SPaolo Bonzini    disassembler that a switch table follows.  The parameter is the
412076cad711SPaolo Bonzini    number of elements in the table.  swbeg means that the entries in
412176cad711SPaolo Bonzini    the table are word (2 byte) sized, and swbegl means that the
412276cad711SPaolo Bonzini    entries in the table are longword (4 byte) sized.  */
412376cad711SPaolo Bonzini {"swbeg", 4,	one(0045374),	one(0177777), "#w",   m68000up | mcfisa_a },
412476cad711SPaolo Bonzini {"swbegl", 6,	one(0045375),	one(0177777), "#l",   m68000up | mcfisa_a },
412576cad711SPaolo Bonzini 
412676cad711SPaolo Bonzini {"tas", 2,	one(0045300),	one(0177700), "$s", m68000up | mcfisa_b},
412776cad711SPaolo Bonzini 
412876cad711SPaolo Bonzini #define TBL1(name,insn_size,signed,round,size)					\
412976cad711SPaolo Bonzini   {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)|0000400),	\
413076cad711SPaolo Bonzini      two(0177700,0107777), "!sD1", cpu32 },				\
413176cad711SPaolo Bonzini   {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)),		\
413276cad711SPaolo Bonzini      two(0177770,0107770), "DsD3D1", cpu32 }
413376cad711SPaolo Bonzini #define TBL(name1, name2, name3, s, r) \
413476cad711SPaolo Bonzini   TBL1(name1, 4, s, r, 0), TBL1(name2, 4, s, r, 1), TBL1(name3, 4, s, r, 2)
413576cad711SPaolo Bonzini TBL("tblsb", "tblsw", "tblsl", 2, 1),
413676cad711SPaolo Bonzini TBL("tblsnb", "tblsnw", "tblsnl", 2, 0),
413776cad711SPaolo Bonzini TBL("tblub", "tbluw", "tblul", 0, 1),
413876cad711SPaolo Bonzini TBL("tblunb", "tblunw", "tblunl", 0, 0),
413976cad711SPaolo Bonzini 
414076cad711SPaolo Bonzini {"trap", 2,	one(0047100),	one(0177760), "Ts", m68000up | mcfisa_a },
414176cad711SPaolo Bonzini 
414276cad711SPaolo Bonzini {"trapcc", 2,	one(0052374),	one(0177777), "", m68020up | cpu32 },
414376cad711SPaolo Bonzini {"trapcs", 2,	one(0052774),	one(0177777), "", m68020up | cpu32 },
414476cad711SPaolo Bonzini {"trapeq", 2,	one(0053774),	one(0177777), "", m68020up | cpu32 },
414576cad711SPaolo Bonzini {"trapf", 2,	one(0050774),	one(0177777), "", m68020up | cpu32 | mcfisa_a },
414676cad711SPaolo Bonzini {"trapge", 2,	one(0056374),	one(0177777), "", m68020up | cpu32 },
414776cad711SPaolo Bonzini {"trapgt", 2,	one(0057374),	one(0177777), "", m68020up | cpu32 },
414876cad711SPaolo Bonzini {"traphi", 2,	one(0051374),	one(0177777), "", m68020up | cpu32 },
414976cad711SPaolo Bonzini {"traple", 2,	one(0057774),	one(0177777), "", m68020up | cpu32 },
415076cad711SPaolo Bonzini {"trapls", 2,	one(0051774),	one(0177777), "", m68020up | cpu32 },
415176cad711SPaolo Bonzini {"traplt", 2,	one(0056774),	one(0177777), "", m68020up | cpu32 },
415276cad711SPaolo Bonzini {"trapmi", 2,	one(0055774),	one(0177777), "", m68020up | cpu32 },
415376cad711SPaolo Bonzini {"trapne", 2,	one(0053374),	one(0177777), "", m68020up | cpu32 },
415476cad711SPaolo Bonzini {"trappl", 2,	one(0055374),	one(0177777), "", m68020up | cpu32 },
415576cad711SPaolo Bonzini {"trapt", 2,	one(0050374),	one(0177777), "", m68020up | cpu32 },
415676cad711SPaolo Bonzini {"trapvc", 2,	one(0054374),	one(0177777), "", m68020up | cpu32 },
415776cad711SPaolo Bonzini {"trapvs", 2,	one(0054774),	one(0177777), "", m68020up | cpu32 },
415876cad711SPaolo Bonzini 
415976cad711SPaolo Bonzini {"trapccw", 4,	one(0052372),	one(0177777), "#w", m68020up|cpu32 },
416076cad711SPaolo Bonzini {"trapcsw", 4,	one(0052772),	one(0177777), "#w", m68020up|cpu32 },
416176cad711SPaolo Bonzini {"trapeqw", 4,	one(0053772),	one(0177777), "#w", m68020up|cpu32 },
416276cad711SPaolo Bonzini {"trapfw", 4,	one(0050772),	one(0177777), "#w", m68020up|cpu32|mcfisa_a},
416376cad711SPaolo Bonzini {"trapgew", 4,	one(0056372),	one(0177777), "#w", m68020up|cpu32 },
416476cad711SPaolo Bonzini {"trapgtw", 4,	one(0057372),	one(0177777), "#w", m68020up|cpu32 },
416576cad711SPaolo Bonzini {"traphiw", 4,	one(0051372),	one(0177777), "#w", m68020up|cpu32 },
416676cad711SPaolo Bonzini {"traplew", 4,	one(0057772),	one(0177777), "#w", m68020up|cpu32 },
416776cad711SPaolo Bonzini {"traplsw", 4,	one(0051772),	one(0177777), "#w", m68020up|cpu32 },
416876cad711SPaolo Bonzini {"trapltw", 4,	one(0056772),	one(0177777), "#w", m68020up|cpu32 },
416976cad711SPaolo Bonzini {"trapmiw", 4,	one(0055772),	one(0177777), "#w", m68020up|cpu32 },
417076cad711SPaolo Bonzini {"trapnew", 4,	one(0053372),	one(0177777), "#w", m68020up|cpu32 },
417176cad711SPaolo Bonzini {"trapplw", 4,	one(0055372),	one(0177777), "#w", m68020up|cpu32 },
417276cad711SPaolo Bonzini {"traptw", 4,	one(0050372),	one(0177777), "#w", m68020up|cpu32 },
417376cad711SPaolo Bonzini {"trapvcw", 4,	one(0054372),	one(0177777), "#w", m68020up|cpu32 },
417476cad711SPaolo Bonzini {"trapvsw", 4,	one(0054772),	one(0177777), "#w", m68020up|cpu32 },
417576cad711SPaolo Bonzini 
417676cad711SPaolo Bonzini {"trapccl", 6,	one(0052373),	one(0177777), "#l", m68020up|cpu32 },
417776cad711SPaolo Bonzini {"trapcsl", 6,	one(0052773),	one(0177777), "#l", m68020up|cpu32 },
417876cad711SPaolo Bonzini {"trapeql", 6,	one(0053773),	one(0177777), "#l", m68020up|cpu32 },
417976cad711SPaolo Bonzini {"trapfl", 6,	one(0050773),	one(0177777), "#l", m68020up|cpu32|mcfisa_a},
418076cad711SPaolo Bonzini {"trapgel", 6,	one(0056373),	one(0177777), "#l", m68020up|cpu32 },
418176cad711SPaolo Bonzini {"trapgtl", 6,	one(0057373),	one(0177777), "#l", m68020up|cpu32 },
418276cad711SPaolo Bonzini {"traphil", 6,	one(0051373),	one(0177777), "#l", m68020up|cpu32 },
418376cad711SPaolo Bonzini {"traplel", 6,	one(0057773),	one(0177777), "#l", m68020up|cpu32 },
418476cad711SPaolo Bonzini {"traplsl", 6,	one(0051773),	one(0177777), "#l", m68020up|cpu32 },
418576cad711SPaolo Bonzini {"trapltl", 6,	one(0056773),	one(0177777), "#l", m68020up|cpu32 },
418676cad711SPaolo Bonzini {"trapmil", 6,	one(0055773),	one(0177777), "#l", m68020up|cpu32 },
418776cad711SPaolo Bonzini {"trapnel", 6,	one(0053373),	one(0177777), "#l", m68020up|cpu32 },
418876cad711SPaolo Bonzini {"trappll", 6,	one(0055373),	one(0177777), "#l", m68020up|cpu32 },
418976cad711SPaolo Bonzini {"traptl", 6,	one(0050373),	one(0177777), "#l", m68020up|cpu32 },
419076cad711SPaolo Bonzini {"trapvcl", 6,	one(0054373),	one(0177777), "#l", m68020up|cpu32 },
419176cad711SPaolo Bonzini {"trapvsl", 6,	one(0054773),	one(0177777), "#l", m68020up|cpu32 },
419276cad711SPaolo Bonzini 
419376cad711SPaolo Bonzini {"trapv", 2,	one(0047166),	one(0177777), "", m68000up },
419476cad711SPaolo Bonzini 
419576cad711SPaolo Bonzini {"tstb", 2,	one(0045000),	one(0177700), ";b", m68020up|cpu32|mcfisa_a },
419676cad711SPaolo Bonzini {"tstb", 2,	one(0045000),	one(0177700), "$b", m68000up },
419776cad711SPaolo Bonzini {"tstw", 2,	one(0045100),	one(0177700), "*w", m68020up|cpu32|mcfisa_a },
419876cad711SPaolo Bonzini {"tstw", 2,	one(0045100),	one(0177700), "$w", m68000up },
419976cad711SPaolo Bonzini {"tstl", 2,	one(0045200),	one(0177700), "*l", m68020up|cpu32|mcfisa_a },
420076cad711SPaolo Bonzini {"tstl", 2,	one(0045200),	one(0177700), "$l", m68000up },
420176cad711SPaolo Bonzini 
420276cad711SPaolo Bonzini {"unlk", 2,	one(0047130),	one(0177770), "As", m68000up | mcfisa_a },
420376cad711SPaolo Bonzini 
420476cad711SPaolo Bonzini {"unpk", 4,	one(0100600),	one(0170770), "DsDd#w", m68020up },
420576cad711SPaolo Bonzini {"unpk", 4,	one(0100610),	one(0170770), "-s-d#w", m68020up },
420676cad711SPaolo Bonzini 
420776cad711SPaolo Bonzini {"wddatab", 2,	one(0175400),   one(0177700), "~s", mcfisa_a },
420876cad711SPaolo Bonzini {"wddataw", 2,	one(0175500),   one(0177700), "~s", mcfisa_a },
420976cad711SPaolo Bonzini {"wddatal", 2,	one(0175600),   one(0177700), "~s", mcfisa_a },
421076cad711SPaolo Bonzini 
421176cad711SPaolo Bonzini {"wdebug", 4,	two(0175720, 03),	two(0177770, 0xffff), "as", mcfisa_a },
421276cad711SPaolo Bonzini {"wdebug", 4,	two(0175750, 03),	two(0177770, 0xffff), "ds", mcfisa_a },
421376cad711SPaolo Bonzini };
421476cad711SPaolo Bonzini 
421576cad711SPaolo Bonzini const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0];
421676cad711SPaolo Bonzini 
421776cad711SPaolo Bonzini /* These aliases used to be in the above table, each one duplicating
421876cad711SPaolo Bonzini    all of the entries for its primary exactly.  This table was
421976cad711SPaolo Bonzini    constructed by mechanical processing of the opcode table, with a
422076cad711SPaolo Bonzini    small number of tweaks done by hand.  There are probably a lot more
422176cad711SPaolo Bonzini    aliases above that could be moved down here, except for very minor
422276cad711SPaolo Bonzini    differences.  */
422376cad711SPaolo Bonzini 
422476cad711SPaolo Bonzini const struct m68k_opcode_alias m68k_opcode_aliases[] =
422576cad711SPaolo Bonzini {
422676cad711SPaolo Bonzini   { "add",	"addw", },
422776cad711SPaolo Bonzini   { "adda",	"addaw", },
422876cad711SPaolo Bonzini   { "addi",	"addiw", },
422976cad711SPaolo Bonzini   { "addq",	"addqw", },
423076cad711SPaolo Bonzini   { "addx",	"addxw", },
423176cad711SPaolo Bonzini   { "asl",	"aslw", },
423276cad711SPaolo Bonzini   { "asr",	"asrw", },
423376cad711SPaolo Bonzini   { "bhi",	"bhiw", },
423476cad711SPaolo Bonzini   { "bls",	"blsw", },
423576cad711SPaolo Bonzini   { "bcc",	"bccw", },
423676cad711SPaolo Bonzini   { "bcs",	"bcsw", },
423776cad711SPaolo Bonzini   { "bne",	"bnew", },
423876cad711SPaolo Bonzini   { "beq",	"beqw", },
423976cad711SPaolo Bonzini   { "bvc",	"bvcw", },
424076cad711SPaolo Bonzini   { "bvs",	"bvsw", },
424176cad711SPaolo Bonzini   { "bpl",	"bplw", },
424276cad711SPaolo Bonzini   { "bmi",	"bmiw", },
424376cad711SPaolo Bonzini   { "bge",	"bgew", },
424476cad711SPaolo Bonzini   { "blt",	"bltw", },
424576cad711SPaolo Bonzini   { "bgt",	"bgtw", },
424676cad711SPaolo Bonzini   { "ble",	"blew", },
424776cad711SPaolo Bonzini   { "bra",	"braw", },
424876cad711SPaolo Bonzini   { "bsr",	"bsrw", },
424976cad711SPaolo Bonzini   { "bhib",	"bhis", },
425076cad711SPaolo Bonzini   { "blsb",	"blss", },
425176cad711SPaolo Bonzini   { "bccb",	"bccs", },
425276cad711SPaolo Bonzini   { "bcsb",	"bcss", },
425376cad711SPaolo Bonzini   { "bneb",	"bnes", },
425476cad711SPaolo Bonzini   { "beqb",	"beqs", },
425576cad711SPaolo Bonzini   { "bvcb",	"bvcs", },
425676cad711SPaolo Bonzini   { "bvsb",	"bvss", },
425776cad711SPaolo Bonzini   { "bplb",	"bpls", },
425876cad711SPaolo Bonzini   { "bmib",	"bmis", },
425976cad711SPaolo Bonzini   { "bgeb",	"bges", },
426076cad711SPaolo Bonzini   { "bltb",	"blts", },
426176cad711SPaolo Bonzini   { "bgtb",	"bgts", },
426276cad711SPaolo Bonzini   { "bleb",	"bles", },
426376cad711SPaolo Bonzini   { "brab",	"bras", },
426476cad711SPaolo Bonzini   { "bsrb",	"bsrs", },
426576cad711SPaolo Bonzini   { "bhs",	"bccw" },
426676cad711SPaolo Bonzini   { "bhss",	"bccs" },
426776cad711SPaolo Bonzini   { "bhsb",	"bccs" },
426876cad711SPaolo Bonzini   { "bhsw",	"bccw" },
426976cad711SPaolo Bonzini   { "bhsl",	"bccl" },
427076cad711SPaolo Bonzini   { "blo",	"bcsw" },
427176cad711SPaolo Bonzini   { "blos",	"bcss" },
427276cad711SPaolo Bonzini   { "blob",	"bcss" },
427376cad711SPaolo Bonzini   { "blow",	"bcsw" },
427476cad711SPaolo Bonzini   { "blol",	"bcsl" },
427576cad711SPaolo Bonzini   { "br",	"braw", },
427676cad711SPaolo Bonzini   { "brs",	"bras", },
427776cad711SPaolo Bonzini   { "brb",	"bras", },
427876cad711SPaolo Bonzini   { "brw",	"braw", },
427976cad711SPaolo Bonzini   { "brl",	"bral", },
428076cad711SPaolo Bonzini   { "jfnlt",	"bcc", },	/* Apparently a sun alias.  */
428176cad711SPaolo Bonzini   { "jfngt",	"ble", },	/* Apparently a sun alias.  */
428276cad711SPaolo Bonzini   { "jfeq",	"beqs", },	/* Apparently a sun alias.  */
428376cad711SPaolo Bonzini   { "bchgb",	"bchg", },
428476cad711SPaolo Bonzini   { "bchgl",	"bchg", },
428576cad711SPaolo Bonzini   { "bclrb",	"bclr", },
428676cad711SPaolo Bonzini   { "bclrl",	"bclr", },
428776cad711SPaolo Bonzini   { "bsetb",	"bset", },
428876cad711SPaolo Bonzini   { "bsetl",	"bset", },
428976cad711SPaolo Bonzini   { "btstb",	"btst", },
429076cad711SPaolo Bonzini   { "btstl",	"btst", },
429176cad711SPaolo Bonzini   { "cas2",	"cas2w", },
429276cad711SPaolo Bonzini   { "cas",	"casw", },
429376cad711SPaolo Bonzini   { "chk2",	"chk2w", },
429476cad711SPaolo Bonzini   { "chk",	"chkw", },
429576cad711SPaolo Bonzini   { "clr",	"clrw", },
429676cad711SPaolo Bonzini   { "cmp2",	"cmp2w", },
429776cad711SPaolo Bonzini   { "cmpa",	"cmpaw", },
429876cad711SPaolo Bonzini   { "cmpi",	"cmpiw", },
429976cad711SPaolo Bonzini   { "cmpm",	"cmpmw", },
430076cad711SPaolo Bonzini   { "cmp",	"cmpw", },
430176cad711SPaolo Bonzini   { "dbccw",	"dbcc", },
430276cad711SPaolo Bonzini   { "dbcsw",	"dbcs", },
430376cad711SPaolo Bonzini   { "dbeqw",	"dbeq", },
430476cad711SPaolo Bonzini   { "dbfw",	"dbf", },
430576cad711SPaolo Bonzini   { "dbgew",	"dbge", },
430676cad711SPaolo Bonzini   { "dbgtw",	"dbgt", },
430776cad711SPaolo Bonzini   { "dbhiw",	"dbhi", },
430876cad711SPaolo Bonzini   { "dblew",	"dble", },
430976cad711SPaolo Bonzini   { "dblsw",	"dbls", },
431076cad711SPaolo Bonzini   { "dbltw",	"dblt", },
431176cad711SPaolo Bonzini   { "dbmiw",	"dbmi", },
431276cad711SPaolo Bonzini   { "dbnew",	"dbne", },
431376cad711SPaolo Bonzini   { "dbplw",	"dbpl", },
431476cad711SPaolo Bonzini   { "dbtw",	"dbt", },
431576cad711SPaolo Bonzini   { "dbvcw",	"dbvc", },
431676cad711SPaolo Bonzini   { "dbvsw",	"dbvs", },
431776cad711SPaolo Bonzini   { "dbhs",	"dbcc", },
431876cad711SPaolo Bonzini   { "dbhsw",	"dbcc", },
431976cad711SPaolo Bonzini   { "dbra",	"dbf", },
432076cad711SPaolo Bonzini   { "dbraw",	"dbf", },
432176cad711SPaolo Bonzini   { "tdivsl",	"divsl", },
432276cad711SPaolo Bonzini   { "divs",	"divsw", },
432376cad711SPaolo Bonzini   { "divu",	"divuw", },
432476cad711SPaolo Bonzini   { "ext",	"extw", },
432576cad711SPaolo Bonzini   { "extbw",	"extw", },
432676cad711SPaolo Bonzini   { "extwl",	"extl", },
432776cad711SPaolo Bonzini   { "fbneq",	"fbne", },
432876cad711SPaolo Bonzini   { "fbsneq",	"fbsne", },
432976cad711SPaolo Bonzini   { "fdbneq",	"fdbne", },
433076cad711SPaolo Bonzini   { "fdbsneq",	"fdbsne", },
433176cad711SPaolo Bonzini   { "fmovecr",	"fmovecrx", },
433276cad711SPaolo Bonzini   { "fmovm",	"fmovem", },
433376cad711SPaolo Bonzini   { "fsneq",	"fsne", },
433476cad711SPaolo Bonzini   { "fssneq",	"fssne", },
433576cad711SPaolo Bonzini   { "ftrapneq",	"ftrapne", },
433676cad711SPaolo Bonzini   { "ftrapsneq", "ftrapsne", },
433776cad711SPaolo Bonzini   { "fjneq",	"fjne", },
433876cad711SPaolo Bonzini   { "fjsneq",	"fjsne", },
433976cad711SPaolo Bonzini   { "jmpl",	"jmp", },
434076cad711SPaolo Bonzini   { "jmps",	"jmp", },
434176cad711SPaolo Bonzini   { "jsrl",	"jsr", },
434276cad711SPaolo Bonzini   { "jsrs",	"jsr", },
434376cad711SPaolo Bonzini   { "leal",	"lea", },
434476cad711SPaolo Bonzini   { "lsl",	"lslw", },
434576cad711SPaolo Bonzini   { "lsr",	"lsrw", },
434676cad711SPaolo Bonzini   { "mac",	"macw" },
434776cad711SPaolo Bonzini   { "movea",	"moveaw", },
434876cad711SPaolo Bonzini   { "movem",	"movemw", },
434976cad711SPaolo Bonzini   { "movml",	"moveml", },
435076cad711SPaolo Bonzini   { "movmw",	"movemw", },
435176cad711SPaolo Bonzini   { "movm",	"movemw", },
435276cad711SPaolo Bonzini   { "movep",	"movepw", },
435376cad711SPaolo Bonzini   { "movpw",	"movepw", },
435476cad711SPaolo Bonzini   { "moves",	"movesw" },
435576cad711SPaolo Bonzini   { "muls",	"mulsw", },
435676cad711SPaolo Bonzini   { "mulu",	"muluw", },
435776cad711SPaolo Bonzini   { "msac",	"msacw" },
435876cad711SPaolo Bonzini   { "nbcdb",	"nbcd" },
435976cad711SPaolo Bonzini   { "neg",	"negw", },
436076cad711SPaolo Bonzini   { "negx",	"negxw", },
436176cad711SPaolo Bonzini   { "not",	"notw", },
436276cad711SPaolo Bonzini   { "peal",	"pea", },
436376cad711SPaolo Bonzini   { "rol",	"rolw", },
436476cad711SPaolo Bonzini   { "ror",	"rorw", },
436576cad711SPaolo Bonzini   { "roxl",	"roxlw", },
436676cad711SPaolo Bonzini   { "roxr",	"roxrw", },
436776cad711SPaolo Bonzini   { "sats",	"satsl", },
436876cad711SPaolo Bonzini   { "sbcdb",	"sbcd", },
436976cad711SPaolo Bonzini   { "sccb",	"scc", },
437076cad711SPaolo Bonzini   { "scsb",	"scs", },
437176cad711SPaolo Bonzini   { "seqb",	"seq", },
437276cad711SPaolo Bonzini   { "sfb",	"sf", },
437376cad711SPaolo Bonzini   { "sgeb",	"sge", },
437476cad711SPaolo Bonzini   { "sgtb",	"sgt", },
437576cad711SPaolo Bonzini   { "shib",	"shi", },
437676cad711SPaolo Bonzini   { "sleb",	"sle", },
437776cad711SPaolo Bonzini   { "slsb",	"sls", },
437876cad711SPaolo Bonzini   { "sltb",	"slt", },
437976cad711SPaolo Bonzini   { "smib",	"smi", },
438076cad711SPaolo Bonzini   { "sneb",	"sne", },
438176cad711SPaolo Bonzini   { "splb",	"spl", },
438276cad711SPaolo Bonzini   { "stb",	"st", },
438376cad711SPaolo Bonzini   { "svcb",	"svc", },
438476cad711SPaolo Bonzini   { "svsb",	"svs", },
438576cad711SPaolo Bonzini   { "sfge",	"sge", },
438676cad711SPaolo Bonzini   { "sfgt",	"sgt", },
438776cad711SPaolo Bonzini   { "sfle",	"sle", },
438876cad711SPaolo Bonzini   { "sflt",	"slt", },
438976cad711SPaolo Bonzini   { "sfneq",	"sne", },
439076cad711SPaolo Bonzini   { "suba",	"subaw", },
439176cad711SPaolo Bonzini   { "subi",	"subiw", },
439276cad711SPaolo Bonzini   { "subq",	"subqw", },
439376cad711SPaolo Bonzini   { "sub",	"subw", },
439476cad711SPaolo Bonzini   { "subx",	"subxw", },
439576cad711SPaolo Bonzini   { "swapw",	"swap", },
439676cad711SPaolo Bonzini   { "tasb",	"tas", },
439776cad711SPaolo Bonzini   { "tpcc",	"trapcc", },
439876cad711SPaolo Bonzini   { "tcc",	"trapcc", },
439976cad711SPaolo Bonzini   { "tst",	"tstw", },
440076cad711SPaolo Bonzini   { "jbra",	"jra", },
440176cad711SPaolo Bonzini   { "jbhi",	"jhi", },
440276cad711SPaolo Bonzini   { "jbls",	"jls", },
440376cad711SPaolo Bonzini   { "jbcc",	"jcc", },
440476cad711SPaolo Bonzini   { "jbcs",	"jcs", },
440576cad711SPaolo Bonzini   { "jbne",	"jne", },
440676cad711SPaolo Bonzini   { "jbeq",	"jeq", },
440776cad711SPaolo Bonzini   { "jbvc",	"jvc", },
440876cad711SPaolo Bonzini   { "jbvs",	"jvs", },
440976cad711SPaolo Bonzini   { "jbpl",	"jpl", },
441076cad711SPaolo Bonzini   { "jbmi",	"jmi", },
441176cad711SPaolo Bonzini   { "jbge",	"jge", },
441276cad711SPaolo Bonzini   { "jblt",	"jlt", },
441376cad711SPaolo Bonzini   { "jbgt",	"jgt", },
441476cad711SPaolo Bonzini   { "jble",	"jle", },
441576cad711SPaolo Bonzini   { "movql",	"moveq", },
441676cad711SPaolo Bonzini   { "moveql",	"moveq", },
441776cad711SPaolo Bonzini   { "movl",	"movel", },
441876cad711SPaolo Bonzini   { "movq",	"moveq", },
441976cad711SPaolo Bonzini   { "moval",	"moveal", },
442076cad711SPaolo Bonzini   { "movaw",	"moveaw", },
442176cad711SPaolo Bonzini   { "movb",	"moveb", },
442276cad711SPaolo Bonzini   { "movc",	"movec", },
442376cad711SPaolo Bonzini   { "movecl",	"movec", },
442476cad711SPaolo Bonzini   { "movpl",	"movepl", },
442576cad711SPaolo Bonzini   { "movw",	"movew", },
442676cad711SPaolo Bonzini   { "movsb",	"movesb", },
442776cad711SPaolo Bonzini   { "movsl",	"movesl", },
442876cad711SPaolo Bonzini   { "movsw",	"movesw", },
442976cad711SPaolo Bonzini   { "mov3q",	"mov3ql", },
443076cad711SPaolo Bonzini 
443176cad711SPaolo Bonzini   { "tdivul",	"divul", },	/* For m68k-svr4.  */
443276cad711SPaolo Bonzini   { "fmovb",	"fmoveb", },
443376cad711SPaolo Bonzini   { "fsmovb",	"fsmoveb", },
443476cad711SPaolo Bonzini   { "fdmovb",	"fdmoveb", },
443576cad711SPaolo Bonzini   { "fmovd",	"fmoved", },
443676cad711SPaolo Bonzini   { "fsmovd",	"fsmoved", },
443776cad711SPaolo Bonzini   { "fmovl",	"fmovel", },
443876cad711SPaolo Bonzini   { "fsmovl",	"fsmovel", },
443976cad711SPaolo Bonzini   { "fdmovl",	"fdmovel", },
444076cad711SPaolo Bonzini   { "fmovp",	"fmovep", },
444176cad711SPaolo Bonzini   { "fsmovp",	"fsmovep", },
444276cad711SPaolo Bonzini   { "fdmovp",	"fdmovep", },
444376cad711SPaolo Bonzini   { "fmovs",	"fmoves", },
444476cad711SPaolo Bonzini   { "fsmovs",	"fsmoves", },
444576cad711SPaolo Bonzini   { "fdmovs",	"fdmoves", },
444676cad711SPaolo Bonzini   { "fmovw",	"fmovew", },
444776cad711SPaolo Bonzini   { "fsmovw",	"fsmovew", },
444876cad711SPaolo Bonzini   { "fdmovw",	"fdmovew", },
444976cad711SPaolo Bonzini   { "fmovx",	"fmovex", },
445076cad711SPaolo Bonzini   { "fsmovx",	"fsmovex", },
445176cad711SPaolo Bonzini   { "fdmovx",	"fdmovex", },
445276cad711SPaolo Bonzini   { "fmovcr",	"fmovecr", },
445376cad711SPaolo Bonzini   { "fmovcrx",	"fmovecrx", },
445476cad711SPaolo Bonzini   { "ftestb",	"ftstb", },
445576cad711SPaolo Bonzini   { "ftestd",	"ftstd", },
445676cad711SPaolo Bonzini   { "ftestl",	"ftstl", },
445776cad711SPaolo Bonzini   { "ftestp",	"ftstp", },
445876cad711SPaolo Bonzini   { "ftests",	"ftsts", },
445976cad711SPaolo Bonzini   { "ftestw",	"ftstw", },
446076cad711SPaolo Bonzini   { "ftestx",	"ftstx", },
446176cad711SPaolo Bonzini 
446276cad711SPaolo Bonzini   { "bitrevl",  "bitrev", },
446376cad711SPaolo Bonzini   { "byterevl", "byterev", },
446476cad711SPaolo Bonzini   { "ff1l",     "ff1", },
446576cad711SPaolo Bonzini 
446676cad711SPaolo Bonzini };
446776cad711SPaolo Bonzini 
446876cad711SPaolo Bonzini const int m68k_numaliases =
446976cad711SPaolo Bonzini   sizeof m68k_opcode_aliases / sizeof m68k_opcode_aliases[0];
447076cad711SPaolo Bonzini /* **** End of m68k-opc.c */
447176cad711SPaolo Bonzini /* **** floatformat.c from sourceware.org CVS 2005-08-14.  */
447276cad711SPaolo Bonzini /* IEEE floating point support routines, for GDB, the GNU Debugger.
447376cad711SPaolo Bonzini    Copyright (C) 1991, 1994, 1999, 2000, 2003 Free Software Foundation, Inc.
447476cad711SPaolo Bonzini 
447576cad711SPaolo Bonzini This file is part of GDB.
447676cad711SPaolo Bonzini 
447776cad711SPaolo Bonzini This program is free software; you can redistribute it and/or modify
447876cad711SPaolo Bonzini it under the terms of the GNU General Public License as published by
447976cad711SPaolo Bonzini the Free Software Foundation; either version 2 of the License, or
448076cad711SPaolo Bonzini (at your option) any later version.
448176cad711SPaolo Bonzini 
448276cad711SPaolo Bonzini This program is distributed in the hope that it will be useful,
448376cad711SPaolo Bonzini but WITHOUT ANY WARRANTY; without even the implied warranty of
448476cad711SPaolo Bonzini MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
448576cad711SPaolo Bonzini GNU General Public License for more details.
448676cad711SPaolo Bonzini 
448776cad711SPaolo Bonzini You should have received a copy of the GNU General Public License
448876cad711SPaolo Bonzini along with this program; if not, see <http://www.gnu.org/licenses/>.  */
448976cad711SPaolo Bonzini 
449076cad711SPaolo Bonzini /* This is needed to pick up the NAN macro on some systems.  */
449176cad711SPaolo Bonzini //#define _GNU_SOURCE
449276cad711SPaolo Bonzini 
449376cad711SPaolo Bonzini #ifndef INFINITY
449476cad711SPaolo Bonzini #ifdef HUGE_VAL
449576cad711SPaolo Bonzini #define INFINITY HUGE_VAL
449676cad711SPaolo Bonzini #else
449776cad711SPaolo Bonzini #define INFINITY (1.0 / 0.0)
449876cad711SPaolo Bonzini #endif
449976cad711SPaolo Bonzini #endif
450076cad711SPaolo Bonzini 
450176cad711SPaolo Bonzini #ifndef NAN
450276cad711SPaolo Bonzini #define NAN (0.0 / 0.0)
450376cad711SPaolo Bonzini #endif
450476cad711SPaolo Bonzini 
450576cad711SPaolo Bonzini static unsigned long get_field (const unsigned char *,
450676cad711SPaolo Bonzini                                 enum floatformat_byteorders,
450776cad711SPaolo Bonzini                                 unsigned int,
450876cad711SPaolo Bonzini                                 unsigned int,
450976cad711SPaolo Bonzini                                 unsigned int);
451076cad711SPaolo Bonzini static int floatformat_always_valid (const struct floatformat *fmt,
451176cad711SPaolo Bonzini                                      const char *from);
451276cad711SPaolo Bonzini 
451376cad711SPaolo Bonzini static int
floatformat_always_valid(const struct floatformat * fmt ATTRIBUTE_UNUSED,const char * from ATTRIBUTE_UNUSED)451476cad711SPaolo Bonzini floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED,
451576cad711SPaolo Bonzini                           const char *from ATTRIBUTE_UNUSED)
451676cad711SPaolo Bonzini {
451776cad711SPaolo Bonzini   return 1;
451876cad711SPaolo Bonzini }
451976cad711SPaolo Bonzini 
452076cad711SPaolo Bonzini /* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not
452176cad711SPaolo Bonzini    going to bother with trying to muck around with whether it is defined in
452276cad711SPaolo Bonzini    a system header, what we do if not, etc.  */
452376cad711SPaolo Bonzini #define FLOATFORMAT_CHAR_BIT 8
452476cad711SPaolo Bonzini 
452576cad711SPaolo Bonzini /* floatformats for IEEE single and double, big and little endian.  */
452676cad711SPaolo Bonzini const struct floatformat floatformat_ieee_single_big =
452776cad711SPaolo Bonzini {
452876cad711SPaolo Bonzini   floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
452976cad711SPaolo Bonzini   floatformat_intbit_no,
453076cad711SPaolo Bonzini   "floatformat_ieee_single_big",
453176cad711SPaolo Bonzini   floatformat_always_valid
453276cad711SPaolo Bonzini };
453376cad711SPaolo Bonzini const struct floatformat floatformat_ieee_single_little =
453476cad711SPaolo Bonzini {
453576cad711SPaolo Bonzini   floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
453676cad711SPaolo Bonzini   floatformat_intbit_no,
453776cad711SPaolo Bonzini   "floatformat_ieee_single_little",
453876cad711SPaolo Bonzini   floatformat_always_valid
453976cad711SPaolo Bonzini };
454076cad711SPaolo Bonzini const struct floatformat floatformat_ieee_double_big =
454176cad711SPaolo Bonzini {
454276cad711SPaolo Bonzini   floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
454376cad711SPaolo Bonzini   floatformat_intbit_no,
454476cad711SPaolo Bonzini   "floatformat_ieee_double_big",
454576cad711SPaolo Bonzini   floatformat_always_valid
454676cad711SPaolo Bonzini };
454776cad711SPaolo Bonzini const struct floatformat floatformat_ieee_double_little =
454876cad711SPaolo Bonzini {
454976cad711SPaolo Bonzini   floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
455076cad711SPaolo Bonzini   floatformat_intbit_no,
455176cad711SPaolo Bonzini   "floatformat_ieee_double_little",
455276cad711SPaolo Bonzini   floatformat_always_valid
455376cad711SPaolo Bonzini };
455476cad711SPaolo Bonzini 
455576cad711SPaolo Bonzini /* floatformat for IEEE double, little endian byte order, with big endian word
455676cad711SPaolo Bonzini    ordering, as on the ARM.  */
455776cad711SPaolo Bonzini 
455876cad711SPaolo Bonzini const struct floatformat floatformat_ieee_double_littlebyte_bigword =
455976cad711SPaolo Bonzini {
456076cad711SPaolo Bonzini   floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
456176cad711SPaolo Bonzini   floatformat_intbit_no,
456276cad711SPaolo Bonzini   "floatformat_ieee_double_littlebyte_bigword",
456376cad711SPaolo Bonzini   floatformat_always_valid
456476cad711SPaolo Bonzini };
456576cad711SPaolo Bonzini 
456676cad711SPaolo Bonzini static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from);
456776cad711SPaolo Bonzini 
456876cad711SPaolo Bonzini static int
floatformat_i387_ext_is_valid(const struct floatformat * fmt,const char * from)456976cad711SPaolo Bonzini floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from)
457076cad711SPaolo Bonzini {
457176cad711SPaolo Bonzini   /* In the i387 double-extended format, if the exponent is all ones,
457276cad711SPaolo Bonzini      then the integer bit must be set.  If the exponent is neither 0
457376cad711SPaolo Bonzini      nor ~0, the intbit must also be set.  Only if the exponent is
457476cad711SPaolo Bonzini      zero can it be zero, and then it must be zero.  */
457576cad711SPaolo Bonzini   unsigned long exponent, int_bit;
457676cad711SPaolo Bonzini   const unsigned char *ufrom = (const unsigned char *) from;
457776cad711SPaolo Bonzini 
457876cad711SPaolo Bonzini   exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
457976cad711SPaolo Bonzini 			fmt->exp_start, fmt->exp_len);
458076cad711SPaolo Bonzini   int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize,
458176cad711SPaolo Bonzini 		       fmt->man_start, 1);
458276cad711SPaolo Bonzini 
458376cad711SPaolo Bonzini   if ((exponent == 0) != (int_bit == 0))
458476cad711SPaolo Bonzini     return 0;
458576cad711SPaolo Bonzini   else
458676cad711SPaolo Bonzini     return 1;
458776cad711SPaolo Bonzini }
458876cad711SPaolo Bonzini 
458976cad711SPaolo Bonzini const struct floatformat floatformat_i387_ext =
459076cad711SPaolo Bonzini {
459176cad711SPaolo Bonzini   floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
459276cad711SPaolo Bonzini   floatformat_intbit_yes,
459376cad711SPaolo Bonzini   "floatformat_i387_ext",
459476cad711SPaolo Bonzini   floatformat_i387_ext_is_valid
459576cad711SPaolo Bonzini };
459676cad711SPaolo Bonzini const struct floatformat floatformat_m68881_ext =
459776cad711SPaolo Bonzini {
459876cad711SPaolo Bonzini   /* Note that the bits from 16 to 31 are unused.  */
459976cad711SPaolo Bonzini   floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
460076cad711SPaolo Bonzini   floatformat_intbit_yes,
460176cad711SPaolo Bonzini   "floatformat_m68881_ext",
460276cad711SPaolo Bonzini   floatformat_always_valid
460376cad711SPaolo Bonzini };
460476cad711SPaolo Bonzini const struct floatformat floatformat_i960_ext =
460576cad711SPaolo Bonzini {
460676cad711SPaolo Bonzini   /* Note that the bits from 0 to 15 are unused.  */
460776cad711SPaolo Bonzini   floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
460876cad711SPaolo Bonzini   floatformat_intbit_yes,
460976cad711SPaolo Bonzini   "floatformat_i960_ext",
461076cad711SPaolo Bonzini   floatformat_always_valid
461176cad711SPaolo Bonzini };
461276cad711SPaolo Bonzini const struct floatformat floatformat_m88110_ext =
461376cad711SPaolo Bonzini {
461476cad711SPaolo Bonzini   floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
461576cad711SPaolo Bonzini   floatformat_intbit_yes,
461676cad711SPaolo Bonzini   "floatformat_m88110_ext",
461776cad711SPaolo Bonzini   floatformat_always_valid
461876cad711SPaolo Bonzini };
461976cad711SPaolo Bonzini const struct floatformat floatformat_m88110_harris_ext =
462076cad711SPaolo Bonzini {
462176cad711SPaolo Bonzini   /* Harris uses raw format 128 bytes long, but the number is just an ieee
462276cad711SPaolo Bonzini      double, and the last 64 bits are wasted. */
462376cad711SPaolo Bonzini   floatformat_big,128, 0, 1, 11,  0x3ff,  0x7ff, 12, 52,
462476cad711SPaolo Bonzini   floatformat_intbit_no,
462576cad711SPaolo Bonzini   "floatformat_m88110_ext_harris",
462676cad711SPaolo Bonzini   floatformat_always_valid
462776cad711SPaolo Bonzini };
462876cad711SPaolo Bonzini const struct floatformat floatformat_arm_ext_big =
462976cad711SPaolo Bonzini {
463076cad711SPaolo Bonzini   /* Bits 1 to 16 are unused.  */
463176cad711SPaolo Bonzini   floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
463276cad711SPaolo Bonzini   floatformat_intbit_yes,
463376cad711SPaolo Bonzini   "floatformat_arm_ext_big",
463476cad711SPaolo Bonzini   floatformat_always_valid
463576cad711SPaolo Bonzini };
463676cad711SPaolo Bonzini const struct floatformat floatformat_arm_ext_littlebyte_bigword =
463776cad711SPaolo Bonzini {
463876cad711SPaolo Bonzini   /* Bits 1 to 16 are unused.  */
463976cad711SPaolo Bonzini   floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
464076cad711SPaolo Bonzini   floatformat_intbit_yes,
464176cad711SPaolo Bonzini   "floatformat_arm_ext_littlebyte_bigword",
464276cad711SPaolo Bonzini   floatformat_always_valid
464376cad711SPaolo Bonzini };
464476cad711SPaolo Bonzini const struct floatformat floatformat_ia64_spill_big =
464576cad711SPaolo Bonzini {
464676cad711SPaolo Bonzini   floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
464776cad711SPaolo Bonzini   floatformat_intbit_yes,
464876cad711SPaolo Bonzini   "floatformat_ia64_spill_big",
464976cad711SPaolo Bonzini   floatformat_always_valid
465076cad711SPaolo Bonzini };
465176cad711SPaolo Bonzini const struct floatformat floatformat_ia64_spill_little =
465276cad711SPaolo Bonzini {
465376cad711SPaolo Bonzini   floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
465476cad711SPaolo Bonzini   floatformat_intbit_yes,
465576cad711SPaolo Bonzini   "floatformat_ia64_spill_little",
465676cad711SPaolo Bonzini   floatformat_always_valid
465776cad711SPaolo Bonzini };
465876cad711SPaolo Bonzini const struct floatformat floatformat_ia64_quad_big =
465976cad711SPaolo Bonzini {
466076cad711SPaolo Bonzini   floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
466176cad711SPaolo Bonzini   floatformat_intbit_no,
466276cad711SPaolo Bonzini   "floatformat_ia64_quad_big",
466376cad711SPaolo Bonzini   floatformat_always_valid
466476cad711SPaolo Bonzini };
466576cad711SPaolo Bonzini const struct floatformat floatformat_ia64_quad_little =
466676cad711SPaolo Bonzini {
466776cad711SPaolo Bonzini   floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
466876cad711SPaolo Bonzini   floatformat_intbit_no,
466976cad711SPaolo Bonzini   "floatformat_ia64_quad_little",
467076cad711SPaolo Bonzini   floatformat_always_valid
467176cad711SPaolo Bonzini };
467276cad711SPaolo Bonzini 
467376cad711SPaolo Bonzini /* Extract a field which starts at START and is LEN bits long.  DATA and
467476cad711SPaolo Bonzini    TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
467576cad711SPaolo Bonzini static unsigned long
get_field(const unsigned char * data,enum floatformat_byteorders order,unsigned int total_len,unsigned int start,unsigned int len)467676cad711SPaolo Bonzini get_field (const unsigned char *data, enum floatformat_byteorders order,
467776cad711SPaolo Bonzini            unsigned int total_len, unsigned int start, unsigned int len)
467876cad711SPaolo Bonzini {
467976cad711SPaolo Bonzini   unsigned long result;
468076cad711SPaolo Bonzini   unsigned int cur_byte;
468176cad711SPaolo Bonzini   int cur_bitshift;
468276cad711SPaolo Bonzini 
468376cad711SPaolo Bonzini   /* Start at the least significant part of the field.  */
468476cad711SPaolo Bonzini   cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
468576cad711SPaolo Bonzini   if (order == floatformat_little)
468676cad711SPaolo Bonzini     cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
468776cad711SPaolo Bonzini   cur_bitshift =
468876cad711SPaolo Bonzini     ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
468976cad711SPaolo Bonzini   result = *(data + cur_byte) >> (-cur_bitshift);
469076cad711SPaolo Bonzini   cur_bitshift += FLOATFORMAT_CHAR_BIT;
469176cad711SPaolo Bonzini   if (order == floatformat_little)
469276cad711SPaolo Bonzini     ++cur_byte;
469376cad711SPaolo Bonzini   else
469476cad711SPaolo Bonzini     --cur_byte;
469576cad711SPaolo Bonzini 
469676cad711SPaolo Bonzini   /* Move towards the most significant part of the field.  */
469776cad711SPaolo Bonzini   while ((unsigned int) cur_bitshift < len)
469876cad711SPaolo Bonzini     {
469976cad711SPaolo Bonzini       if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
470076cad711SPaolo Bonzini 	/* This is the last byte; zero out the bits which are not part of
470176cad711SPaolo Bonzini 	   this field.  */
470276cad711SPaolo Bonzini 	result |=
47032e3883d0SPeter Maydell 	  (unsigned long)(*(data + cur_byte)
47042e3883d0SPeter Maydell 			  & ((1 << (len - cur_bitshift)) - 1))
470576cad711SPaolo Bonzini 	    << cur_bitshift;
470676cad711SPaolo Bonzini       else
47072e3883d0SPeter Maydell 	result |= (unsigned long)*(data + cur_byte) << cur_bitshift;
470876cad711SPaolo Bonzini       cur_bitshift += FLOATFORMAT_CHAR_BIT;
470976cad711SPaolo Bonzini       if (order == floatformat_little)
471076cad711SPaolo Bonzini 	++cur_byte;
471176cad711SPaolo Bonzini       else
471276cad711SPaolo Bonzini 	--cur_byte;
471376cad711SPaolo Bonzini     }
471476cad711SPaolo Bonzini   return result;
471576cad711SPaolo Bonzini }
471676cad711SPaolo Bonzini 
471776cad711SPaolo Bonzini /* Convert from FMT to a double.
471876cad711SPaolo Bonzini    FROM is the address of the extended float.
471976cad711SPaolo Bonzini    Store the double in *TO.  */
472076cad711SPaolo Bonzini 
472176cad711SPaolo Bonzini void
floatformat_to_double(const struct floatformat * fmt,const char * from,double * to)472276cad711SPaolo Bonzini floatformat_to_double (const struct floatformat *fmt,
472376cad711SPaolo Bonzini                        const char *from, double *to)
472476cad711SPaolo Bonzini {
472576cad711SPaolo Bonzini   const unsigned char *ufrom = (const unsigned char *)from;
472676cad711SPaolo Bonzini   double dto;
472776cad711SPaolo Bonzini   long exponent;
472876cad711SPaolo Bonzini   unsigned long mant;
472976cad711SPaolo Bonzini   unsigned int mant_bits, mant_off;
473076cad711SPaolo Bonzini   int mant_bits_left;
473176cad711SPaolo Bonzini   int special_exponent;		/* It's a NaN, denorm or zero */
473276cad711SPaolo Bonzini 
473376cad711SPaolo Bonzini   exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
473476cad711SPaolo Bonzini 			fmt->exp_start, fmt->exp_len);
473576cad711SPaolo Bonzini 
473676cad711SPaolo Bonzini   /* If the exponent indicates a NaN, we don't have information to
473776cad711SPaolo Bonzini      decide what to do.  So we handle it like IEEE, except that we
473876cad711SPaolo Bonzini      don't try to preserve the type of NaN.  FIXME.  */
473976cad711SPaolo Bonzini   if ((unsigned long) exponent == fmt->exp_nan)
474076cad711SPaolo Bonzini     {
474176cad711SPaolo Bonzini       int nan;
474276cad711SPaolo Bonzini 
474376cad711SPaolo Bonzini       mant_off = fmt->man_start;
474476cad711SPaolo Bonzini       mant_bits_left = fmt->man_len;
474576cad711SPaolo Bonzini       nan = 0;
474676cad711SPaolo Bonzini       while (mant_bits_left > 0)
474776cad711SPaolo Bonzini 	{
4748893dcdbfSYuval Shaia           mant_bits = MIN(mant_bits_left, 32);
474976cad711SPaolo Bonzini 
475076cad711SPaolo Bonzini 	  if (get_field (ufrom, fmt->byteorder, fmt->totalsize,
475176cad711SPaolo Bonzini 			 mant_off, mant_bits) != 0)
475276cad711SPaolo Bonzini 	    {
475376cad711SPaolo Bonzini 	      /* This is a NaN.  */
475476cad711SPaolo Bonzini 	      nan = 1;
475576cad711SPaolo Bonzini 	      break;
475676cad711SPaolo Bonzini 	    }
475776cad711SPaolo Bonzini 
475876cad711SPaolo Bonzini 	  mant_off += mant_bits;
475976cad711SPaolo Bonzini 	  mant_bits_left -= mant_bits;
476076cad711SPaolo Bonzini 	}
476176cad711SPaolo Bonzini 
476276cad711SPaolo Bonzini       /* On certain systems (such as GNU/Linux), the use of the
476376cad711SPaolo Bonzini 	 INFINITY macro below may generate a warning that can not be
476476cad711SPaolo Bonzini 	 silenced due to a bug in GCC (PR preprocessor/11931).  The
476576cad711SPaolo Bonzini 	 preprocessor fails to recognise the __extension__ keyword in
476676cad711SPaolo Bonzini 	 conjunction with the GNU/C99 extension for hexadecimal
476776cad711SPaolo Bonzini 	 floating point constants and will issue a warning when
476876cad711SPaolo Bonzini 	 compiling with -pedantic.  */
476976cad711SPaolo Bonzini       if (nan)
477076cad711SPaolo Bonzini 	dto = NAN;
477176cad711SPaolo Bonzini       else
477276cad711SPaolo Bonzini 	dto = INFINITY;
477376cad711SPaolo Bonzini 
477476cad711SPaolo Bonzini       if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
477576cad711SPaolo Bonzini 	dto = -dto;
477676cad711SPaolo Bonzini 
477776cad711SPaolo Bonzini       *to = dto;
477876cad711SPaolo Bonzini 
477976cad711SPaolo Bonzini       return;
478076cad711SPaolo Bonzini     }
478176cad711SPaolo Bonzini 
478276cad711SPaolo Bonzini   mant_bits_left = fmt->man_len;
478376cad711SPaolo Bonzini   mant_off = fmt->man_start;
478476cad711SPaolo Bonzini   dto = 0.0;
478576cad711SPaolo Bonzini 
478676cad711SPaolo Bonzini   special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan;
478776cad711SPaolo Bonzini 
478876cad711SPaolo Bonzini   /* Don't bias zero's, denorms or NaNs.  */
478976cad711SPaolo Bonzini   if (!special_exponent)
479076cad711SPaolo Bonzini     exponent -= fmt->exp_bias;
479176cad711SPaolo Bonzini 
479276cad711SPaolo Bonzini   /* Build the result algebraically.  Might go infinite, underflow, etc;
479376cad711SPaolo Bonzini      who cares. */
479476cad711SPaolo Bonzini 
479576cad711SPaolo Bonzini   /* If this format uses a hidden bit, explicitly add it in now.  Otherwise,
479676cad711SPaolo Bonzini      increment the exponent by one to account for the integer bit.  */
479776cad711SPaolo Bonzini 
479876cad711SPaolo Bonzini   if (!special_exponent)
479976cad711SPaolo Bonzini     {
480076cad711SPaolo Bonzini       if (fmt->intbit == floatformat_intbit_no)
480176cad711SPaolo Bonzini 	dto = ldexp (1.0, exponent);
480276cad711SPaolo Bonzini       else
480376cad711SPaolo Bonzini 	exponent++;
480476cad711SPaolo Bonzini     }
480576cad711SPaolo Bonzini 
480676cad711SPaolo Bonzini   while (mant_bits_left > 0)
480776cad711SPaolo Bonzini     {
4808893dcdbfSYuval Shaia       mant_bits = MIN(mant_bits_left, 32);
480976cad711SPaolo Bonzini 
481076cad711SPaolo Bonzini       mant = get_field (ufrom, fmt->byteorder, fmt->totalsize,
481176cad711SPaolo Bonzini 			 mant_off, mant_bits);
481276cad711SPaolo Bonzini 
481376cad711SPaolo Bonzini       /* Handle denormalized numbers.  FIXME: What should we do for
481476cad711SPaolo Bonzini 	 non-IEEE formats?  */
481576cad711SPaolo Bonzini       if (exponent == 0 && mant != 0)
481676cad711SPaolo Bonzini 	dto += ldexp ((double)mant,
481776cad711SPaolo Bonzini 		      (- fmt->exp_bias
481876cad711SPaolo Bonzini 		       - mant_bits
481976cad711SPaolo Bonzini 		       - (mant_off - fmt->man_start)
482076cad711SPaolo Bonzini 		       + 1));
482176cad711SPaolo Bonzini       else
482276cad711SPaolo Bonzini 	dto += ldexp ((double)mant, exponent - mant_bits);
482376cad711SPaolo Bonzini       if (exponent != 0)
482476cad711SPaolo Bonzini 	exponent -= mant_bits;
482576cad711SPaolo Bonzini       mant_off += mant_bits;
482676cad711SPaolo Bonzini       mant_bits_left -= mant_bits;
482776cad711SPaolo Bonzini     }
482876cad711SPaolo Bonzini 
482976cad711SPaolo Bonzini   /* Negate it if negative.  */
483076cad711SPaolo Bonzini   if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
483176cad711SPaolo Bonzini     dto = -dto;
483276cad711SPaolo Bonzini   *to = dto;
483376cad711SPaolo Bonzini }
483476cad711SPaolo Bonzini 
483576cad711SPaolo Bonzini static void put_field (unsigned char *, enum floatformat_byteorders,
483676cad711SPaolo Bonzini                        unsigned int,
483776cad711SPaolo Bonzini                        unsigned int,
483876cad711SPaolo Bonzini                        unsigned int,
483976cad711SPaolo Bonzini                        unsigned long);
484076cad711SPaolo Bonzini 
484176cad711SPaolo Bonzini /* Set a field which starts at START and is LEN bits long.  DATA and
484276cad711SPaolo Bonzini    TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
484376cad711SPaolo Bonzini 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)484476cad711SPaolo Bonzini put_field (unsigned char *data, enum floatformat_byteorders order,
484576cad711SPaolo Bonzini            unsigned int total_len, unsigned int start, unsigned int len,
484676cad711SPaolo Bonzini            unsigned long stuff_to_put)
484776cad711SPaolo Bonzini {
484876cad711SPaolo Bonzini   unsigned int cur_byte;
484976cad711SPaolo Bonzini   int cur_bitshift;
485076cad711SPaolo Bonzini 
485176cad711SPaolo Bonzini   /* Start at the least significant part of the field.  */
485276cad711SPaolo Bonzini   cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
485376cad711SPaolo Bonzini   if (order == floatformat_little)
485476cad711SPaolo Bonzini     cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
485576cad711SPaolo Bonzini   cur_bitshift =
485676cad711SPaolo Bonzini     ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
485776cad711SPaolo Bonzini   *(data + cur_byte) &=
485876cad711SPaolo Bonzini     ~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1) << (-cur_bitshift));
485976cad711SPaolo Bonzini   *(data + cur_byte) |=
486076cad711SPaolo Bonzini     (stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
486176cad711SPaolo Bonzini   cur_bitshift += FLOATFORMAT_CHAR_BIT;
486276cad711SPaolo Bonzini   if (order == floatformat_little)
486376cad711SPaolo Bonzini     ++cur_byte;
486476cad711SPaolo Bonzini   else
486576cad711SPaolo Bonzini     --cur_byte;
486676cad711SPaolo Bonzini 
486776cad711SPaolo Bonzini   /* Move towards the most significant part of the field.  */
486876cad711SPaolo Bonzini   while ((unsigned int) cur_bitshift < len)
486976cad711SPaolo Bonzini     {
487076cad711SPaolo Bonzini       if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
487176cad711SPaolo Bonzini 	{
487276cad711SPaolo Bonzini 	  /* This is the last byte.  */
487376cad711SPaolo Bonzini 	  *(data + cur_byte) &=
487476cad711SPaolo Bonzini 	    ~((1 << (len - cur_bitshift)) - 1);
487576cad711SPaolo Bonzini 	  *(data + cur_byte) |= (stuff_to_put >> cur_bitshift);
487676cad711SPaolo Bonzini 	}
487776cad711SPaolo Bonzini       else
487876cad711SPaolo Bonzini 	*(data + cur_byte) = ((stuff_to_put >> cur_bitshift)
487976cad711SPaolo Bonzini 			      & ((1 << FLOATFORMAT_CHAR_BIT) - 1));
488076cad711SPaolo Bonzini       cur_bitshift += FLOATFORMAT_CHAR_BIT;
488176cad711SPaolo Bonzini       if (order == floatformat_little)
488276cad711SPaolo Bonzini 	++cur_byte;
488376cad711SPaolo Bonzini       else
488476cad711SPaolo Bonzini 	--cur_byte;
488576cad711SPaolo Bonzini     }
488676cad711SPaolo Bonzini }
488776cad711SPaolo Bonzini 
488876cad711SPaolo Bonzini /* The converse: convert the double *FROM to an extended float
488976cad711SPaolo Bonzini    and store where TO points.  Neither FROM nor TO have any alignment
489076cad711SPaolo Bonzini    restrictions.  */
489176cad711SPaolo Bonzini 
489276cad711SPaolo Bonzini void
floatformat_from_double(const struct floatformat * fmt,const double * from,char * to)489376cad711SPaolo Bonzini floatformat_from_double (const struct floatformat *fmt,
489476cad711SPaolo Bonzini                          const double *from, char *to)
489576cad711SPaolo Bonzini {
489676cad711SPaolo Bonzini   double dfrom;
489776cad711SPaolo Bonzini   int exponent;
489876cad711SPaolo Bonzini   double mant;
489976cad711SPaolo Bonzini   unsigned int mant_bits, mant_off;
490076cad711SPaolo Bonzini   int mant_bits_left;
490176cad711SPaolo Bonzini   unsigned char *uto = (unsigned char *)to;
490276cad711SPaolo Bonzini 
490376cad711SPaolo Bonzini   dfrom = *from;
490476cad711SPaolo Bonzini   memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
490576cad711SPaolo Bonzini 
490676cad711SPaolo Bonzini   /* If negative, set the sign bit.  */
490776cad711SPaolo Bonzini   if (dfrom < 0)
490876cad711SPaolo Bonzini     {
490976cad711SPaolo Bonzini       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1);
491076cad711SPaolo Bonzini       dfrom = -dfrom;
491176cad711SPaolo Bonzini     }
491276cad711SPaolo Bonzini 
491376cad711SPaolo Bonzini   if (dfrom == 0)
491476cad711SPaolo Bonzini     {
491576cad711SPaolo Bonzini       /* 0.0.  */
491676cad711SPaolo Bonzini       return;
491776cad711SPaolo Bonzini     }
491876cad711SPaolo Bonzini 
491976cad711SPaolo Bonzini   if (dfrom != dfrom)
492076cad711SPaolo Bonzini     {
492176cad711SPaolo Bonzini       /* NaN.  */
492276cad711SPaolo Bonzini       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
492376cad711SPaolo Bonzini 		 fmt->exp_len, fmt->exp_nan);
492476cad711SPaolo Bonzini       /* Be sure it's not infinity, but NaN value is irrelevant.  */
492576cad711SPaolo Bonzini       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
492676cad711SPaolo Bonzini 		 32, 1);
492776cad711SPaolo Bonzini       return;
492876cad711SPaolo Bonzini     }
492976cad711SPaolo Bonzini 
493076cad711SPaolo Bonzini   if (dfrom + dfrom == dfrom)
493176cad711SPaolo Bonzini     {
493276cad711SPaolo Bonzini       /* This can only happen for an infinite value (or zero, which we
493376cad711SPaolo Bonzini 	 already handled above).  */
493476cad711SPaolo Bonzini       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
493576cad711SPaolo Bonzini 		 fmt->exp_len, fmt->exp_nan);
493676cad711SPaolo Bonzini       return;
493776cad711SPaolo Bonzini     }
493876cad711SPaolo Bonzini 
493976cad711SPaolo Bonzini   mant = frexp (dfrom, &exponent);
494076cad711SPaolo Bonzini   if (exponent + fmt->exp_bias - 1 > 0)
494176cad711SPaolo Bonzini     put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
494276cad711SPaolo Bonzini 	       fmt->exp_len, exponent + fmt->exp_bias - 1);
494376cad711SPaolo Bonzini   else
494476cad711SPaolo Bonzini     {
494576cad711SPaolo Bonzini       /* Handle a denormalized number.  FIXME: What should we do for
494676cad711SPaolo Bonzini 	 non-IEEE formats?  */
494776cad711SPaolo Bonzini       put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
494876cad711SPaolo Bonzini 		 fmt->exp_len, 0);
494976cad711SPaolo Bonzini       mant = ldexp (mant, exponent + fmt->exp_bias - 1);
495076cad711SPaolo Bonzini     }
495176cad711SPaolo Bonzini 
495276cad711SPaolo Bonzini   mant_bits_left = fmt->man_len;
495376cad711SPaolo Bonzini   mant_off = fmt->man_start;
495476cad711SPaolo Bonzini   while (mant_bits_left > 0)
495576cad711SPaolo Bonzini     {
495676cad711SPaolo Bonzini       unsigned long mant_long;
495776cad711SPaolo Bonzini       mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
495876cad711SPaolo Bonzini 
495976cad711SPaolo Bonzini       mant *= 4294967296.0;
496076cad711SPaolo Bonzini       mant_long = (unsigned long)mant;
496176cad711SPaolo Bonzini       mant -= mant_long;
496276cad711SPaolo Bonzini 
496376cad711SPaolo Bonzini       /* If the integer bit is implicit, and we are not creating a
496476cad711SPaolo Bonzini 	 denormalized number, then we need to discard it.  */
496576cad711SPaolo Bonzini       if ((unsigned int) mant_bits_left == fmt->man_len
496676cad711SPaolo Bonzini 	  && fmt->intbit == floatformat_intbit_no
496776cad711SPaolo Bonzini 	  && exponent + fmt->exp_bias - 1 > 0)
496876cad711SPaolo Bonzini 	{
496976cad711SPaolo Bonzini 	  mant_long &= 0x7fffffff;
497076cad711SPaolo Bonzini 	  mant_bits -= 1;
497176cad711SPaolo Bonzini 	}
497276cad711SPaolo Bonzini       else if (mant_bits < 32)
497376cad711SPaolo Bonzini 	{
497476cad711SPaolo Bonzini 	  /* The bits we want are in the most significant MANT_BITS bits of
497576cad711SPaolo Bonzini 	     mant_long.  Move them to the least significant.  */
497676cad711SPaolo Bonzini 	  mant_long >>= 32 - mant_bits;
497776cad711SPaolo Bonzini 	}
497876cad711SPaolo Bonzini 
497976cad711SPaolo Bonzini       put_field (uto, fmt->byteorder, fmt->totalsize,
498076cad711SPaolo Bonzini 		 mant_off, mant_bits, mant_long);
498176cad711SPaolo Bonzini       mant_off += mant_bits;
498276cad711SPaolo Bonzini       mant_bits_left -= mant_bits;
498376cad711SPaolo Bonzini     }
498476cad711SPaolo Bonzini }
498576cad711SPaolo Bonzini 
498676cad711SPaolo Bonzini /* Return non-zero iff the data at FROM is a valid number in format FMT.  */
498776cad711SPaolo Bonzini 
498876cad711SPaolo Bonzini int
floatformat_is_valid(const struct floatformat * fmt,const char * from)498976cad711SPaolo Bonzini floatformat_is_valid (const struct floatformat *fmt, const char *from)
499076cad711SPaolo Bonzini {
499176cad711SPaolo Bonzini   return fmt->is_valid (fmt, from);
499276cad711SPaolo Bonzini }
499376cad711SPaolo Bonzini 
499476cad711SPaolo Bonzini 
499576cad711SPaolo Bonzini #ifdef IEEE_DEBUG
499676cad711SPaolo Bonzini 
499776cad711SPaolo Bonzini /* This is to be run on a host which uses IEEE floating point.  */
499876cad711SPaolo Bonzini 
499976cad711SPaolo Bonzini void
ieee_test(double n)500076cad711SPaolo Bonzini ieee_test (double n)
500176cad711SPaolo Bonzini {
500276cad711SPaolo Bonzini   double result;
500376cad711SPaolo Bonzini 
500476cad711SPaolo Bonzini   floatformat_to_double (&floatformat_ieee_double_little, (char *) &n,
500576cad711SPaolo Bonzini 			 &result);
500676cad711SPaolo Bonzini   if ((n != result && (! isnan (n) || ! isnan (result)))
500776cad711SPaolo Bonzini       || (n < 0 && result >= 0)
500876cad711SPaolo Bonzini       || (n >= 0 && result < 0))
500976cad711SPaolo Bonzini     printf ("Differ(to): %.20g -> %.20g\n", n, result);
501076cad711SPaolo Bonzini 
501176cad711SPaolo Bonzini   floatformat_from_double (&floatformat_ieee_double_little, &n,
501276cad711SPaolo Bonzini 			   (char *) &result);
501376cad711SPaolo Bonzini   if ((n != result && (! isnan (n) || ! isnan (result)))
501476cad711SPaolo Bonzini       || (n < 0 && result >= 0)
501576cad711SPaolo Bonzini       || (n >= 0 && result < 0))
501676cad711SPaolo Bonzini     printf ("Differ(from): %.20g -> %.20g\n", n, result);
501776cad711SPaolo Bonzini 
501876cad711SPaolo Bonzini #if 0
501976cad711SPaolo Bonzini   {
502076cad711SPaolo Bonzini     char exten[16];
502176cad711SPaolo Bonzini 
502276cad711SPaolo Bonzini     floatformat_from_double (&floatformat_m68881_ext, &n, exten);
502376cad711SPaolo Bonzini     floatformat_to_double (&floatformat_m68881_ext, exten, &result);
502476cad711SPaolo Bonzini     if (n != result)
502576cad711SPaolo Bonzini       printf ("Differ(to+from): %.20g -> %.20g\n", n, result);
502676cad711SPaolo Bonzini   }
502776cad711SPaolo Bonzini #endif
502876cad711SPaolo Bonzini 
502976cad711SPaolo Bonzini #if IEEE_DEBUG > 1
503076cad711SPaolo Bonzini   /* This is to be run on a host which uses 68881 format.  */
503176cad711SPaolo Bonzini   {
503276cad711SPaolo Bonzini     long double ex = *(long double *)exten;
503376cad711SPaolo Bonzini     if (ex != n)
503476cad711SPaolo Bonzini       printf ("Differ(from vs. extended): %.20g\n", n);
503576cad711SPaolo Bonzini   }
503676cad711SPaolo Bonzini #endif
503776cad711SPaolo Bonzini }
503876cad711SPaolo Bonzini 
503976cad711SPaolo Bonzini int
main(void)504076cad711SPaolo Bonzini main (void)
504176cad711SPaolo Bonzini {
504276cad711SPaolo Bonzini   ieee_test (0.0);
504376cad711SPaolo Bonzini   ieee_test (0.5);
504476cad711SPaolo Bonzini   ieee_test (256.0);
504576cad711SPaolo Bonzini   ieee_test (0.12345);
504676cad711SPaolo Bonzini   ieee_test (234235.78907234);
504776cad711SPaolo Bonzini   ieee_test (-512.0);
504876cad711SPaolo Bonzini   ieee_test (-0.004321);
504976cad711SPaolo Bonzini   ieee_test (1.2E-70);
505076cad711SPaolo Bonzini   ieee_test (1.2E-316);
505176cad711SPaolo Bonzini   ieee_test (4.9406564584124654E-324);
505276cad711SPaolo Bonzini   ieee_test (- 4.9406564584124654E-324);
505376cad711SPaolo Bonzini   ieee_test (- 0.0);
505476cad711SPaolo Bonzini   ieee_test (- INFINITY);
505576cad711SPaolo Bonzini   ieee_test (- NAN);
505676cad711SPaolo Bonzini   ieee_test (INFINITY);
505776cad711SPaolo Bonzini   ieee_test (NAN);
505876cad711SPaolo Bonzini   return 0;
505976cad711SPaolo Bonzini }
506076cad711SPaolo Bonzini #endif
506176cad711SPaolo Bonzini /* **** End of floatformat.c  */
5062