Commit 48024e4a485fa82c103978c30c7d59d3a3a09262

Authored by bellard
1 parent b389dbfb

m68k disassembler (Paul Brook)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1605 c046a42c-6fe2-441c-8c8c-71466251a162
Makefile.target
... ... @@ -240,6 +240,9 @@ endif
240 240 ifeq ($(findstring arm, $(TARGET_ARCH) $(ARCH)),arm)
241 241 LIBOBJS+=arm-dis.o
242 242 endif
  243 +ifeq ($(findstring m68k, $(TARGET_ARCH) $(ARCH)),m68k)
  244 +LIBOBJS+=m68k-dis.o
  245 +endif
243 246  
244 247 ifeq ($(ARCH),ia64)
245 248 OBJS += ia64-syscall.o
... ...
alpha-dis.c
... ... @@ -23,9 +23,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 23 #include <stdio.h>
24 24 #include "dis-asm.h"
25 25  
26   -#define ATTRIBUTE_UNUSED __attribute__((unused))
27   -#define _(x) x
28   -
29 26 /* The opcode table is an array of struct alpha_opcode. */
30 27  
31 28 struct alpha_opcode
... ...
dis-asm.h
... ... @@ -56,6 +56,17 @@ enum bfd_architecture
56 56 #define bfd_mach_m68030 5
57 57 #define bfd_mach_m68040 6
58 58 #define bfd_mach_m68060 7
  59 +#define bfd_mach_cpu32 8
  60 +#define bfd_mach_mcf5200 9
  61 +#define bfd_mach_mcf5206e 10
  62 +#define bfd_mach_mcf5307 11
  63 +#define bfd_mach_mcf5407 12
  64 +#define bfd_mach_mcf528x 13
  65 +#define bfd_mach_mcfv4e 14
  66 +#define bfd_mach_mcf521x 15
  67 +#define bfd_mach_mcf5249 16
  68 +#define bfd_mach_mcf547x 17
  69 +#define bfd_mach_mcf548x 18
59 70 bfd_arch_vax, /* DEC Vax */
60 71 bfd_arch_i960, /* Intel 960 */
61 72 /* The order of the following is important.
... ... @@ -417,6 +428,7 @@ extern int generic_symbol_at_address
417 428 (INFO).insn_info_valid = 0
418 429  
419 430 #define _(x) x
  431 +#define ATTRIBUTE_UNUSED __attribute__((unused))
420 432  
421 433 /* from libbfd */
422 434  
... ... @@ -425,5 +437,6 @@ bfd_vma bfd_getb32 (const bfd_byte *addr);
425 437 bfd_vma bfd_getl16 (const bfd_byte *addr);
426 438 bfd_vma bfd_getb16 (const bfd_byte *addr);
427 439 typedef enum bfd_boolean {false, true} boolean;
  440 +typedef boolean bfd_boolean;
428 441  
429 442 #endif /* ! defined (DIS_ASM_H) */
... ...
... ... @@ -187,6 +187,8 @@ void target_disas(FILE *out, target_ulong code, target_ulong size, int flags)
187 187 print_insn = print_insn_ppc;
188 188 #elif defined(TARGET_MIPS)
189 189 print_insn = print_insn_big_mips;
  190 +#elif defined(TARGET_M68K)
  191 + print_insn = print_insn_m68k;
190 192 #else
191 193 fprintf(out, "0x" TARGET_FMT_lx
192 194 ": Asm output not supported on this arch\n", code);
... ... @@ -251,6 +253,8 @@ void disas(FILE *out, void *code, unsigned long size)
251 253 print_insn = print_insn_big_mips;
252 254 #elif defined(__MIPSEL__)
253 255 print_insn = print_insn_little_mips;
  256 +#elif defined(__m68k__)
  257 + print_insn = print_insn_m68k;
254 258 #else
255 259 fprintf(out, "0x%lx: Asm output not supported on this arch\n",
256 260 (long) code);
... ... @@ -374,6 +378,8 @@ void monitor_disas(target_ulong pc, int nb_insn, int is_physical, int flags)
374 378 print_insn = print_insn_ppc;
375 379 #elif defined(TARGET_MIPS)
376 380 print_insn = print_insn_big_mips;
  381 +#elif defined(TARGET_M68K)
  382 + print_insn = print_insn_m68k;
377 383 #else
378 384 term_printf("0x" TARGET_FMT_lx
379 385 ": Asm output not supported on this arch\n", pc);
... ...
m68k-dis.c 0 → 100644
  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 +/* **** foatformat.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 +const char * const fpcr_names[] =
  550 +{
  551 + "", "%fpiar", "%fpsr", "%fpiar/%fpsr", "%fpcr",
  552 + "%fpiar/%fpcr", "%fpsr/%fpcr", "%fpiar/%fpsr/%fpcr"
  553 +};
  554 +
  555 +static 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 + Seperate from reg_names since 'spu', 'fpl' look weird. */
  564 +static 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 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 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 { 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 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 + 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 */
... ...
mips-dis.c
... ... @@ -2155,10 +2155,6 @@ struct mips_opcode *mips_opcodes =
2155 2155 int bfd_mips_num_opcodes = MIPS_NUM_OPCODES;
2156 2156 #undef MIPS_NUM_OPCODES
2157 2157  
2158   -typedef int bfd_boolean;
2159   -#define TRUE (1)
2160   -#define FALSE (0)
2161   -
2162 2158 /* Mips instructions are at maximum this many bytes long. */
2163 2159 #define INSNLEN 4
2164 2160  
... ...