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