Statistics
| Branch: | Revision:

root / m68k-dis.c @ 8c5e95d8

History | View | Annotate | Download (211.9 kB)

1 48024e4a bellard
/* This file is composed of several different files from the upstream
2 48024e4a bellard
   sourceware.org CVS.  Original file boundaries marked with **** */
3 48024e4a bellard
4 48024e4a bellard
#include <string.h>
5 48024e4a bellard
#include <math.h>
6 48024e4a bellard
#include <stdio.h>
7 48024e4a bellard
8 48024e4a bellard
#include "dis-asm.h"
9 48024e4a bellard
10 48024e4a bellard
/* **** foatformat.h from sourceware.org CVS 2005-08-14.  */
11 48024e4a bellard
/* IEEE floating point support declarations, for GDB, the GNU Debugger.
12 48024e4a bellard
   Copyright 1991, 1994, 1995, 1997, 2000, 2003 Free Software Foundation, Inc.
13 48024e4a bellard

14 48024e4a bellard
This file is part of GDB.
15 48024e4a bellard

16 48024e4a bellard
This program is free software; you can redistribute it and/or modify
17 48024e4a bellard
it under the terms of the GNU General Public License as published by
18 48024e4a bellard
the Free Software Foundation; either version 2 of the License, or
19 48024e4a bellard
(at your option) any later version.
20 48024e4a bellard

21 48024e4a bellard
This program is distributed in the hope that it will be useful,
22 48024e4a bellard
but WITHOUT ANY WARRANTY; without even the implied warranty of
23 48024e4a bellard
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24 48024e4a bellard
GNU General Public License for more details.
25 48024e4a bellard

26 48024e4a bellard
You should have received a copy of the GNU General Public License
27 48024e4a bellard
along with this program; if not, write to the Free Software
28 48024e4a bellard
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
29 48024e4a bellard
30 48024e4a bellard
#if !defined (FLOATFORMAT_H)
31 48024e4a bellard
#define FLOATFORMAT_H 1
32 48024e4a bellard
33 48024e4a bellard
/*#include "ansidecl.h" */
34 48024e4a bellard
35 48024e4a bellard
/* A floatformat consists of a sign bit, an exponent and a mantissa.  Once the
36 48024e4a bellard
   bytes are concatenated according to the byteorder flag, then each of those
37 48024e4a bellard
   fields is contiguous.  We number the bits with 0 being the most significant
38 48024e4a bellard
   (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field
39 48024e4a bellard
   contains with the *_start and *_len fields.  */
40 48024e4a bellard
41 48024e4a bellard
/* What is the order of the bytes. */
42 48024e4a bellard
43 48024e4a bellard
enum floatformat_byteorders {
44 48024e4a bellard
45 48024e4a bellard
  /* Standard little endian byte order.
46 48024e4a bellard
     EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */
47 48024e4a bellard
48 48024e4a bellard
  floatformat_little,
49 48024e4a bellard
50 48024e4a bellard
  /* Standard big endian byte order.
51 48024e4a bellard
     EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */
52 48024e4a bellard
53 48024e4a bellard
  floatformat_big,
54 48024e4a bellard
55 48024e4a bellard
  /* Little endian byte order but big endian word order.
56 48024e4a bellard
     EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */
57 48024e4a bellard
58 48024e4a bellard
  floatformat_littlebyte_bigword
59 48024e4a bellard
60 48024e4a bellard
};
61 48024e4a bellard
62 48024e4a bellard
enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
63 48024e4a bellard
64 48024e4a bellard
struct floatformat
65 48024e4a bellard
{
66 48024e4a bellard
  enum floatformat_byteorders byteorder;
67 48024e4a bellard
  unsigned int totalsize;        /* Total size of number in bits */
68 48024e4a bellard
69 48024e4a bellard
  /* Sign bit is always one bit long.  1 means negative, 0 means positive.  */
70 48024e4a bellard
  unsigned int sign_start;
71 48024e4a bellard
72 48024e4a bellard
  unsigned int exp_start;
73 48024e4a bellard
  unsigned int exp_len;
74 48024e4a bellard
  /* Bias added to a "true" exponent to form the biased exponent.  It
75 48024e4a bellard
     is intentionally signed as, otherwize, -exp_bias can turn into a
76 48024e4a bellard
     very large number (e.g., given the exp_bias of 0x3fff and a 64
77 48024e4a bellard
     bit long, the equation (long)(1 - exp_bias) evaluates to
78 48024e4a bellard
     4294950914) instead of -16382).  */
79 48024e4a bellard
  int exp_bias;
80 48024e4a bellard
  /* Exponent value which indicates NaN.  This is the actual value stored in
81 48024e4a bellard
     the float, not adjusted by the exp_bias.  This usually consists of all
82 48024e4a bellard
     one bits.  */
83 48024e4a bellard
  unsigned int exp_nan;
84 48024e4a bellard
85 48024e4a bellard
  unsigned int man_start;
86 48024e4a bellard
  unsigned int man_len;
87 48024e4a bellard
88 48024e4a bellard
  /* Is the integer bit explicit or implicit?  */
89 48024e4a bellard
  enum floatformat_intbit intbit;
90 48024e4a bellard
91 48024e4a bellard
  /* Internal name for debugging. */
92 48024e4a bellard
  const char *name;
93 48024e4a bellard
94 48024e4a bellard
  /* Validator method.  */
95 48024e4a bellard
  int (*is_valid) (const struct floatformat *fmt, const char *from);
96 48024e4a bellard
};
97 48024e4a bellard
98 48024e4a bellard
/* floatformats for IEEE single and double, big and little endian.  */
99 48024e4a bellard
100 48024e4a bellard
extern const struct floatformat floatformat_ieee_single_big;
101 48024e4a bellard
extern const struct floatformat floatformat_ieee_single_little;
102 48024e4a bellard
extern const struct floatformat floatformat_ieee_double_big;
103 48024e4a bellard
extern const struct floatformat floatformat_ieee_double_little;
104 48024e4a bellard
105 48024e4a bellard
/* floatformat for ARM IEEE double, little endian bytes and big endian words */
106 48024e4a bellard
107 48024e4a bellard
extern const struct floatformat floatformat_ieee_double_littlebyte_bigword;
108 48024e4a bellard
109 48024e4a bellard
/* floatformats for various extendeds.  */
110 48024e4a bellard
111 48024e4a bellard
extern const struct floatformat floatformat_i387_ext;
112 48024e4a bellard
extern const struct floatformat floatformat_m68881_ext;
113 48024e4a bellard
extern const struct floatformat floatformat_i960_ext;
114 48024e4a bellard
extern const struct floatformat floatformat_m88110_ext;
115 48024e4a bellard
extern const struct floatformat floatformat_m88110_harris_ext;
116 48024e4a bellard
extern const struct floatformat floatformat_arm_ext_big;
117 48024e4a bellard
extern const struct floatformat floatformat_arm_ext_littlebyte_bigword;
118 48024e4a bellard
/* IA-64 Floating Point register spilt into memory.  */
119 48024e4a bellard
extern const struct floatformat floatformat_ia64_spill_big;
120 48024e4a bellard
extern const struct floatformat floatformat_ia64_spill_little;
121 48024e4a bellard
extern const struct floatformat floatformat_ia64_quad_big;
122 48024e4a bellard
extern const struct floatformat floatformat_ia64_quad_little;
123 48024e4a bellard
124 48024e4a bellard
/* Convert from FMT to a double.
125 48024e4a bellard
   FROM is the address of the extended float.
126 48024e4a bellard
   Store the double in *TO.  */
127 48024e4a bellard
128 48024e4a bellard
extern void
129 48024e4a bellard
floatformat_to_double (const struct floatformat *, const char *, double *);
130 48024e4a bellard
131 48024e4a bellard
/* The converse: convert the double *FROM to FMT
132 48024e4a bellard
   and store where TO points.  */
133 48024e4a bellard
134 48024e4a bellard
extern void
135 48024e4a bellard
floatformat_from_double (const struct floatformat *, const double *, char *);
136 48024e4a bellard
137 48024e4a bellard
/* Return non-zero iff the data at FROM is a valid number in format FMT.  */
138 48024e4a bellard
139 48024e4a bellard
extern int
140 48024e4a bellard
floatformat_is_valid (const struct floatformat *fmt, const char *from);
141 48024e4a bellard
142 48024e4a bellard
#endif        /* defined (FLOATFORMAT_H) */
143 48024e4a bellard
/* **** End of floatformat.h */
144 48024e4a bellard
/* **** m68k-dis.h from sourceware.org CVS 2005-08-14.  */
145 48024e4a bellard
/* Opcode table header for m680[01234]0/m6888[12]/m68851.
146 48024e4a bellard
   Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001,
147 48024e4a bellard
   2003, 2004 Free Software Foundation, Inc.
148 48024e4a bellard

149 48024e4a bellard
   This file is part of GDB, GAS, and the GNU binutils.
150 48024e4a bellard

151 48024e4a bellard
   GDB, GAS, and the GNU binutils are free software; you can redistribute
152 48024e4a bellard
   them and/or modify them under the terms of the GNU General Public
153 48024e4a bellard
   License as published by the Free Software Foundation; either version
154 48024e4a bellard
   1, or (at your option) any later version.
155 48024e4a bellard

156 48024e4a bellard
   GDB, GAS, and the GNU binutils are distributed in the hope that they
157 48024e4a bellard
   will be useful, but WITHOUT ANY WARRANTY; without even the implied
158 48024e4a bellard
   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
159 48024e4a bellard
   the GNU General Public License for more details.
160 48024e4a bellard

161 48024e4a bellard
   You should have received a copy of the GNU General Public License
162 48024e4a bellard
   along with this file; see the file COPYING.  If not, write to the Free
163 48024e4a bellard
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
164 48024e4a bellard
   02110-1301, USA.  */
165 48024e4a bellard
166 48024e4a bellard
/* These are used as bit flags for the arch field in the m68k_opcode
167 48024e4a bellard
   structure.  */
168 48024e4a bellard
#define        _m68k_undef  0
169 48024e4a bellard
#define        m68000   0x001
170 48024e4a bellard
#define        m68008   m68000 /* Synonym for -m68000.  otherwise unused.  */
171 48024e4a bellard
#define        m68010   0x002
172 48024e4a bellard
#define        m68020   0x004
173 48024e4a bellard
#define        m68030   0x008
174 48024e4a bellard
#define m68ec030 m68030 /* Similar enough to -m68030 to ignore differences;
175 48024e4a bellard
                           gas will deal with the few differences.  */
176 48024e4a bellard
#define        m68040   0x010
177 48024e4a bellard
/* There is no 68050.  */
178 48024e4a bellard
#define m68060   0x020
179 48024e4a bellard
#define        m68881   0x040
180 48024e4a bellard
#define        m68882   m68881 /* Synonym for -m68881.  otherwise unused.  */
181 48024e4a bellard
#define        m68851   0x080
182 48024e4a bellard
#define cpu32         0x100                /* e.g., 68332 */
183 48024e4a bellard
184 48024e4a bellard
#define mcfmac   0x200                /* ColdFire MAC. */
185 48024e4a bellard
#define mcfemac  0x400                /* ColdFire EMAC. */
186 48024e4a bellard
#define cfloat   0x800                /* ColdFire FPU.  */
187 48024e4a bellard
#define mcfhwdiv 0x1000                /* ColdFire hardware divide.  */
188 48024e4a bellard
189 48024e4a bellard
#define mcfisa_a 0x2000                /* ColdFire ISA_A.  */
190 48024e4a bellard
#define mcfisa_aa 0x4000        /* ColdFire ISA_A+.  */
191 48024e4a bellard
#define mcfisa_b 0x8000                /* ColdFire ISA_B.  */
192 48024e4a bellard
#define mcfusp   0x10000        /* ColdFire USP instructions.  */
193 48024e4a bellard
194 48024e4a bellard
#define mcf5200  0x20000
195 48024e4a bellard
#define mcf5206e 0x40000
196 48024e4a bellard
#define mcf521x  0x80000
197 48024e4a bellard
#define mcf5249  0x100000
198 48024e4a bellard
#define mcf528x  0x200000
199 48024e4a bellard
#define mcf5307  0x400000
200 48024e4a bellard
#define mcf5407  0x800000
201 48024e4a bellard
#define mcf5470  0x1000000
202 48024e4a bellard
#define mcf5480  0x2000000
203 48024e4a bellard
204 48024e4a bellard
 /* Handy aliases.  */
205 48024e4a bellard
#define        m68040up   (m68040 | m68060)
206 48024e4a bellard
#define        m68030up   (m68030 | m68040up)
207 48024e4a bellard
#define        m68020up   (m68020 | m68030up)
208 48024e4a bellard
#define        m68010up   (m68010 | cpu32 | m68020up)
209 48024e4a bellard
#define        m68000up   (m68000 | m68010up)
210 48024e4a bellard
211 48024e4a bellard
#define        mfloat  (m68881 | m68882 | m68040 | m68060)
212 48024e4a bellard
#define        mmmu    (m68851 | m68030 | m68040 | m68060)
213 48024e4a bellard
214 48024e4a bellard
/* The structure used to hold information for an opcode.  */
215 48024e4a bellard
216 48024e4a bellard
struct m68k_opcode
217 48024e4a bellard
{
218 48024e4a bellard
  /* The opcode name.  */
219 48024e4a bellard
  const char *name;
220 48024e4a bellard
  /* The pseudo-size of the instruction(in bytes).  Used to determine
221 48024e4a bellard
     number of bytes necessary to disassemble the instruction.  */
222 48024e4a bellard
  unsigned int size;
223 48024e4a bellard
  /* The opcode itself.  */
224 48024e4a bellard
  unsigned long opcode;
225 48024e4a bellard
  /* The mask used by the disassembler.  */
226 48024e4a bellard
  unsigned long match;
227 48024e4a bellard
  /* The arguments.  */
228 48024e4a bellard
  const char *args;
229 48024e4a bellard
  /* The architectures which support this opcode.  */
230 48024e4a bellard
  unsigned int arch;
231 48024e4a bellard
};
232 48024e4a bellard
233 48024e4a bellard
/* The structure used to hold information for an opcode alias.  */
234 48024e4a bellard
235 48024e4a bellard
struct m68k_opcode_alias
236 48024e4a bellard
{
237 48024e4a bellard
  /* The alias name.  */
238 48024e4a bellard
  const char *alias;
239 48024e4a bellard
  /* The instruction for which this is an alias.  */
240 48024e4a bellard
  const char *primary;
241 48024e4a bellard
};
242 48024e4a bellard
243 48024e4a bellard
/* We store four bytes of opcode for all opcodes because that is the
244 48024e4a bellard
   most any of them need.  The actual length of an instruction is
245 48024e4a bellard
   always at least 2 bytes, and is as much longer as necessary to hold
246 48024e4a bellard
   the operands it has.
247 48024e4a bellard

248 48024e4a bellard
   The match field is a mask saying which bits must match particular
249 48024e4a bellard
   opcode in order for an instruction to be an instance of that
250 48024e4a bellard
   opcode.
251 48024e4a bellard

252 48024e4a bellard
   The args field is a string containing two characters for each
253 48024e4a bellard
   operand of the instruction.  The first specifies the kind of
254 48024e4a bellard
   operand; the second, the place it is stored.  */
255 48024e4a bellard
256 48024e4a bellard
/* Kinds of operands:
257 48024e4a bellard
   Characters used: AaBbCcDdEeFfGgHIiJkLlMmnOopQqRrSsTtU VvWwXxYyZz01234|*~%;@!&$?/<>#^+-
258 48024e4a bellard

259 48024e4a bellard
   D  data register only.  Stored as 3 bits.
260 48024e4a bellard
   A  address register only.  Stored as 3 bits.
261 48024e4a bellard
   a  address register indirect only.  Stored as 3 bits.
262 48024e4a bellard
   R  either kind of register.  Stored as 4 bits.
263 48024e4a bellard
   r  either kind of register indirect only.  Stored as 4 bits.
264 48024e4a bellard
      At the moment, used only for cas2 instruction.
265 48024e4a bellard
   F  floating point coprocessor register only.   Stored as 3 bits.
266 48024e4a bellard
   O  an offset (or width): immediate data 0-31 or data register.
267 48024e4a bellard
      Stored as 6 bits in special format for BF... insns.
268 48024e4a bellard
   +  autoincrement only.  Stored as 3 bits (number of the address register).
269 48024e4a bellard
   -  autodecrement only.  Stored as 3 bits (number of the address register).
270 48024e4a bellard
   Q  quick immediate data.  Stored as 3 bits.
271 48024e4a bellard
      This matches an immediate operand only when value is in range 1 .. 8.
272 48024e4a bellard
   M  moveq immediate data.  Stored as 8 bits.
273 48024e4a bellard
      This matches an immediate operand only when value is in range -128..127
274 48024e4a bellard
   T  trap vector immediate data.  Stored as 4 bits.
275 48024e4a bellard

276 48024e4a bellard
   k  K-factor for fmove.p instruction.   Stored as a 7-bit constant or
277 48024e4a bellard
      a three bit register offset, depending on the field type.
278 48024e4a bellard

279 48024e4a bellard
   #  immediate data.  Stored in special places (b, w or l)
280 48024e4a bellard
      which say how many bits to store.
281 48024e4a bellard
   ^  immediate data for floating point instructions.   Special places
282 48024e4a bellard
      are offset by 2 bytes from '#'...
283 48024e4a bellard
   B  pc-relative address, converted to an offset
284 48024e4a bellard
      that is treated as immediate data.
285 48024e4a bellard
   d  displacement and register.  Stores the register as 3 bits
286 48024e4a bellard
      and stores the displacement in the entire second word.
287 48024e4a bellard

288 48024e4a bellard
   C  the CCR.  No need to store it; this is just for filtering validity.
289 48024e4a bellard
   S  the SR.  No need to store, just as with CCR.
290 48024e4a bellard
   U  the USP.  No need to store, just as with CCR.
291 48024e4a bellard
   E  the MAC ACC.  No need to store, just as with CCR.
292 48024e4a bellard
   e  the EMAC ACC[0123].
293 48024e4a bellard
   G  the MAC/EMAC MACSR.  No need to store, just as with CCR.
294 48024e4a bellard
   g  the EMAC ACCEXT{01,23}.
295 48024e4a bellard
   H  the MASK.  No need to store, just as with CCR.
296 48024e4a bellard
   i  the MAC/EMAC scale factor.
297 48024e4a bellard

298 48024e4a bellard
   I  Coprocessor ID.   Not printed if 1.   The Coprocessor ID is always
299 48024e4a bellard
      extracted from the 'd' field of word one, which means that an extended
300 48024e4a bellard
      coprocessor opcode can be skipped using the 'i' place, if needed.
301 48024e4a bellard

302 48024e4a bellard
   s  System Control register for the floating point coprocessor.
303 48024e4a bellard

304 48024e4a bellard
   J  Misc register for movec instruction, stored in 'j' format.
305 48024e4a bellard
        Possible values:
306 48024e4a bellard
        0x000        SFC        Source Function Code reg        [60, 40, 30, 20, 10]
307 48024e4a bellard
        0x001        DFC        Data Function Code reg                [60, 40, 30, 20, 10]
308 48024e4a bellard
        0x002   CACR    Cache Control Register          [60, 40, 30, 20, mcf]
309 48024e4a bellard
        0x003        TC        MMU Translation Control                [60, 40]
310 48024e4a bellard
        0x004        ITT0        Instruction Transparent
311 48024e4a bellard
                                Translation reg 0        [60, 40]
312 48024e4a bellard
        0x005        ITT1        Instruction Transparent
313 48024e4a bellard
                                Translation reg 1        [60, 40]
314 48024e4a bellard
        0x006        DTT0        Data Transparent
315 48024e4a bellard
                                Translation reg 0        [60, 40]
316 48024e4a bellard
        0x007        DTT1        Data Transparent
317 48024e4a bellard
                                Translation reg 1        [60, 40]
318 48024e4a bellard
        0x008        BUSCR        Bus Control Register                [60]
319 48024e4a bellard
        0x800        USP        User Stack Pointer                [60, 40, 30, 20, 10]
320 48024e4a bellard
        0x801   VBR     Vector Base reg                 [60, 40, 30, 20, 10, mcf]
321 48024e4a bellard
        0x802        CAAR        Cache Address Register                [        30, 20]
322 48024e4a bellard
        0x803        MSP        Master Stack Pointer                [    40, 30, 20]
323 48024e4a bellard
        0x804        ISP        Interrupt Stack Pointer                [    40, 30, 20]
324 48024e4a bellard
        0x805        MMUSR        MMU Status reg                        [    40]
325 48024e4a bellard
        0x806        URP        User Root Pointer                [60, 40]
326 48024e4a bellard
        0x807        SRP        Supervisor Root Pointer                [60, 40]
327 48024e4a bellard
        0x808        PCR        Processor Configuration reg        [60]
328 48024e4a bellard
        0xC00        ROMBAR        ROM Base Address Register        [520X]
329 48024e4a bellard
        0xC04        RAMBAR0        RAM Base Address Register 0        [520X]
330 48024e4a bellard
        0xC05        RAMBAR1        RAM Base Address Register 0        [520X]
331 48024e4a bellard
        0xC0F        MBAR0        RAM Base Address Register 0        [520X]
332 48024e4a bellard
        0xC04   FLASHBAR FLASH Base Address Register    [mcf528x]
333 48024e4a bellard
        0xC05   RAMBAR  Static RAM Base Address Register [mcf528x]
334 48024e4a bellard

335 48024e4a bellard
    L  Register list of the type d0-d7/a0-a7 etc.
336 48024e4a bellard
       (New!  Improved!  Can also hold fp0-fp7, as well!)
337 48024e4a bellard
       The assembler tries to see if the registers match the insn by
338 48024e4a bellard
       looking at where the insn wants them stored.
339 48024e4a bellard

340 48024e4a bellard
    l  Register list like L, but with all the bits reversed.
341 48024e4a bellard
       Used for going the other way. . .
342 48024e4a bellard

343 48024e4a bellard
    c  cache identifier which may be "nc" for no cache, "ic"
344 48024e4a bellard
       for instruction cache, "dc" for data cache, or "bc"
345 48024e4a bellard
       for both caches.  Used in cinv and cpush.  Always
346 48024e4a bellard
       stored in position "d".
347 48024e4a bellard

348 48024e4a bellard
    u  Any register, with ``upper'' or ``lower'' specification.  Used
349 48024e4a bellard
       in the mac instructions with size word.
350 48024e4a bellard

351 48024e4a bellard
 The remainder are all stored as 6 bits using an address mode and a
352 48024e4a bellard
 register number; they differ in which addressing modes they match.
353 48024e4a bellard

354 48024e4a bellard
   *  all                                        (modes 0-6,7.0-4)
355 48024e4a bellard
   ~  alterable memory                                (modes 2-6,7.0,7.1)
356 48024e4a bellard
                                                   (not 0,1,7.2-4)
357 48024e4a bellard
   %  alterable                                        (modes 0-6,7.0,7.1)
358 48024e4a bellard
                                                (not 7.2-4)
359 48024e4a bellard
   ;  data                                        (modes 0,2-6,7.0-4)
360 48024e4a bellard
                                                (not 1)
361 48024e4a bellard
   @  data, but not immediate                        (modes 0,2-6,7.0-3)
362 48024e4a bellard
                                                (not 1,7.4)
363 48024e4a bellard
   !  control                                        (modes 2,5,6,7.0-3)
364 48024e4a bellard
                                                (not 0,1,3,4,7.4)
365 48024e4a bellard
   &  alterable control                                (modes 2,5,6,7.0,7.1)
366 48024e4a bellard
                                                (not 0,1,3,4,7.2-4)
367 48024e4a bellard
   $  alterable data                                (modes 0,2-6,7.0,7.1)
368 48024e4a bellard
                                                (not 1,7.2-4)
369 48024e4a bellard
   ?  alterable control, or data register        (modes 0,2,5,6,7.0,7.1)
370 48024e4a bellard
                                                (not 1,3,4,7.2-4)
371 48024e4a bellard
   /  control, or data register                        (modes 0,2,5,6,7.0-3)
372 48024e4a bellard
                                                (not 1,3,4,7.4)
373 48024e4a bellard
   >  *save operands                                (modes 2,4,5,6,7.0,7.1)
374 48024e4a bellard
                                                (not 0,1,3,7.2-4)
375 48024e4a bellard
   <  *restore operands                                (modes 2,3,5,6,7.0-3)
376 48024e4a bellard
                                                (not 0,1,4,7.4)
377 48024e4a bellard

378 48024e4a bellard
   coldfire move operands:
379 48024e4a bellard
   m                                                  (modes 0-4)
380 48024e4a bellard
   n                                                (modes 5,7.2)
381 48024e4a bellard
   o                                                (modes 6,7.0,7.1,7.3,7.4)
382 48024e4a bellard
   p                                                (modes 0-5)
383 48024e4a bellard

384 48024e4a bellard
   coldfire bset/bclr/btst/mulsl/mulul operands:
385 48024e4a bellard
   q                                                (modes 0,2-5)
386 48024e4a bellard
   v                                                (modes 0,2-5,7.0,7.1)
387 48024e4a bellard
   b                                            (modes 0,2-5,7.2)
388 48024e4a bellard
   w                                            (modes 2-5,7.2)
389 48024e4a bellard
   y                                                (modes 2,5)
390 48024e4a bellard
   z                                                (modes 2,5,7.2)
391 48024e4a bellard
   x  mov3q immediate operand.
392 48024e4a bellard
   4                                                (modes 2,3,4,5)
393 48024e4a bellard
  */
394 48024e4a bellard
395 48024e4a bellard
/* For the 68851:  */
396 48024e4a bellard
/* I didn't use much imagination in choosing the
397 48024e4a bellard
   following codes, so many of them aren't very
398 48024e4a bellard
   mnemonic. -rab
399 48024e4a bellard

400 48024e4a bellard
   0  32 bit pmmu register
401 48024e4a bellard
        Possible values:
402 48024e4a bellard
        000        TC        Translation Control Register (68030, 68851)
403 48024e4a bellard

404 48024e4a bellard
   1  16 bit pmmu register
405 48024e4a bellard
        111        AC        Access Control (68851)
406 48024e4a bellard

407 48024e4a bellard
   2  8 bit pmmu register
408 48024e4a bellard
        100        CAL        Current Access Level (68851)
409 48024e4a bellard
        101        VAL        Validate Access Level (68851)
410 48024e4a bellard
        110        SCC        Stack Change Control (68851)
411 48024e4a bellard

412 48024e4a bellard
   3  68030-only pmmu registers (32 bit)
413 48024e4a bellard
        010        TT0        Transparent Translation reg 0
414 48024e4a bellard
                        (aka Access Control reg 0 -- AC0 -- on 68ec030)
415 48024e4a bellard
        011        TT1        Transparent Translation reg 1
416 48024e4a bellard
                        (aka Access Control reg 1 -- AC1 -- on 68ec030)
417 48024e4a bellard

418 48024e4a bellard
   W  wide pmmu registers
419 48024e4a bellard
        Possible values:
420 48024e4a bellard
        001        DRP        Dma Root Pointer (68851)
421 48024e4a bellard
        010        SRP        Supervisor Root Pointer (68030, 68851)
422 48024e4a bellard
        011        CRP        Cpu Root Pointer (68030, 68851)
423 48024e4a bellard

424 48024e4a bellard
   f        function code register (68030, 68851)
425 48024e4a bellard
        0        SFC
426 48024e4a bellard
        1        DFC
427 48024e4a bellard

428 48024e4a bellard
   V        VAL register only (68851)
429 48024e4a bellard

430 48024e4a bellard
   X        BADx, BACx (16 bit)
431 48024e4a bellard
        100        BAD        Breakpoint Acknowledge Data (68851)
432 48024e4a bellard
        101        BAC        Breakpoint Acknowledge Control (68851)
433 48024e4a bellard

434 48024e4a bellard
   Y        PSR (68851) (MMUSR on 68030) (ACUSR on 68ec030)
435 48024e4a bellard
   Z        PCSR (68851)
436 48024e4a bellard

437 48024e4a bellard
   |        memory                 (modes 2-6, 7.*)
438 48024e4a bellard

439 48024e4a bellard
   t  address test level (68030 only)
440 48024e4a bellard
      Stored as 3 bits, range 0-7.
441 48024e4a bellard
      Also used for breakpoint instruction now.
442 48024e4a bellard

443 48024e4a bellard
*/
444 48024e4a bellard
445 48024e4a bellard
/* Places to put an operand, for non-general operands:
446 48024e4a bellard
   Characters used: BbCcDdFfGgHhIijkLlMmNnostWw123456789/
447 48024e4a bellard

448 48024e4a bellard
   s  source, low bits of first word.
449 48024e4a bellard
   d  dest, shifted 9 in first word
450 48024e4a bellard
   1  second word, shifted 12
451 48024e4a bellard
   2  second word, shifted 6
452 48024e4a bellard
   3  second word, shifted 0
453 48024e4a bellard
   4  third word, shifted 12
454 48024e4a bellard
   5  third word, shifted 6
455 48024e4a bellard
   6  third word, shifted 0
456 48024e4a bellard
   7  second word, shifted 7
457 48024e4a bellard
   8  second word, shifted 10
458 48024e4a bellard
   9  second word, shifted 5
459 48024e4a bellard
   D  store in both place 1 and place 3; for divul and divsl.
460 48024e4a bellard
   B  first word, low byte, for branch displacements
461 48024e4a bellard
   W  second word (entire), for branch displacements
462 48024e4a bellard
   L  second and third words (entire), for branch displacements
463 48024e4a bellard
      (also overloaded for move16)
464 48024e4a bellard
   b  second word, low byte
465 48024e4a bellard
   w  second word (entire) [variable word/long branch offset for dbra]
466 48024e4a bellard
   W  second word (entire) (must be signed 16 bit value)
467 48024e4a bellard
   l  second and third word (entire)
468 48024e4a bellard
   g  variable branch offset for bra and similar instructions.
469 48024e4a bellard
      The place to store depends on the magnitude of offset.
470 48024e4a bellard
   t  store in both place 7 and place 8; for floating point operations
471 48024e4a bellard
   c  branch offset for cpBcc operations.
472 48024e4a bellard
      The place to store is word two if bit six of word one is zero,
473 48024e4a bellard
      and words two and three if bit six of word one is one.
474 48024e4a bellard
   i  Increment by two, to skip over coprocessor extended operands.   Only
475 48024e4a bellard
      works with the 'I' format.
476 48024e4a bellard
   k  Dynamic K-factor field.   Bits 6-4 of word 2, used as a register number.
477 48024e4a bellard
      Also used for dynamic fmovem instruction.
478 48024e4a bellard
   C  floating point coprocessor constant - 7 bits.  Also used for static
479 48024e4a bellard
      K-factors...
480 48024e4a bellard
   j  Movec register #, stored in 12 low bits of second word.
481 48024e4a bellard
   m  For M[S]ACx; 4 bits split with MSB shifted 6 bits in first word
482 48024e4a bellard
      and remaining 3 bits of register shifted 9 bits in first word.
483 48024e4a bellard
      Indicate upper/lower in 1 bit shifted 7 bits in second word.
484 48024e4a bellard
      Use with `R' or `u' format.
485 48024e4a bellard
   n  `m' withouth upper/lower indication. (For M[S]ACx; 4 bits split
486 48024e4a bellard
      with MSB shifted 6 bits in first word and remaining 3 bits of
487 48024e4a bellard
      register shifted 9 bits in first word.  No upper/lower
488 48024e4a bellard
      indication is done.)  Use with `R' or `u' format.
489 48024e4a bellard
   o  For M[S]ACw; 4 bits shifted 12 in second word (like `1').
490 48024e4a bellard
      Indicate upper/lower in 1 bit shifted 7 bits in second word.
491 48024e4a bellard
      Use with `R' or `u' format.
492 48024e4a bellard
   M  For M[S]ACw; 4 bits in low bits of first word.  Indicate
493 48024e4a bellard
      upper/lower in 1 bit shifted 6 bits in second word.  Use with
494 48024e4a bellard
      `R' or `u' format.
495 48024e4a bellard
   N  For M[S]ACw; 4 bits in low bits of second word.  Indicate
496 48024e4a bellard
      upper/lower in 1 bit shifted 6 bits in second word.  Use with
497 48024e4a bellard
      `R' or `u' format.
498 48024e4a bellard
   h  shift indicator (scale factor), 1 bit shifted 10 in second word
499 48024e4a bellard

500 48024e4a bellard
 Places to put operand, for general operands:
501 48024e4a bellard
   d  destination, shifted 6 bits in first word
502 48024e4a bellard
   b  source, at low bit of first word, and immediate uses one byte
503 48024e4a bellard
   w  source, at low bit of first word, and immediate uses two bytes
504 48024e4a bellard
   l  source, at low bit of first word, and immediate uses four bytes
505 48024e4a bellard
   s  source, at low bit of first word.
506 48024e4a bellard
      Used sometimes in contexts where immediate is not allowed anyway.
507 48024e4a bellard
   f  single precision float, low bit of 1st word, immediate uses 4 bytes
508 48024e4a bellard
   F  double precision float, low bit of 1st word, immediate uses 8 bytes
509 48024e4a bellard
   x  extended precision float, low bit of 1st word, immediate uses 12 bytes
510 48024e4a bellard
   p  packed float, low bit of 1st word, immediate uses 12 bytes
511 48024e4a bellard
   G  EMAC accumulator, load  (bit 4 2nd word, !bit8 first word)
512 48024e4a bellard
   H  EMAC accumulator, non load  (bit 4 2nd word, bit 8 first word)
513 48024e4a bellard
   F  EMAC ACCx
514 48024e4a bellard
   f  EMAC ACCy
515 48024e4a bellard
   I  MAC/EMAC scale factor
516 48024e4a bellard
   /  Like 's', but set 2nd word, bit 5 if trailing_ampersand set
517 48024e4a bellard
   ]  first word, bit 10
518 48024e4a bellard
*/
519 48024e4a bellard
520 48024e4a bellard
extern const struct m68k_opcode m68k_opcodes[];
521 48024e4a bellard
extern const struct m68k_opcode_alias m68k_opcode_aliases[];
522 48024e4a bellard
523 48024e4a bellard
extern const int m68k_numopcodes, m68k_numaliases;
524 48024e4a bellard
525 48024e4a bellard
/* **** End of m68k-opcode.h */
526 48024e4a bellard
/* **** m68k-dis.c from sourceware.org CVS 2005-08-14.  */
527 48024e4a bellard
/* Print Motorola 68k instructions.
528 48024e4a bellard
   Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
529 48024e4a bellard
   1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
530 48024e4a bellard
   Free Software Foundation, Inc.
531 48024e4a bellard

532 48024e4a bellard
   This file is free software; you can redistribute it and/or modify
533 48024e4a bellard
   it under the terms of the GNU General Public License as published by
534 48024e4a bellard
   the Free Software Foundation; either version 2 of the License, or
535 48024e4a bellard
   (at your option) any later version.
536 48024e4a bellard

537 48024e4a bellard
   This program is distributed in the hope that it will be useful,
538 48024e4a bellard
   but WITHOUT ANY WARRANTY; without even the implied warranty of
539 48024e4a bellard
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
540 48024e4a bellard
   GNU General Public License for more details.
541 48024e4a bellard

542 48024e4a bellard
   You should have received a copy of the GNU General Public License
543 48024e4a bellard
   along with this program; if not, write to the Free Software
544 48024e4a bellard
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
545 48024e4a bellard
   MA 02110-1301, USA.  */
546 48024e4a bellard
547 48024e4a bellard
/* Local function prototypes.  */
548 48024e4a bellard
549 48024e4a bellard
const char * const fpcr_names[] =
550 48024e4a bellard
{
551 48024e4a bellard
  "", "%fpiar", "%fpsr", "%fpiar/%fpsr", "%fpcr",
552 48024e4a bellard
  "%fpiar/%fpcr", "%fpsr/%fpcr", "%fpiar/%fpsr/%fpcr"
553 48024e4a bellard
};
554 48024e4a bellard
555 48024e4a bellard
static char *const reg_names[] =
556 48024e4a bellard
{
557 48024e4a bellard
  "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
558 48024e4a bellard
  "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp",
559 48024e4a bellard
  "%ps", "%pc"
560 48024e4a bellard
};
561 48024e4a bellard
562 48024e4a bellard
/* Name of register halves for MAC/EMAC.
563 aa1f17c1 ths
   Separate from reg_names since 'spu', 'fpl' look weird.  */
564 48024e4a bellard
static char *const reg_half_names[] =
565 48024e4a bellard
{
566 48024e4a bellard
  "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7",
567 48024e4a bellard
  "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7",
568 48024e4a bellard
  "%ps", "%pc"
569 48024e4a bellard
};
570 48024e4a bellard
571 48024e4a bellard
/* Sign-extend an (unsigned char).  */
572 48024e4a bellard
#if __STDC__ == 1
573 48024e4a bellard
#define COERCE_SIGNED_CHAR(ch) ((signed char) (ch))
574 48024e4a bellard
#else
575 48024e4a bellard
#define COERCE_SIGNED_CHAR(ch) ((int) (((ch) ^ 0x80) & 0xFF) - 128)
576 48024e4a bellard
#endif
577 48024e4a bellard
578 48024e4a bellard
/* Get a 1 byte signed integer.  */
579 48024e4a bellard
#define NEXTBYTE(p)  (p += 2, FETCH_DATA (info, p), COERCE_SIGNED_CHAR(p[-1]))
580 48024e4a bellard
581 48024e4a bellard
/* Get a 2 byte signed integer.  */
582 48024e4a bellard
#define COERCE16(x) ((int) (((x) ^ 0x8000) - 0x8000))
583 48024e4a bellard
#define NEXTWORD(p)  \
584 48024e4a bellard
  (p += 2, FETCH_DATA (info, p), \
585 48024e4a bellard
   COERCE16 ((p[-2] << 8) + p[-1]))
586 48024e4a bellard
587 48024e4a bellard
/* Get a 4 byte signed integer.  */
588 48024e4a bellard
#define COERCE32(x) ((bfd_signed_vma) ((x) ^ 0x80000000) - 0x80000000)
589 48024e4a bellard
#define NEXTLONG(p)  \
590 48024e4a bellard
  (p += 4, FETCH_DATA (info, p), \
591 48024e4a bellard
   (COERCE32 ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1])))
592 48024e4a bellard
593 48024e4a bellard
/* Get a 4 byte unsigned integer.  */
594 48024e4a bellard
#define NEXTULONG(p)  \
595 48024e4a bellard
  (p += 4, FETCH_DATA (info, p), \
596 48024e4a bellard
   (unsigned int) ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1]))
597 48024e4a bellard
598 48024e4a bellard
/* Get a single precision float.  */
599 48024e4a bellard
#define NEXTSINGLE(val, p) \
600 48024e4a bellard
  (p += 4, FETCH_DATA (info, p), \
601 48024e4a bellard
   floatformat_to_double (&floatformat_ieee_single_big, (char *) p - 4, &val))
602 48024e4a bellard
603 48024e4a bellard
/* Get a double precision float.  */
604 48024e4a bellard
#define NEXTDOUBLE(val, p) \
605 48024e4a bellard
  (p += 8, FETCH_DATA (info, p), \
606 48024e4a bellard
   floatformat_to_double (&floatformat_ieee_double_big, (char *) p - 8, &val))
607 48024e4a bellard
608 48024e4a bellard
/* Get an extended precision float.  */
609 48024e4a bellard
#define NEXTEXTEND(val, p) \
610 48024e4a bellard
  (p += 12, FETCH_DATA (info, p), \
611 48024e4a bellard
   floatformat_to_double (&floatformat_m68881_ext, (char *) p - 12, &val))
612 48024e4a bellard
613 48024e4a bellard
/* Need a function to convert from packed to double
614 48024e4a bellard
   precision.   Actually, it's easier to print a
615 48024e4a bellard
   packed number than a double anyway, so maybe
616 48024e4a bellard
   there should be a special case to handle this... */
617 48024e4a bellard
#define NEXTPACKED(p) \
618 48024e4a bellard
  (p += 12, FETCH_DATA (info, p), 0.0)
619 48024e4a bellard
 
620 48024e4a bellard
/* Maximum length of an instruction.  */
621 48024e4a bellard
#define MAXLEN 22
622 48024e4a bellard
623 48024e4a bellard
#include <setjmp.h>
624 48024e4a bellard
625 48024e4a bellard
struct private
626 48024e4a bellard
{
627 48024e4a bellard
  /* Points to first byte not fetched.  */
628 48024e4a bellard
  bfd_byte *max_fetched;
629 48024e4a bellard
  bfd_byte the_buffer[MAXLEN];
630 48024e4a bellard
  bfd_vma insn_start;
631 48024e4a bellard
  jmp_buf bailout;
632 48024e4a bellard
};
633 48024e4a bellard
634 48024e4a bellard
/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
635 48024e4a bellard
   to ADDR (exclusive) are valid.  Returns 1 for success, longjmps
636 48024e4a bellard
   on error.  */
637 48024e4a bellard
#define FETCH_DATA(info, addr) \
638 48024e4a bellard
  ((addr) <= ((struct private *) (info->private_data))->max_fetched \
639 48024e4a bellard
   ? 1 : fetch_data ((info), (addr)))
640 48024e4a bellard
641 48024e4a bellard
static int
642 48024e4a bellard
fetch_data (struct disassemble_info *info, bfd_byte *addr)
643 48024e4a bellard
{
644 48024e4a bellard
  int status;
645 48024e4a bellard
  struct private *priv = (struct private *)info->private_data;
646 48024e4a bellard
  bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
647 48024e4a bellard
648 48024e4a bellard
  status = (*info->read_memory_func) (start,
649 48024e4a bellard
                                      priv->max_fetched,
650 48024e4a bellard
                                      addr - priv->max_fetched,
651 48024e4a bellard
                                      info);
652 48024e4a bellard
  if (status != 0)
653 48024e4a bellard
    {
654 48024e4a bellard
      (*info->memory_error_func) (status, start, info);
655 48024e4a bellard
      longjmp (priv->bailout, 1);
656 48024e4a bellard
    }
657 48024e4a bellard
  else
658 48024e4a bellard
    priv->max_fetched = addr;
659 48024e4a bellard
  return 1;
660 48024e4a bellard
}
661 48024e4a bellard
 
662 48024e4a bellard
/* This function is used to print to the bit-bucket.  */
663 48024e4a bellard
static int
664 48024e4a bellard
dummy_printer (FILE *file ATTRIBUTE_UNUSED,
665 48024e4a bellard
               const char *format ATTRIBUTE_UNUSED,
666 48024e4a bellard
               ...)
667 48024e4a bellard
{
668 48024e4a bellard
  return 0;
669 48024e4a bellard
}
670 48024e4a bellard
671 48024e4a bellard
static void
672 48024e4a bellard
dummy_print_address (bfd_vma vma ATTRIBUTE_UNUSED,
673 48024e4a bellard
                     struct disassemble_info *info ATTRIBUTE_UNUSED)
674 48024e4a bellard
{
675 48024e4a bellard
}
676 48024e4a bellard
677 48024e4a bellard
/* Fetch BITS bits from a position in the instruction specified by CODE.
678 48024e4a bellard
   CODE is a "place to put an argument", or 'x' for a destination
679 48024e4a bellard
   that is a general address (mode and register).
680 48024e4a bellard
   BUFFER contains the instruction.  */
681 48024e4a bellard
682 48024e4a bellard
static int
683 48024e4a bellard
fetch_arg (unsigned char *buffer,
684 48024e4a bellard
           int code,
685 48024e4a bellard
           int bits,
686 48024e4a bellard
           disassemble_info *info)
687 48024e4a bellard
{
688 48024e4a bellard
  int val = 0;
689 48024e4a bellard
690 48024e4a bellard
  switch (code)
691 48024e4a bellard
    {
692 48024e4a bellard
    case '/': /* MAC/EMAC mask bit.  */
693 48024e4a bellard
      val = buffer[3] >> 5;
694 48024e4a bellard
      break;
695 48024e4a bellard
696 48024e4a bellard
    case 'G': /* EMAC ACC load.  */
697 48024e4a bellard
      val = ((buffer[3] >> 3) & 0x2) | ((~buffer[1] >> 7) & 0x1);
698 48024e4a bellard
      break;
699 48024e4a bellard
700 48024e4a bellard
    case 'H': /* EMAC ACC !load.  */
701 48024e4a bellard
      val = ((buffer[3] >> 3) & 0x2) | ((buffer[1] >> 7) & 0x1);
702 48024e4a bellard
      break;
703 48024e4a bellard
704 48024e4a bellard
    case ']': /* EMAC ACCEXT bit.  */
705 48024e4a bellard
      val = buffer[0] >> 2;
706 48024e4a bellard
      break;
707 48024e4a bellard
708 48024e4a bellard
    case 'I': /* MAC/EMAC scale factor.  */
709 48024e4a bellard
      val = buffer[2] >> 1;
710 48024e4a bellard
      break;
711 48024e4a bellard
712 48024e4a bellard
    case 'F': /* EMAC ACCx.  */
713 48024e4a bellard
      val = buffer[0] >> 1;
714 48024e4a bellard
      break;
715 48024e4a bellard
716 48024e4a bellard
    case 'f':
717 48024e4a bellard
      val = buffer[1];
718 48024e4a bellard
      break;
719 48024e4a bellard
720 48024e4a bellard
    case 's':
721 48024e4a bellard
      val = buffer[1];
722 48024e4a bellard
      break;
723 48024e4a bellard
724 48024e4a bellard
    case 'd':                        /* Destination, for register or quick.  */
725 48024e4a bellard
      val = (buffer[0] << 8) + buffer[1];
726 48024e4a bellard
      val >>= 9;
727 48024e4a bellard
      break;
728 48024e4a bellard
729 48024e4a bellard
    case 'x':                        /* Destination, for general arg.  */
730 48024e4a bellard
      val = (buffer[0] << 8) + buffer[1];
731 48024e4a bellard
      val >>= 6;
732 48024e4a bellard
      break;
733 48024e4a bellard
734 48024e4a bellard
    case 'k':
735 48024e4a bellard
      FETCH_DATA (info, buffer + 3);
736 48024e4a bellard
      val = (buffer[3] >> 4);
737 48024e4a bellard
      break;
738 48024e4a bellard
739 48024e4a bellard
    case 'C':
740 48024e4a bellard
      FETCH_DATA (info, buffer + 3);
741 48024e4a bellard
      val = buffer[3];
742 48024e4a bellard
      break;
743 48024e4a bellard
744 48024e4a bellard
    case '1':
745 48024e4a bellard
      FETCH_DATA (info, buffer + 3);
746 48024e4a bellard
      val = (buffer[2] << 8) + buffer[3];
747 48024e4a bellard
      val >>= 12;
748 48024e4a bellard
      break;
749 48024e4a bellard
750 48024e4a bellard
    case '2':
751 48024e4a bellard
      FETCH_DATA (info, buffer + 3);
752 48024e4a bellard
      val = (buffer[2] << 8) + buffer[3];
753 48024e4a bellard
      val >>= 6;
754 48024e4a bellard
      break;
755 48024e4a bellard
756 48024e4a bellard
    case '3':
757 48024e4a bellard
    case 'j':
758 48024e4a bellard
      FETCH_DATA (info, buffer + 3);
759 48024e4a bellard
      val = (buffer[2] << 8) + buffer[3];
760 48024e4a bellard
      break;
761 48024e4a bellard
762 48024e4a bellard
    case '4':
763 48024e4a bellard
      FETCH_DATA (info, buffer + 5);
764 48024e4a bellard
      val = (buffer[4] << 8) + buffer[5];
765 48024e4a bellard
      val >>= 12;
766 48024e4a bellard
      break;
767 48024e4a bellard
768 48024e4a bellard
    case '5':
769 48024e4a bellard
      FETCH_DATA (info, buffer + 5);
770 48024e4a bellard
      val = (buffer[4] << 8) + buffer[5];
771 48024e4a bellard
      val >>= 6;
772 48024e4a bellard
      break;
773 48024e4a bellard
774 48024e4a bellard
    case '6':
775 48024e4a bellard
      FETCH_DATA (info, buffer + 5);
776 48024e4a bellard
      val = (buffer[4] << 8) + buffer[5];
777 48024e4a bellard
      break;
778 48024e4a bellard
779 48024e4a bellard
    case '7':
780 48024e4a bellard
      FETCH_DATA (info, buffer + 3);
781 48024e4a bellard
      val = (buffer[2] << 8) + buffer[3];
782 48024e4a bellard
      val >>= 7;
783 48024e4a bellard
      break;
784 48024e4a bellard
785 48024e4a bellard
    case '8':
786 48024e4a bellard
      FETCH_DATA (info, buffer + 3);
787 48024e4a bellard
      val = (buffer[2] << 8) + buffer[3];
788 48024e4a bellard
      val >>= 10;
789 48024e4a bellard
      break;
790 48024e4a bellard
791 48024e4a bellard
    case '9':
792 48024e4a bellard
      FETCH_DATA (info, buffer + 3);
793 48024e4a bellard
      val = (buffer[2] << 8) + buffer[3];
794 48024e4a bellard
      val >>= 5;
795 48024e4a bellard
      break;
796 48024e4a bellard
797 48024e4a bellard
    case 'e':
798 48024e4a bellard
      val = (buffer[1] >> 6);
799 48024e4a bellard
      break;
800 48024e4a bellard
801 48024e4a bellard
    case 'm':
802 48024e4a bellard
      val = (buffer[1] & 0x40 ? 0x8 : 0)
803 48024e4a bellard
        | ((buffer[0] >> 1) & 0x7)
804 48024e4a bellard
        | (buffer[3] & 0x80 ? 0x10 : 0);
805 48024e4a bellard
      break;
806 48024e4a bellard
807 48024e4a bellard
    case 'n':
808 48024e4a bellard
      val = (buffer[1] & 0x40 ? 0x8 : 0) | ((buffer[0] >> 1) & 0x7);
809 48024e4a bellard
      break;
810 48024e4a bellard
811 48024e4a bellard
    case 'o':
812 48024e4a bellard
      val = (buffer[2] >> 4) | (buffer[3] & 0x80 ? 0x10 : 0);
813 48024e4a bellard
      break;
814 48024e4a bellard
815 48024e4a bellard
    case 'M':
816 48024e4a bellard
      val = (buffer[1] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0);
817 48024e4a bellard
      break;
818 48024e4a bellard
819 48024e4a bellard
    case 'N':
820 48024e4a bellard
      val = (buffer[3] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0);
821 48024e4a bellard
      break;
822 48024e4a bellard
823 48024e4a bellard
    case 'h':
824 48024e4a bellard
      val = buffer[2] >> 2;
825 48024e4a bellard
      break;
826 48024e4a bellard
827 48024e4a bellard
    default:
828 48024e4a bellard
      abort ();
829 48024e4a bellard
    }
830 48024e4a bellard
831 48024e4a bellard
  switch (bits)
832 48024e4a bellard
    {
833 48024e4a bellard
    case 1:
834 48024e4a bellard
      return val & 1;
835 48024e4a bellard
    case 2:
836 48024e4a bellard
      return val & 3;
837 48024e4a bellard
    case 3:
838 48024e4a bellard
      return val & 7;
839 48024e4a bellard
    case 4:
840 48024e4a bellard
      return val & 017;
841 48024e4a bellard
    case 5:
842 48024e4a bellard
      return val & 037;
843 48024e4a bellard
    case 6:
844 48024e4a bellard
      return val & 077;
845 48024e4a bellard
    case 7:
846 48024e4a bellard
      return val & 0177;
847 48024e4a bellard
    case 8:
848 48024e4a bellard
      return val & 0377;
849 48024e4a bellard
    case 12:
850 48024e4a bellard
      return val & 07777;
851 48024e4a bellard
    default:
852 48024e4a bellard
      abort ();
853 48024e4a bellard
    }
854 48024e4a bellard
}
855 48024e4a bellard
856 48024e4a bellard
/* Check if an EA is valid for a particular code.  This is required
857 48024e4a bellard
   for the EMAC instructions since the type of source address determines
858 48024e4a bellard
   if it is a EMAC-load instruciton if the EA is mode 2-5, otherwise it
859 48024e4a bellard
   is a non-load EMAC instruction and the bits mean register Ry.
860 48024e4a bellard
   A similar case exists for the movem instructions where the register
861 48024e4a bellard
   mask is interpreted differently for different EAs.  */
862 48024e4a bellard
863 48024e4a bellard
static bfd_boolean
864 48024e4a bellard
m68k_valid_ea (char code, int val)
865 48024e4a bellard
{
866 48024e4a bellard
  int mode, mask;
867 48024e4a bellard
#define M(n0,n1,n2,n3,n4,n5,n6,n70,n71,n72,n73,n74) \
868 48024e4a bellard
  (n0 | n1 << 1 | n2 << 2 | n3 << 3 | n4 << 4 | n5 << 5 | n6 << 6 \
869 48024e4a bellard
   | n70 << 7 | n71 << 8 | n72 << 9 | n73 << 10 | n74 << 11)
870 48024e4a bellard
871 48024e4a bellard
  switch (code)
872 48024e4a bellard
    {
873 48024e4a bellard
    case '*':
874 48024e4a bellard
      mask = M (1,1,1,1,1,1,1,1,1,1,1,1);
875 48024e4a bellard
      break;
876 48024e4a bellard
    case '~':
877 48024e4a bellard
      mask = M (0,0,1,1,1,1,1,1,1,0,0,0);
878 48024e4a bellard
      break;
879 48024e4a bellard
    case '%':
880 48024e4a bellard
      mask = M (1,1,1,1,1,1,1,1,1,0,0,0);
881 48024e4a bellard
      break;
882 48024e4a bellard
    case ';':
883 48024e4a bellard
      mask = M (1,0,1,1,1,1,1,1,1,1,1,1);
884 48024e4a bellard
      break;
885 48024e4a bellard
    case '@':
886 48024e4a bellard
      mask = M (1,0,1,1,1,1,1,1,1,1,1,0);
887 48024e4a bellard
      break;
888 48024e4a bellard
    case '!':
889 48024e4a bellard
      mask = M (0,0,1,0,0,1,1,1,1,1,1,0);
890 48024e4a bellard
      break;
891 48024e4a bellard
    case '&':
892 48024e4a bellard
      mask = M (0,0,1,0,0,1,1,1,1,0,0,0);
893 48024e4a bellard
      break;
894 48024e4a bellard
    case '$':
895 48024e4a bellard
      mask = M (1,0,1,1,1,1,1,1,1,0,0,0);
896 48024e4a bellard
      break;
897 48024e4a bellard
    case '?':
898 48024e4a bellard
      mask = M (1,0,1,0,0,1,1,1,1,0,0,0);
899 48024e4a bellard
      break;
900 48024e4a bellard
    case '/':
901 48024e4a bellard
      mask = M (1,0,1,0,0,1,1,1,1,1,1,0);
902 48024e4a bellard
      break;
903 48024e4a bellard
    case '|':
904 48024e4a bellard
      mask = M (0,0,1,0,0,1,1,1,1,1,1,0);
905 48024e4a bellard
      break;
906 48024e4a bellard
    case '>':
907 48024e4a bellard
      mask = M (0,0,1,0,1,1,1,1,1,0,0,0);
908 48024e4a bellard
      break;
909 48024e4a bellard
    case '<':
910 48024e4a bellard
      mask = M (0,0,1,1,0,1,1,1,1,1,1,0);
911 48024e4a bellard
      break;
912 48024e4a bellard
    case 'm':
913 48024e4a bellard
      mask = M (1,1,1,1,1,0,0,0,0,0,0,0);
914 48024e4a bellard
      break;
915 48024e4a bellard
    case 'n':
916 48024e4a bellard
      mask = M (0,0,0,0,0,1,0,0,0,1,0,0);
917 48024e4a bellard
      break;
918 48024e4a bellard
    case 'o':
919 48024e4a bellard
      mask = M (0,0,0,0,0,0,1,1,1,0,1,1);
920 48024e4a bellard
      break;
921 48024e4a bellard
    case 'p':
922 48024e4a bellard
      mask = M (1,1,1,1,1,1,0,0,0,0,0,0);
923 48024e4a bellard
      break;
924 48024e4a bellard
    case 'q':
925 48024e4a bellard
      mask = M (1,0,1,1,1,1,0,0,0,0,0,0);
926 48024e4a bellard
      break;
927 48024e4a bellard
    case 'v':
928 48024e4a bellard
      mask = M (1,0,1,1,1,1,0,1,1,0,0,0);
929 48024e4a bellard
      break;
930 48024e4a bellard
    case 'b':
931 48024e4a bellard
      mask = M (1,0,1,1,1,1,0,0,0,1,0,0);
932 48024e4a bellard
      break;
933 48024e4a bellard
    case 'w':
934 48024e4a bellard
      mask = M (0,0,1,1,1,1,0,0,0,1,0,0);
935 48024e4a bellard
      break;
936 48024e4a bellard
    case 'y':
937 48024e4a bellard
      mask = M (0,0,1,0,0,1,0,0,0,0,0,0);
938 48024e4a bellard
      break;
939 48024e4a bellard
    case 'z':
940 48024e4a bellard
      mask = M (0,0,1,0,0,1,0,0,0,1,0,0);
941 48024e4a bellard
      break;
942 48024e4a bellard
    case '4':
943 48024e4a bellard
      mask = M (0,0,1,1,1,1,0,0,0,0,0,0);
944 48024e4a bellard
      break;
945 48024e4a bellard
    default:
946 48024e4a bellard
      abort ();
947 48024e4a bellard
    }
948 48024e4a bellard
#undef M
949 48024e4a bellard
950 48024e4a bellard
  mode = (val >> 3) & 7;
951 48024e4a bellard
  if (mode == 7)
952 48024e4a bellard
    mode += val & 7;
953 48024e4a bellard
  return (mask & (1 << mode)) != 0;
954 48024e4a bellard
}
955 48024e4a bellard
956 48024e4a bellard
/* Print a base register REGNO and displacement DISP, on INFO->STREAM.
957 48024e4a bellard
   REGNO = -1 for pc, -2 for none (suppressed).  */
958 48024e4a bellard
959 48024e4a bellard
static void
960 48024e4a bellard
print_base (int regno, bfd_vma disp, disassemble_info *info)
961 48024e4a bellard
{
962 48024e4a bellard
  if (regno == -1)
963 48024e4a bellard
    {
964 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%pc@(");
965 48024e4a bellard
      (*info->print_address_func) (disp, info);
966 48024e4a bellard
    }
967 48024e4a bellard
  else
968 48024e4a bellard
    {
969 48024e4a bellard
      char buf[50];
970 48024e4a bellard
971 48024e4a bellard
      if (regno == -2)
972 48024e4a bellard
        (*info->fprintf_func) (info->stream, "@(");
973 48024e4a bellard
      else if (regno == -3)
974 48024e4a bellard
        (*info->fprintf_func) (info->stream, "%%zpc@(");
975 48024e4a bellard
      else
976 48024e4a bellard
        (*info->fprintf_func) (info->stream, "%s@(", reg_names[regno]);
977 48024e4a bellard
978 48024e4a bellard
      sprintf_vma (buf, disp);
979 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%s", buf);
980 48024e4a bellard
    }
981 48024e4a bellard
}
982 48024e4a bellard
983 48024e4a bellard
/* Print an indexed argument.  The base register is BASEREG (-1 for pc).
984 48024e4a bellard
   P points to extension word, in buffer.
985 48024e4a bellard
   ADDR is the nominal core address of that extension word.  */
986 48024e4a bellard
987 48024e4a bellard
static unsigned char *
988 48024e4a bellard
print_indexed (int basereg,
989 48024e4a bellard
               unsigned char *p,
990 48024e4a bellard
               bfd_vma addr,
991 48024e4a bellard
               disassemble_info *info)
992 48024e4a bellard
{
993 48024e4a bellard
  int word;
994 48024e4a bellard
  static char *const scales[] = { "", ":2", ":4", ":8" };
995 48024e4a bellard
  bfd_vma base_disp;
996 48024e4a bellard
  bfd_vma outer_disp;
997 48024e4a bellard
  char buf[40];
998 48024e4a bellard
  char vmabuf[50];
999 48024e4a bellard
1000 48024e4a bellard
  word = NEXTWORD (p);
1001 48024e4a bellard
1002 48024e4a bellard
  /* Generate the text for the index register.
1003 48024e4a bellard
     Where this will be output is not yet determined.  */
1004 48024e4a bellard
  sprintf (buf, "%s:%c%s",
1005 48024e4a bellard
           reg_names[(word >> 12) & 0xf],
1006 48024e4a bellard
           (word & 0x800) ? 'l' : 'w',
1007 48024e4a bellard
           scales[(word >> 9) & 3]);
1008 48024e4a bellard
1009 48024e4a bellard
  /* Handle the 68000 style of indexing.  */
1010 48024e4a bellard
1011 48024e4a bellard
  if ((word & 0x100) == 0)
1012 48024e4a bellard
    {
1013 48024e4a bellard
      base_disp = word & 0xff;
1014 48024e4a bellard
      if ((base_disp & 0x80) != 0)
1015 48024e4a bellard
        base_disp -= 0x100;
1016 48024e4a bellard
      if (basereg == -1)
1017 48024e4a bellard
        base_disp += addr;
1018 48024e4a bellard
      print_base (basereg, base_disp, info);
1019 48024e4a bellard
      (*info->fprintf_func) (info->stream, ",%s)", buf);
1020 48024e4a bellard
      return p;
1021 48024e4a bellard
    }
1022 48024e4a bellard
1023 48024e4a bellard
  /* Handle the generalized kind.  */
1024 48024e4a bellard
  /* First, compute the displacement to add to the base register.  */
1025 48024e4a bellard
  if (word & 0200)
1026 48024e4a bellard
    {
1027 48024e4a bellard
      if (basereg == -1)
1028 48024e4a bellard
        basereg = -3;
1029 48024e4a bellard
      else
1030 48024e4a bellard
        basereg = -2;
1031 48024e4a bellard
    }
1032 48024e4a bellard
  if (word & 0100)
1033 48024e4a bellard
    buf[0] = '\0';
1034 48024e4a bellard
  base_disp = 0;
1035 48024e4a bellard
  switch ((word >> 4) & 3)
1036 48024e4a bellard
    {
1037 48024e4a bellard
    case 2:
1038 48024e4a bellard
      base_disp = NEXTWORD (p);
1039 48024e4a bellard
      break;
1040 48024e4a bellard
    case 3:
1041 48024e4a bellard
      base_disp = NEXTLONG (p);
1042 48024e4a bellard
    }
1043 48024e4a bellard
  if (basereg == -1)
1044 48024e4a bellard
    base_disp += addr;
1045 48024e4a bellard
1046 48024e4a bellard
  /* Handle single-level case (not indirect).  */
1047 48024e4a bellard
  if ((word & 7) == 0)
1048 48024e4a bellard
    {
1049 48024e4a bellard
      print_base (basereg, base_disp, info);
1050 48024e4a bellard
      if (buf[0] != '\0')
1051 48024e4a bellard
        (*info->fprintf_func) (info->stream, ",%s", buf);
1052 48024e4a bellard
      (*info->fprintf_func) (info->stream, ")");
1053 48024e4a bellard
      return p;
1054 48024e4a bellard
    }
1055 48024e4a bellard
1056 48024e4a bellard
  /* Two level.  Compute displacement to add after indirection.  */
1057 48024e4a bellard
  outer_disp = 0;
1058 48024e4a bellard
  switch (word & 3)
1059 48024e4a bellard
    {
1060 48024e4a bellard
    case 2:
1061 48024e4a bellard
      outer_disp = NEXTWORD (p);
1062 48024e4a bellard
      break;
1063 48024e4a bellard
    case 3:
1064 48024e4a bellard
      outer_disp = NEXTLONG (p);
1065 48024e4a bellard
    }
1066 48024e4a bellard
1067 48024e4a bellard
  print_base (basereg, base_disp, info);
1068 48024e4a bellard
  if ((word & 4) == 0 && buf[0] != '\0')
1069 48024e4a bellard
    {
1070 48024e4a bellard
      (*info->fprintf_func) (info->stream, ",%s", buf);
1071 48024e4a bellard
      buf[0] = '\0';
1072 48024e4a bellard
    }
1073 48024e4a bellard
  sprintf_vma (vmabuf, outer_disp);
1074 48024e4a bellard
  (*info->fprintf_func) (info->stream, ")@(%s", vmabuf);
1075 48024e4a bellard
  if (buf[0] != '\0')
1076 48024e4a bellard
    (*info->fprintf_func) (info->stream, ",%s", buf);
1077 48024e4a bellard
  (*info->fprintf_func) (info->stream, ")");
1078 48024e4a bellard
1079 48024e4a bellard
  return p;
1080 48024e4a bellard
}
1081 48024e4a bellard
1082 48024e4a bellard
/* Returns number of bytes "eaten" by the operand, or
1083 48024e4a bellard
   return -1 if an invalid operand was found, or -2 if
1084 48024e4a bellard
   an opcode tabe error was found.
1085 48024e4a bellard
   ADDR is the pc for this arg to be relative to.  */
1086 48024e4a bellard
1087 48024e4a bellard
static int
1088 48024e4a bellard
print_insn_arg (const char *d,
1089 48024e4a bellard
                unsigned char *buffer,
1090 48024e4a bellard
                unsigned char *p0,
1091 48024e4a bellard
                bfd_vma addr,
1092 48024e4a bellard
                disassemble_info *info)
1093 48024e4a bellard
{
1094 48024e4a bellard
  int val = 0;
1095 48024e4a bellard
  int place = d[1];
1096 48024e4a bellard
  unsigned char *p = p0;
1097 48024e4a bellard
  int regno;
1098 48024e4a bellard
  const char *regname;
1099 48024e4a bellard
  unsigned char *p1;
1100 48024e4a bellard
  double flval;
1101 48024e4a bellard
  int flt_p;
1102 48024e4a bellard
  bfd_signed_vma disp;
1103 48024e4a bellard
  unsigned int uval;
1104 48024e4a bellard
1105 48024e4a bellard
  switch (*d)
1106 48024e4a bellard
    {
1107 48024e4a bellard
    case 'c':                /* Cache identifier.  */
1108 48024e4a bellard
      {
1109 48024e4a bellard
        static char *const cacheFieldName[] = { "nc", "dc", "ic", "bc" };
1110 48024e4a bellard
        val = fetch_arg (buffer, place, 2, info);
1111 48024e4a bellard
        (*info->fprintf_func) (info->stream, cacheFieldName[val]);
1112 48024e4a bellard
        break;
1113 48024e4a bellard
      }
1114 48024e4a bellard
1115 48024e4a bellard
    case 'a':                /* Address register indirect only. Cf. case '+'.  */
1116 48024e4a bellard
      {
1117 48024e4a bellard
        (*info->fprintf_func)
1118 48024e4a bellard
          (info->stream,
1119 48024e4a bellard
           "%s@",
1120 48024e4a bellard
           reg_names[fetch_arg (buffer, place, 3, info) + 8]);
1121 48024e4a bellard
        break;
1122 48024e4a bellard
      }
1123 48024e4a bellard
1124 48024e4a bellard
    case '_':                /* 32-bit absolute address for move16.  */
1125 48024e4a bellard
      {
1126 48024e4a bellard
        uval = NEXTULONG (p);
1127 48024e4a bellard
        (*info->print_address_func) (uval, info);
1128 48024e4a bellard
        break;
1129 48024e4a bellard
      }
1130 48024e4a bellard
1131 48024e4a bellard
    case 'C':
1132 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%ccr");
1133 48024e4a bellard
      break;
1134 48024e4a bellard
1135 48024e4a bellard
    case 'S':
1136 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%sr");
1137 48024e4a bellard
      break;
1138 48024e4a bellard
1139 48024e4a bellard
    case 'U':
1140 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%usp");
1141 48024e4a bellard
      break;
1142 48024e4a bellard
1143 48024e4a bellard
    case 'E':
1144 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%acc");
1145 48024e4a bellard
      break;
1146 48024e4a bellard
1147 48024e4a bellard
    case 'G':
1148 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%macsr");
1149 48024e4a bellard
      break;
1150 48024e4a bellard
1151 48024e4a bellard
    case 'H':
1152 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%mask");
1153 48024e4a bellard
      break;
1154 48024e4a bellard
1155 48024e4a bellard
    case 'J':
1156 48024e4a bellard
      {
1157 48024e4a bellard
        /* FIXME: There's a problem here, different m68k processors call the
1158 48024e4a bellard
           same address different names. This table can't get it right
1159 48024e4a bellard
           because it doesn't know which processor it's disassembling for.  */
1160 48024e4a bellard
        static const struct { char *name; int value; } names[]
1161 48024e4a bellard
          = {{"%sfc", 0x000}, {"%dfc", 0x001}, {"%cacr", 0x002},
1162 48024e4a bellard
             {"%tc",  0x003}, {"%itt0",0x004}, {"%itt1", 0x005},
1163 48024e4a bellard
             {"%dtt0",0x006}, {"%dtt1",0x007}, {"%buscr",0x008},
1164 48024e4a bellard
             {"%usp", 0x800}, {"%vbr", 0x801}, {"%caar", 0x802},
1165 48024e4a bellard
             {"%msp", 0x803}, {"%isp", 0x804},
1166 48024e4a bellard
             {"%flashbar", 0xc04}, {"%rambar", 0xc05}, /* mcf528x added these.  */
1167 48024e4a bellard
1168 48024e4a bellard
             /* Should we be calling this psr like we do in case 'Y'?  */
1169 48024e4a bellard
             {"%mmusr",0x805},
1170 48024e4a bellard
1171 48024e4a bellard
             {"%urp", 0x806}, {"%srp", 0x807}, {"%pcr", 0x808}};
1172 48024e4a bellard
1173 48024e4a bellard
        val = fetch_arg (buffer, place, 12, info);
1174 48024e4a bellard
        for (regno = sizeof names / sizeof names[0] - 1; regno >= 0; regno--)
1175 48024e4a bellard
          if (names[regno].value == val)
1176 48024e4a bellard
            {
1177 48024e4a bellard
              (*info->fprintf_func) (info->stream, "%s", names[regno].name);
1178 48024e4a bellard
              break;
1179 48024e4a bellard
            }
1180 48024e4a bellard
        if (regno < 0)
1181 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%d", val);
1182 48024e4a bellard
      }
1183 48024e4a bellard
      break;
1184 48024e4a bellard
1185 48024e4a bellard
    case 'Q':
1186 48024e4a bellard
      val = fetch_arg (buffer, place, 3, info);
1187 48024e4a bellard
      /* 0 means 8, except for the bkpt instruction... */
1188 48024e4a bellard
      if (val == 0 && d[1] != 's')
1189 48024e4a bellard
        val = 8;
1190 48024e4a bellard
      (*info->fprintf_func) (info->stream, "#%d", val);
1191 48024e4a bellard
      break;
1192 48024e4a bellard
1193 48024e4a bellard
    case 'x':
1194 48024e4a bellard
      val = fetch_arg (buffer, place, 3, info);
1195 48024e4a bellard
      /* 0 means -1.  */
1196 48024e4a bellard
      if (val == 0)
1197 48024e4a bellard
        val = -1;
1198 48024e4a bellard
      (*info->fprintf_func) (info->stream, "#%d", val);
1199 48024e4a bellard
      break;
1200 48024e4a bellard
1201 48024e4a bellard
    case 'M':
1202 48024e4a bellard
      if (place == 'h')
1203 48024e4a bellard
        {
1204 48024e4a bellard
          static char *const scalefactor_name[] = { "<<", ">>" };
1205 48024e4a bellard
          val = fetch_arg (buffer, place, 1, info);
1206 48024e4a bellard
          (*info->fprintf_func) (info->stream, scalefactor_name[val]);
1207 48024e4a bellard
        }
1208 48024e4a bellard
      else
1209 48024e4a bellard
        {
1210 48024e4a bellard
          val = fetch_arg (buffer, place, 8, info);
1211 48024e4a bellard
          if (val & 0x80)
1212 48024e4a bellard
            val = val - 0x100;
1213 48024e4a bellard
          (*info->fprintf_func) (info->stream, "#%d", val);
1214 48024e4a bellard
        }
1215 48024e4a bellard
      break;
1216 48024e4a bellard
1217 48024e4a bellard
    case 'T':
1218 48024e4a bellard
      val = fetch_arg (buffer, place, 4, info);
1219 48024e4a bellard
      (*info->fprintf_func) (info->stream, "#%d", val);
1220 48024e4a bellard
      break;
1221 48024e4a bellard
1222 48024e4a bellard
    case 'D':
1223 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%s",
1224 48024e4a bellard
                             reg_names[fetch_arg (buffer, place, 3, info)]);
1225 48024e4a bellard
      break;
1226 48024e4a bellard
1227 48024e4a bellard
    case 'A':
1228 48024e4a bellard
      (*info->fprintf_func)
1229 48024e4a bellard
        (info->stream, "%s",
1230 48024e4a bellard
         reg_names[fetch_arg (buffer, place, 3, info) + 010]);
1231 48024e4a bellard
      break;
1232 48024e4a bellard
1233 48024e4a bellard
    case 'R':
1234 48024e4a bellard
      (*info->fprintf_func)
1235 48024e4a bellard
        (info->stream, "%s",
1236 48024e4a bellard
         reg_names[fetch_arg (buffer, place, 4, info)]);
1237 48024e4a bellard
      break;
1238 48024e4a bellard
1239 48024e4a bellard
    case 'r':
1240 48024e4a bellard
      regno = fetch_arg (buffer, place, 4, info);
1241 48024e4a bellard
      if (regno > 7)
1242 48024e4a bellard
        (*info->fprintf_func) (info->stream, "%s@", reg_names[regno]);
1243 48024e4a bellard
      else
1244 48024e4a bellard
        (*info->fprintf_func) (info->stream, "@(%s)", reg_names[regno]);
1245 48024e4a bellard
      break;
1246 48024e4a bellard
1247 48024e4a bellard
    case 'F':
1248 48024e4a bellard
      (*info->fprintf_func)
1249 48024e4a bellard
        (info->stream, "%%fp%d",
1250 48024e4a bellard
         fetch_arg (buffer, place, 3, info));
1251 48024e4a bellard
      break;
1252 48024e4a bellard
1253 48024e4a bellard
    case 'O':
1254 48024e4a bellard
      val = fetch_arg (buffer, place, 6, info);
1255 48024e4a bellard
      if (val & 0x20)
1256 48024e4a bellard
        (*info->fprintf_func) (info->stream, "%s", reg_names[val & 7]);
1257 48024e4a bellard
      else
1258 48024e4a bellard
        (*info->fprintf_func) (info->stream, "%d", val);
1259 48024e4a bellard
      break;
1260 48024e4a bellard
1261 48024e4a bellard
    case '+':
1262 48024e4a bellard
      (*info->fprintf_func)
1263 48024e4a bellard
        (info->stream, "%s@+",
1264 48024e4a bellard
         reg_names[fetch_arg (buffer, place, 3, info) + 8]);
1265 48024e4a bellard
      break;
1266 48024e4a bellard
1267 48024e4a bellard
    case '-':
1268 48024e4a bellard
      (*info->fprintf_func)
1269 48024e4a bellard
        (info->stream, "%s@-",
1270 48024e4a bellard
         reg_names[fetch_arg (buffer, place, 3, info) + 8]);
1271 48024e4a bellard
      break;
1272 48024e4a bellard
1273 48024e4a bellard
    case 'k':
1274 48024e4a bellard
      if (place == 'k')
1275 48024e4a bellard
        (*info->fprintf_func)
1276 48024e4a bellard
          (info->stream, "{%s}",
1277 48024e4a bellard
           reg_names[fetch_arg (buffer, place, 3, info)]);
1278 48024e4a bellard
      else if (place == 'C')
1279 48024e4a bellard
        {
1280 48024e4a bellard
          val = fetch_arg (buffer, place, 7, info);
1281 48024e4a bellard
          if (val > 63)                /* This is a signed constant.  */
1282 48024e4a bellard
            val -= 128;
1283 48024e4a bellard
          (*info->fprintf_func) (info->stream, "{#%d}", val);
1284 48024e4a bellard
        }
1285 48024e4a bellard
      else
1286 48024e4a bellard
        return -2;
1287 48024e4a bellard
      break;
1288 48024e4a bellard
1289 48024e4a bellard
    case '#':
1290 48024e4a bellard
    case '^':
1291 48024e4a bellard
      p1 = buffer + (*d == '#' ? 2 : 4);
1292 48024e4a bellard
      if (place == 's')
1293 48024e4a bellard
        val = fetch_arg (buffer, place, 4, info);
1294 48024e4a bellard
      else if (place == 'C')
1295 48024e4a bellard
        val = fetch_arg (buffer, place, 7, info);
1296 48024e4a bellard
      else if (place == '8')
1297 48024e4a bellard
        val = fetch_arg (buffer, place, 3, info);
1298 48024e4a bellard
      else if (place == '3')
1299 48024e4a bellard
        val = fetch_arg (buffer, place, 8, info);
1300 48024e4a bellard
      else if (place == 'b')
1301 48024e4a bellard
        val = NEXTBYTE (p1);
1302 48024e4a bellard
      else if (place == 'w' || place == 'W')
1303 48024e4a bellard
        val = NEXTWORD (p1);
1304 48024e4a bellard
      else if (place == 'l')
1305 48024e4a bellard
        val = NEXTLONG (p1);
1306 48024e4a bellard
      else
1307 48024e4a bellard
        return -2;
1308 48024e4a bellard
      (*info->fprintf_func) (info->stream, "#%d", val);
1309 48024e4a bellard
      break;
1310 48024e4a bellard
1311 48024e4a bellard
    case 'B':
1312 48024e4a bellard
      if (place == 'b')
1313 48024e4a bellard
        disp = NEXTBYTE (p);
1314 48024e4a bellard
      else if (place == 'B')
1315 48024e4a bellard
        disp = COERCE_SIGNED_CHAR (buffer[1]);
1316 48024e4a bellard
      else if (place == 'w' || place == 'W')
1317 48024e4a bellard
        disp = NEXTWORD (p);
1318 48024e4a bellard
      else if (place == 'l' || place == 'L' || place == 'C')
1319 48024e4a bellard
        disp = NEXTLONG (p);
1320 48024e4a bellard
      else if (place == 'g')
1321 48024e4a bellard
        {
1322 48024e4a bellard
          disp = NEXTBYTE (buffer);
1323 48024e4a bellard
          if (disp == 0)
1324 48024e4a bellard
            disp = NEXTWORD (p);
1325 48024e4a bellard
          else if (disp == -1)
1326 48024e4a bellard
            disp = NEXTLONG (p);
1327 48024e4a bellard
        }
1328 48024e4a bellard
      else if (place == 'c')
1329 48024e4a bellard
        {
1330 48024e4a bellard
          if (buffer[1] & 0x40)                /* If bit six is one, long offset.  */
1331 48024e4a bellard
            disp = NEXTLONG (p);
1332 48024e4a bellard
          else
1333 48024e4a bellard
            disp = NEXTWORD (p);
1334 48024e4a bellard
        }
1335 48024e4a bellard
      else
1336 48024e4a bellard
        return -2;
1337 48024e4a bellard
1338 48024e4a bellard
      (*info->print_address_func) (addr + disp, info);
1339 48024e4a bellard
      break;
1340 48024e4a bellard
1341 48024e4a bellard
    case 'd':
1342 48024e4a bellard
      val = NEXTWORD (p);
1343 48024e4a bellard
      (*info->fprintf_func)
1344 48024e4a bellard
        (info->stream, "%s@(%d)",
1345 48024e4a bellard
         reg_names[fetch_arg (buffer, place, 3, info) + 8], val);
1346 48024e4a bellard
      break;
1347 48024e4a bellard
1348 48024e4a bellard
    case 's':
1349 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%s",
1350 48024e4a bellard
                             fpcr_names[fetch_arg (buffer, place, 3, info)]);
1351 48024e4a bellard
      break;
1352 48024e4a bellard
1353 48024e4a bellard
    case 'e':
1354 48024e4a bellard
      val = fetch_arg(buffer, place, 2, info);
1355 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%acc%d", val);
1356 48024e4a bellard
      break;
1357 48024e4a bellard
1358 48024e4a bellard
    case 'g':
1359 48024e4a bellard
      val = fetch_arg(buffer, place, 1, info);
1360 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%accext%s", val==0 ? "01" : "23");
1361 48024e4a bellard
      break;
1362 48024e4a bellard
1363 48024e4a bellard
    case 'i':
1364 48024e4a bellard
      val = fetch_arg(buffer, place, 2, info);
1365 48024e4a bellard
      if (val == 1)
1366 48024e4a bellard
        (*info->fprintf_func) (info->stream, "<<");
1367 48024e4a bellard
      else if (val == 3)
1368 48024e4a bellard
        (*info->fprintf_func) (info->stream, ">>");
1369 48024e4a bellard
      else
1370 48024e4a bellard
        return -1;
1371 48024e4a bellard
      break;
1372 48024e4a bellard
1373 48024e4a bellard
    case 'I':
1374 48024e4a bellard
      /* Get coprocessor ID... */
1375 48024e4a bellard
      val = fetch_arg (buffer, 'd', 3, info);
1376 48024e4a bellard
1377 48024e4a bellard
      if (val != 1)                                /* Unusual coprocessor ID?  */
1378 48024e4a bellard
        (*info->fprintf_func) (info->stream, "(cpid=%d) ", val);
1379 48024e4a bellard
      break;
1380 48024e4a bellard
1381 48024e4a bellard
    case '4':
1382 48024e4a bellard
    case '*':
1383 48024e4a bellard
    case '~':
1384 48024e4a bellard
    case '%':
1385 48024e4a bellard
    case ';':
1386 48024e4a bellard
    case '@':
1387 48024e4a bellard
    case '!':
1388 48024e4a bellard
    case '$':
1389 48024e4a bellard
    case '?':
1390 48024e4a bellard
    case '/':
1391 48024e4a bellard
    case '&':
1392 48024e4a bellard
    case '|':
1393 48024e4a bellard
    case '<':
1394 48024e4a bellard
    case '>':
1395 48024e4a bellard
    case 'm':
1396 48024e4a bellard
    case 'n':
1397 48024e4a bellard
    case 'o':
1398 48024e4a bellard
    case 'p':
1399 48024e4a bellard
    case 'q':
1400 48024e4a bellard
    case 'v':
1401 48024e4a bellard
    case 'b':
1402 48024e4a bellard
    case 'w':
1403 48024e4a bellard
    case 'y':
1404 48024e4a bellard
    case 'z':
1405 48024e4a bellard
      if (place == 'd')
1406 48024e4a bellard
        {
1407 48024e4a bellard
          val = fetch_arg (buffer, 'x', 6, info);
1408 48024e4a bellard
          val = ((val & 7) << 3) + ((val >> 3) & 7);
1409 48024e4a bellard
        }
1410 48024e4a bellard
      else
1411 48024e4a bellard
        val = fetch_arg (buffer, 's', 6, info);
1412 48024e4a bellard
1413 48024e4a bellard
      /* If the <ea> is invalid for *d, then reject this match.  */
1414 48024e4a bellard
      if (!m68k_valid_ea (*d, val))
1415 48024e4a bellard
        return -1;
1416 48024e4a bellard
1417 48024e4a bellard
      /* Get register number assuming address register.  */
1418 48024e4a bellard
      regno = (val & 7) + 8;
1419 48024e4a bellard
      regname = reg_names[regno];
1420 48024e4a bellard
      switch (val >> 3)
1421 48024e4a bellard
        {
1422 48024e4a bellard
        case 0:
1423 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%s", reg_names[val]);
1424 48024e4a bellard
          break;
1425 48024e4a bellard
1426 48024e4a bellard
        case 1:
1427 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%s", regname);
1428 48024e4a bellard
          break;
1429 48024e4a bellard
1430 48024e4a bellard
        case 2:
1431 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%s@", regname);
1432 48024e4a bellard
          break;
1433 48024e4a bellard
1434 48024e4a bellard
        case 3:
1435 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%s@+", regname);
1436 48024e4a bellard
          break;
1437 48024e4a bellard
1438 48024e4a bellard
        case 4:
1439 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%s@-", regname);
1440 48024e4a bellard
          break;
1441 48024e4a bellard
1442 48024e4a bellard
        case 5:
1443 48024e4a bellard
          val = NEXTWORD (p);
1444 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%s@(%d)", regname, val);
1445 48024e4a bellard
          break;
1446 48024e4a bellard
1447 48024e4a bellard
        case 6:
1448 48024e4a bellard
          p = print_indexed (regno, p, addr, info);
1449 48024e4a bellard
          break;
1450 48024e4a bellard
1451 48024e4a bellard
        case 7:
1452 48024e4a bellard
          switch (val & 7)
1453 48024e4a bellard
            {
1454 48024e4a bellard
            case 0:
1455 48024e4a bellard
              val = NEXTWORD (p);
1456 48024e4a bellard
              (*info->print_address_func) (val, info);
1457 48024e4a bellard
              break;
1458 48024e4a bellard
1459 48024e4a bellard
            case 1:
1460 48024e4a bellard
              uval = NEXTULONG (p);
1461 48024e4a bellard
              (*info->print_address_func) (uval, info);
1462 48024e4a bellard
              break;
1463 48024e4a bellard
1464 48024e4a bellard
            case 2:
1465 48024e4a bellard
              val = NEXTWORD (p);
1466 48024e4a bellard
              (*info->fprintf_func) (info->stream, "%%pc@(");
1467 48024e4a bellard
              (*info->print_address_func) (addr + val, info);
1468 48024e4a bellard
              (*info->fprintf_func) (info->stream, ")");
1469 48024e4a bellard
              break;
1470 48024e4a bellard
1471 48024e4a bellard
            case 3:
1472 48024e4a bellard
              p = print_indexed (-1, p, addr, info);
1473 48024e4a bellard
              break;
1474 48024e4a bellard
1475 48024e4a bellard
            case 4:
1476 48024e4a bellard
              flt_p = 1;        /* Assume it's a float... */
1477 48024e4a bellard
              switch (place)
1478 48024e4a bellard
              {
1479 48024e4a bellard
                case 'b':
1480 48024e4a bellard
                  val = NEXTBYTE (p);
1481 48024e4a bellard
                  flt_p = 0;
1482 48024e4a bellard
                  break;
1483 48024e4a bellard
1484 48024e4a bellard
                case 'w':
1485 48024e4a bellard
                  val = NEXTWORD (p);
1486 48024e4a bellard
                  flt_p = 0;
1487 48024e4a bellard
                  break;
1488 48024e4a bellard
1489 48024e4a bellard
                case 'l':
1490 48024e4a bellard
                  val = NEXTLONG (p);
1491 48024e4a bellard
                  flt_p = 0;
1492 48024e4a bellard
                  break;
1493 48024e4a bellard
1494 48024e4a bellard
                case 'f':
1495 48024e4a bellard
                  NEXTSINGLE (flval, p);
1496 48024e4a bellard
                  break;
1497 48024e4a bellard
1498 48024e4a bellard
                case 'F':
1499 48024e4a bellard
                  NEXTDOUBLE (flval, p);
1500 48024e4a bellard
                  break;
1501 48024e4a bellard
1502 48024e4a bellard
                case 'x':
1503 48024e4a bellard
                  NEXTEXTEND (flval, p);
1504 48024e4a bellard
                  break;
1505 48024e4a bellard
1506 48024e4a bellard
                case 'p':
1507 48024e4a bellard
                  flval = NEXTPACKED (p);
1508 48024e4a bellard
                  break;
1509 48024e4a bellard
1510 48024e4a bellard
                default:
1511 48024e4a bellard
                  return -1;
1512 48024e4a bellard
              }
1513 48024e4a bellard
              if (flt_p)        /* Print a float? */
1514 48024e4a bellard
                (*info->fprintf_func) (info->stream, "#%g", flval);
1515 48024e4a bellard
              else
1516 48024e4a bellard
                (*info->fprintf_func) (info->stream, "#%d", val);
1517 48024e4a bellard
              break;
1518 48024e4a bellard
1519 48024e4a bellard
            default:
1520 48024e4a bellard
              return -1;
1521 48024e4a bellard
            }
1522 48024e4a bellard
        }
1523 48024e4a bellard
1524 48024e4a bellard
      /* If place is '/', then this is the case of the mask bit for
1525 48024e4a bellard
         mac/emac loads. Now that the arg has been printed, grab the
1526 48024e4a bellard
         mask bit and if set, add a '&' to the arg.  */
1527 48024e4a bellard
      if (place == '/')
1528 48024e4a bellard
        {
1529 48024e4a bellard
          val = fetch_arg (buffer, place, 1, info);
1530 48024e4a bellard
          if (val)
1531 48024e4a bellard
            info->fprintf_func (info->stream, "&");
1532 48024e4a bellard
        }
1533 48024e4a bellard
      break;
1534 48024e4a bellard
1535 48024e4a bellard
    case 'L':
1536 48024e4a bellard
    case 'l':
1537 48024e4a bellard
        if (place == 'w')
1538 48024e4a bellard
          {
1539 48024e4a bellard
            char doneany;
1540 48024e4a bellard
            p1 = buffer + 2;
1541 48024e4a bellard
            val = NEXTWORD (p1);
1542 48024e4a bellard
            /* Move the pointer ahead if this point is farther ahead
1543 48024e4a bellard
               than the last.  */
1544 48024e4a bellard
            p = p1 > p ? p1 : p;
1545 48024e4a bellard
            if (val == 0)
1546 48024e4a bellard
              {
1547 48024e4a bellard
                (*info->fprintf_func) (info->stream, "#0");
1548 48024e4a bellard
                break;
1549 48024e4a bellard
              }
1550 48024e4a bellard
            if (*d == 'l')
1551 48024e4a bellard
              {
1552 48024e4a bellard
                int newval = 0;
1553 48024e4a bellard
1554 48024e4a bellard
                for (regno = 0; regno < 16; ++regno)
1555 48024e4a bellard
                  if (val & (0x8000 >> regno))
1556 48024e4a bellard
                    newval |= 1 << regno;
1557 48024e4a bellard
                val = newval;
1558 48024e4a bellard
              }
1559 48024e4a bellard
            val &= 0xffff;
1560 48024e4a bellard
            doneany = 0;
1561 48024e4a bellard
            for (regno = 0; regno < 16; ++regno)
1562 48024e4a bellard
              if (val & (1 << regno))
1563 48024e4a bellard
                {
1564 48024e4a bellard
                  int first_regno;
1565 48024e4a bellard
1566 48024e4a bellard
                  if (doneany)
1567 48024e4a bellard
                    (*info->fprintf_func) (info->stream, "/");
1568 48024e4a bellard
                  doneany = 1;
1569 48024e4a bellard
                  (*info->fprintf_func) (info->stream, "%s", reg_names[regno]);
1570 48024e4a bellard
                  first_regno = regno;
1571 48024e4a bellard
                  while (val & (1 << (regno + 1)))
1572 48024e4a bellard
                    ++regno;
1573 48024e4a bellard
                  if (regno > first_regno)
1574 48024e4a bellard
                    (*info->fprintf_func) (info->stream, "-%s",
1575 48024e4a bellard
                                           reg_names[regno]);
1576 48024e4a bellard
                }
1577 48024e4a bellard
          }
1578 48024e4a bellard
        else if (place == '3')
1579 48024e4a bellard
          {
1580 48024e4a bellard
            /* `fmovem' insn.  */
1581 48024e4a bellard
            char doneany;
1582 48024e4a bellard
            val = fetch_arg (buffer, place, 8, info);
1583 48024e4a bellard
            if (val == 0)
1584 48024e4a bellard
              {
1585 48024e4a bellard
                (*info->fprintf_func) (info->stream, "#0");
1586 48024e4a bellard
                break;
1587 48024e4a bellard
              }
1588 48024e4a bellard
            if (*d == 'l')
1589 48024e4a bellard
              {
1590 48024e4a bellard
                int newval = 0;
1591 48024e4a bellard
1592 48024e4a bellard
                for (regno = 0; regno < 8; ++regno)
1593 48024e4a bellard
                  if (val & (0x80 >> regno))
1594 48024e4a bellard
                    newval |= 1 << regno;
1595 48024e4a bellard
                val = newval;
1596 48024e4a bellard
              }
1597 48024e4a bellard
            val &= 0xff;
1598 48024e4a bellard
            doneany = 0;
1599 48024e4a bellard
            for (regno = 0; regno < 8; ++regno)
1600 48024e4a bellard
              if (val & (1 << regno))
1601 48024e4a bellard
                {
1602 48024e4a bellard
                  int first_regno;
1603 48024e4a bellard
                  if (doneany)
1604 48024e4a bellard
                    (*info->fprintf_func) (info->stream, "/");
1605 48024e4a bellard
                  doneany = 1;
1606 48024e4a bellard
                  (*info->fprintf_func) (info->stream, "%%fp%d", regno);
1607 48024e4a bellard
                  first_regno = regno;
1608 48024e4a bellard
                  while (val & (1 << (regno + 1)))
1609 48024e4a bellard
                    ++regno;
1610 48024e4a bellard
                  if (regno > first_regno)
1611 48024e4a bellard
                    (*info->fprintf_func) (info->stream, "-%%fp%d", regno);
1612 48024e4a bellard
                }
1613 48024e4a bellard
          }
1614 48024e4a bellard
        else if (place == '8')
1615 48024e4a bellard
          {
1616 48024e4a bellard
            /* fmoveml for FP status registers.  */
1617 48024e4a bellard
            (*info->fprintf_func) (info->stream, "%s",
1618 48024e4a bellard
                                   fpcr_names[fetch_arg (buffer, place, 3,
1619 48024e4a bellard
                                                         info)]);
1620 48024e4a bellard
          }
1621 48024e4a bellard
        else
1622 48024e4a bellard
          return -2;
1623 48024e4a bellard
      break;
1624 48024e4a bellard
1625 48024e4a bellard
    case 'X':
1626 48024e4a bellard
      place = '8';
1627 48024e4a bellard
    case 'Y':
1628 48024e4a bellard
    case 'Z':
1629 48024e4a bellard
    case 'W':
1630 48024e4a bellard
    case '0':
1631 48024e4a bellard
    case '1':
1632 48024e4a bellard
    case '2':
1633 48024e4a bellard
    case '3':
1634 48024e4a bellard
      {
1635 48024e4a bellard
        int val = fetch_arg (buffer, place, 5, info);
1636 48024e4a bellard
        char *name = 0;
1637 48024e4a bellard
1638 48024e4a bellard
        switch (val)
1639 48024e4a bellard
          {
1640 48024e4a bellard
          case 2: name = "%tt0"; break;
1641 48024e4a bellard
          case 3: name = "%tt1"; break;
1642 48024e4a bellard
          case 0x10: name = "%tc"; break;
1643 48024e4a bellard
          case 0x11: name = "%drp"; break;
1644 48024e4a bellard
          case 0x12: name = "%srp"; break;
1645 48024e4a bellard
          case 0x13: name = "%crp"; break;
1646 48024e4a bellard
          case 0x14: name = "%cal"; break;
1647 48024e4a bellard
          case 0x15: name = "%val"; break;
1648 48024e4a bellard
          case 0x16: name = "%scc"; break;
1649 48024e4a bellard
          case 0x17: name = "%ac"; break;
1650 48024e4a bellard
           case 0x18: name = "%psr"; break;
1651 48024e4a bellard
          case 0x19: name = "%pcsr"; break;
1652 48024e4a bellard
          case 0x1c:
1653 48024e4a bellard
          case 0x1d:
1654 48024e4a bellard
            {
1655 48024e4a bellard
              int break_reg = ((buffer[3] >> 2) & 7);
1656 48024e4a bellard
1657 48024e4a bellard
              (*info->fprintf_func)
1658 48024e4a bellard
                (info->stream, val == 0x1c ? "%%bad%d" : "%%bac%d",
1659 48024e4a bellard
                 break_reg);
1660 48024e4a bellard
            }
1661 48024e4a bellard
            break;
1662 48024e4a bellard
          default:
1663 48024e4a bellard
            (*info->fprintf_func) (info->stream, "<mmu register %d>", val);
1664 48024e4a bellard
          }
1665 48024e4a bellard
        if (name)
1666 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%s", name);
1667 48024e4a bellard
      }
1668 48024e4a bellard
      break;
1669 48024e4a bellard
1670 48024e4a bellard
    case 'f':
1671 48024e4a bellard
      {
1672 48024e4a bellard
        int fc = fetch_arg (buffer, place, 5, info);
1673 48024e4a bellard
1674 48024e4a bellard
        if (fc == 1)
1675 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%%dfc");
1676 48024e4a bellard
        else if (fc == 0)
1677 48024e4a bellard
          (*info->fprintf_func) (info->stream, "%%sfc");
1678 48024e4a bellard
        else
1679 48024e4a bellard
          /* xgettext:c-format */
1680 48024e4a bellard
          (*info->fprintf_func) (info->stream, _("<function code %d>"), fc);
1681 48024e4a bellard
      }
1682 48024e4a bellard
      break;
1683 48024e4a bellard
1684 48024e4a bellard
    case 'V':
1685 48024e4a bellard
      (*info->fprintf_func) (info->stream, "%%val");
1686 48024e4a bellard
      break;
1687 48024e4a bellard
1688 48024e4a bellard
    case 't':
1689 48024e4a bellard
      {
1690 48024e4a bellard
        int level = fetch_arg (buffer, place, 3, info);
1691 48024e4a bellard
1692 48024e4a bellard
        (*info->fprintf_func) (info->stream, "%d", level);
1693 48024e4a bellard
      }
1694 48024e4a bellard
      break;
1695 48024e4a bellard
1696 48024e4a bellard
    case 'u':
1697 48024e4a bellard
      {
1698 48024e4a bellard
        short is_upper = 0;
1699 48024e4a bellard
        int reg = fetch_arg (buffer, place, 5, info);
1700 48024e4a bellard
1701 48024e4a bellard
        if (reg & 0x10)
1702 48024e4a bellard
          {
1703 48024e4a bellard
            is_upper = 1;
1704 48024e4a bellard
            reg &= 0xf;
1705 48024e4a bellard
          }
1706 48024e4a bellard
        (*info->fprintf_func) (info->stream, "%s%s",
1707 48024e4a bellard
                               reg_half_names[reg],
1708 48024e4a bellard
                               is_upper ? "u" : "l");
1709 48024e4a bellard
      }
1710 48024e4a bellard
      break;
1711 48024e4a bellard
1712 48024e4a bellard
    default:
1713 48024e4a bellard
      return -2;
1714 48024e4a bellard
    }
1715 48024e4a bellard
1716 48024e4a bellard
  return p - p0;
1717 48024e4a bellard
}
1718 48024e4a bellard
1719 48024e4a bellard
/* Try to match the current instruction to best and if so, return the
1720 48024e4a bellard
   number of bytes consumed from the instruction stream, else zero.  */
1721 48024e4a bellard
1722 48024e4a bellard
static int
1723 48024e4a bellard
match_insn_m68k (bfd_vma memaddr,
1724 48024e4a bellard
                 disassemble_info * info,
1725 48024e4a bellard
                 const struct m68k_opcode * best,
1726 48024e4a bellard
                 struct private * priv)
1727 48024e4a bellard
{
1728 48024e4a bellard
  unsigned char *save_p;
1729 48024e4a bellard
  unsigned char *p;
1730 48024e4a bellard
  const char *d;
1731 48024e4a bellard
1732 48024e4a bellard
  bfd_byte *buffer = priv->the_buffer;
1733 48024e4a bellard
  fprintf_ftype save_printer = info->fprintf_func;
1734 48024e4a bellard
  void (* save_print_address) (bfd_vma, struct disassemble_info *)
1735 48024e4a bellard
    = info->print_address_func;
1736 48024e4a bellard
1737 48024e4a bellard
  /* Point at first word of argument data,
1738 48024e4a bellard
     and at descriptor for first argument.  */
1739 48024e4a bellard
  p = buffer + 2;
1740 48024e4a bellard
1741 48024e4a bellard
  /* Figure out how long the fixed-size portion of the instruction is.
1742 48024e4a bellard
     The only place this is stored in the opcode table is
1743 48024e4a bellard
     in the arguments--look for arguments which specify fields in the 2nd
1744 48024e4a bellard
     or 3rd words of the instruction.  */
1745 48024e4a bellard
  for (d = best->args; *d; d += 2)
1746 48024e4a bellard
    {
1747 48024e4a bellard
      /* I don't think it is necessary to be checking d[0] here;
1748 48024e4a bellard
         I suspect all this could be moved to the case statement below.  */
1749 48024e4a bellard
      if (d[0] == '#')
1750 48024e4a bellard
        {
1751 48024e4a bellard
          if (d[1] == 'l' && p - buffer < 6)
1752 48024e4a bellard
            p = buffer + 6;
1753 48024e4a bellard
          else if (p - buffer < 4 && d[1] != 'C' && d[1] != '8')
1754 48024e4a bellard
            p = buffer + 4;
1755 48024e4a bellard
        }
1756 48024e4a bellard
1757 48024e4a bellard
      if ((d[0] == 'L' || d[0] == 'l') && d[1] == 'w' && p - buffer < 4)
1758 48024e4a bellard
        p = buffer + 4;
1759 48024e4a bellard
1760 48024e4a bellard
      switch (d[1])
1761 48024e4a bellard
        {
1762 48024e4a bellard
        case '1':
1763 48024e4a bellard
        case '2':
1764 48024e4a bellard
        case '3':
1765 48024e4a bellard
        case '7':
1766 48024e4a bellard
        case '8':
1767 48024e4a bellard
        case '9':
1768 48024e4a bellard
        case 'i':
1769 48024e4a bellard
          if (p - buffer < 4)
1770 48024e4a bellard
            p = buffer + 4;
1771 48024e4a bellard
          break;
1772 48024e4a bellard
        case '4':
1773 48024e4a bellard
        case '5':
1774 48024e4a bellard
        case '6':
1775 48024e4a bellard
          if (p - buffer < 6)
1776 48024e4a bellard
            p = buffer + 6;
1777 48024e4a bellard
          break;
1778 48024e4a bellard
        default:
1779 48024e4a bellard
          break;
1780 48024e4a bellard
        }
1781 48024e4a bellard
    }
1782 48024e4a bellard
1783 48024e4a bellard
  /* pflusha is an exceptions.  It takes no arguments but is two words
1784 48024e4a bellard
     long.  Recognize it by looking at the lower 16 bits of the mask.  */
1785 48024e4a bellard
  if (p - buffer < 4 && (best->match & 0xFFFF) != 0)
1786 48024e4a bellard
    p = buffer + 4;
1787 48024e4a bellard
1788 48024e4a bellard
  /* lpstop is another exception.  It takes a one word argument but is
1789 48024e4a bellard
     three words long.  */
1790 48024e4a bellard
  if (p - buffer < 6
1791 48024e4a bellard
      && (best->match & 0xffff) == 0xffff
1792 48024e4a bellard
      && best->args[0] == '#'
1793 48024e4a bellard
      && best->args[1] == 'w')
1794 48024e4a bellard
    {
1795 48024e4a bellard
      /* Copy the one word argument into the usual location for a one
1796 48024e4a bellard
         word argument, to simplify printing it.  We can get away with
1797 48024e4a bellard
         this because we know exactly what the second word is, and we
1798 48024e4a bellard
         aren't going to print anything based on it.  */
1799 48024e4a bellard
      p = buffer + 6;
1800 48024e4a bellard
      FETCH_DATA (info, p);
1801 48024e4a bellard
      buffer[2] = buffer[4];
1802 48024e4a bellard
      buffer[3] = buffer[5];
1803 48024e4a bellard
    }
1804 48024e4a bellard
1805 48024e4a bellard
  FETCH_DATA (info, p);
1806 48024e4a bellard
1807 48024e4a bellard
  d = best->args;
1808 48024e4a bellard
1809 48024e4a bellard
  save_p = p;
1810 48024e4a bellard
  info->print_address_func = dummy_print_address;
1811 48024e4a bellard
  info->fprintf_func = (fprintf_ftype) dummy_printer;
1812 48024e4a bellard
1813 48024e4a bellard
  /* We scan the operands twice.  The first time we don't print anything,
1814 48024e4a bellard
     but look for errors.  */
1815 48024e4a bellard
  for (; *d; d += 2)
1816 48024e4a bellard
    {
1817 48024e4a bellard
      int eaten = print_insn_arg (d, buffer, p, memaddr + (p - buffer), info);
1818 48024e4a bellard
1819 48024e4a bellard
      if (eaten >= 0)
1820 48024e4a bellard
        p += eaten;
1821 48024e4a bellard
      else if (eaten == -1)
1822 48024e4a bellard
        {
1823 48024e4a bellard
          info->fprintf_func = save_printer;
1824 48024e4a bellard
          info->print_address_func = save_print_address;
1825 48024e4a bellard
          return 0;
1826 48024e4a bellard
        }
1827 48024e4a bellard
      else
1828 48024e4a bellard
        {
1829 48024e4a bellard
          info->fprintf_func (info->stream,
1830 48024e4a bellard
                              /* xgettext:c-format */
1831 48024e4a bellard
                              _("<internal error in opcode table: %s %s>\n"),
1832 48024e4a bellard
                              best->name,  best->args);
1833 48024e4a bellard
          info->fprintf_func = save_printer;
1834 48024e4a bellard
          info->print_address_func = save_print_address;
1835 48024e4a bellard
          return 2;
1836 48024e4a bellard
        }
1837 48024e4a bellard
    }
1838 48024e4a bellard
1839 48024e4a bellard
  p = save_p;
1840 48024e4a bellard
  info->fprintf_func = save_printer;
1841 48024e4a bellard
  info->print_address_func = save_print_address;
1842 48024e4a bellard
1843 48024e4a bellard
  d = best->args;
1844 48024e4a bellard
1845 48024e4a bellard
  info->fprintf_func (info->stream, "%s", best->name);
1846 48024e4a bellard
1847 48024e4a bellard
  if (*d)
1848 48024e4a bellard
    info->fprintf_func (info->stream, " ");
1849 48024e4a bellard
1850 48024e4a bellard
  while (*d)
1851 48024e4a bellard
    {
1852 48024e4a bellard
      p += print_insn_arg (d, buffer, p, memaddr + (p - buffer), info);
1853 48024e4a bellard
      d += 2;
1854 48024e4a bellard
1855 48024e4a bellard
      if (*d && *(d - 2) != 'I' && *d != 'k')
1856 48024e4a bellard
        info->fprintf_func (info->stream, ",");
1857 48024e4a bellard
    }
1858 48024e4a bellard
1859 48024e4a bellard
  return p - buffer;
1860 48024e4a bellard
}
1861 48024e4a bellard
1862 48024e4a bellard
/* Print the m68k instruction at address MEMADDR in debugged memory,
1863 48024e4a bellard
   on INFO->STREAM.  Returns length of the instruction, in bytes.  */
1864 48024e4a bellard
1865 48024e4a bellard
int
1866 48024e4a bellard
print_insn_m68k (bfd_vma memaddr, disassemble_info *info)
1867 48024e4a bellard
{
1868 48024e4a bellard
  int i;
1869 48024e4a bellard
  const char *d;
1870 48024e4a bellard
  unsigned int arch_mask;
1871 48024e4a bellard
  struct private priv;
1872 48024e4a bellard
  bfd_byte *buffer = priv.the_buffer;
1873 48024e4a bellard
  int major_opcode;
1874 48024e4a bellard
  static int numopcodes[16];
1875 48024e4a bellard
  static const struct m68k_opcode **opcodes[16];
1876 48024e4a bellard
  int val;
1877 48024e4a bellard
1878 48024e4a bellard
  if (!opcodes[0])
1879 48024e4a bellard
    {
1880 48024e4a bellard
      /* Speed up the matching by sorting the opcode
1881 48024e4a bellard
         table on the upper four bits of the opcode.  */
1882 48024e4a bellard
      const struct m68k_opcode **opc_pointer[16];
1883 48024e4a bellard
1884 48024e4a bellard
      /* First count how many opcodes are in each of the sixteen buckets.  */
1885 48024e4a bellard
      for (i = 0; i < m68k_numopcodes; i++)
1886 48024e4a bellard
        numopcodes[(m68k_opcodes[i].opcode >> 28) & 15]++;
1887 48024e4a bellard
1888 48024e4a bellard
      /* Then create a sorted table of pointers
1889 48024e4a bellard
         that point into the unsorted table.  */
1890 48024e4a bellard
      opc_pointer[0] = malloc (sizeof (struct m68k_opcode *)
1891 48024e4a bellard
                               * m68k_numopcodes);
1892 48024e4a bellard
      opcodes[0] = opc_pointer[0];
1893 48024e4a bellard
1894 48024e4a bellard
      for (i = 1; i < 16; i++)
1895 48024e4a bellard
        {
1896 48024e4a bellard
          opc_pointer[i] = opc_pointer[i - 1] + numopcodes[i - 1];
1897 48024e4a bellard
          opcodes[i] = opc_pointer[i];
1898 48024e4a bellard
        }
1899 48024e4a bellard
1900 48024e4a bellard
      for (i = 0; i < m68k_numopcodes; i++)
1901 48024e4a bellard
        *opc_pointer[(m68k_opcodes[i].opcode >> 28) & 15]++ = &m68k_opcodes[i];
1902 48024e4a bellard
    }
1903 48024e4a bellard
1904 48024e4a bellard
  info->private_data = (PTR) &priv;
1905 48024e4a bellard
  /* Tell objdump to use two bytes per chunk
1906 48024e4a bellard
     and six bytes per line for displaying raw data.  */
1907 48024e4a bellard
  info->bytes_per_chunk = 2;
1908 48024e4a bellard
  info->bytes_per_line = 6;
1909 48024e4a bellard
  info->display_endian = BFD_ENDIAN_BIG;
1910 48024e4a bellard
  priv.max_fetched = priv.the_buffer;
1911 48024e4a bellard
  priv.insn_start = memaddr;
1912 48024e4a bellard
1913 48024e4a bellard
  if (setjmp (priv.bailout) != 0)
1914 48024e4a bellard
    /* Error return.  */
1915 48024e4a bellard
    return -1;
1916 48024e4a bellard
1917 48024e4a bellard
  switch (info->mach)
1918 48024e4a bellard
    {
1919 48024e4a bellard
    default:
1920 48024e4a bellard
    case 0:
1921 48024e4a bellard
      arch_mask = (unsigned int) -1;
1922 48024e4a bellard
      break;
1923 48024e4a bellard
    case bfd_mach_m68000:
1924 48024e4a bellard
      arch_mask = m68000|m68881|m68851;
1925 48024e4a bellard
      break;
1926 48024e4a bellard
    case bfd_mach_m68008:
1927 48024e4a bellard
      arch_mask = m68008|m68881|m68851;
1928 48024e4a bellard
      break;
1929 48024e4a bellard
    case bfd_mach_m68010:
1930 48024e4a bellard
      arch_mask = m68010|m68881|m68851;
1931 48024e4a bellard
      break;
1932 48024e4a bellard
    case bfd_mach_m68020:
1933 48024e4a bellard
      arch_mask = m68020|m68881|m68851;
1934 48024e4a bellard
      break;
1935 48024e4a bellard
    case bfd_mach_m68030:
1936 48024e4a bellard
      arch_mask = m68030|m68881|m68851;
1937 48024e4a bellard
      break;
1938 48024e4a bellard
    case bfd_mach_m68040:
1939 48024e4a bellard
      arch_mask = m68040|m68881|m68851;
1940 48024e4a bellard
      break;
1941 48024e4a bellard
    case bfd_mach_m68060:
1942 48024e4a bellard
      arch_mask = m68060|m68881|m68851;
1943 48024e4a bellard
      break;
1944 48024e4a bellard
    case bfd_mach_mcf5200:
1945 48024e4a bellard
      arch_mask = mcfisa_a;
1946 48024e4a bellard
      break;
1947 48024e4a bellard
    case bfd_mach_mcf521x:
1948 48024e4a bellard
    case bfd_mach_mcf528x:
1949 48024e4a bellard
      arch_mask = mcfisa_a|mcfhwdiv|mcfisa_aa|mcfusp|mcfemac;
1950 48024e4a bellard
      break;
1951 48024e4a bellard
    case bfd_mach_mcf5206e:
1952 48024e4a bellard
      arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
1953 48024e4a bellard
      break;
1954 48024e4a bellard
    case bfd_mach_mcf5249:
1955 48024e4a bellard
      arch_mask = mcfisa_a|mcfhwdiv|mcfemac;
1956 48024e4a bellard
      break;
1957 48024e4a bellard
    case bfd_mach_mcf5307:
1958 48024e4a bellard
      arch_mask = mcfisa_a|mcfhwdiv|mcfmac;
1959 48024e4a bellard
      break;
1960 48024e4a bellard
    case bfd_mach_mcf5407:
1961 48024e4a bellard
      arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac;
1962 48024e4a bellard
      break;
1963 48024e4a bellard
    case bfd_mach_mcf547x:
1964 48024e4a bellard
    case bfd_mach_mcf548x:
1965 48024e4a bellard
    case bfd_mach_mcfv4e:
1966 48024e4a bellard
      arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfemac;
1967 48024e4a bellard
      break;
1968 48024e4a bellard
    }
1969 48024e4a bellard
1970 48024e4a bellard
  FETCH_DATA (info, buffer + 2);
1971 48024e4a bellard
  major_opcode = (buffer[0] >> 4) & 15;
1972 48024e4a bellard
1973 48024e4a bellard
  for (i = 0; i < numopcodes[major_opcode]; i++)
1974 48024e4a bellard
    {
1975 48024e4a bellard
      const struct m68k_opcode *opc = opcodes[major_opcode][i];
1976 48024e4a bellard
      unsigned long opcode = opc->opcode;
1977 48024e4a bellard
      unsigned long match = opc->match;
1978 48024e4a bellard
1979 48024e4a bellard
      if (((0xff & buffer[0] & (match >> 24)) == (0xff & (opcode >> 24)))
1980 48024e4a bellard
          && ((0xff & buffer[1] & (match >> 16)) == (0xff & (opcode >> 16)))
1981 48024e4a bellard
          /* Only fetch the next two bytes if we need to.  */
1982 48024e4a bellard
          && (((0xffff & match) == 0)
1983 48024e4a bellard
              ||
1984 48024e4a bellard
              (FETCH_DATA (info, buffer + 4)
1985 48024e4a bellard
               && ((0xff & buffer[2] & (match >> 8)) == (0xff & (opcode >> 8)))
1986 48024e4a bellard
               && ((0xff & buffer[3] & match) == (0xff & opcode)))
1987 48024e4a bellard
              )
1988 48024e4a bellard
          && (opc->arch & arch_mask) != 0)
1989 48024e4a bellard
        {
1990 48024e4a bellard
          /* Don't use for printout the variants of divul and divsl
1991 48024e4a bellard
             that have the same register number in two places.
1992 48024e4a bellard
             The more general variants will match instead.  */
1993 48024e4a bellard
          for (d = opc->args; *d; d += 2)
1994 48024e4a bellard
            if (d[1] == 'D')
1995 48024e4a bellard
              break;
1996 48024e4a bellard
1997 48024e4a bellard
          /* Don't use for printout the variants of most floating
1998 48024e4a bellard
             point coprocessor instructions which use the same
1999 48024e4a bellard
             register number in two places, as above.  */
2000 48024e4a bellard
          if (*d == '\0')
2001 48024e4a bellard
            for (d = opc->args; *d; d += 2)
2002 48024e4a bellard
              if (d[1] == 't')
2003 48024e4a bellard
                break;
2004 48024e4a bellard
2005 48024e4a bellard
          /* Don't match fmovel with more than one register;
2006 48024e4a bellard
             wait for fmoveml.  */
2007 48024e4a bellard
          if (*d == '\0')
2008 48024e4a bellard
            {
2009 48024e4a bellard
              for (d = opc->args; *d; d += 2)
2010 48024e4a bellard
                {
2011 48024e4a bellard
                  if (d[0] == 's' && d[1] == '8')
2012 48024e4a bellard
                    {
2013 48024e4a bellard
                      val = fetch_arg (buffer, d[1], 3, info);
2014 48024e4a bellard
                      if ((val & (val - 1)) != 0)
2015 48024e4a bellard
                        break;
2016 48024e4a bellard
                    }
2017 48024e4a bellard
                }
2018 48024e4a bellard
            }
2019 48024e4a bellard
2020 48024e4a bellard
          if (*d == '\0')
2021 48024e4a bellard
            if ((val = match_insn_m68k (memaddr, info, opc, & priv)))
2022 48024e4a bellard
              return val;
2023 48024e4a bellard
        }
2024 48024e4a bellard
    }
2025 48024e4a bellard
2026 48024e4a bellard
  /* Handle undefined instructions.  */
2027 48024e4a bellard
  info->fprintf_func (info->stream, "0%o", (buffer[0] << 8) + buffer[1]);
2028 48024e4a bellard
  return 2;
2029 48024e4a bellard
}
2030 48024e4a bellard
/* **** End of m68k-dis.c */
2031 48024e4a bellard
/* **** m68k-opc.h from sourceware.org CVS 2005-08-14.  */
2032 48024e4a bellard
/* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200.
2033 48024e4a bellard
   Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2034 48024e4a bellard
   2000, 2001, 2003, 2004, 2005
2035 48024e4a bellard
   Free Software Foundation, Inc.
2036 48024e4a bellard

2037 48024e4a bellard
   This file is part of GDB, GAS, and the GNU binutils.
2038 48024e4a bellard

2039 48024e4a bellard
   GDB, GAS, and the GNU binutils are free software; you can redistribute
2040 48024e4a bellard
   them and/or modify them under the terms of the GNU General Public
2041 48024e4a bellard
   License as published by the Free Software Foundation; either version
2042 48024e4a bellard
   1, or (at your option) any later version.
2043 48024e4a bellard

2044 48024e4a bellard
   GDB, GAS, and the GNU binutils are distributed in the hope that they
2045 48024e4a bellard
   will be useful, but WITHOUT ANY WARRANTY; without even the implied
2046 48024e4a bellard
   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
2047 48024e4a bellard
   the GNU General Public License for more details.
2048 48024e4a bellard

2049 48024e4a bellard
   You should have received a copy of the GNU General Public License
2050 48024e4a bellard
   along with this file; see the file COPYING.  If not, write to the Free
2051 48024e4a bellard
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
2052 48024e4a bellard
   02110-1301, USA.  */
2053 48024e4a bellard
2054 48024e4a bellard
#define one(x) ((unsigned int) (x) << 16)
2055 48024e4a bellard
#define two(x, y) (((unsigned int) (x) << 16) + (y))
2056 48024e4a bellard
2057 48024e4a bellard
/* The assembler requires that all instances of the same mnemonic must
2058 48024e4a bellard
   be consecutive.  If they aren't, the assembler will bomb at
2059 48024e4a bellard
   runtime.  */
2060 48024e4a bellard
2061 48024e4a bellard
const struct m68k_opcode m68k_opcodes[] =
2062 48024e4a bellard
{
2063 48024e4a bellard
{"abcd", 2,        one(0140400),        one(0170770), "DsDd", m68000up },
2064 48024e4a bellard
{"abcd", 2,        one(0140410),        one(0170770), "-s-d", m68000up },
2065 48024e4a bellard
2066 48024e4a bellard
{"addaw", 2,        one(0150300),        one(0170700), "*wAd", m68000up },
2067 48024e4a bellard
{"addal", 2,        one(0150700),        one(0170700), "*lAd", m68000up | mcfisa_a },
2068 48024e4a bellard
2069 48024e4a bellard
{"addib", 4,        one(0003000),        one(0177700), "#b$s", m68000up },
2070 48024e4a bellard
{"addiw", 4,        one(0003100),        one(0177700), "#w$s", m68000up },
2071 48024e4a bellard
{"addil", 6,        one(0003200),        one(0177700), "#l$s", m68000up },
2072 48024e4a bellard
{"addil", 6,        one(0003200),        one(0177700), "#lDs", mcfisa_a },
2073 48024e4a bellard
2074 48024e4a bellard
{"addqb", 2,        one(0050000),        one(0170700), "Qd$b", m68000up },
2075 48024e4a bellard
{"addqw", 2,        one(0050100),        one(0170700), "Qd%w", m68000up },
2076 48024e4a bellard
{"addql", 2,        one(0050200),        one(0170700), "Qd%l", m68000up | mcfisa_a },
2077 48024e4a bellard
2078 48024e4a bellard
/* The add opcode can generate the adda, addi, and addq instructions.  */
2079 48024e4a bellard
{"addb", 2,        one(0050000),        one(0170700), "Qd$b", m68000up },
2080 48024e4a bellard
{"addb", 4,        one(0003000),        one(0177700), "#b$s", m68000up },
2081 48024e4a bellard
{"addb", 2,        one(0150000),        one(0170700), ";bDd", m68000up },
2082 48024e4a bellard
{"addb", 2,        one(0150400),        one(0170700), "Dd~b", m68000up },
2083 48024e4a bellard
{"addw", 2,        one(0050100),        one(0170700), "Qd%w", m68000up },
2084 48024e4a bellard
{"addw", 2,        one(0150300),        one(0170700), "*wAd", m68000up },
2085 48024e4a bellard
{"addw", 4,        one(0003100),        one(0177700), "#w$s", m68000up },
2086 48024e4a bellard
{"addw", 2,        one(0150100),        one(0170700), "*wDd", m68000up },
2087 48024e4a bellard
{"addw", 2,        one(0150500),        one(0170700), "Dd~w", m68000up },
2088 48024e4a bellard
{"addl", 2,        one(0050200),        one(0170700), "Qd%l", m68000up | mcfisa_a },
2089 48024e4a bellard
{"addl", 6,        one(0003200),        one(0177700), "#l$s", m68000up },
2090 48024e4a bellard
{"addl", 6,        one(0003200),        one(0177700), "#lDs", mcfisa_a },
2091 48024e4a bellard
{"addl", 2,        one(0150700),        one(0170700), "*lAd", m68000up | mcfisa_a },
2092 48024e4a bellard
{"addl", 2,        one(0150200),        one(0170700), "*lDd", m68000up | mcfisa_a },
2093 48024e4a bellard
{"addl", 2,        one(0150600),        one(0170700), "Dd~l", m68000up | mcfisa_a },
2094 48024e4a bellard
2095 48024e4a bellard
{"addxb", 2,        one(0150400),        one(0170770), "DsDd", m68000up },
2096 48024e4a bellard
{"addxb", 2,        one(0150410),        one(0170770), "-s-d", m68000up },
2097 48024e4a bellard
{"addxw", 2,        one(0150500),        one(0170770), "DsDd", m68000up },
2098 48024e4a bellard
{"addxw", 2,        one(0150510),        one(0170770), "-s-d", m68000up },
2099 48024e4a bellard
{"addxl", 2,        one(0150600),        one(0170770), "DsDd", m68000up | mcfisa_a },
2100 48024e4a bellard
{"addxl", 2,        one(0150610),        one(0170770), "-s-d", m68000up },
2101 48024e4a bellard
2102 48024e4a bellard
{"andib", 4,        one(0001000),        one(0177700), "#b$s", m68000up },
2103 48024e4a bellard
{"andib", 4,        one(0001074),        one(0177777), "#bCs", m68000up },
2104 48024e4a bellard
{"andiw", 4,        one(0001100),        one(0177700), "#w$s", m68000up },
2105 48024e4a bellard
{"andiw", 4,        one(0001174),        one(0177777), "#wSs", m68000up },
2106 48024e4a bellard
{"andil", 6,        one(0001200),        one(0177700), "#l$s", m68000up },
2107 48024e4a bellard
{"andil", 6,        one(0001200),        one(0177700), "#lDs", mcfisa_a },
2108 48024e4a bellard
{"andi", 4,        one(0001100),        one(0177700), "#w$s", m68000up },
2109 48024e4a bellard
{"andi", 4,        one(0001074),        one(0177777), "#bCs", m68000up },
2110 48024e4a bellard
{"andi", 4,        one(0001174),        one(0177777), "#wSs", m68000up },
2111 48024e4a bellard
2112 48024e4a bellard
/* The and opcode can generate the andi instruction.  */
2113 48024e4a bellard
{"andb", 4,        one(0001000),        one(0177700), "#b$s", m68000up },
2114 48024e4a bellard
{"andb", 4,        one(0001074),        one(0177777), "#bCs", m68000up },
2115 48024e4a bellard
{"andb", 2,        one(0140000),        one(0170700), ";bDd", m68000up },
2116 48024e4a bellard
{"andb", 2,        one(0140400),        one(0170700), "Dd~b", m68000up },
2117 48024e4a bellard
{"andw", 4,        one(0001100),        one(0177700), "#w$s", m68000up },
2118 48024e4a bellard
{"andw", 4,        one(0001174),        one(0177777), "#wSs", m68000up },
2119 48024e4a bellard
{"andw", 2,        one(0140100),        one(0170700), ";wDd", m68000up },
2120 48024e4a bellard
{"andw", 2,        one(0140500),        one(0170700), "Dd~w", m68000up },
2121 48024e4a bellard
{"andl", 6,        one(0001200),        one(0177700), "#l$s", m68000up },
2122 48024e4a bellard
{"andl", 6,        one(0001200),        one(0177700), "#lDs", mcfisa_a },
2123 48024e4a bellard
{"andl", 2,        one(0140200),        one(0170700), ";lDd", m68000up | mcfisa_a },
2124 48024e4a bellard
{"andl", 2,        one(0140600),        one(0170700), "Dd~l", m68000up | mcfisa_a },
2125 48024e4a bellard
{"and", 4,        one(0001100),        one(0177700), "#w$w", m68000up },
2126 48024e4a bellard
{"and", 4,        one(0001074),        one(0177777), "#bCs", m68000up },
2127 48024e4a bellard
{"and", 4,        one(0001174),        one(0177777), "#wSs", m68000up },
2128 48024e4a bellard
{"and", 2,        one(0140100),        one(0170700), ";wDd", m68000up },
2129 48024e4a bellard
{"and", 2,        one(0140500),        one(0170700), "Dd~w", m68000up },
2130 48024e4a bellard
2131 48024e4a bellard
{"aslb", 2,        one(0160400),        one(0170770), "QdDs", m68000up },
2132 48024e4a bellard
{"aslb", 2,        one(0160440),        one(0170770), "DdDs", m68000up },
2133 48024e4a bellard
{"aslw", 2,        one(0160500),        one(0170770), "QdDs", m68000up },
2134 48024e4a bellard
{"aslw", 2,        one(0160540),        one(0170770), "DdDs", m68000up },
2135 48024e4a bellard
{"aslw", 2,        one(0160700),        one(0177700), "~s",   m68000up },
2136 48024e4a bellard
{"asll", 2,        one(0160600),        one(0170770), "QdDs", m68000up | mcfisa_a },
2137 48024e4a bellard
{"asll", 2,        one(0160640),        one(0170770), "DdDs", m68000up | mcfisa_a },
2138 48024e4a bellard
2139 48024e4a bellard
{"asrb", 2,        one(0160000),        one(0170770), "QdDs", m68000up },
2140 48024e4a bellard
{"asrb", 2,        one(0160040),        one(0170770), "DdDs", m68000up },
2141 48024e4a bellard
{"asrw", 2,        one(0160100),        one(0170770), "QdDs", m68000up },
2142 48024e4a bellard
{"asrw", 2,        one(0160140),        one(0170770), "DdDs", m68000up },
2143 48024e4a bellard
{"asrw", 2,        one(0160300),        one(0177700), "~s",   m68000up },
2144 48024e4a bellard
{"asrl", 2,        one(0160200),        one(0170770), "QdDs", m68000up | mcfisa_a },
2145 48024e4a bellard
{"asrl", 2,        one(0160240),        one(0170770), "DdDs", m68000up | mcfisa_a },
2146 48024e4a bellard
2147 48024e4a bellard
{"bhiw", 2,        one(0061000),        one(0177777), "BW", m68000up | mcfisa_a },
2148 48024e4a bellard
{"blsw", 2,        one(0061400),        one(0177777), "BW", m68000up | mcfisa_a },
2149 48024e4a bellard
{"bccw", 2,        one(0062000),        one(0177777), "BW", m68000up | mcfisa_a },
2150 48024e4a bellard
{"bcsw", 2,        one(0062400),        one(0177777), "BW", m68000up | mcfisa_a },
2151 48024e4a bellard
{"bnew", 2,        one(0063000),        one(0177777), "BW", m68000up | mcfisa_a },
2152 48024e4a bellard
{"beqw", 2,        one(0063400),        one(0177777), "BW", m68000up | mcfisa_a },
2153 48024e4a bellard
{"bvcw", 2,        one(0064000),        one(0177777), "BW", m68000up | mcfisa_a },
2154 48024e4a bellard
{"bvsw", 2,        one(0064400),        one(0177777), "BW", m68000up | mcfisa_a },
2155 48024e4a bellard
{"bplw", 2,        one(0065000),        one(0177777), "BW", m68000up | mcfisa_a },
2156 48024e4a bellard
{"bmiw", 2,        one(0065400),        one(0177777), "BW", m68000up | mcfisa_a },
2157 48024e4a bellard
{"bgew", 2,        one(0066000),        one(0177777), "BW", m68000up | mcfisa_a },
2158 48024e4a bellard
{"bltw", 2,        one(0066400),        one(0177777), "BW", m68000up | mcfisa_a },
2159 48024e4a bellard
{"bgtw", 2,        one(0067000),        one(0177777), "BW", m68000up | mcfisa_a },
2160 48024e4a bellard
{"blew", 2,        one(0067400),        one(0177777), "BW", m68000up | mcfisa_a },
2161 48024e4a bellard
2162 48024e4a bellard
{"bhil", 2,        one(0061377),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2163 48024e4a bellard
{"blsl", 2,        one(0061777),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2164 48024e4a bellard
{"bccl", 2,        one(0062377),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2165 48024e4a bellard
{"bcsl", 2,        one(0062777),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2166 48024e4a bellard
{"bnel", 2,        one(0063377),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2167 48024e4a bellard
{"beql", 2,        one(0063777),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2168 48024e4a bellard
{"bvcl", 2,        one(0064377),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2169 48024e4a bellard
{"bvsl", 2,        one(0064777),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2170 48024e4a bellard
{"bpll", 2,        one(0065377),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2171 48024e4a bellard
{"bmil", 2,        one(0065777),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2172 48024e4a bellard
{"bgel", 2,        one(0066377),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2173 48024e4a bellard
{"bltl", 2,        one(0066777),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2174 48024e4a bellard
{"bgtl", 2,        one(0067377),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2175 48024e4a bellard
{"blel", 2,        one(0067777),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2176 48024e4a bellard
2177 48024e4a bellard
{"bhis", 2,        one(0061000),        one(0177400), "BB", m68000up | mcfisa_a },
2178 48024e4a bellard
{"blss", 2,        one(0061400),        one(0177400), "BB", m68000up | mcfisa_a },
2179 48024e4a bellard
{"bccs", 2,        one(0062000),        one(0177400), "BB", m68000up | mcfisa_a },
2180 48024e4a bellard
{"bcss", 2,        one(0062400),        one(0177400), "BB", m68000up | mcfisa_a },
2181 48024e4a bellard
{"bnes", 2,        one(0063000),        one(0177400), "BB", m68000up | mcfisa_a },
2182 48024e4a bellard
{"beqs", 2,        one(0063400),        one(0177400), "BB", m68000up | mcfisa_a },
2183 48024e4a bellard
{"bvcs", 2,        one(0064000),        one(0177400), "BB", m68000up | mcfisa_a },
2184 48024e4a bellard
{"bvss", 2,        one(0064400),        one(0177400), "BB", m68000up | mcfisa_a },
2185 48024e4a bellard
{"bpls", 2,        one(0065000),        one(0177400), "BB", m68000up | mcfisa_a },
2186 48024e4a bellard
{"bmis", 2,        one(0065400),        one(0177400), "BB", m68000up | mcfisa_a },
2187 48024e4a bellard
{"bges", 2,        one(0066000),        one(0177400), "BB", m68000up | mcfisa_a },
2188 48024e4a bellard
{"blts", 2,        one(0066400),        one(0177400), "BB", m68000up | mcfisa_a },
2189 48024e4a bellard
{"bgts", 2,        one(0067000),        one(0177400), "BB", m68000up | mcfisa_a },
2190 48024e4a bellard
{"bles", 2,        one(0067400),        one(0177400), "BB", m68000up | mcfisa_a },
2191 48024e4a bellard
2192 48024e4a bellard
{"jhi", 2,        one(0061000),        one(0177400), "Bg", m68000up | mcfisa_a },
2193 48024e4a bellard
{"jls", 2,        one(0061400),        one(0177400), "Bg", m68000up | mcfisa_a },
2194 48024e4a bellard
{"jcc", 2,        one(0062000),        one(0177400), "Bg", m68000up | mcfisa_a },
2195 48024e4a bellard
{"jcs", 2,        one(0062400),        one(0177400), "Bg", m68000up | mcfisa_a },
2196 48024e4a bellard
{"jne", 2,        one(0063000),        one(0177400), "Bg", m68000up | mcfisa_a },
2197 48024e4a bellard
{"jeq", 2,        one(0063400),        one(0177400), "Bg", m68000up | mcfisa_a },
2198 48024e4a bellard
{"jvc", 2,        one(0064000),        one(0177400), "Bg", m68000up | mcfisa_a },
2199 48024e4a bellard
{"jvs", 2,        one(0064400),        one(0177400), "Bg", m68000up | mcfisa_a },
2200 48024e4a bellard
{"jpl", 2,        one(0065000),        one(0177400), "Bg", m68000up | mcfisa_a },
2201 48024e4a bellard
{"jmi", 2,        one(0065400),        one(0177400), "Bg", m68000up | mcfisa_a },
2202 48024e4a bellard
{"jge", 2,        one(0066000),        one(0177400), "Bg", m68000up | mcfisa_a },
2203 48024e4a bellard
{"jlt", 2,        one(0066400),        one(0177400), "Bg", m68000up | mcfisa_a },
2204 48024e4a bellard
{"jgt", 2,        one(0067000),        one(0177400), "Bg", m68000up | mcfisa_a },
2205 48024e4a bellard
{"jle", 2,        one(0067400),        one(0177400), "Bg", m68000up | mcfisa_a },
2206 48024e4a bellard
2207 48024e4a bellard
{"bchg", 2,        one(0000500),        one(0170700), "Dd$s", m68000up | mcfisa_a },
2208 48024e4a bellard
{"bchg", 4,        one(0004100),        one(0177700), "#b$s", m68000up },
2209 48024e4a bellard
{"bchg", 4,        one(0004100),        one(0177700), "#bqs", mcfisa_a },
2210 48024e4a bellard
2211 48024e4a bellard
{"bclr", 2,        one(0000600),        one(0170700), "Dd$s", m68000up | mcfisa_a },
2212 48024e4a bellard
{"bclr", 4,        one(0004200),        one(0177700), "#b$s", m68000up },
2213 48024e4a bellard
{"bclr", 4,        one(0004200),        one(0177700), "#bqs", mcfisa_a },
2214 48024e4a bellard
2215 48024e4a bellard
{"bfchg", 4,        two(0165300, 0), two(0177700, 0170000),        "?sO2O3",   m68020up },
2216 48024e4a bellard
{"bfclr", 4,        two(0166300, 0), two(0177700, 0170000),        "?sO2O3",   m68020up },
2217 48024e4a bellard
{"bfexts", 4,        two(0165700, 0), two(0177700, 0100000),        "/sO2O3D1", m68020up },
2218 48024e4a bellard
{"bfextu", 4,        two(0164700, 0), two(0177700, 0100000),        "/sO2O3D1", m68020up },
2219 48024e4a bellard
{"bfffo", 4,        two(0166700, 0), two(0177700, 0100000),        "/sO2O3D1", m68020up },
2220 48024e4a bellard
{"bfins", 4,        two(0167700, 0), two(0177700, 0100000),        "D1?sO2O3", m68020up },
2221 48024e4a bellard
{"bfset", 4,        two(0167300, 0), two(0177700, 0170000),        "?sO2O3",   m68020up },
2222 48024e4a bellard
{"bftst", 4,        two(0164300, 0), two(0177700, 0170000),        "/sO2O3",   m68020up },
2223 48024e4a bellard
2224 48024e4a bellard
{"bgnd", 2,        one(0045372),        one(0177777), "", cpu32 },
2225 48024e4a bellard
2226 48024e4a bellard
{"bitrev", 2,        one(0000300),        one(0177770), "Ds", mcfisa_aa},
2227 48024e4a bellard
2228 48024e4a bellard
{"bkpt", 2,        one(0044110),        one(0177770), "ts", m68010up },
2229 48024e4a bellard
2230 48024e4a bellard
{"braw", 2,        one(0060000),        one(0177777), "BW", m68000up | mcfisa_a },
2231 48024e4a bellard
{"bral", 2,        one(0060377),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2232 48024e4a bellard
{"bras", 2,        one(0060000),        one(0177400), "BB", m68000up | mcfisa_a },
2233 48024e4a bellard
2234 48024e4a bellard
{"bset", 2,        one(0000700),        one(0170700), "Dd$s", m68000up | mcfisa_a },
2235 48024e4a bellard
{"bset", 2,        one(0000700),        one(0170700), "Ddvs", mcfisa_a },
2236 48024e4a bellard
{"bset", 4,        one(0004300),        one(0177700), "#b$s", m68000up },
2237 48024e4a bellard
{"bset", 4,        one(0004300),        one(0177700), "#bqs", mcfisa_a },
2238 48024e4a bellard
2239 48024e4a bellard
{"bsrw", 2,        one(0060400),        one(0177777), "BW", m68000up | mcfisa_a },
2240 48024e4a bellard
{"bsrl", 2,        one(0060777),        one(0177777), "BL", m68020up | cpu32 | mcfisa_b},
2241 48024e4a bellard
{"bsrs", 2,        one(0060400),        one(0177400), "BB", m68000up | mcfisa_a },
2242 48024e4a bellard
2243 48024e4a bellard
{"btst", 2,        one(0000400),        one(0170700), "Dd;b", m68000up | mcfisa_a },
2244 48024e4a bellard
{"btst", 4,        one(0004000),        one(0177700), "#b@s", m68000up },
2245 48024e4a bellard
{"btst", 4,        one(0004000),        one(0177700), "#bqs", mcfisa_a },
2246 48024e4a bellard
2247 48024e4a bellard
{"byterev", 2,        one(0001300),        one(0177770), "Ds", mcfisa_aa},
2248 48024e4a bellard
2249 48024e4a bellard
{"callm", 4,        one(0003300),        one(0177700), "#b!s", m68020 },
2250 48024e4a bellard
2251 48024e4a bellard
{"cas2w", 6,    two(0006374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up },
2252 48024e4a bellard
{"cas2w", 6,    two(0006374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up },
2253 48024e4a bellard
{"cas2l", 6,    two(0007374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up },
2254 48024e4a bellard
{"cas2l", 6,    two(0007374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up },
2255 48024e4a bellard
2256 48024e4a bellard
{"casb", 4,        two(0005300, 0), two(0177700, 0177070),        "D3D2~s", m68020up },
2257 48024e4a bellard
{"casw", 4,        two(0006300, 0), two(0177700, 0177070),        "D3D2~s", m68020up },
2258 48024e4a bellard
{"casl", 4,        two(0007300, 0), two(0177700, 0177070),        "D3D2~s", m68020up },
2259 48024e4a bellard
2260 48024e4a bellard
{"chk2b", 4,         two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 },
2261 48024e4a bellard
{"chk2w", 4,         two(0001300,0004000),        two(0177700,07777), "!sR1", m68020up | cpu32 },
2262 48024e4a bellard
{"chk2l", 4,         two(0002300,0004000),        two(0177700,07777), "!sR1", m68020up | cpu32 },
2263 48024e4a bellard
2264 48024e4a bellard
{"chkl", 2,        one(0040400),                one(0170700), ";lDd", m68000up },
2265 48024e4a bellard
{"chkw", 2,        one(0040600),                one(0170700), ";wDd", m68000up },
2266 48024e4a bellard
2267 48024e4a bellard
#define SCOPE_LINE (0x1 << 3)
2268 48024e4a bellard
#define SCOPE_PAGE (0x2 << 3)
2269 48024e4a bellard
#define SCOPE_ALL  (0x3 << 3)
2270 48024e4a bellard
2271 48024e4a bellard
{"cinva", 2,        one(0xf400|SCOPE_ALL),  one(0xff38), "ce",   m68040up },
2272 48024e4a bellard
{"cinvl", 2,        one(0xf400|SCOPE_LINE), one(0xff38), "ceas", m68040up },
2273 48024e4a bellard
{"cinvp", 2,        one(0xf400|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
2274 48024e4a bellard
2275 48024e4a bellard
{"cpusha", 2,        one(0xf420|SCOPE_ALL),  one(0xff38), "ce",   m68040up },
2276 48024e4a bellard
{"cpushl", 2,        one(0xf420|SCOPE_LINE), one(0xff38), "ceas", m68040up | mcfisa_a },
2277 48024e4a bellard
{"cpushp", 2,        one(0xf420|SCOPE_PAGE), one(0xff38), "ceas", m68040up },
2278 48024e4a bellard
2279 48024e4a bellard
#undef SCOPE_LINE
2280 48024e4a bellard
#undef SCOPE_PAGE
2281 48024e4a bellard
#undef SCOPE_ALL
2282 48024e4a bellard
2283 48024e4a bellard
{"clrb", 2,        one(0041000),        one(0177700), "$s", m68000up | mcfisa_a },
2284 48024e4a bellard
{"clrw", 2,        one(0041100),        one(0177700), "$s", m68000up | mcfisa_a },
2285 48024e4a bellard
{"clrl", 2,        one(0041200),        one(0177700), "$s", m68000up | mcfisa_a },
2286 48024e4a bellard
2287 48024e4a bellard
{"cmp2b", 4,        two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 },
2288 48024e4a bellard
{"cmp2w", 4,        two(0001300,0),        two(0177700,07777), "!sR1", m68020up | cpu32 },
2289 48024e4a bellard
{"cmp2l", 4,        two(0002300,0),        two(0177700,07777), "!sR1", m68020up | cpu32 },
2290 48024e4a bellard
2291 48024e4a bellard
{"cmpaw", 2,        one(0130300),        one(0170700), "*wAd", m68000up },
2292 48024e4a bellard
{"cmpal", 2,        one(0130700),        one(0170700), "*lAd", m68000up | mcfisa_a },
2293 48024e4a bellard
2294 48024e4a bellard
{"cmpib", 4,        one(0006000),        one(0177700), "#b@s", m68000up },
2295 48024e4a bellard
{"cmpib", 4,        one(0006000),        one(0177700), "#bDs", mcfisa_b },
2296 48024e4a bellard
{"cmpiw", 4,        one(0006100),        one(0177700), "#w@s", m68000up },
2297 48024e4a bellard
{"cmpiw", 4,        one(0006100),        one(0177700), "#wDs", mcfisa_b },
2298 48024e4a bellard
{"cmpil", 6,        one(0006200),        one(0177700), "#l@s", m68000up },
2299 48024e4a bellard
{"cmpil", 6,        one(0006200),        one(0177700), "#lDs", mcfisa_a },
2300 48024e4a bellard
2301 48024e4a bellard
{"cmpmb", 2,        one(0130410),        one(0170770), "+s+d", m68000up },
2302 48024e4a bellard
{"cmpmw", 2,        one(0130510),        one(0170770), "+s+d", m68000up },
2303 48024e4a bellard
{"cmpml", 2,        one(0130610),        one(0170770), "+s+d", m68000up },
2304 48024e4a bellard
2305 48024e4a bellard
/* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions.  */
2306 48024e4a bellard
{"cmpb", 4,        one(0006000),        one(0177700), "#b@s", m68000up },
2307 48024e4a bellard
{"cmpb", 4,        one(0006000),        one(0177700), "#bDs", mcfisa_b },
2308 48024e4a bellard
{"cmpb", 2,        one(0130410),        one(0170770), "+s+d", m68000up },
2309 48024e4a bellard
{"cmpb", 2,        one(0130000),        one(0170700), ";bDd", m68000up },
2310 48024e4a bellard
{"cmpb", 2,        one(0130000),        one(0170700), "*bDd", mcfisa_b },
2311 48024e4a bellard
{"cmpw", 2,        one(0130300),        one(0170700), "*wAd", m68000up },
2312 48024e4a bellard
{"cmpw", 4,        one(0006100),        one(0177700), "#w@s", m68000up },
2313 48024e4a bellard
{"cmpw", 4,        one(0006100),        one(0177700), "#wDs", mcfisa_b },
2314 48024e4a bellard
{"cmpw", 2,        one(0130510),        one(0170770), "+s+d", m68000up },
2315 48024e4a bellard
{"cmpw", 2,        one(0130100),        one(0170700), "*wDd", m68000up | mcfisa_b },
2316 48024e4a bellard
{"cmpl", 2,        one(0130700),        one(0170700), "*lAd", m68000up | mcfisa_a },
2317 48024e4a bellard
{"cmpl", 6,        one(0006200),        one(0177700), "#l@s", m68000up },
2318 48024e4a bellard
{"cmpl", 6,        one(0006200),        one(0177700), "#lDs", mcfisa_a },
2319 48024e4a bellard
{"cmpl", 2,        one(0130610),        one(0170770), "+s+d", m68000up },
2320 48024e4a bellard
{"cmpl", 2,        one(0130200),        one(0170700), "*lDd", m68000up | mcfisa_a },
2321 48024e4a bellard
2322 48024e4a bellard
{"dbcc", 2,        one(0052310),        one(0177770), "DsBw", m68000up },
2323 48024e4a bellard
{"dbcs", 2,        one(0052710),        one(0177770), "DsBw", m68000up },
2324 48024e4a bellard
{"dbeq", 2,        one(0053710),        one(0177770), "DsBw", m68000up },
2325 48024e4a bellard
{"dbf", 2,        one(0050710),        one(0177770), "DsBw", m68000up },
2326 48024e4a bellard
{"dbge", 2,        one(0056310),        one(0177770), "DsBw", m68000up },
2327 48024e4a bellard
{"dbgt", 2,        one(0057310),        one(0177770), "DsBw", m68000up },
2328 48024e4a bellard
{"dbhi", 2,        one(0051310),        one(0177770), "DsBw", m68000up },
2329 48024e4a bellard
{"dble", 2,        one(0057710),        one(0177770), "DsBw", m68000up },
2330 48024e4a bellard
{"dbls", 2,        one(0051710),        one(0177770), "DsBw", m68000up },
2331 48024e4a bellard
{"dblt", 2,        one(0056710),        one(0177770), "DsBw", m68000up },
2332 48024e4a bellard
{"dbmi", 2,        one(0055710),        one(0177770), "DsBw", m68000up },
2333 48024e4a bellard
{"dbne", 2,        one(0053310),        one(0177770), "DsBw", m68000up },
2334 48024e4a bellard
{"dbpl", 2,        one(0055310),        one(0177770), "DsBw", m68000up },
2335 48024e4a bellard
{"dbt", 2,        one(0050310),        one(0177770), "DsBw", m68000up },
2336 48024e4a bellard
{"dbvc", 2,        one(0054310),        one(0177770), "DsBw", m68000up },
2337 48024e4a bellard
{"dbvs", 2,        one(0054710),        one(0177770), "DsBw", m68000up },
2338 48024e4a bellard
2339 48024e4a bellard
{"divsw", 2,        one(0100700),        one(0170700), ";wDd", m68000up | mcfhwdiv },
2340 48024e4a bellard
2341 48024e4a bellard
{"divsl", 4,         two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
2342 48024e4a bellard
{"divsl", 4,         two(0046100,0004000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
2343 48024e4a bellard
{"divsl", 4,         two(0046100,0004000),two(0177700,0107770),"qsDD",   mcfhwdiv },
2344 48024e4a bellard
2345 48024e4a bellard
{"divsll", 4,         two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
2346 48024e4a bellard
{"divsll", 4,         two(0046100,0004000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
2347 48024e4a bellard
2348 48024e4a bellard
{"divuw", 2,        one(0100300),                one(0170700), ";wDd", m68000up | mcfhwdiv },
2349 48024e4a bellard
2350 48024e4a bellard
{"divul", 4,        two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 },
2351 48024e4a bellard
{"divul", 4,        two(0046100,0000000),two(0177700,0107770),";lDD",   m68020up|cpu32 },
2352 48024e4a bellard
{"divul", 4,        two(0046100,0000000),two(0177700,0107770),"qsDD",   mcfhwdiv },
2353 48024e4a bellard
2354 48024e4a bellard
{"divull", 4,        two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 },
2355 48024e4a bellard
{"divull", 4,        two(0046100,0000000),two(0177700,0107770),";lDD",  m68020up|cpu32 },
2356 48024e4a bellard
2357 48024e4a bellard
{"eorib", 4,        one(0005000),        one(0177700), "#b$s", m68000up },
2358 48024e4a bellard
{"eorib", 4,        one(0005074),        one(0177777), "#bCs", m68000up },
2359 48024e4a bellard
{"eoriw", 4,        one(0005100),        one(0177700), "#w$s", m68000up },
2360 48024e4a bellard
{"eoriw", 4,        one(0005174),        one(0177777), "#wSs", m68000up },
2361 48024e4a bellard
{"eoril", 6,        one(0005200),        one(0177700), "#l$s", m68000up },
2362 48024e4a bellard
{"eoril", 6,        one(0005200),        one(0177700), "#lDs", mcfisa_a },
2363 48024e4a bellard
{"eori", 4,        one(0005074),        one(0177777), "#bCs", m68000up },
2364 48024e4a bellard
{"eori", 4,        one(0005174),        one(0177777), "#wSs", m68000up },
2365 48024e4a bellard
{"eori", 4,        one(0005100),        one(0177700), "#w$s", m68000up },
2366 48024e4a bellard
2367 48024e4a bellard
/* The eor opcode can generate the eori instruction.  */
2368 48024e4a bellard
{"eorb", 4,        one(0005000),        one(0177700), "#b$s", m68000up },
2369 48024e4a bellard
{"eorb", 4,        one(0005074),        one(0177777), "#bCs", m68000up },
2370 48024e4a bellard
{"eorb", 2,        one(0130400),        one(0170700), "Dd$s", m68000up },
2371 48024e4a bellard
{"eorw", 4,        one(0005100),        one(0177700), "#w$s", m68000up },
2372 48024e4a bellard
{"eorw", 4,        one(0005174),        one(0177777), "#wSs", m68000up },
2373 48024e4a bellard
{"eorw", 2,        one(0130500),        one(0170700), "Dd$s", m68000up },
2374 48024e4a bellard
{"eorl", 6,        one(0005200),        one(0177700), "#l$s", m68000up },
2375 48024e4a bellard
{"eorl", 6,        one(0005200),        one(0177700), "#lDs", mcfisa_a },
2376 48024e4a bellard
{"eorl", 2,        one(0130600),        one(0170700), "Dd$s", m68000up | mcfisa_a },
2377 48024e4a bellard
{"eor", 4,        one(0005074),        one(0177777), "#bCs", m68000up },
2378 48024e4a bellard
{"eor", 4,        one(0005174),        one(0177777), "#wSs", m68000up },
2379 48024e4a bellard
{"eor", 4,        one(0005100),        one(0177700), "#w$s", m68000up },
2380 48024e4a bellard
{"eor", 2,        one(0130500),        one(0170700), "Dd$s", m68000up },
2381 3b46e624 ths
2382 48024e4a bellard
{"exg", 2,        one(0140500),        one(0170770), "DdDs", m68000up },
2383 48024e4a bellard
{"exg", 2,        one(0140510),        one(0170770), "AdAs", m68000up },
2384 48024e4a bellard
{"exg", 2,        one(0140610),        one(0170770), "DdAs", m68000up },
2385 48024e4a bellard
{"exg", 2,        one(0140610),        one(0170770), "AsDd", m68000up },
2386 48024e4a bellard
2387 48024e4a bellard
{"extw", 2,        one(0044200),        one(0177770), "Ds", m68000up|mcfisa_a },
2388 48024e4a bellard
{"extl", 2,        one(0044300),        one(0177770), "Ds", m68000up|mcfisa_a },
2389 48024e4a bellard
{"extbl", 2,        one(0044700),        one(0177770), "Ds", m68020up|cpu32|mcfisa_a },
2390 48024e4a bellard
2391 48024e4a bellard
{"ff1", 2,           one(0002300), one(0177770), "Ds", mcfisa_aa},
2392 48024e4a bellard
2393 48024e4a bellard
/* float stuff starts here */
2394 48024e4a bellard
2395 48024e4a bellard
{"fabsb", 4,        two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2396 48024e4a bellard
{"fabsb", 4,        two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2397 48024e4a bellard
{"fabsd", 4,        two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2398 48024e4a bellard
{"fabsd", 4,        two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt", cfloat },
2399 48024e4a bellard
{"fabsd", 4,        two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2400 48024e4a bellard
{"fabsd", 4,        two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2401 48024e4a bellard
{"fabsl", 4,        two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2402 48024e4a bellard
{"fabsl", 4,        two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2403 48024e4a bellard
{"fabsp", 4,        two(0xF000, 0x4C18), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2404 48024e4a bellard
{"fabss", 4,        two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", cfloat },
2405 48024e4a bellard
{"fabss", 4,        two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2406 48024e4a bellard
{"fabsw", 4,        two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2407 48024e4a bellard
{"fabsw", 4,        two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2408 48024e4a bellard
{"fabsx", 4,        two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2409 48024e4a bellard
{"fabsx", 4,        two(0xF000, 0x4818), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2410 48024e4a bellard
{"fabsx", 4,        two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2411 48024e4a bellard
2412 48024e4a bellard
{"fsabsb", 4,        two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2413 48024e4a bellard
{"fsabsb", 4,        two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2414 48024e4a bellard
{"fsabsd", 4,        two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2415 48024e4a bellard
{"fsabsd", 4,        two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt", cfloat },
2416 48024e4a bellard
{"fsabsd", 4,        two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2417 48024e4a bellard
{"fsabsd", 4,        two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2418 48024e4a bellard
{"fsabsl", 4,        two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2419 48024e4a bellard
{"fsabsl", 4,        two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2420 48024e4a bellard
{"fsabsp", 4,        two(0xF000, 0x4C58), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2421 48024e4a bellard
{"fsabss", 4,        two(0xF000, 0x4258), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2422 48024e4a bellard
{"fsabss", 4,        two(0xF000, 0x4458), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2423 48024e4a bellard
{"fsabsw", 4,        two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2424 48024e4a bellard
{"fsabsw", 4,        two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2425 48024e4a bellard
{"fsabsx", 4,        two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2426 48024e4a bellard
{"fsabsx", 4,        two(0xF000, 0x4858), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2427 48024e4a bellard
{"fsabsx", 4,        two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
2428 48024e4a bellard
2429 48024e4a bellard
{"fdabsb", 4,        two(0xF000, 0x585C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2430 48024e4a bellard
{"fdabsb", 4,        two(0xF000, 0x585c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up},
2431 48024e4a bellard
{"fdabsd", 4,        two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2432 48024e4a bellard
{"fdabsd", 4,        two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiFt", cfloat },
2433 48024e4a bellard
{"fdabsd", 4,        two(0xF000, 0x545C), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2434 48024e4a bellard
{"fdabsd", 4,        two(0xF000, 0x545c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up},
2435 48024e4a bellard
{"fdabsl", 4,        two(0xF000, 0x405C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2436 48024e4a bellard
{"fdabsl", 4,        two(0xF000, 0x405c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up},
2437 48024e4a bellard
{"fdabsp", 4,        two(0xF000, 0x4C5c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up},
2438 48024e4a bellard
{"fdabss", 4,        two(0xF000, 0x425C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2439 48024e4a bellard
{"fdabss", 4,        two(0xF000, 0x445c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up},
2440 48024e4a bellard
{"fdabsw", 4,        two(0xF000, 0x505C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2441 48024e4a bellard
{"fdabsw", 4,        two(0xF000, 0x505c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up},
2442 48024e4a bellard
{"fdabsx", 4,        two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up},
2443 48024e4a bellard
{"fdabsx", 4,        two(0xF000, 0x485c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up},
2444 48024e4a bellard
{"fdabsx", 4,        two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiFt",   m68040up},
2445 48024e4a bellard
2446 48024e4a bellard
{"facosb", 4,        two(0xF000, 0x581C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2447 48024e4a bellard
{"facosd", 4,        two(0xF000, 0x541C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2448 48024e4a bellard
{"facosl", 4,        two(0xF000, 0x401C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2449 48024e4a bellard
{"facosp", 4,        two(0xF000, 0x4C1C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2450 48024e4a bellard
{"facoss", 4,        two(0xF000, 0x441C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2451 48024e4a bellard
{"facosw", 4,        two(0xF000, 0x501C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2452 48024e4a bellard
{"facosx", 4,        two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2453 48024e4a bellard
{"facosx", 4,        two(0xF000, 0x481C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2454 48024e4a bellard
{"facosx", 4,        two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2455 48024e4a bellard
2456 48024e4a bellard
{"faddb", 4,        two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2457 48024e4a bellard
{"faddb", 4,        two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2458 48024e4a bellard
{"faddd", 4,        two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2459 48024e4a bellard
{"faddd", 4,        two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2460 48024e4a bellard
{"faddd", 4,        two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2461 48024e4a bellard
{"faddd", 4,        two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2462 48024e4a bellard
{"faddl", 4,        two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2463 48024e4a bellard
{"faddl", 4,        two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2464 48024e4a bellard
{"faddp", 4,        two(0xF000, 0x4C22), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2465 48024e4a bellard
{"fadds", 4,        two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2466 48024e4a bellard
{"fadds", 4,        two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2467 48024e4a bellard
{"faddw", 4,        two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2468 48024e4a bellard
{"faddw", 4,        two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2469 48024e4a bellard
{"faddx", 4,        two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2470 48024e4a bellard
{"faddx", 4,        two(0xF000, 0x4822), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2471 48024e4a bellard
2472 48024e4a bellard
{"fsaddb", 4,        two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2473 48024e4a bellard
{"fsaddb", 4,        two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2474 48024e4a bellard
{"fsaddd", 4,        two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2475 48024e4a bellard
{"fsaddd", 4,        two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2476 48024e4a bellard
{"fsaddd", 4,        two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2477 48024e4a bellard
{"fsaddl", 4,        two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2478 48024e4a bellard
{"fsaddl", 4,        two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2479 48024e4a bellard
{"fsaddp", 4,        two(0xF000, 0x4C62), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2480 48024e4a bellard
{"fsadds", 4,        two(0xF000, 0x4462), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2481 48024e4a bellard
{"fsadds", 4,        two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2482 48024e4a bellard
{"fsaddw", 4,        two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2483 48024e4a bellard
{"fsaddw", 4,        two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2484 48024e4a bellard
{"fsaddx", 4,        two(0xF000, 0x0062), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2485 48024e4a bellard
{"fsaddx", 4,        two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2486 48024e4a bellard
2487 48024e4a bellard
{"fdaddb", 4,        two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2488 48024e4a bellard
{"fdaddb", 4,        two(0xF000, 0x5866), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2489 48024e4a bellard
{"fdaddd", 4,        two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2490 48024e4a bellard
{"fdaddd", 4,        two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2491 48024e4a bellard
{"fdaddd", 4,        two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2492 48024e4a bellard
{"fdaddl", 4,        two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2493 48024e4a bellard
{"fdaddl", 4,        two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2494 48024e4a bellard
{"fdaddp", 4,        two(0xF000, 0x4C66), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2495 48024e4a bellard
{"fdadds", 4,        two(0xF000, 0x4466), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2496 48024e4a bellard
{"fdadds", 4,        two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2497 48024e4a bellard
{"fdaddw", 4,        two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2498 48024e4a bellard
{"fdaddw", 4,        two(0xF000, 0x5066), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2499 48024e4a bellard
{"fdaddx", 4,        two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2500 48024e4a bellard
{"fdaddx", 4,        two(0xF000, 0x4866), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2501 48024e4a bellard
2502 48024e4a bellard
{"fasinb", 4,        two(0xF000, 0x580C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2503 48024e4a bellard
{"fasind", 4,        two(0xF000, 0x540C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2504 48024e4a bellard
{"fasinl", 4,        two(0xF000, 0x400C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2505 48024e4a bellard
{"fasinp", 4,        two(0xF000, 0x4C0C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2506 48024e4a bellard
{"fasins", 4,        two(0xF000, 0x440C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2507 48024e4a bellard
{"fasinw", 4,        two(0xF000, 0x500C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2508 48024e4a bellard
{"fasinx", 4,        two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2509 48024e4a bellard
{"fasinx", 4,        two(0xF000, 0x480C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2510 48024e4a bellard
{"fasinx", 4,        two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2511 48024e4a bellard
2512 48024e4a bellard
{"fatanb", 4,        two(0xF000, 0x580A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2513 48024e4a bellard
{"fatand", 4,        two(0xF000, 0x540A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2514 48024e4a bellard
{"fatanl", 4,        two(0xF000, 0x400A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2515 48024e4a bellard
{"fatanp", 4,        two(0xF000, 0x4C0A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2516 48024e4a bellard
{"fatans", 4,        two(0xF000, 0x440A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2517 48024e4a bellard
{"fatanw", 4,        two(0xF000, 0x500A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2518 48024e4a bellard
{"fatanx", 4,        two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2519 48024e4a bellard
{"fatanx", 4,        two(0xF000, 0x480A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2520 48024e4a bellard
{"fatanx", 4,        two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2521 48024e4a bellard
2522 48024e4a bellard
{"fatanhb", 4,        two(0xF000, 0x580D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2523 48024e4a bellard
{"fatanhd", 4,        two(0xF000, 0x540D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2524 48024e4a bellard
{"fatanhl", 4,        two(0xF000, 0x400D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2525 48024e4a bellard
{"fatanhp", 4,        two(0xF000, 0x4C0D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2526 48024e4a bellard
{"fatanhs", 4,        two(0xF000, 0x440D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2527 48024e4a bellard
{"fatanhw", 4,        two(0xF000, 0x500D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2528 48024e4a bellard
{"fatanhx", 4,        two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2529 48024e4a bellard
{"fatanhx", 4,        two(0xF000, 0x480D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2530 48024e4a bellard
{"fatanhx", 4,        two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2531 48024e4a bellard
2532 48024e4a bellard
{"fbeq", 2,        one(0xF081),                one(0xF1FF), "IdBW", mfloat | cfloat },
2533 48024e4a bellard
{"fbf", 2,        one(0xF080),                one(0xF1FF), "IdBW", mfloat | cfloat },
2534 48024e4a bellard
{"fbge", 2,        one(0xF093),                one(0xF1FF), "IdBW", mfloat | cfloat },
2535 48024e4a bellard
{"fbgl", 2,        one(0xF096),                one(0xF1FF), "IdBW", mfloat | cfloat },
2536 48024e4a bellard
{"fbgle", 2,        one(0xF097),                one(0xF1FF), "IdBW", mfloat | cfloat },
2537 48024e4a bellard
{"fbgt", 2,        one(0xF092),                one(0xF1FF), "IdBW", mfloat | cfloat },
2538 48024e4a bellard
{"fble", 2,        one(0xF095),                one(0xF1FF), "IdBW", mfloat | cfloat },
2539 48024e4a bellard
{"fblt", 2,        one(0xF094),                one(0xF1FF), "IdBW", mfloat | cfloat },
2540 48024e4a bellard
{"fbne", 2,        one(0xF08E),                one(0xF1FF), "IdBW", mfloat | cfloat },
2541 48024e4a bellard
{"fbnge", 2,        one(0xF09C),                one(0xF1FF), "IdBW", mfloat | cfloat },
2542 48024e4a bellard
{"fbngl", 2,        one(0xF099),                one(0xF1FF), "IdBW", mfloat | cfloat },
2543 48024e4a bellard
{"fbngle", 2,        one(0xF098),                one(0xF1FF), "IdBW", mfloat | cfloat },
2544 48024e4a bellard
{"fbngt", 2,        one(0xF09D),                one(0xF1FF), "IdBW", mfloat | cfloat },
2545 48024e4a bellard
{"fbnle", 2,        one(0xF09A),                one(0xF1FF), "IdBW", mfloat | cfloat },
2546 48024e4a bellard
{"fbnlt", 2,        one(0xF09B),                one(0xF1FF), "IdBW", mfloat | cfloat },
2547 48024e4a bellard
{"fboge", 2,        one(0xF083),                one(0xF1FF), "IdBW", mfloat | cfloat },
2548 48024e4a bellard
{"fbogl", 2,        one(0xF086),                one(0xF1FF), "IdBW", mfloat | cfloat },
2549 48024e4a bellard
{"fbogt", 2,        one(0xF082),                one(0xF1FF), "IdBW", mfloat | cfloat },
2550 48024e4a bellard
{"fbole", 2,        one(0xF085),                one(0xF1FF), "IdBW", mfloat | cfloat },
2551 48024e4a bellard
{"fbolt", 2,        one(0xF084),                one(0xF1FF), "IdBW", mfloat | cfloat },
2552 48024e4a bellard
{"fbor", 2,        one(0xF087),                one(0xF1FF), "IdBW", mfloat | cfloat },
2553 48024e4a bellard
{"fbseq", 2,        one(0xF091),                one(0xF1FF), "IdBW", mfloat | cfloat },
2554 48024e4a bellard
{"fbsf", 2,        one(0xF090),                one(0xF1FF), "IdBW", mfloat | cfloat },
2555 48024e4a bellard
{"fbsne", 2,        one(0xF09E),                one(0xF1FF), "IdBW", mfloat | cfloat },
2556 48024e4a bellard
{"fbst", 2,        one(0xF09F),                one(0xF1FF), "IdBW", mfloat | cfloat },
2557 48024e4a bellard
{"fbt", 2,        one(0xF08F),                one(0xF1FF), "IdBW", mfloat | cfloat },
2558 48024e4a bellard
{"fbueq", 2,        one(0xF089),                one(0xF1FF), "IdBW", mfloat | cfloat },
2559 48024e4a bellard
{"fbuge", 2,        one(0xF08B),                one(0xF1FF), "IdBW", mfloat | cfloat },
2560 48024e4a bellard
{"fbugt", 2,        one(0xF08A),                one(0xF1FF), "IdBW", mfloat | cfloat },
2561 48024e4a bellard
{"fbule", 2,        one(0xF08D),                one(0xF1FF), "IdBW", mfloat | cfloat },
2562 48024e4a bellard
{"fbult", 2,        one(0xF08C),                one(0xF1FF), "IdBW", mfloat | cfloat },
2563 48024e4a bellard
{"fbun", 2,        one(0xF088),                one(0xF1FF), "IdBW", mfloat | cfloat },
2564 48024e4a bellard
2565 48024e4a bellard
{"fbeql", 2,        one(0xF0C1),                one(0xF1FF), "IdBC", mfloat | cfloat },
2566 48024e4a bellard
{"fbfl", 2,        one(0xF0C0),                one(0xF1FF), "IdBC", mfloat | cfloat },
2567 48024e4a bellard
{"fbgel", 2,        one(0xF0D3),                one(0xF1FF), "IdBC", mfloat | cfloat },
2568 48024e4a bellard
{"fbgll", 2,        one(0xF0D6),                one(0xF1FF), "IdBC", mfloat | cfloat },
2569 48024e4a bellard
{"fbglel", 2,        one(0xF0D7),                one(0xF1FF), "IdBC", mfloat | cfloat },
2570 48024e4a bellard
{"fbgtl", 2,        one(0xF0D2),                one(0xF1FF), "IdBC", mfloat | cfloat },
2571 48024e4a bellard
{"fblel", 2,        one(0xF0D5),                one(0xF1FF), "IdBC", mfloat | cfloat },
2572 48024e4a bellard
{"fbltl", 2,        one(0xF0D4),                one(0xF1FF), "IdBC", mfloat | cfloat },
2573 48024e4a bellard
{"fbnel", 2,        one(0xF0CE),                one(0xF1FF), "IdBC", mfloat | cfloat },
2574 48024e4a bellard
{"fbngel", 2,        one(0xF0DC),                one(0xF1FF), "IdBC", mfloat | cfloat },
2575 48024e4a bellard
{"fbngll", 2,        one(0xF0D9),                one(0xF1FF), "IdBC", mfloat | cfloat },
2576 48024e4a bellard
{"fbnglel", 2,        one(0xF0D8),                one(0xF1FF), "IdBC", mfloat | cfloat },
2577 48024e4a bellard
{"fbngtl", 2,        one(0xF0DD),                one(0xF1FF), "IdBC", mfloat | cfloat },
2578 48024e4a bellard
{"fbnlel", 2,        one(0xF0DA),                one(0xF1FF), "IdBC", mfloat | cfloat },
2579 48024e4a bellard
{"fbnltl", 2,        one(0xF0DB),                one(0xF1FF), "IdBC", mfloat | cfloat },
2580 48024e4a bellard
{"fbogel", 2,        one(0xF0C3),                one(0xF1FF), "IdBC", mfloat | cfloat },
2581 48024e4a bellard
{"fbogll", 2,        one(0xF0C6),                one(0xF1FF), "IdBC", mfloat | cfloat },
2582 48024e4a bellard
{"fbogtl", 2,        one(0xF0C2),                one(0xF1FF), "IdBC", mfloat | cfloat },
2583 48024e4a bellard
{"fbolel", 2,        one(0xF0C5),                one(0xF1FF), "IdBC", mfloat | cfloat },
2584 48024e4a bellard
{"fboltl", 2,        one(0xF0C4),                one(0xF1FF), "IdBC", mfloat | cfloat },
2585 48024e4a bellard
{"fborl", 2,        one(0xF0C7),                one(0xF1FF), "IdBC", mfloat | cfloat },
2586 48024e4a bellard
{"fbseql", 2,        one(0xF0D1),                one(0xF1FF), "IdBC", mfloat | cfloat },
2587 48024e4a bellard
{"fbsfl", 2,        one(0xF0D0),                one(0xF1FF), "IdBC", mfloat | cfloat },
2588 48024e4a bellard
{"fbsnel", 2,        one(0xF0DE),                one(0xF1FF), "IdBC", mfloat | cfloat },
2589 48024e4a bellard
{"fbstl", 2,        one(0xF0DF),                one(0xF1FF), "IdBC", mfloat | cfloat },
2590 48024e4a bellard
{"fbtl", 2,        one(0xF0CF),                one(0xF1FF), "IdBC", mfloat | cfloat },
2591 48024e4a bellard
{"fbueql", 2,        one(0xF0C9),                one(0xF1FF), "IdBC", mfloat | cfloat },
2592 48024e4a bellard
{"fbugel", 2,        one(0xF0CB),                one(0xF1FF), "IdBC", mfloat | cfloat },
2593 48024e4a bellard
{"fbugtl", 2,        one(0xF0CA),                one(0xF1FF), "IdBC", mfloat | cfloat },
2594 48024e4a bellard
{"fbulel", 2,        one(0xF0CD),                one(0xF1FF), "IdBC", mfloat | cfloat },
2595 48024e4a bellard
{"fbultl", 2,        one(0xF0CC),                one(0xF1FF), "IdBC", mfloat | cfloat },
2596 48024e4a bellard
{"fbunl", 2,        one(0xF0C8),                one(0xF1FF), "IdBC", mfloat | cfloat },
2597 48024e4a bellard
2598 48024e4a bellard
{"fjeq", 2,        one(0xF081),                one(0xF1BF), "IdBc", mfloat | cfloat },
2599 48024e4a bellard
{"fjf", 2,        one(0xF080),                one(0xF1BF), "IdBc", mfloat | cfloat },
2600 48024e4a bellard
{"fjge", 2,        one(0xF093),                one(0xF1BF), "IdBc", mfloat | cfloat },
2601 48024e4a bellard
{"fjgl", 2,        one(0xF096),                one(0xF1BF), "IdBc", mfloat | cfloat },
2602 48024e4a bellard
{"fjgle", 2,        one(0xF097),                one(0xF1BF), "IdBc", mfloat | cfloat },
2603 48024e4a bellard
{"fjgt", 2,        one(0xF092),                one(0xF1BF), "IdBc", mfloat | cfloat },
2604 48024e4a bellard
{"fjle", 2,        one(0xF095),                one(0xF1BF), "IdBc", mfloat | cfloat },
2605 48024e4a bellard
{"fjlt", 2,        one(0xF094),                one(0xF1BF), "IdBc", mfloat | cfloat },
2606 48024e4a bellard
{"fjne", 2,        one(0xF08E),                one(0xF1BF), "IdBc", mfloat | cfloat },
2607 48024e4a bellard
{"fjnge", 2,        one(0xF09C),                one(0xF1BF), "IdBc", mfloat | cfloat },
2608 48024e4a bellard
{"fjngl", 2,        one(0xF099),                one(0xF1BF), "IdBc", mfloat | cfloat },
2609 48024e4a bellard
{"fjngle", 2,        one(0xF098),                one(0xF1BF), "IdBc", mfloat | cfloat },
2610 48024e4a bellard
{"fjngt", 2,        one(0xF09D),                one(0xF1BF), "IdBc", mfloat | cfloat },
2611 48024e4a bellard
{"fjnle", 2,        one(0xF09A),                one(0xF1BF), "IdBc", mfloat | cfloat },
2612 48024e4a bellard
{"fjnlt", 2,        one(0xF09B),                one(0xF1BF), "IdBc", mfloat | cfloat },
2613 48024e4a bellard
{"fjoge", 2,        one(0xF083),                one(0xF1BF), "IdBc", mfloat | cfloat },
2614 48024e4a bellard
{"fjogl", 2,        one(0xF086),                one(0xF1BF), "IdBc", mfloat | cfloat },
2615 48024e4a bellard
{"fjogt", 2,        one(0xF082),                one(0xF1BF), "IdBc", mfloat | cfloat },
2616 48024e4a bellard
{"fjole", 2,        one(0xF085),                one(0xF1BF), "IdBc", mfloat | cfloat },
2617 48024e4a bellard
{"fjolt", 2,        one(0xF084),                one(0xF1BF), "IdBc", mfloat | cfloat },
2618 48024e4a bellard
{"fjor", 2,        one(0xF087),                one(0xF1BF), "IdBc", mfloat | cfloat },
2619 48024e4a bellard
{"fjseq", 2,        one(0xF091),                one(0xF1BF), "IdBc", mfloat | cfloat },
2620 48024e4a bellard
{"fjsf", 2,        one(0xF090),                one(0xF1BF), "IdBc", mfloat | cfloat },
2621 48024e4a bellard
{"fjsne", 2,        one(0xF09E),                one(0xF1BF), "IdBc", mfloat | cfloat },
2622 48024e4a bellard
{"fjst", 2,        one(0xF09F),                one(0xF1BF), "IdBc", mfloat | cfloat },
2623 48024e4a bellard
{"fjt", 2,        one(0xF08F),                one(0xF1BF), "IdBc", mfloat | cfloat },
2624 48024e4a bellard
{"fjueq", 2,        one(0xF089),                one(0xF1BF), "IdBc", mfloat | cfloat },
2625 48024e4a bellard
{"fjuge", 2,        one(0xF08B),                one(0xF1BF), "IdBc", mfloat | cfloat },
2626 48024e4a bellard
{"fjugt", 2,        one(0xF08A),                one(0xF1BF), "IdBc", mfloat | cfloat },
2627 48024e4a bellard
{"fjule", 2,        one(0xF08D),                one(0xF1BF), "IdBc", mfloat | cfloat },
2628 48024e4a bellard
{"fjult", 2,        one(0xF08C),                one(0xF1BF), "IdBc", mfloat | cfloat },
2629 48024e4a bellard
{"fjun", 2,        one(0xF088),                one(0xF1BF), "IdBc", mfloat | cfloat },
2630 48024e4a bellard
2631 48024e4a bellard
{"fcmpb", 4,        two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2632 48024e4a bellard
{"fcmpb", 4,        two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2633 48024e4a bellard
{"fcmpd", 4,        two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2634 48024e4a bellard
{"fcmpd", 4,        two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2635 48024e4a bellard
{"fcmpd", 4,        two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2636 48024e4a bellard
{"fcmpl", 4,        two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2637 48024e4a bellard
{"fcmpl", 4,        two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2638 48024e4a bellard
{"fcmpp", 4,        two(0xF000, 0x4C38), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2639 48024e4a bellard
{"fcmps", 4,        two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2640 48024e4a bellard
{"fcmps", 4,        two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2641 48024e4a bellard
{"fcmpw", 4,        two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2642 48024e4a bellard
{"fcmpw", 4,        two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2643 48024e4a bellard
{"fcmpx", 4,        two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2644 48024e4a bellard
{"fcmpx", 4,        two(0xF000, 0x4838), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2645 48024e4a bellard
2646 48024e4a bellard
{"fcosb", 4,        two(0xF000, 0x581D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2647 48024e4a bellard
{"fcosd", 4,        two(0xF000, 0x541D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2648 48024e4a bellard
{"fcosl", 4,        two(0xF000, 0x401D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2649 48024e4a bellard
{"fcosp", 4,        two(0xF000, 0x4C1D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2650 48024e4a bellard
{"fcoss", 4,        two(0xF000, 0x441D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2651 48024e4a bellard
{"fcosw", 4,        two(0xF000, 0x501D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2652 48024e4a bellard
{"fcosx", 4,        two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2653 48024e4a bellard
{"fcosx", 4,        two(0xF000, 0x481D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2654 48024e4a bellard
{"fcosx", 4,        two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2655 48024e4a bellard
2656 48024e4a bellard
{"fcoshb", 4,        two(0xF000, 0x5819), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2657 48024e4a bellard
{"fcoshd", 4,        two(0xF000, 0x5419), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2658 48024e4a bellard
{"fcoshl", 4,        two(0xF000, 0x4019), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2659 48024e4a bellard
{"fcoshp", 4,        two(0xF000, 0x4C19), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2660 48024e4a bellard
{"fcoshs", 4,        two(0xF000, 0x4419), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2661 48024e4a bellard
{"fcoshw", 4,        two(0xF000, 0x5019), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2662 48024e4a bellard
{"fcoshx", 4,        two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2663 48024e4a bellard
{"fcoshx", 4,        two(0xF000, 0x4819), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2664 48024e4a bellard
{"fcoshx", 4,        two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2665 48024e4a bellard
2666 48024e4a bellard
{"fdbeq", 4,        two(0xF048, 0x0001), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2667 48024e4a bellard
{"fdbf", 4,        two(0xF048, 0x0000), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2668 48024e4a bellard
{"fdbge", 4,        two(0xF048, 0x0013), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2669 48024e4a bellard
{"fdbgl", 4,        two(0xF048, 0x0016), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2670 48024e4a bellard
{"fdbgle", 4,        two(0xF048, 0x0017), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2671 48024e4a bellard
{"fdbgt", 4,        two(0xF048, 0x0012), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2672 48024e4a bellard
{"fdble", 4,        two(0xF048, 0x0015), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2673 48024e4a bellard
{"fdblt", 4,        two(0xF048, 0x0014), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2674 48024e4a bellard
{"fdbne", 4,        two(0xF048, 0x000E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2675 48024e4a bellard
{"fdbnge", 4,        two(0xF048, 0x001C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2676 48024e4a bellard
{"fdbngl", 4,        two(0xF048, 0x0019), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2677 48024e4a bellard
{"fdbngle", 4,        two(0xF048, 0x0018), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2678 48024e4a bellard
{"fdbngt", 4,        two(0xF048, 0x001D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2679 48024e4a bellard
{"fdbnle", 4,        two(0xF048, 0x001A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2680 48024e4a bellard
{"fdbnlt", 4,        two(0xF048, 0x001B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2681 48024e4a bellard
{"fdboge", 4,        two(0xF048, 0x0003), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2682 48024e4a bellard
{"fdbogl", 4,        two(0xF048, 0x0006), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2683 48024e4a bellard
{"fdbogt", 4,        two(0xF048, 0x0002), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2684 48024e4a bellard
{"fdbole", 4,        two(0xF048, 0x0005), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2685 48024e4a bellard
{"fdbolt", 4,        two(0xF048, 0x0004), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2686 48024e4a bellard
{"fdbor", 4,        two(0xF048, 0x0007), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2687 48024e4a bellard
{"fdbseq", 4,        two(0xF048, 0x0011), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2688 48024e4a bellard
{"fdbsf", 4,        two(0xF048, 0x0010), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2689 48024e4a bellard
{"fdbsne", 4,        two(0xF048, 0x001E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2690 48024e4a bellard
{"fdbst", 4,        two(0xF048, 0x001F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2691 48024e4a bellard
{"fdbt", 4,        two(0xF048, 0x000F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2692 48024e4a bellard
{"fdbueq", 4,        two(0xF048, 0x0009), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2693 48024e4a bellard
{"fdbuge", 4,        two(0xF048, 0x000B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2694 48024e4a bellard
{"fdbugt", 4,        two(0xF048, 0x000A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2695 48024e4a bellard
{"fdbule", 4,        two(0xF048, 0x000D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2696 48024e4a bellard
{"fdbult", 4,        two(0xF048, 0x000C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2697 48024e4a bellard
{"fdbun", 4,        two(0xF048, 0x0008), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat },
2698 48024e4a bellard
2699 48024e4a bellard
{"fdivb", 4,        two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2700 48024e4a bellard
{"fdivb", 4,        two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2701 48024e4a bellard
{"fdivd", 4,        two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2702 48024e4a bellard
{"fdivd", 4,        two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2703 48024e4a bellard
{"fdivd", 4,        two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2704 48024e4a bellard
{"fdivl", 4,        two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2705 48024e4a bellard
{"fdivl", 4,        two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2706 48024e4a bellard
{"fdivp", 4,        two(0xF000, 0x4C20), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2707 48024e4a bellard
{"fdivs", 4,        two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2708 48024e4a bellard
{"fdivs", 4,        two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2709 48024e4a bellard
{"fdivw", 4,        two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2710 48024e4a bellard
{"fdivw", 4,        two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2711 48024e4a bellard
{"fdivx", 4,        two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2712 48024e4a bellard
{"fdivx", 4,        two(0xF000, 0x4820), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2713 48024e4a bellard
2714 48024e4a bellard
{"fsdivb", 4,        two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2715 48024e4a bellard
{"fsdivb", 4,        two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2716 48024e4a bellard
{"fsdivd", 4,        two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2717 48024e4a bellard
{"fsdivd", 4,        two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2718 48024e4a bellard
{"fsdivd", 4,        two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2719 48024e4a bellard
{"fsdivl", 4,        two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2720 48024e4a bellard
{"fsdivl", 4,        two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2721 48024e4a bellard
{"fsdivp", 4,        two(0xF000, 0x4C60), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2722 48024e4a bellard
{"fsdivs", 4,        two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2723 48024e4a bellard
{"fsdivs", 4,        two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2724 48024e4a bellard
{"fsdivw", 4,        two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2725 48024e4a bellard
{"fsdivw", 4,        two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2726 48024e4a bellard
{"fsdivx", 4,        two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2727 48024e4a bellard
{"fsdivx", 4,        two(0xF000, 0x4860), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2728 48024e4a bellard
2729 48024e4a bellard
{"fddivb", 4,        two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2730 48024e4a bellard
{"fddivb", 4,        two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2731 48024e4a bellard
{"fddivd", 4,        two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2732 48024e4a bellard
{"fddivd", 4,        two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2733 48024e4a bellard
{"fddivd", 4,        two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2734 48024e4a bellard
{"fddivl", 4,        two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2735 48024e4a bellard
{"fddivl", 4,        two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2736 48024e4a bellard
{"fddivp", 4,        two(0xF000, 0x4C64), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2737 48024e4a bellard
{"fddivs", 4,        two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2738 48024e4a bellard
{"fddivs", 4,        two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2739 48024e4a bellard
{"fddivw", 4,        two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2740 48024e4a bellard
{"fddivw", 4,        two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2741 48024e4a bellard
{"fddivx", 4,        two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2742 48024e4a bellard
{"fddivx", 4,        two(0xF000, 0x4864), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2743 48024e4a bellard
2744 48024e4a bellard
{"fetoxb", 4,        two(0xF000, 0x5810), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2745 48024e4a bellard
{"fetoxd", 4,        two(0xF000, 0x5410), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2746 48024e4a bellard
{"fetoxl", 4,        two(0xF000, 0x4010), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2747 48024e4a bellard
{"fetoxp", 4,        two(0xF000, 0x4C10), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2748 48024e4a bellard
{"fetoxs", 4,        two(0xF000, 0x4410), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2749 48024e4a bellard
{"fetoxw", 4,        two(0xF000, 0x5010), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2750 48024e4a bellard
{"fetoxx", 4,        two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2751 48024e4a bellard
{"fetoxx", 4,        two(0xF000, 0x4810), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2752 48024e4a bellard
{"fetoxx", 4,        two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2753 48024e4a bellard
2754 48024e4a bellard
{"fetoxm1b", 4,        two(0xF000, 0x5808), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2755 48024e4a bellard
{"fetoxm1d", 4,        two(0xF000, 0x5408), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2756 48024e4a bellard
{"fetoxm1l", 4,        two(0xF000, 0x4008), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2757 48024e4a bellard
{"fetoxm1p", 4,        two(0xF000, 0x4C08), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2758 48024e4a bellard
{"fetoxm1s", 4,        two(0xF000, 0x4408), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2759 48024e4a bellard
{"fetoxm1w", 4,        two(0xF000, 0x5008), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2760 48024e4a bellard
{"fetoxm1x", 4,        two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2761 48024e4a bellard
{"fetoxm1x", 4,        two(0xF000, 0x4808), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2762 48024e4a bellard
{"fetoxm1x", 4,        two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2763 48024e4a bellard
2764 48024e4a bellard
{"fgetexpb", 4,        two(0xF000, 0x581E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2765 48024e4a bellard
{"fgetexpd", 4,        two(0xF000, 0x541E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2766 48024e4a bellard
{"fgetexpl", 4,        two(0xF000, 0x401E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2767 48024e4a bellard
{"fgetexpp", 4,        two(0xF000, 0x4C1E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2768 48024e4a bellard
{"fgetexps", 4,        two(0xF000, 0x441E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2769 48024e4a bellard
{"fgetexpw", 4,        two(0xF000, 0x501E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2770 48024e4a bellard
{"fgetexpx", 4,        two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2771 48024e4a bellard
{"fgetexpx", 4,        two(0xF000, 0x481E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2772 48024e4a bellard
{"fgetexpx", 4,        two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2773 48024e4a bellard
2774 48024e4a bellard
{"fgetmanb", 4,        two(0xF000, 0x581F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2775 48024e4a bellard
{"fgetmand", 4,        two(0xF000, 0x541F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2776 48024e4a bellard
{"fgetmanl", 4,        two(0xF000, 0x401F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2777 48024e4a bellard
{"fgetmanp", 4,        two(0xF000, 0x4C1F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2778 48024e4a bellard
{"fgetmans", 4,        two(0xF000, 0x441F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2779 48024e4a bellard
{"fgetmanw", 4,        two(0xF000, 0x501F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2780 48024e4a bellard
{"fgetmanx", 4,        two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2781 48024e4a bellard
{"fgetmanx", 4,        two(0xF000, 0x481F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2782 48024e4a bellard
{"fgetmanx", 4,        two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2783 48024e4a bellard
2784 48024e4a bellard
{"fintb", 4,        two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2785 48024e4a bellard
{"fintb", 4,        two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2786 48024e4a bellard
{"fintd", 4,        two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2787 48024e4a bellard
{"fintd", 4,        two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt", cfloat },
2788 48024e4a bellard
{"fintd", 4,        two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2789 48024e4a bellard
{"fintd", 4,        two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2790 48024e4a bellard
{"fintl", 4,        two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2791 48024e4a bellard
{"fintl", 4,        two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2792 48024e4a bellard
{"fintp", 4,        two(0xF000, 0x4C01), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2793 48024e4a bellard
{"fints", 4,        two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2794 48024e4a bellard
{"fints", 4,        two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2795 48024e4a bellard
{"fintw", 4,        two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2796 48024e4a bellard
{"fintw", 4,        two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2797 48024e4a bellard
{"fintx", 4,        two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2798 48024e4a bellard
{"fintx", 4,        two(0xF000, 0x4801), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2799 48024e4a bellard
{"fintx", 4,        two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2800 48024e4a bellard
2801 48024e4a bellard
{"fintrzb", 4,        two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2802 48024e4a bellard
{"fintrzb", 4,        two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2803 48024e4a bellard
{"fintrzd", 4,        two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2804 48024e4a bellard
{"fintrzd", 4,        two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
2805 48024e4a bellard
{"fintrzd", 4,        two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2806 48024e4a bellard
{"fintrzd", 4,        two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2807 48024e4a bellard
{"fintrzl", 4,        two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2808 48024e4a bellard
{"fintrzl", 4,        two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2809 48024e4a bellard
{"fintrzp", 4,        two(0xF000, 0x4C03), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2810 48024e4a bellard
{"fintrzs", 4,        two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2811 48024e4a bellard
{"fintrzs", 4,        two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2812 48024e4a bellard
{"fintrzw", 4,        two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2813 48024e4a bellard
{"fintrzw", 4,        two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2814 48024e4a bellard
{"fintrzx", 4,        two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2815 48024e4a bellard
{"fintrzx", 4,        two(0xF000, 0x4803), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2816 48024e4a bellard
{"fintrzx", 4,        two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2817 48024e4a bellard
2818 48024e4a bellard
{"flog10b", 4,        two(0xF000, 0x5815), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2819 48024e4a bellard
{"flog10d", 4,        two(0xF000, 0x5415), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2820 48024e4a bellard
{"flog10l", 4,        two(0xF000, 0x4015), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2821 48024e4a bellard
{"flog10p", 4,        two(0xF000, 0x4C15), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2822 48024e4a bellard
{"flog10s", 4,        two(0xF000, 0x4415), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2823 48024e4a bellard
{"flog10w", 4,        two(0xF000, 0x5015), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2824 48024e4a bellard
{"flog10x", 4,        two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2825 48024e4a bellard
{"flog10x", 4,        two(0xF000, 0x4815), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2826 48024e4a bellard
{"flog10x", 4,        two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2827 48024e4a bellard
2828 48024e4a bellard
{"flog2b", 4,        two(0xF000, 0x5816), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2829 48024e4a bellard
{"flog2d", 4,        two(0xF000, 0x5416), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2830 48024e4a bellard
{"flog2l", 4,        two(0xF000, 0x4016), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2831 48024e4a bellard
{"flog2p", 4,        two(0xF000, 0x4C16), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2832 48024e4a bellard
{"flog2s", 4,        two(0xF000, 0x4416), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2833 48024e4a bellard
{"flog2w", 4,        two(0xF000, 0x5016), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2834 48024e4a bellard
{"flog2x", 4,        two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2835 48024e4a bellard
{"flog2x", 4,        two(0xF000, 0x4816), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2836 48024e4a bellard
{"flog2x", 4,        two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2837 48024e4a bellard
2838 48024e4a bellard
{"flognb", 4,        two(0xF000, 0x5814), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2839 48024e4a bellard
{"flognd", 4,        two(0xF000, 0x5414), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2840 48024e4a bellard
{"flognl", 4,        two(0xF000, 0x4014), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2841 48024e4a bellard
{"flognp", 4,        two(0xF000, 0x4C14), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2842 48024e4a bellard
{"flogns", 4,        two(0xF000, 0x4414), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2843 48024e4a bellard
{"flognw", 4,        two(0xF000, 0x5014), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2844 48024e4a bellard
{"flognx", 4,        two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2845 48024e4a bellard
{"flognx", 4,        two(0xF000, 0x4814), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2846 48024e4a bellard
{"flognx", 4,        two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2847 48024e4a bellard
2848 48024e4a bellard
{"flognp1b", 4,        two(0xF000, 0x5806), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2849 48024e4a bellard
{"flognp1d", 4,        two(0xF000, 0x5406), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2850 48024e4a bellard
{"flognp1l", 4,        two(0xF000, 0x4006), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2851 48024e4a bellard
{"flognp1p", 4,        two(0xF000, 0x4C06), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2852 48024e4a bellard
{"flognp1s", 4,        two(0xF000, 0x4406), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2853 48024e4a bellard
{"flognp1w", 4,        two(0xF000, 0x5006), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2854 48024e4a bellard
{"flognp1x", 4,        two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2855 48024e4a bellard
{"flognp1x", 4,        two(0xF000, 0x4806), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2856 48024e4a bellard
{"flognp1x", 4,        two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
2857 48024e4a bellard
2858 48024e4a bellard
{"fmodb", 4,        two(0xF000, 0x5821), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2859 48024e4a bellard
{"fmodd", 4,        two(0xF000, 0x5421), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2860 48024e4a bellard
{"fmodl", 4,        two(0xF000, 0x4021), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2861 48024e4a bellard
{"fmodp", 4,        two(0xF000, 0x4C21), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2862 48024e4a bellard
{"fmods", 4,        two(0xF000, 0x4421), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2863 48024e4a bellard
{"fmodw", 4,        two(0xF000, 0x5021), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2864 48024e4a bellard
{"fmodx", 4,        two(0xF000, 0x0021), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
2865 48024e4a bellard
{"fmodx", 4,        two(0xF000, 0x4821), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2866 48024e4a bellard
2867 48024e4a bellard
{"fmoveb", 4,        two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2868 48024e4a bellard
{"fmoveb", 4,        two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
2869 48024e4a bellard
{"fmoveb", 4,        two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2870 48024e4a bellard
{"fmoveb", 4,        two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7$b", mfloat },
2871 48024e4a bellard
{"fmoved", 4,        two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2872 48024e4a bellard
{"fmoved", 4,        two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7~F", mfloat },
2873 48024e4a bellard
{"fmoved", 4,        two(0xF000, 0x0000), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2874 48024e4a bellard
{"fmoved", 4,        two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2875 48024e4a bellard
{"fmoved", 4,        two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
2876 48024e4a bellard
{"fmovel", 4,        two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2877 48024e4a bellard
{"fmovel", 4,        two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7$l", mfloat },
2878 48024e4a bellard
/* FIXME: the next two variants should not permit moving an address
2879 48024e4a bellard
   register to anything but the floating point instruction register.  */
2880 48024e4a bellard
{"fmovel", 4,        two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
2881 48024e4a bellard
{"fmovel", 4,        two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", mfloat },
2882 48024e4a bellard
{"fmovel", 4,        two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2883 48024e4a bellard
{"fmovel", 4,        two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat },
2884 48024e4a bellard
  /* Move the FP control registers.  */
2885 48024e4a bellard
{"fmovel", 4,        two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8ps", cfloat },
2886 48024e4a bellard
{"fmovel", 4,        two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Iibss8", cfloat },
2887 48024e4a bellard
{"fmovep", 4,        two(0xF000, 0x4C00), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2888 48024e4a bellard
{"fmovep", 4,        two(0xF000, 0x6C00), two(0xF1C0, 0xFC00), "IiF7~pkC", mfloat },
2889 48024e4a bellard
{"fmovep", 4,        two(0xF000, 0x7C00), two(0xF1C0, 0xFC0F), "IiF7~pDk", mfloat },
2890 48024e4a bellard
{"fmoves", 4,        two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
2891 48024e4a bellard
{"fmoves", 4,        two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7$f", mfloat },
2892 48024e4a bellard
{"fmoves", 4,        two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2893 48024e4a bellard
{"fmoves", 4,        two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2894 48024e4a bellard
{"fmovew", 4,        two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
2895 48024e4a bellard
{"fmovew", 4,        two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7$w", mfloat },
2896 48024e4a bellard
{"fmovew", 4,        two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2897 48024e4a bellard
{"fmovew", 4,        two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2898 48024e4a bellard
{"fmovex", 4,        two(0xF000, 0x0000), two(0xF1FF, 0xE07F), "IiF8F7", mfloat },
2899 48024e4a bellard
{"fmovex", 4,        two(0xF000, 0x4800), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
2900 48024e4a bellard
{"fmovex", 4,        two(0xF000, 0x6800), two(0xF1C0, 0xFC7F), "IiF7~x", mfloat },
2901 48024e4a bellard
2902 48024e4a bellard
{"fsmoveb", 4,        two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2903 48024e4a bellard
{"fsmoveb", 4,        two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2904 48024e4a bellard
{"fsmoveb", 4,        two(0xF000, 0x7840), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2905 48024e4a bellard
{"fsmoved", 4,        two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2906 48024e4a bellard
{"fsmoved", 4,        two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2907 48024e4a bellard
{"fsmoved", 4,        two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2908 48024e4a bellard
{"fsmoved", 4,        two(0xF000, 0x7440), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat },
2909 48024e4a bellard
{"fsmovel", 4,        two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2910 48024e4a bellard
{"fsmovel", 4,        two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2911 48024e4a bellard
{"fsmovel", 4,        two(0xF000, 0x6040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2912 48024e4a bellard
{"fsmoves", 4,        two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2913 48024e4a bellard
{"fsmoves", 4,        two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2914 48024e4a bellard
{"fsmoves", 4,        two(0xF000, 0x6440), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2915 48024e4a bellard
{"fsmovew", 4,        two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2916 48024e4a bellard
{"fsmovew", 4,        two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2917 48024e4a bellard
{"fsmovew", 4,        two(0xF000, 0x7040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2918 48024e4a bellard
{"fsmovex", 4,        two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2919 48024e4a bellard
{"fsmovex", 4,        two(0xF000, 0x4840), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2920 48024e4a bellard
{"fsmovep", 4,        two(0xF000, 0x4C40), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2921 48024e4a bellard
2922 48024e4a bellard
{"fdmoveb", 4,        two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
2923 48024e4a bellard
{"fdmoveb", 4,        two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2924 48024e4a bellard
{"fdmoveb", 4,        two(0xF000, 0x7844), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2925 48024e4a bellard
{"fdmoved", 4,        two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2926 48024e4a bellard
{"fdmoved", 4,        two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
2927 48024e4a bellard
{"fdmoved", 4,        two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2928 48024e4a bellard
{"fdmoved", 4,        two(0xF000, 0x7444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2929 48024e4a bellard
{"fdmovel", 4,        two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
2930 48024e4a bellard
{"fdmovel", 4,        two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2931 48024e4a bellard
{"fdmovel", 4,        two(0xF000, 0x6044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2932 48024e4a bellard
{"fdmoves", 4,        two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
2933 48024e4a bellard
{"fdmoves", 4,        two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2934 48024e4a bellard
{"fdmoves", 4,        two(0xF000, 0x6444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2935 48024e4a bellard
{"fdmovew", 4,        two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
2936 48024e4a bellard
{"fdmovew", 4,        two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2937 48024e4a bellard
{"fdmovew", 4,        two(0xF000, 0x7044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat },
2938 48024e4a bellard
{"fdmovex", 4,        two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
2939 48024e4a bellard
{"fdmovex", 4,        two(0xF000, 0x4844), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
2940 48024e4a bellard
{"fdmovep", 4,        two(0xF000, 0x4C44), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
2941 48024e4a bellard
2942 48024e4a bellard
{"fmovecrx", 4,        two(0xF000, 0x5C00), two(0xF1FF, 0xFC00), "Ii#CF7", mfloat },
2943 48024e4a bellard
2944 48024e4a bellard
{"fmovemd", 4,        two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizsl3", cfloat },
2945 48024e4a bellard
{"fmovemd", 4,        two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
2946 48024e4a bellard
{"fmovemd", 4,        two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
2947 48024e4a bellard
{"fmovemd", 4,        two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Iil3ys", cfloat },
2948 48024e4a bellard
2949 48024e4a bellard
{"fmovemx", 4,        two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat },
2950 48024e4a bellard
{"fmovemx", 4,        two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
2951 48024e4a bellard
{"fmovemx", 4,        two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat },
2952 48024e4a bellard
{"fmovemx", 4,        two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
2953 48024e4a bellard
{"fmovemx", 4,        two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
2954 48024e4a bellard
{"fmovemx", 4,        two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat },
2955 48024e4a bellard
{"fmovemx", 4,        two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat },
2956 48024e4a bellard
{"fmovemx", 4,        two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat },
2957 48024e4a bellard
{"fmovemx", 4,        two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
2958 48024e4a bellard
{"fmovemx", 4,        two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat },
2959 48024e4a bellard
{"fmovemx", 4,        two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
2960 48024e4a bellard
{"fmovemx", 4,        two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat },
2961 48024e4a bellard
2962 48024e4a bellard
{"fmoveml", 4,        two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
2963 48024e4a bellard
{"fmoveml", 4,        two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat },
2964 48024e4a bellard
/* FIXME: In the next instruction, we should only permit %dn if the
2965 48024e4a bellard
   target is a single register.  We should only permit %an if the
2966 48024e4a bellard
   target is a single %fpiar.  */
2967 48024e4a bellard
{"fmoveml", 4,        two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*lL8", mfloat },
2968 48024e4a bellard
2969 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "IizsL3", cfloat },
2970 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat },
2971 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat },
2972 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "IiL3ys", cfloat },
2973 48024e4a bellard
2974 48024e4a bellard
{"fmovem", 4,        two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat },
2975 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat },
2976 48024e4a bellard
{"fmovem", 4,        two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat },
2977 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat },
2978 48024e4a bellard
{"fmovem", 4,        two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat },
2979 48024e4a bellard
{"fmovem", 4,        two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat },
2980 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat },
2981 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat },
2982 48024e4a bellard
{"fmovem", 4,        two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat },
2983 48024e4a bellard
{"fmovem", 4,        two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat },
2984 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat },
2985 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat },
2986 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat },
2987 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ss8", mfloat },
2988 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat },
2989 48024e4a bellard
{"fmovem", 4,        two(0xF000, 0x8000), two(0xF2C0, 0xE3FF), "Ii*sL8", mfloat },
2990 48024e4a bellard
2991 48024e4a bellard
{"fmulb", 4,        two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
2992 48024e4a bellard
{"fmulb", 4,        two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2993 48024e4a bellard
{"fmuld", 4,        two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
2994 48024e4a bellard
{"fmuld", 4,        two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
2995 48024e4a bellard
{"fmuld", 4,        two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
2996 48024e4a bellard
{"fmull", 4,        two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
2997 48024e4a bellard
{"fmull", 4,        two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
2998 48024e4a bellard
{"fmulp", 4,        two(0xF000, 0x4C23), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
2999 48024e4a bellard
{"fmuls", 4,        two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3000 48024e4a bellard
{"fmuls", 4,        two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3001 48024e4a bellard
{"fmulw", 4,        two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3002 48024e4a bellard
{"fmulw", 4,        two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3003 48024e4a bellard
{"fmulx", 4,        two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3004 48024e4a bellard
{"fmulx", 4,        two(0xF000, 0x4823), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3005 48024e4a bellard
3006 48024e4a bellard
{"fsmulb", 4,        two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3007 48024e4a bellard
{"fsmulb", 4,        two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3008 48024e4a bellard
{"fsmuld", 4,        two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3009 48024e4a bellard
{"fsmuld", 4,        two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3010 48024e4a bellard
{"fsmuld", 4,        two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3011 48024e4a bellard
{"fsmull", 4,        two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3012 48024e4a bellard
{"fsmull", 4,        two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3013 48024e4a bellard
{"fsmulp", 4,        two(0xF000, 0x4C63), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3014 48024e4a bellard
{"fsmuls", 4,        two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3015 48024e4a bellard
{"fsmuls", 4,        two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3016 48024e4a bellard
{"fsmulw", 4,        two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3017 48024e4a bellard
{"fsmulw", 4,        two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3018 48024e4a bellard
{"fsmulx", 4,        two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3019 48024e4a bellard
{"fsmulx", 4,        two(0xF000, 0x4863), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3020 48024e4a bellard
3021 48024e4a bellard
{"fdmulb", 4,        two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3022 48024e4a bellard
{"fdmulb", 4,        two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3023 48024e4a bellard
{"fdmuld", 4,        two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3024 48024e4a bellard
{"fdmuld", 4,        two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3025 48024e4a bellard
{"fdmuld", 4,        two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3026 48024e4a bellard
{"fdmull", 4,        two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3027 48024e4a bellard
{"fdmull", 4,        two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3028 48024e4a bellard
{"fdmulp", 4,        two(0xF000, 0x4C67), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3029 48024e4a bellard
{"fdmuls", 4,        two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3030 48024e4a bellard
{"fdmuls", 4,        two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3031 48024e4a bellard
{"fdmulw", 4,        two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3032 48024e4a bellard
{"fdmulw", 4,        two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3033 48024e4a bellard
{"fdmulx", 4,        two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3034 48024e4a bellard
{"fdmulx", 4,        two(0xF000, 0x4867), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3035 48024e4a bellard
3036 48024e4a bellard
{"fnegb", 4,        two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3037 48024e4a bellard
{"fnegb", 4,        two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3038 48024e4a bellard
{"fnegd", 4,        two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3039 48024e4a bellard
{"fnegd", 4,        two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
3040 48024e4a bellard
{"fnegd", 4,        two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3041 48024e4a bellard
{"fnegd", 4,        two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3042 48024e4a bellard
{"fnegl", 4,        two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3043 48024e4a bellard
{"fnegl", 4,        two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3044 48024e4a bellard
{"fnegp", 4,        two(0xF000, 0x4C1A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3045 48024e4a bellard
{"fnegs", 4,        two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3046 48024e4a bellard
{"fnegs", 4,        two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3047 48024e4a bellard
{"fnegw", 4,        two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3048 48024e4a bellard
{"fnegw", 4,        two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3049 48024e4a bellard
{"fnegx", 4,        two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3050 48024e4a bellard
{"fnegx", 4,        two(0xF000, 0x481A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3051 48024e4a bellard
{"fnegx", 4,        two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3052 48024e4a bellard
3053 48024e4a bellard
{"fsnegb", 4,        two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3054 48024e4a bellard
{"fsnegb", 4,        two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3055 48024e4a bellard
{"fsnegd", 4,        two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3056 48024e4a bellard
{"fsnegd", 4,        two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
3057 48024e4a bellard
{"fsnegd", 4,        two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3058 48024e4a bellard
{"fsnegd", 4,        two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3059 48024e4a bellard
{"fsnegl", 4,        two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3060 48024e4a bellard
{"fsnegl", 4,        two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3061 48024e4a bellard
{"fsnegp", 4,        two(0xF000, 0x4C5A), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3062 48024e4a bellard
{"fsnegs", 4,        two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3063 48024e4a bellard
{"fsnegs", 4,        two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3064 48024e4a bellard
{"fsnegw", 4,        two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3065 48024e4a bellard
{"fsnegw", 4,        two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3066 48024e4a bellard
{"fsnegx", 4,        two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3067 48024e4a bellard
{"fsnegx", 4,        two(0xF000, 0x485A), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3068 48024e4a bellard
{"fsnegx", 4,        two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
3069 48024e4a bellard
3070 48024e4a bellard
{"fdnegb", 4,        two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3071 48024e4a bellard
{"fdnegb", 4,        two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3072 48024e4a bellard
{"fdnegd", 4,        two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3073 48024e4a bellard
{"fdnegd", 4,        two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
3074 48024e4a bellard
{"fdnegd", 4,        two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3075 48024e4a bellard
{"fdnegd", 4,        two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3076 48024e4a bellard
{"fdnegl", 4,        two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3077 48024e4a bellard
{"fdnegl", 4,        two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3078 48024e4a bellard
{"fdnegp", 4,        two(0xF000, 0x4C5E), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3079 48024e4a bellard
{"fdnegs", 4,        two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3080 48024e4a bellard
{"fdnegs", 4,        two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3081 48024e4a bellard
{"fdnegw", 4,        two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3082 48024e4a bellard
{"fdnegw", 4,        two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3083 48024e4a bellard
{"fdnegx", 4,        two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3084 48024e4a bellard
{"fdnegx", 4,        two(0xF000, 0x485E), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3085 48024e4a bellard
{"fdnegx", 4,        two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
3086 48024e4a bellard
3087 48024e4a bellard
{"fnop", 4,        two(0xF280, 0x0000), two(0xFFFF, 0xFFFF), "Ii", mfloat | cfloat },
3088 48024e4a bellard
3089 48024e4a bellard
{"fremb", 4,        two(0xF000, 0x5825), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3090 48024e4a bellard
{"fremd", 4,        two(0xF000, 0x5425), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3091 48024e4a bellard
{"freml", 4,        two(0xF000, 0x4025), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3092 48024e4a bellard
{"fremp", 4,        two(0xF000, 0x4C25), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3093 48024e4a bellard
{"frems", 4,        two(0xF000, 0x4425), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3094 48024e4a bellard
{"fremw", 4,        two(0xF000, 0x5025), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3095 48024e4a bellard
{"fremx", 4,        two(0xF000, 0x0025), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3096 48024e4a bellard
{"fremx", 4,        two(0xF000, 0x4825), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3097 48024e4a bellard
3098 48024e4a bellard
{"frestore", 2,        one(0xF140),                one(0xF1C0), "Id<s", mfloat },
3099 48024e4a bellard
{"frestore", 2,        one(0xF140),                one(0xF1C0), "Idys", cfloat },
3100 48024e4a bellard
3101 48024e4a bellard
{"fsave", 2,        one(0xF100),                one(0xF1C0), "Id>s", mfloat },
3102 48024e4a bellard
{"fsave", 2,        one(0xF100),                one(0xF1C0), "Idzs", cfloat },
3103 48024e4a bellard
3104 48024e4a bellard
{"fscaleb", 4,        two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3105 48024e4a bellard
{"fscaled", 4,        two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3106 48024e4a bellard
{"fscalel", 4,        two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3107 48024e4a bellard
{"fscalep", 4,        two(0xF000, 0x4C26), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3108 48024e4a bellard
{"fscales", 4,        two(0xF000, 0x4426), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3109 48024e4a bellard
{"fscalew", 4,        two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3110 48024e4a bellard
{"fscalex", 4,        two(0xF000, 0x0026), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3111 48024e4a bellard
{"fscalex", 4,        two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3112 48024e4a bellard
3113 48024e4a bellard
/* $ is necessary to prevent the assembler from using PC-relative.
3114 48024e4a bellard
   If @ were used, "label: fseq label" could produce "ftrapeq", 2,
3115 48024e4a bellard
   because "label" became "pc@label".  */
3116 48024e4a bellard
{"fseq", 4,        two(0xF040, 0x0001), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3117 48024e4a bellard
{"fsf", 4,        two(0xF040, 0x0000), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3118 48024e4a bellard
{"fsge", 4,        two(0xF040, 0x0013), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3119 48024e4a bellard
{"fsgl", 4,        two(0xF040, 0x0016), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3120 48024e4a bellard
{"fsgle", 4,        two(0xF040, 0x0017), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3121 48024e4a bellard
{"fsgt", 4,        two(0xF040, 0x0012), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3122 48024e4a bellard
{"fsle", 4,        two(0xF040, 0x0015), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3123 48024e4a bellard
{"fslt", 4,        two(0xF040, 0x0014), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3124 48024e4a bellard
{"fsne", 4,        two(0xF040, 0x000E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3125 48024e4a bellard
{"fsnge", 4,        two(0xF040, 0x001C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3126 48024e4a bellard
{"fsngl", 4,        two(0xF040, 0x0019), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3127 48024e4a bellard
{"fsngle", 4,        two(0xF040, 0x0018), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3128 48024e4a bellard
{"fsngt", 4,        two(0xF040, 0x001D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3129 48024e4a bellard
{"fsnle", 4,        two(0xF040, 0x001A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3130 48024e4a bellard
{"fsnlt", 4,        two(0xF040, 0x001B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3131 48024e4a bellard
{"fsoge", 4,        two(0xF040, 0x0003), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3132 48024e4a bellard
{"fsogl", 4,        two(0xF040, 0x0006), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3133 48024e4a bellard
{"fsogt", 4,        two(0xF040, 0x0002), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3134 48024e4a bellard
{"fsole", 4,        two(0xF040, 0x0005), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3135 48024e4a bellard
{"fsolt", 4,        two(0xF040, 0x0004), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3136 48024e4a bellard
{"fsor", 4,        two(0xF040, 0x0007), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3137 48024e4a bellard
{"fsseq", 4,        two(0xF040, 0x0011), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3138 48024e4a bellard
{"fssf", 4,        two(0xF040, 0x0010), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3139 48024e4a bellard
{"fssne", 4,        two(0xF040, 0x001E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3140 48024e4a bellard
{"fsst", 4,        two(0xF040, 0x001F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3141 48024e4a bellard
{"fst", 4,        two(0xF040, 0x000F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3142 48024e4a bellard
{"fsueq", 4,        two(0xF040, 0x0009), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3143 48024e4a bellard
{"fsuge", 4,        two(0xF040, 0x000B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3144 48024e4a bellard
{"fsugt", 4,        two(0xF040, 0x000A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3145 48024e4a bellard
{"fsule", 4,        two(0xF040, 0x000D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3146 48024e4a bellard
{"fsult", 4,        two(0xF040, 0x000C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3147 48024e4a bellard
{"fsun", 4,        two(0xF040, 0x0008), two(0xF1C0, 0xFFFF), "Ii$s", mfloat },
3148 48024e4a bellard
3149 48024e4a bellard
{"fsgldivb", 4,        two(0xF000, 0x5824), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3150 48024e4a bellard
{"fsgldivd", 4,        two(0xF000, 0x5424), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3151 48024e4a bellard
{"fsgldivl", 4,        two(0xF000, 0x4024), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3152 48024e4a bellard
{"fsgldivp", 4,        two(0xF000, 0x4C24), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3153 48024e4a bellard
{"fsgldivs", 4,        two(0xF000, 0x4424), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3154 48024e4a bellard
{"fsgldivw", 4,        two(0xF000, 0x5024), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3155 48024e4a bellard
{"fsgldivx", 4,        two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3156 48024e4a bellard
{"fsgldivx", 4,        two(0xF000, 0x4824), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3157 48024e4a bellard
{"fsgldivx", 4,        two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3158 48024e4a bellard
3159 48024e4a bellard
{"fsglmulb", 4,        two(0xF000, 0x5827), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3160 48024e4a bellard
{"fsglmuld", 4,        two(0xF000, 0x5427), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3161 48024e4a bellard
{"fsglmull", 4,        two(0xF000, 0x4027), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3162 48024e4a bellard
{"fsglmulp", 4,        two(0xF000, 0x4C27), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3163 48024e4a bellard
{"fsglmuls", 4,        two(0xF000, 0x4427), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3164 48024e4a bellard
{"fsglmulw", 4,        two(0xF000, 0x5027), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3165 48024e4a bellard
{"fsglmulx", 4,        two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3166 48024e4a bellard
{"fsglmulx", 4,        two(0xF000, 0x4827), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3167 48024e4a bellard
{"fsglmulx", 4,        two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3168 48024e4a bellard
3169 48024e4a bellard
{"fsinb", 4,        two(0xF000, 0x580E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3170 48024e4a bellard
{"fsind", 4,        two(0xF000, 0x540E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3171 48024e4a bellard
{"fsinl", 4,        two(0xF000, 0x400E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3172 48024e4a bellard
{"fsinp", 4,        two(0xF000, 0x4C0E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3173 48024e4a bellard
{"fsins", 4,        two(0xF000, 0x440E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3174 48024e4a bellard
{"fsinw", 4,        two(0xF000, 0x500E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3175 48024e4a bellard
{"fsinx", 4,        two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3176 48024e4a bellard
{"fsinx", 4,        two(0xF000, 0x480E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3177 48024e4a bellard
{"fsinx", 4,        two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3178 48024e4a bellard
3179 48024e4a bellard
{"fsincosb", 4,        two(0xF000, 0x5830), two(0xF1C0, 0xFC78), "Ii;bF3F7", mfloat },
3180 48024e4a bellard
{"fsincosd", 4,        two(0xF000, 0x5430), two(0xF1C0, 0xFC78), "Ii;FF3F7", mfloat },
3181 48024e4a bellard
{"fsincosl", 4,        two(0xF000, 0x4030), two(0xF1C0, 0xFC78), "Ii;lF3F7", mfloat },
3182 48024e4a bellard
{"fsincosp", 4,        two(0xF000, 0x4C30), two(0xF1C0, 0xFC78), "Ii;pF3F7", mfloat },
3183 48024e4a bellard
{"fsincoss", 4,        two(0xF000, 0x4430), two(0xF1C0, 0xFC78), "Ii;fF3F7", mfloat },
3184 48024e4a bellard
{"fsincosw", 4,        two(0xF000, 0x5030), two(0xF1C0, 0xFC78), "Ii;wF3F7", mfloat },
3185 48024e4a bellard
{"fsincosx", 4,        two(0xF000, 0x0030), two(0xF1C0, 0xE078), "IiF8F3F7", mfloat },
3186 48024e4a bellard
{"fsincosx", 4,        two(0xF000, 0x4830), two(0xF1C0, 0xFC78), "Ii;xF3F7", mfloat },
3187 48024e4a bellard
3188 48024e4a bellard
{"fsinhb", 4,        two(0xF000, 0x5802), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3189 48024e4a bellard
{"fsinhd", 4,        two(0xF000, 0x5402), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3190 48024e4a bellard
{"fsinhl", 4,        two(0xF000, 0x4002), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3191 48024e4a bellard
{"fsinhp", 4,        two(0xF000, 0x4C02), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3192 48024e4a bellard
{"fsinhs", 4,        two(0xF000, 0x4402), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3193 48024e4a bellard
{"fsinhw", 4,        two(0xF000, 0x5002), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3194 48024e4a bellard
{"fsinhx", 4,        two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3195 48024e4a bellard
{"fsinhx", 4,        two(0xF000, 0x4802), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3196 48024e4a bellard
{"fsinhx", 4,        two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3197 48024e4a bellard
3198 48024e4a bellard
{"fsqrtb", 4,        two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3199 48024e4a bellard
{"fsqrtb", 4,        two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3200 48024e4a bellard
{"fsqrtd", 4,        two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3201 48024e4a bellard
{"fsqrtd", 4,        two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
3202 48024e4a bellard
{"fsqrtd", 4,        two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3203 48024e4a bellard
{"fsqrtd", 4,        two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3204 48024e4a bellard
{"fsqrtl", 4,        two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3205 48024e4a bellard
{"fsqrtl", 4,        two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3206 48024e4a bellard
{"fsqrtp", 4,        two(0xF000, 0x4C04), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3207 48024e4a bellard
{"fsqrts", 4,        two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3208 48024e4a bellard
{"fsqrts", 4,        two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3209 48024e4a bellard
{"fsqrtw", 4,        two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3210 48024e4a bellard
{"fsqrtw", 4,        two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3211 48024e4a bellard
{"fsqrtx", 4,        two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3212 48024e4a bellard
{"fsqrtx", 4,        two(0xF000, 0x4804), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3213 48024e4a bellard
{"fsqrtx", 4,        two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3214 48024e4a bellard
3215 48024e4a bellard
{"fssqrtb", 4,        two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3216 48024e4a bellard
{"fssqrtb", 4,        two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3217 48024e4a bellard
{"fssqrtd", 4,        two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3218 48024e4a bellard
{"fssqrtd", 4,        two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
3219 48024e4a bellard
{"fssqrtd", 4,        two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3220 48024e4a bellard
{"fssqrtd", 4,        two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3221 48024e4a bellard
{"fssqrtl", 4,        two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3222 48024e4a bellard
{"fssqrtl", 4,        two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3223 48024e4a bellard
{"fssqrtp", 4,        two(0xF000, 0x4C41), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3224 48024e4a bellard
{"fssqrts", 4,        two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3225 48024e4a bellard
{"fssqrts", 4,        two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3226 48024e4a bellard
{"fssqrtw", 4,        two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3227 48024e4a bellard
{"fssqrtw", 4,        two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3228 48024e4a bellard
{"fssqrtx", 4,        two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3229 48024e4a bellard
{"fssqrtx", 4,        two(0xF000, 0x4841), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3230 48024e4a bellard
{"fssqrtx", 4,        two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
3231 48024e4a bellard
3232 48024e4a bellard
{"fdsqrtb", 4,        two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3233 48024e4a bellard
{"fdsqrtb", 4,        two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3234 48024e4a bellard
{"fdsqrtd", 4,        two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3235 48024e4a bellard
{"fdsqrtd", 4,        two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt",   cfloat },
3236 48024e4a bellard
{"fdsqrtd", 4,        two(0xF000, 0x5445), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3237 48024e4a bellard
{"fdsqrtl", 4,        two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3238 48024e4a bellard
{"fdsqrtl", 4,        two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3239 48024e4a bellard
{"fdsqrtp", 4,        two(0xF000, 0x4C45), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3240 48024e4a bellard
{"fdsqrts", 4,        two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3241 48024e4a bellard
{"fdsqrts", 4,        two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3242 48024e4a bellard
{"fdsqrtw", 4,        two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3243 48024e4a bellard
{"fdsqrtw", 4,        two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3244 48024e4a bellard
{"fdsqrtx", 4,        two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3245 48024e4a bellard
{"fdsqrtx", 4,        two(0xF000, 0x4845), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3246 48024e4a bellard
{"fdsqrtx", 4,        two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
3247 48024e4a bellard
3248 48024e4a bellard
{"fsubb", 4,        two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3249 48024e4a bellard
{"fsubb", 4,        two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3250 48024e4a bellard
{"fsubd", 4,        two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3251 48024e4a bellard
{"fsubd", 4,        two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3252 48024e4a bellard
{"fsubd", 4,        two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3253 48024e4a bellard
{"fsubl", 4,        two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3254 48024e4a bellard
{"fsubl", 4,        two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3255 48024e4a bellard
{"fsubp", 4,        two(0xF000, 0x4C28), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3256 48024e4a bellard
{"fsubs", 4,        two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3257 48024e4a bellard
{"fsubs", 4,        two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3258 48024e4a bellard
{"fsubw", 4,        two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3259 48024e4a bellard
{"fsubw", 4,        two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3260 48024e4a bellard
{"fsubx", 4,        two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3261 48024e4a bellard
{"fsubx", 4,        two(0xF000, 0x4828), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3262 48024e4a bellard
{"fsubx", 4,        two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3263 48024e4a bellard
3264 48024e4a bellard
{"fssubb", 4,        two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3265 48024e4a bellard
{"fssubb", 4,        two(0xF000, 0x5868), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3266 48024e4a bellard
{"fssubd", 4,        two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3267 48024e4a bellard
{"fssubd", 4,        two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3268 48024e4a bellard
{"fssubd", 4,        two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3269 48024e4a bellard
{"fssubl", 4,        two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3270 48024e4a bellard
{"fssubl", 4,        two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3271 48024e4a bellard
{"fssubp", 4,        two(0xF000, 0x4C68), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3272 48024e4a bellard
{"fssubs", 4,        two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3273 48024e4a bellard
{"fssubs", 4,        two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3274 48024e4a bellard
{"fssubw", 4,        two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3275 48024e4a bellard
{"fssubw", 4,        two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3276 48024e4a bellard
{"fssubx", 4,        two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3277 48024e4a bellard
{"fssubx", 4,        two(0xF000, 0x4868), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3278 48024e4a bellard
{"fssubx", 4,        two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
3279 48024e4a bellard
3280 48024e4a bellard
{"fdsubb", 4,        two(0xF000, 0x586A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3281 48024e4a bellard
{"fdsubb", 4,        two(0xF000, 0x586c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up },
3282 48024e4a bellard
{"fdsubd", 4,        two(0xF000, 0x006A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat },
3283 48024e4a bellard
{"fdsubd", 4,        two(0xF000, 0x546A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat },
3284 48024e4a bellard
{"fdsubd", 4,        two(0xF000, 0x546c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up },
3285 48024e4a bellard
{"fdsubl", 4,        two(0xF000, 0x406A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3286 48024e4a bellard
{"fdsubl", 4,        two(0xF000, 0x406c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up },
3287 48024e4a bellard
{"fdsubp", 4,        two(0xF000, 0x4C6c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up },
3288 48024e4a bellard
{"fdsubs", 4,        two(0xF000, 0x446A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3289 48024e4a bellard
{"fdsubs", 4,        two(0xF000, 0x446c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up },
3290 48024e4a bellard
{"fdsubw", 4,        two(0xF000, 0x506A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat },
3291 48024e4a bellard
{"fdsubw", 4,        two(0xF000, 0x506c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up },
3292 48024e4a bellard
{"fdsubx", 4,        two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up },
3293 48024e4a bellard
{"fdsubx", 4,        two(0xF000, 0x486c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up },
3294 48024e4a bellard
{"fdsubx", 4,        two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiFt",   m68040up },
3295 48024e4a bellard
3296 48024e4a bellard
{"ftanb", 4,        two(0xF000, 0x580F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3297 48024e4a bellard
{"ftand", 4,        two(0xF000, 0x540F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3298 48024e4a bellard
{"ftanl", 4,        two(0xF000, 0x400F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3299 48024e4a bellard
{"ftanp", 4,        two(0xF000, 0x4C0F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3300 48024e4a bellard
{"ftans", 4,        two(0xF000, 0x440F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3301 48024e4a bellard
{"ftanw", 4,        two(0xF000, 0x500F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3302 48024e4a bellard
{"ftanx", 4,        two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3303 48024e4a bellard
{"ftanx", 4,        two(0xF000, 0x480F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3304 48024e4a bellard
{"ftanx", 4,        two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3305 48024e4a bellard
3306 48024e4a bellard
{"ftanhb", 4,        two(0xF000, 0x5809), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3307 48024e4a bellard
{"ftanhd", 4,        two(0xF000, 0x5409), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3308 48024e4a bellard
{"ftanhl", 4,        two(0xF000, 0x4009), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3309 48024e4a bellard
{"ftanhp", 4,        two(0xF000, 0x4C09), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3310 48024e4a bellard
{"ftanhs", 4,        two(0xF000, 0x4409), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3311 48024e4a bellard
{"ftanhw", 4,        two(0xF000, 0x5009), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3312 48024e4a bellard
{"ftanhx", 4,        two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3313 48024e4a bellard
{"ftanhx", 4,        two(0xF000, 0x4809), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3314 48024e4a bellard
{"ftanhx", 4,        two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3315 48024e4a bellard
3316 48024e4a bellard
{"ftentoxb", 4,        two(0xF000, 0x5812), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3317 48024e4a bellard
{"ftentoxd", 4,        two(0xF000, 0x5412), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3318 48024e4a bellard
{"ftentoxl", 4,        two(0xF000, 0x4012), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3319 48024e4a bellard
{"ftentoxp", 4,        two(0xF000, 0x4C12), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3320 48024e4a bellard
{"ftentoxs", 4,        two(0xF000, 0x4412), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3321 48024e4a bellard
{"ftentoxw", 4,        two(0xF000, 0x5012), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3322 48024e4a bellard
{"ftentoxx", 4,        two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3323 48024e4a bellard
{"ftentoxx", 4,        two(0xF000, 0x4812), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3324 48024e4a bellard
{"ftentoxx", 4,        two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3325 48024e4a bellard
3326 48024e4a bellard
{"ftrapeq", 4,        two(0xF07C, 0x0001), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3327 48024e4a bellard
{"ftrapf", 4,        two(0xF07C, 0x0000), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3328 48024e4a bellard
{"ftrapge", 4,        two(0xF07C, 0x0013), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3329 48024e4a bellard
{"ftrapgl", 4,        two(0xF07C, 0x0016), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3330 48024e4a bellard
{"ftrapgle", 4,        two(0xF07C, 0x0017), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3331 48024e4a bellard
{"ftrapgt", 4,        two(0xF07C, 0x0012), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3332 48024e4a bellard
{"ftraple", 4,        two(0xF07C, 0x0015), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3333 48024e4a bellard
{"ftraplt", 4,        two(0xF07C, 0x0014), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3334 48024e4a bellard
{"ftrapne", 4,        two(0xF07C, 0x000E), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3335 48024e4a bellard
{"ftrapnge", 4,        two(0xF07C, 0x001C), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3336 48024e4a bellard
{"ftrapngl", 4,        two(0xF07C, 0x0019), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3337 48024e4a bellard
{"ftrapngle", 4,two(0xF07C, 0x0018), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3338 48024e4a bellard
{"ftrapngt", 4,        two(0xF07C, 0x001D), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3339 48024e4a bellard
{"ftrapnle", 4,        two(0xF07C, 0x001A), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3340 48024e4a bellard
{"ftrapnlt", 4,        two(0xF07C, 0x001B), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3341 48024e4a bellard
{"ftrapoge", 4,        two(0xF07C, 0x0003), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3342 48024e4a bellard
{"ftrapogl", 4,        two(0xF07C, 0x0006), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3343 48024e4a bellard
{"ftrapogt", 4,        two(0xF07C, 0x0002), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3344 48024e4a bellard
{"ftrapole", 4,        two(0xF07C, 0x0005), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3345 48024e4a bellard
{"ftrapolt", 4,        two(0xF07C, 0x0004), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3346 48024e4a bellard
{"ftrapor", 4,        two(0xF07C, 0x0007), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3347 48024e4a bellard
{"ftrapseq", 4,        two(0xF07C, 0x0011), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3348 48024e4a bellard
{"ftrapsf", 4,        two(0xF07C, 0x0010), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3349 48024e4a bellard
{"ftrapsne", 4,        two(0xF07C, 0x001E), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3350 48024e4a bellard
{"ftrapst", 4,        two(0xF07C, 0x001F), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3351 48024e4a bellard
{"ftrapt", 4,        two(0xF07C, 0x000F), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3352 48024e4a bellard
{"ftrapueq", 4,        two(0xF07C, 0x0009), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3353 48024e4a bellard
{"ftrapuge", 4,        two(0xF07C, 0x000B), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3354 48024e4a bellard
{"ftrapugt", 4,        two(0xF07C, 0x000A), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3355 48024e4a bellard
{"ftrapule", 4,        two(0xF07C, 0x000D), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3356 48024e4a bellard
{"ftrapult", 4,        two(0xF07C, 0x000C), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3357 48024e4a bellard
{"ftrapun", 4,        two(0xF07C, 0x0008), two(0xF1FF, 0xFFFF), "Ii", mfloat },
3358 48024e4a bellard
3359 48024e4a bellard
{"ftrapeqw", 4,        two(0xF07A, 0x0001), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3360 48024e4a bellard
{"ftrapfw", 4,        two(0xF07A, 0x0000), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3361 48024e4a bellard
{"ftrapgew", 4,        two(0xF07A, 0x0013), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3362 48024e4a bellard
{"ftrapglw", 4,        two(0xF07A, 0x0016), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3363 48024e4a bellard
{"ftrapglew", 4,two(0xF07A, 0x0017), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3364 48024e4a bellard
{"ftrapgtw", 4,        two(0xF07A, 0x0012), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3365 48024e4a bellard
{"ftraplew", 4,        two(0xF07A, 0x0015), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3366 48024e4a bellard
{"ftrapltw", 4,        two(0xF07A, 0x0014), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3367 48024e4a bellard
{"ftrapnew", 4,        two(0xF07A, 0x000E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3368 48024e4a bellard
{"ftrapngew", 4,two(0xF07A, 0x001C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3369 48024e4a bellard
{"ftrapnglw", 4,two(0xF07A, 0x0019), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3370 48024e4a bellard
{"ftrapnglew", 4,two(0xF07A, 0x0018), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3371 48024e4a bellard
{"ftrapngtw", 4,two(0xF07A, 0x001D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3372 48024e4a bellard
{"ftrapnlew", 4,two(0xF07A, 0x001A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3373 48024e4a bellard
{"ftrapnltw", 4,two(0xF07A, 0x001B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3374 48024e4a bellard
{"ftrapogew", 4,two(0xF07A, 0x0003), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3375 48024e4a bellard
{"ftrapoglw", 4,two(0xF07A, 0x0006), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3376 48024e4a bellard
{"ftrapogtw", 4,two(0xF07A, 0x0002), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3377 48024e4a bellard
{"ftrapolew", 4,two(0xF07A, 0x0005), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3378 48024e4a bellard
{"ftrapoltw", 4,two(0xF07A, 0x0004), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3379 48024e4a bellard
{"ftraporw", 4,        two(0xF07A, 0x0007), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3380 48024e4a bellard
{"ftrapseqw", 4,two(0xF07A, 0x0011), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3381 48024e4a bellard
{"ftrapsfw", 4,        two(0xF07A, 0x0010), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3382 48024e4a bellard
{"ftrapsnew", 4,two(0xF07A, 0x001E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3383 48024e4a bellard
{"ftrapstw", 4,        two(0xF07A, 0x001F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3384 48024e4a bellard
{"ftraptw", 4,        two(0xF07A, 0x000F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3385 48024e4a bellard
{"ftrapueqw", 4,two(0xF07A, 0x0009), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3386 48024e4a bellard
{"ftrapugew", 4,two(0xF07A, 0x000B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3387 48024e4a bellard
{"ftrapugtw", 4,two(0xF07A, 0x000A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3388 48024e4a bellard
{"ftrapulew", 4,two(0xF07A, 0x000D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3389 48024e4a bellard
{"ftrapultw", 4,two(0xF07A, 0x000C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3390 48024e4a bellard
{"ftrapunw", 4,        two(0xF07A, 0x0008), two(0xF1FF, 0xFFFF), "Ii^w", mfloat },
3391 48024e4a bellard
3392 48024e4a bellard
{"ftrapeql", 4,        two(0xF07B, 0x0001), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3393 48024e4a bellard
{"ftrapfl", 4,        two(0xF07B, 0x0000), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3394 48024e4a bellard
{"ftrapgel", 4,        two(0xF07B, 0x0013), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3395 48024e4a bellard
{"ftrapgll", 4,        two(0xF07B, 0x0016), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3396 48024e4a bellard
{"ftrapglel", 4,two(0xF07B, 0x0017), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3397 48024e4a bellard
{"ftrapgtl", 4,        two(0xF07B, 0x0012), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3398 48024e4a bellard
{"ftraplel", 4,        two(0xF07B, 0x0015), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3399 48024e4a bellard
{"ftrapltl", 4,        two(0xF07B, 0x0014), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3400 48024e4a bellard
{"ftrapnel", 4,        two(0xF07B, 0x000E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3401 48024e4a bellard
{"ftrapngel", 4,two(0xF07B, 0x001C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3402 48024e4a bellard
{"ftrapngll", 4,two(0xF07B, 0x0019), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3403 48024e4a bellard
{"ftrapnglel", 4,two(0xF07B, 0x0018), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3404 48024e4a bellard
{"ftrapngtl", 4,two(0xF07B, 0x001D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3405 48024e4a bellard
{"ftrapnlel", 4,two(0xF07B, 0x001A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3406 48024e4a bellard
{"ftrapnltl", 4,two(0xF07B, 0x001B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3407 48024e4a bellard
{"ftrapogel", 4,two(0xF07B, 0x0003), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3408 48024e4a bellard
{"ftrapogll", 4,two(0xF07B, 0x0006), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3409 48024e4a bellard
{"ftrapogtl", 4,two(0xF07B, 0x0002), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3410 48024e4a bellard
{"ftrapolel", 4,two(0xF07B, 0x0005), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3411 48024e4a bellard
{"ftrapoltl", 4,two(0xF07B, 0x0004), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3412 48024e4a bellard
{"ftraporl", 4,        two(0xF07B, 0x0007), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3413 48024e4a bellard
{"ftrapseql", 4,two(0xF07B, 0x0011), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3414 48024e4a bellard
{"ftrapsfl", 4,        two(0xF07B, 0x0010), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3415 48024e4a bellard
{"ftrapsnel", 4,two(0xF07B, 0x001E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3416 48024e4a bellard
{"ftrapstl", 4,        two(0xF07B, 0x001F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3417 48024e4a bellard
{"ftraptl", 4,        two(0xF07B, 0x000F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3418 48024e4a bellard
{"ftrapueql", 4,two(0xF07B, 0x0009), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3419 48024e4a bellard
{"ftrapugel", 4,two(0xF07B, 0x000B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3420 48024e4a bellard
{"ftrapugtl", 4,two(0xF07B, 0x000A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3421 48024e4a bellard
{"ftrapulel", 4,two(0xF07B, 0x000D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3422 48024e4a bellard
{"ftrapultl", 4,two(0xF07B, 0x000C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3423 48024e4a bellard
{"ftrapunl", 4,        two(0xF07B, 0x0008), two(0xF1FF, 0xFFFF), "Ii^l", mfloat },
3424 48024e4a bellard
3425 48024e4a bellard
{"ftstb", 4,        two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Ii;b", mfloat },
3426 48024e4a bellard
{"ftstb", 4,        two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3427 48024e4a bellard
{"ftstd", 4,        two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", cfloat },
3428 48024e4a bellard
{"ftstd", 4,        two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Ii;F", mfloat },
3429 48024e4a bellard
{"ftstd", 4,        two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3430 48024e4a bellard
{"ftstl", 4,        two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Ii;l", mfloat },
3431 48024e4a bellard
{"ftstl", 4,        two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3432 48024e4a bellard
{"ftstp", 4,        two(0xF000, 0x4C3A), two(0xF1C0, 0xFC7F), "Ii;p", mfloat },
3433 48024e4a bellard
{"ftsts", 4,        two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Ii;f", mfloat },
3434 48024e4a bellard
{"ftsts", 4,        two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3435 48024e4a bellard
{"ftstw", 4,        two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Ii;w", mfloat },
3436 48024e4a bellard
{"ftstw", 4,        two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Iibs", cfloat },
3437 48024e4a bellard
{"ftstx", 4,        two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", mfloat },
3438 48024e4a bellard
{"ftstx", 4,        two(0xF000, 0x483A), two(0xF1C0, 0xFC7F), "Ii;x", mfloat },
3439 48024e4a bellard
3440 48024e4a bellard
{"ftwotoxb", 4,        two(0xF000, 0x5811), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat },
3441 48024e4a bellard
{"ftwotoxd", 4,        two(0xF000, 0x5411), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat },
3442 48024e4a bellard
{"ftwotoxl", 4,        two(0xF000, 0x4011), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat },
3443 48024e4a bellard
{"ftwotoxp", 4,        two(0xF000, 0x4C11), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat },
3444 48024e4a bellard
{"ftwotoxs", 4,        two(0xF000, 0x4411), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat },
3445 48024e4a bellard
{"ftwotoxw", 4,        two(0xF000, 0x5011), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat },
3446 48024e4a bellard
{"ftwotoxx", 4,        two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiF8F7", mfloat },
3447 48024e4a bellard
{"ftwotoxx", 4,        two(0xF000, 0x4811), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat },
3448 48024e4a bellard
{"ftwotoxx", 4,        two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiFt",   mfloat },
3449 48024e4a bellard
3450 48024e4a bellard
{"halt", 2,        one(0045310),        one(0177777), "",     m68060 | mcfisa_a },
3451 48024e4a bellard
3452 48024e4a bellard
{"illegal", 2,        one(0045374),        one(0177777), "",     m68000up | mcfisa_a },
3453 48024e4a bellard
{"intouch", 2,        one(0xf428),        one(0xfff8), "As",    mcfisa_b },
3454 48024e4a bellard
3455 48024e4a bellard
{"jmp", 2,        one(0047300),        one(0177700), "!s", m68000up | mcfisa_a },
3456 48024e4a bellard
3457 48024e4a bellard
{"jra", 2,        one(0060000),        one(0177400), "Bg", m68000up | mcfisa_a },
3458 48024e4a bellard
{"jra", 2,        one(0047300),        one(0177700), "!s", m68000up | mcfisa_a },
3459 48024e4a bellard
3460 48024e4a bellard
{"jsr", 2,        one(0047200),        one(0177700), "!s", m68000up | mcfisa_a },
3461 48024e4a bellard
3462 48024e4a bellard
{"jbsr", 2,        one(0060400),        one(0177400), "Bg", m68000up | mcfisa_a },
3463 48024e4a bellard
{"jbsr", 2,        one(0047200),        one(0177700), "!s", m68000up | mcfisa_a },
3464 48024e4a bellard
3465 48024e4a bellard
{"lea", 2,        one(0040700),        one(0170700), "!sAd", m68000up | mcfisa_a },
3466 48024e4a bellard
3467 48024e4a bellard
{"lpstop", 6,        two(0174000,0000700),two(0177777,0177777),"#w", cpu32|m68060 },
3468 48024e4a bellard
3469 48024e4a bellard
{"linkw", 4,        one(0047120),        one(0177770), "As#w", m68000up | mcfisa_a },
3470 48024e4a bellard
{"linkl", 6,        one(0044010),        one(0177770), "As#l", m68020up | cpu32 },
3471 48024e4a bellard
{"link", 4,        one(0047120),        one(0177770), "As#W", m68000up | mcfisa_a },
3472 48024e4a bellard
{"link", 6,        one(0044010),        one(0177770), "As#l", m68020up | cpu32 },
3473 48024e4a bellard
3474 48024e4a bellard
{"lslb", 2,        one(0160410),        one(0170770), "QdDs", m68000up },
3475 48024e4a bellard
{"lslb", 2,        one(0160450),        one(0170770), "DdDs", m68000up },
3476 48024e4a bellard
{"lslw", 2,        one(0160510),        one(0170770), "QdDs", m68000up },
3477 48024e4a bellard
{"lslw", 2,        one(0160550),        one(0170770), "DdDs", m68000up },
3478 48024e4a bellard
{"lslw", 2,        one(0161700),        one(0177700), "~s",   m68000up },
3479 48024e4a bellard
{"lsll", 2,        one(0160610),        one(0170770), "QdDs", m68000up | mcfisa_a },
3480 48024e4a bellard
{"lsll", 2,        one(0160650),        one(0170770), "DdDs", m68000up | mcfisa_a },
3481 48024e4a bellard
3482 48024e4a bellard
{"lsrb", 2,        one(0160010),        one(0170770), "QdDs", m68000up },
3483 48024e4a bellard
{"lsrb", 2,        one(0160050),        one(0170770), "DdDs", m68000up },
3484 48024e4a bellard
{"lsrw", 2,        one(0160110),        one(0170770), "QdDs", m68000up },
3485 48024e4a bellard
{"lsrw", 2,        one(0160150),        one(0170770), "DdDs", m68000up },
3486 48024e4a bellard
{"lsrw", 2,        one(0161300),        one(0177700), "~s",   m68000up },
3487 48024e4a bellard
{"lsrl", 2,        one(0160210),        one(0170770), "QdDs", m68000up | mcfisa_a },
3488 48024e4a bellard
{"lsrl", 2,        one(0160250),        one(0170770), "DdDs", m68000up | mcfisa_a },
3489 48024e4a bellard
3490 48024e4a bellard
{"macw", 4,          two(0xa080, 0x0000), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
3491 48024e4a bellard
{"macw", 4,          two(0xa080, 0x0200), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
3492 48024e4a bellard
{"macw", 4,          two(0xa080, 0x0000), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac },
3493 48024e4a bellard
{"macw", 4,          two(0xa000, 0x0000), two(0xf1b0, 0x0900), "uMumiI", mcfmac },
3494 48024e4a bellard
{"macw", 4,          two(0xa000, 0x0200), two(0xf1b0, 0x0900), "uMumMh", mcfmac },
3495 48024e4a bellard
{"macw", 4,          two(0xa000, 0x0000), two(0xf1b0, 0x0f00), "uMum", mcfmac },
3496 48024e4a bellard
3497 48024e4a bellard
{"macw", 4,          two(0xa000, 0x0000), two(0xf100, 0x0900), "uNuoiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX.  */
3498 48024e4a bellard
{"macw", 4,          two(0xa000, 0x0200), two(0xf100, 0x0900), "uNuoMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX.  */
3499 48024e4a bellard
{"macw", 4,          two(0xa000, 0x0000), two(0xf100, 0x0f00), "uNuo4/RneG", mcfemac },/* Ry,Rx,<ea>,accX.  */
3500 48024e4a bellard
{"macw", 4,          two(0xa000, 0x0000), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX.  */
3501 48024e4a bellard
{"macw", 4,          two(0xa000, 0x0200), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX.  */
3502 48024e4a bellard
{"macw", 4,          two(0xa000, 0x0000), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX.  */
3503 48024e4a bellard
3504 48024e4a bellard
{"macl", 4,          two(0xa080, 0x0800), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
3505 48024e4a bellard
{"macl", 4,          two(0xa080, 0x0a00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
3506 48024e4a bellard
{"macl", 4,          two(0xa080, 0x0800), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac },
3507 48024e4a bellard
{"macl", 4,          two(0xa000, 0x0800), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
3508 48024e4a bellard
{"macl", 4,          two(0xa000, 0x0a00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
3509 48024e4a bellard
{"macl", 4,          two(0xa000, 0x0800), two(0xf1b0, 0x0800), "RMRm", mcfmac },
3510 48024e4a bellard
3511 48024e4a bellard
{"macl", 4,          two(0xa000, 0x0800), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
3512 48024e4a bellard
{"macl", 4,          two(0xa000, 0x0a00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
3513 48024e4a bellard
{"macl", 4,          two(0xa000, 0x0800), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
3514 48024e4a bellard
{"macl", 4,          two(0xa000, 0x0800), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
3515 48024e4a bellard
{"macl", 4,          two(0xa000, 0x0a00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
3516 48024e4a bellard
{"macl", 4,          two(0xa000, 0x0800), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
3517 48024e4a bellard
3518 48024e4a bellard
/* NOTE: The mcf5200 family programmer's reference manual does not
3519 48024e4a bellard
   indicate the byte form of the movea instruction is invalid (as it
3520 48024e4a bellard
   is on 68000 family cpus).  However, experiments on the 5202 yeild
3521 48024e4a bellard
   unexpected results.  The value is copied, but it is not sign extended
3522 48024e4a bellard
   (as is done with movea.w) and the top three bytes in the address
3523 48024e4a bellard
   register are not disturbed.  I don't know if this is the intended
3524 48024e4a bellard
   behavior --- it could be a hole in instruction decoding (Motorola
3525 48024e4a bellard
   decided not to trap all invalid instructions for performance reasons)
3526 48024e4a bellard
   --- but I suspect that it is not.
3527 48024e4a bellard

3528 48024e4a bellard
   I reported this to Motorola ISD Technical Communications Support,
3529 48024e4a bellard
   which replied that other coldfire assemblers reject movea.b.  For
3530 48024e4a bellard
   this reason I've decided to not allow moveab.
3531 48024e4a bellard

3532 48024e4a bellard
        jtc@cygnus.com - 97/01/24.  */
3533 48024e4a bellard
3534 48024e4a bellard
{"moveal", 2,        one(0020100),        one(0170700), "*lAd", m68000up | mcfisa_a },
3535 48024e4a bellard
{"moveaw", 2,        one(0030100),        one(0170700), "*wAd", m68000up | mcfisa_a },
3536 48024e4a bellard
3537 48024e4a bellard
{"movclrl", 2,        one(0xA1C0),        one(0xf9f0), "eFRs", mcfemac },
3538 48024e4a bellard
3539 48024e4a bellard
{"movec", 4,        one(0047173),        one(0177777), "R1Jj", m68010up | mcfisa_a },
3540 48024e4a bellard
{"movec", 4,        one(0047173),        one(0177777), "R1#j", m68010up | mcfisa_a },
3541 48024e4a bellard
{"movec", 4,        one(0047172),        one(0177777), "JjR1", m68010up },
3542 48024e4a bellard
{"movec", 4,        one(0047172),        one(0177777), "#jR1", m68010up },
3543 48024e4a bellard
3544 48024e4a bellard
{"movemw", 4,        one(0044200),        one(0177700), "Lw&s", m68000up },
3545 48024e4a bellard
{"movemw", 4,        one(0044240),        one(0177770), "lw-s", m68000up },
3546 48024e4a bellard
{"movemw", 4,        one(0044200),        one(0177700), "#w>s", m68000up },
3547 48024e4a bellard
{"movemw", 4,        one(0046200),        one(0177700), "<sLw", m68000up },
3548 48024e4a bellard
{"movemw", 4,        one(0046200),        one(0177700), "<s#w", m68000up },
3549 48024e4a bellard
{"moveml", 4,        one(0044300),        one(0177700), "Lw&s", m68000up },
3550 48024e4a bellard
{"moveml", 4,        one(0044340),        one(0177770), "lw-s", m68000up },
3551 48024e4a bellard
{"moveml", 4,        one(0044300),        one(0177700), "#w>s", m68000up },
3552 48024e4a bellard
{"moveml", 4,        one(0046300),        one(0177700), "<sLw", m68000up },
3553 48024e4a bellard
{"moveml", 4,        one(0046300),        one(0177700), "<s#w", m68000up },
3554 48024e4a bellard
/* FIXME: need specifier for mode 2 and 5 to simplify below insn patterns.  */
3555 48024e4a bellard
{"moveml", 4,        one(0044320),        one(0177770), "Lwas", mcfisa_a },
3556 48024e4a bellard
{"moveml", 4,        one(0044320),        one(0177770), "#was", mcfisa_a },
3557 48024e4a bellard
{"moveml", 4,        one(0044350),        one(0177770), "Lwds", mcfisa_a },
3558 48024e4a bellard
{"moveml", 4,        one(0044350),        one(0177770), "#wds", mcfisa_a },
3559 48024e4a bellard
{"moveml", 4,        one(0046320),        one(0177770), "asLw", mcfisa_a },
3560 48024e4a bellard
{"moveml", 4,        one(0046320),        one(0177770), "as#w", mcfisa_a },
3561 48024e4a bellard
{"moveml", 4,        one(0046350),        one(0177770), "dsLw", mcfisa_a },
3562 48024e4a bellard
{"moveml", 4,        one(0046350),        one(0177770), "ds#w", mcfisa_a },
3563 48024e4a bellard
3564 48024e4a bellard
{"movepw", 2,        one(0000410),        one(0170770), "dsDd", m68000up },
3565 48024e4a bellard
{"movepw", 2,        one(0000610),        one(0170770), "Ddds", m68000up },
3566 48024e4a bellard
{"movepl", 2,        one(0000510),        one(0170770), "dsDd", m68000up },
3567 48024e4a bellard
{"movepl", 2,        one(0000710),        one(0170770), "Ddds", m68000up },
3568 48024e4a bellard
3569 48024e4a bellard
{"moveq", 2,        one(0070000),        one(0170400), "MsDd", m68000up | mcfisa_a },
3570 48024e4a bellard
{"moveq", 2,        one(0070000),        one(0170400), "#BDd", m68000up | mcfisa_a },
3571 48024e4a bellard
3572 48024e4a bellard
/* The move opcode can generate the movea and moveq instructions.  */
3573 48024e4a bellard
{"moveb", 2,        one(0010000),        one(0170000), ";b$d", m68000up },
3574 48024e4a bellard
{"moveb", 2,        one(0010000),        one(0170070), "Ds$d", mcfisa_a },
3575 48024e4a bellard
{"moveb", 2,        one(0010020),        one(0170070), "as$d", mcfisa_a },
3576 48024e4a bellard
{"moveb", 2,        one(0010030),        one(0170070), "+s$d", mcfisa_a },
3577 48024e4a bellard
{"moveb", 2,        one(0010040),        one(0170070), "-s$d", mcfisa_a },
3578 48024e4a bellard
{"moveb", 2,        one(0010000),        one(0170000), "nsqd", mcfisa_a },
3579 48024e4a bellard
{"moveb", 2,        one(0010000),        one(0170700), "obDd", mcfisa_a },
3580 48024e4a bellard
{"moveb", 2,        one(0010200),        one(0170700), "obad", mcfisa_a },
3581 48024e4a bellard
{"moveb", 2,        one(0010300),        one(0170700), "ob+d", mcfisa_a },
3582 48024e4a bellard
{"moveb", 2,        one(0010400),        one(0170700), "ob-d", mcfisa_a },
3583 48024e4a bellard
{"moveb", 2,        one(0010000),        one(0170000), "obnd", mcfisa_b },
3584 48024e4a bellard
3585 48024e4a bellard
{"movew", 2,        one(0030000),        one(0170000), "*w%d", m68000up },
3586 48024e4a bellard
{"movew", 2,        one(0030000),        one(0170000), "ms%d", mcfisa_a },
3587 48024e4a bellard
{"movew", 2,        one(0030000),        one(0170000), "nspd", mcfisa_a },
3588 48024e4a bellard
{"movew", 2,        one(0030000),        one(0170000), "owmd", mcfisa_a },
3589 48024e4a bellard
{"movew", 2,        one(0030000),        one(0170000), "ownd", mcfisa_b },
3590 48024e4a bellard
{"movew", 2,        one(0040300),        one(0177700), "Ss$s", m68000up },
3591 48024e4a bellard
{"movew", 2,        one(0040300),        one(0177770), "SsDs", mcfisa_a },
3592 48024e4a bellard
{"movew", 2,        one(0041300),        one(0177700), "Cs$s", m68010up },
3593 48024e4a bellard
{"movew", 2,        one(0041300),        one(0177770), "CsDs", mcfisa_a },
3594 48024e4a bellard
{"movew", 2,        one(0042300),        one(0177700), ";wCd", m68000up },
3595 48024e4a bellard
{"movew", 2,        one(0042300),        one(0177700), "DsCd", mcfisa_a },
3596 48024e4a bellard
{"movew", 4,        one(0042374),        one(0177777), "#wCd", mcfisa_a },
3597 48024e4a bellard
{"movew", 2,        one(0043300),        one(0177700), ";wSd", m68000up },
3598 48024e4a bellard
{"movew", 2,        one(0043300),        one(0177700), "DsSd", mcfisa_a },
3599 48024e4a bellard
{"movew", 4,        one(0043374),        one(0177777), "#wSd", mcfisa_a },
3600 48024e4a bellard
3601 48024e4a bellard
{"movel", 2,        one(0070000),        one(0170400), "MsDd", m68000up | mcfisa_a },
3602 48024e4a bellard
{"movel", 2,        one(0020000),        one(0170000), "*l%d", m68000up },
3603 48024e4a bellard
{"movel", 2,        one(0020000),        one(0170000), "ms%d", mcfisa_a },
3604 48024e4a bellard
{"movel", 2,        one(0020000),        one(0170000), "nspd", mcfisa_a },
3605 48024e4a bellard
{"movel", 2,        one(0020000),        one(0170000), "olmd", mcfisa_a },
3606 48024e4a bellard
{"movel", 2,        one(0020000),        one(0170000), "olnd", mcfisa_b },
3607 48024e4a bellard
{"movel", 2,        one(0047140),        one(0177770), "AsUd", m68000up | mcfusp },
3608 48024e4a bellard
{"movel", 2,        one(0047150),        one(0177770), "UdAs", m68000up | mcfusp },
3609 48024e4a bellard
{"movel", 2,        one(0120600),        one(0177760), "EsRs", mcfmac },
3610 48024e4a bellard
{"movel", 2,        one(0120400),        one(0177760), "RsEs", mcfmac },
3611 48024e4a bellard
{"movel", 6,        one(0120474),        one(0177777), "#lEs", mcfmac },
3612 48024e4a bellard
{"movel", 2,        one(0124600),        one(0177760), "GsRs", mcfmac },
3613 48024e4a bellard
{"movel", 2,        one(0124400),        one(0177760), "RsGs", mcfmac },
3614 48024e4a bellard
{"movel", 6,        one(0124474),        one(0177777), "#lGs", mcfmac },
3615 48024e4a bellard
{"movel", 2,        one(0126600),        one(0177760), "HsRs", mcfmac },
3616 48024e4a bellard
{"movel", 2,        one(0126400),        one(0177760), "RsHs", mcfmac },
3617 48024e4a bellard
{"movel", 6,        one(0126474),        one(0177777), "#lHs", mcfmac },
3618 48024e4a bellard
{"movel", 2,        one(0124700),        one(0177777), "GsCs", mcfmac },
3619 48024e4a bellard
3620 48024e4a bellard
{"movel", 2,        one(0xa180),        one(0xf9f0), "eFRs", mcfemac }, /* ACCx,Rx.  */
3621 48024e4a bellard
{"movel", 2,        one(0xab80),        one(0xfbf0), "g]Rs", mcfemac }, /* ACCEXTx,Rx.  */
3622 48024e4a bellard
{"movel", 2,        one(0xa980),        one(0xfff0), "G-Rs", mcfemac }, /* macsr,Rx.  */
3623 48024e4a bellard
{"movel", 2,        one(0xad80),        one(0xfff0), "H-Rs", mcfemac }, /* mask,Rx.  */
3624 48024e4a bellard
{"movel", 2,        one(0xa110),        one(0xf9fc), "efeF", mcfemac }, /* ACCy,ACCx.  */
3625 48024e4a bellard
{"movel", 2,        one(0xa9c0),        one(0xffff), "G-C-", mcfemac }, /* macsr,ccr.  */
3626 48024e4a bellard
{"movel", 2,        one(0xa100),        one(0xf9f0), "RseF", mcfemac }, /* Rx,ACCx.  */
3627 48024e4a bellard
{"movel", 6,        one(0xa13c),        one(0xf9ff), "#leF", mcfemac }, /* #,ACCx.  */
3628 48024e4a bellard
{"movel", 2,        one(0xab00),        one(0xfbc0), "Rsg]", mcfemac }, /* Rx,ACCEXTx.  */
3629 48024e4a bellard
{"movel", 6,        one(0xab3c),        one(0xfbff), "#lg]", mcfemac }, /* #,ACCEXTx.  */
3630 48024e4a bellard
{"movel", 2,        one(0xa900),        one(0xffc0), "RsG-", mcfemac }, /* Rx,macsr.  */
3631 48024e4a bellard
{"movel", 6,        one(0xa93c),        one(0xffff), "#lG-", mcfemac }, /* #,macsr.  */
3632 48024e4a bellard
{"movel", 2,        one(0xad00),        one(0xffc0), "RsH-", mcfemac }, /* Rx,mask.  */
3633 48024e4a bellard
{"movel", 6,        one(0xad3c),        one(0xffff), "#lH-", mcfemac }, /* #,mask.  */
3634 48024e4a bellard
3635 48024e4a bellard
{"move", 2,        one(0030000),        one(0170000), "*w%d", m68000up },
3636 48024e4a bellard
{"move", 2,        one(0030000),        one(0170000), "ms%d", mcfisa_a },
3637 48024e4a bellard
{"move", 2,        one(0030000),        one(0170000), "nspd", mcfisa_a },
3638 48024e4a bellard
{"move", 2,        one(0030000),        one(0170000), "owmd", mcfisa_a },
3639 48024e4a bellard
{"move", 2,        one(0030000),        one(0170000), "ownd", mcfisa_b },
3640 48024e4a bellard
{"move", 2,        one(0040300),        one(0177700), "Ss$s", m68000up },
3641 48024e4a bellard
{"move", 2,        one(0040300),        one(0177770), "SsDs", mcfisa_a },
3642 48024e4a bellard
{"move", 2,        one(0041300),        one(0177700), "Cs$s", m68010up },
3643 48024e4a bellard
{"move", 2,        one(0041300),        one(0177770), "CsDs", mcfisa_a },
3644 48024e4a bellard
{"move", 2,        one(0042300),        one(0177700), ";wCd", m68000up },
3645 48024e4a bellard
{"move", 2,        one(0042300),        one(0177700), "DsCd", mcfisa_a },
3646 48024e4a bellard
{"move", 4,        one(0042374),        one(0177777), "#wCd", mcfisa_a },
3647 48024e4a bellard
{"move", 2,        one(0043300),        one(0177700), ";wSd", m68000up },
3648 48024e4a bellard
{"move", 2,        one(0043300),        one(0177700), "DsSd", mcfisa_a },
3649 48024e4a bellard
{"move", 4,        one(0043374),        one(0177777), "#wSd", mcfisa_a },
3650 48024e4a bellard
3651 48024e4a bellard
{"move", 2,        one(0047140),        one(0177770), "AsUd", m68000up },
3652 48024e4a bellard
{"move", 2,        one(0047150),        one(0177770), "UdAs", m68000up },
3653 48024e4a bellard
3654 48024e4a bellard
{"mov3ql", 2,        one(0120500),        one(0170700), "xd%s", mcfisa_b },
3655 48024e4a bellard
{"mvsb", 2,        one(0070400),        one(0170700), "*bDd", mcfisa_b },
3656 48024e4a bellard
{"mvsw", 2,        one(0070500),        one(0170700), "*wDd", mcfisa_b },
3657 48024e4a bellard
{"mvzb", 2,        one(0070600),        one(0170700), "*bDd", mcfisa_b },
3658 48024e4a bellard
{"mvzw", 2,        one(0070700),        one(0170700), "*wDd", mcfisa_b },
3659 48024e4a bellard
3660 48024e4a bellard
{"movesb", 4,        two(0007000, 0),     two(0177700, 07777), "~sR1", m68010up },
3661 48024e4a bellard
{"movesb", 4,        two(0007000, 04000), two(0177700, 07777), "R1~s", m68010up },
3662 48024e4a bellard
{"movesw", 4,        two(0007100, 0),     two(0177700, 07777), "~sR1", m68010up },
3663 48024e4a bellard
{"movesw", 4,        two(0007100, 04000), two(0177700, 07777), "R1~s", m68010up },
3664 48024e4a bellard
{"movesl", 4,        two(0007200, 0),     two(0177700, 07777), "~sR1", m68010up },
3665 48024e4a bellard
{"movesl", 4,        two(0007200, 04000), two(0177700, 07777), "R1~s", m68010up },
3666 48024e4a bellard
3667 48024e4a bellard
{"move16", 4,        two(0xf620, 0x8000), two(0xfff8, 0x8fff), "+s+1", m68040up },
3668 48024e4a bellard
{"move16", 2,        one(0xf600),                one(0xfff8), "+s_L", m68040up },
3669 48024e4a bellard
{"move16", 2,        one(0xf608),                one(0xfff8), "_L+s", m68040up },
3670 48024e4a bellard
{"move16", 2,        one(0xf610),                one(0xfff8), "as_L", m68040up },
3671 48024e4a bellard
{"move16", 2,        one(0xf618),                one(0xfff8), "_Las", m68040up },
3672 48024e4a bellard
3673 48024e4a bellard
{"msacw", 4,          two(0xa080, 0x0100), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac },
3674 48024e4a bellard
{"msacw", 4,          two(0xa080, 0x0300), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac },
3675 48024e4a bellard
{"msacw", 4,          two(0xa080, 0x0100), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac },
3676 48024e4a bellard
{"msacw", 4,          two(0xa000, 0x0100), two(0xf1b0, 0x0900), "uMumiI", mcfmac },
3677 48024e4a bellard
{"msacw", 4,          two(0xa000, 0x0300), two(0xf1b0, 0x0900), "uMumMh", mcfmac },
3678 48024e4a bellard
{"msacw", 4,          two(0xa000, 0x0100), two(0xf1b0, 0x0f00), "uMum", mcfmac },
3679 48024e4a bellard
3680 48024e4a bellard
{"msacw", 4,          two(0xa000, 0x0100), two(0xf100, 0x0900), "uMumiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX.  */
3681 48024e4a bellard
{"msacw", 4,          two(0xa000, 0x0300), two(0xf100, 0x0900), "uMumMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX.  */
3682 48024e4a bellard
{"msacw", 4,          two(0xa000, 0x0100), two(0xf100, 0x0f00), "uMum4/RneG", mcfemac },/* Ry,Rx,<ea>,accX.  */
3683 48024e4a bellard
{"msacw", 4,          two(0xa000, 0x0100), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX.  */
3684 48024e4a bellard
{"msacw", 4,          two(0xa000, 0x0300), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX.  */
3685 48024e4a bellard
{"msacw", 4,          two(0xa000, 0x0100), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX.  */
3686 48024e4a bellard
3687 48024e4a bellard
{"msacl", 4,          two(0xa080, 0x0900), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac },
3688 48024e4a bellard
{"msacl", 4,          two(0xa080, 0x0b00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac },
3689 48024e4a bellard
{"msacl", 4,          two(0xa080, 0x0900), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac },
3690 48024e4a bellard
{"msacl", 4,          two(0xa000, 0x0900), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac },
3691 48024e4a bellard
{"msacl", 4,          two(0xa000, 0x0b00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac },
3692 48024e4a bellard
{"msacl", 4,          two(0xa000, 0x0900), two(0xf1b0, 0x0800), "RMRm", mcfmac },
3693 48024e4a bellard
3694 48024e4a bellard
{"msacl", 4,          two(0xa000, 0x0900), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac },
3695 48024e4a bellard
{"msacl", 4,          two(0xa000, 0x0b00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac },
3696 48024e4a bellard
{"msacl", 4,          two(0xa000, 0x0900), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac },
3697 48024e4a bellard
{"msacl", 4,          two(0xa000, 0x0900), two(0xf130, 0x0900), "RMRmiIeH", mcfemac },
3698 48024e4a bellard
{"msacl", 4,          two(0xa000, 0x0b00), two(0xf130, 0x0900), "RMRmMheH", mcfemac },
3699 48024e4a bellard
{"msacl", 4,          two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac },
3700 48024e4a bellard
3701 48024e4a bellard
{"mulsw", 2,        one(0140700),                one(0170700), ";wDd", m68000up|mcfisa_a },
3702 48024e4a bellard
{"mulsl", 4,        two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
3703 48024e4a bellard
{"mulsl", 4,        two(0046000,004000), two(0177700,0107770), "qsD1", mcfisa_a },
3704 48024e4a bellard
{"mulsl", 4,        two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
3705 48024e4a bellard
3706 48024e4a bellard
{"muluw", 2,        one(0140300),                one(0170700), ";wDd", m68000up|mcfisa_a },
3707 48024e4a bellard
{"mulul", 4,        two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 },
3708 48024e4a bellard
{"mulul", 4,        two(0046000,000000), two(0177700,0107770), "qsD1", mcfisa_a },
3709 48024e4a bellard
{"mulul", 4,        two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 },
3710 48024e4a bellard
3711 48024e4a bellard
{"nbcd", 2,        one(0044000),        one(0177700), "$s", m68000up },
3712 48024e4a bellard
3713 48024e4a bellard
{"negb", 2,        one(0042000),        one(0177700), "$s", m68000up },
3714 48024e4a bellard
{"negw", 2,        one(0042100),        one(0177700), "$s", m68000up },
3715 48024e4a bellard
{"negl", 2,        one(0042200),        one(0177700), "$s", m68000up },
3716 48024e4a bellard
{"negl", 2,        one(0042200),        one(0177700), "Ds", mcfisa_a},
3717 48024e4a bellard
3718 48024e4a bellard
{"negxb", 2,        one(0040000),        one(0177700), "$s", m68000up },
3719 48024e4a bellard
{"negxw", 2,        one(0040100),        one(0177700), "$s", m68000up },
3720 48024e4a bellard
{"negxl", 2,        one(0040200),        one(0177700), "$s", m68000up },
3721 48024e4a bellard
{"negxl", 2,        one(0040200),        one(0177700), "Ds", mcfisa_a},
3722 48024e4a bellard
3723 48024e4a bellard
{"nop", 2,        one(0047161),        one(0177777), "", m68000up | mcfisa_a},
3724 48024e4a bellard
3725 48024e4a bellard
{"notb", 2,        one(0043000),        one(0177700), "$s", m68000up },
3726 48024e4a bellard
{"notw", 2,        one(0043100),        one(0177700), "$s", m68000up },
3727 48024e4a bellard
{"notl", 2,        one(0043200),        one(0177700), "$s", m68000up },
3728 48024e4a bellard
{"notl", 2,        one(0043200),        one(0177700), "Ds", mcfisa_a},
3729 48024e4a bellard
3730 48024e4a bellard
{"orib", 4,        one(0000000),        one(0177700), "#b$s", m68000up },
3731 48024e4a bellard
{"orib", 4,        one(0000074),        one(0177777), "#bCs", m68000up },
3732 48024e4a bellard
{"oriw", 4,        one(0000100),        one(0177700), "#w$s", m68000up },
3733 48024e4a bellard
{"oriw", 4,        one(0000174),        one(0177777), "#wSs", m68000up },
3734 48024e4a bellard
{"oril", 6,        one(0000200),        one(0177700), "#l$s", m68000up },
3735 48024e4a bellard
{"oril", 6,        one(0000200),        one(0177700), "#lDs", mcfisa_a },
3736 48024e4a bellard
{"ori", 4,        one(0000074),        one(0177777), "#bCs", m68000up },
3737 48024e4a bellard
{"ori", 4,        one(0000100),        one(0177700), "#w$s", m68000up },
3738 48024e4a bellard
{"ori", 4,        one(0000174),        one(0177777), "#wSs", m68000up },
3739 48024e4a bellard
3740 48024e4a bellard
/* The or opcode can generate the ori instruction.  */
3741 48024e4a bellard
{"orb", 4,        one(0000000),        one(0177700), "#b$s", m68000up },
3742 48024e4a bellard
{"orb", 4,        one(0000074),        one(0177777), "#bCs", m68000up },
3743 48024e4a bellard
{"orb", 2,        one(0100000),        one(0170700), ";bDd", m68000up },
3744 48024e4a bellard
{"orb", 2,        one(0100400),        one(0170700), "Dd~s", m68000up },
3745 48024e4a bellard
{"orw", 4,        one(0000100),        one(0177700), "#w$s", m68000up },
3746 48024e4a bellard
{"orw", 4,        one(0000174),        one(0177777), "#wSs", m68000up },
3747 48024e4a bellard
{"orw", 2,        one(0100100),        one(0170700), ";wDd", m68000up },
3748 48024e4a bellard
{"orw", 2,        one(0100500),        one(0170700), "Dd~s", m68000up },
3749 48024e4a bellard
{"orl", 6,        one(0000200),        one(0177700), "#l$s", m68000up },
3750 48024e4a bellard
{"orl", 6,        one(0000200),        one(0177700), "#lDs", mcfisa_a },
3751 48024e4a bellard
{"orl", 2,        one(0100200),        one(0170700), ";lDd", m68000up | mcfisa_a },
3752 48024e4a bellard
{"orl", 2,        one(0100600),        one(0170700), "Dd~s", m68000up | mcfisa_a },
3753 48024e4a bellard
{"or", 4,        one(0000074),        one(0177777), "#bCs", m68000up },
3754 48024e4a bellard
{"or", 4,        one(0000100),        one(0177700), "#w$s", m68000up },
3755 48024e4a bellard
{"or", 4,        one(0000174),        one(0177777), "#wSs", m68000up },
3756 48024e4a bellard
{"or", 2,        one(0100100),        one(0170700), ";wDd", m68000up },
3757 48024e4a bellard
{"or", 2,        one(0100500),        one(0170700), "Dd~s", m68000up },
3758 48024e4a bellard
3759 48024e4a bellard
{"pack", 4,        one(0100500),        one(0170770), "DsDd#w", m68020up },
3760 48024e4a bellard
{"pack", 4,        one(0100510),        one(0170770), "-s-d#w", m68020up },
3761 48024e4a bellard
3762 48024e4a bellard
{"pbac", 2,        one(0xf087),        one(0xffbf), "Bc", m68851 },
3763 48024e4a bellard
{"pbacw", 2,        one(0xf087),        one(0xffff), "BW", m68851 },
3764 48024e4a bellard
{"pbas", 2,        one(0xf086),        one(0xffbf), "Bc", m68851 },
3765 48024e4a bellard
{"pbasw", 2,        one(0xf086),        one(0xffff), "BW", m68851 },
3766 48024e4a bellard
{"pbbc", 2,        one(0xf081),        one(0xffbf), "Bc", m68851 },
3767 48024e4a bellard
{"pbbcw", 2,        one(0xf081),        one(0xffff), "BW", m68851 },
3768 48024e4a bellard
{"pbbs", 2,        one(0xf080),        one(0xffbf), "Bc", m68851 },
3769 48024e4a bellard
{"pbbsw", 2,        one(0xf080),        one(0xffff), "BW", m68851 },
3770 48024e4a bellard
{"pbcc", 2,        one(0xf08f),        one(0xffbf), "Bc", m68851 },
3771 48024e4a bellard
{"pbccw", 2,        one(0xf08f),        one(0xffff), "BW", m68851 },
3772 48024e4a bellard
{"pbcs", 2,        one(0xf08e),        one(0xffbf), "Bc", m68851 },
3773 48024e4a bellard
{"pbcsw", 2,        one(0xf08e),        one(0xffff), "BW", m68851 },
3774 48024e4a bellard
{"pbgc", 2,        one(0xf08d),        one(0xffbf), "Bc", m68851 },
3775 48024e4a bellard
{"pbgcw", 2,        one(0xf08d),        one(0xffff), "BW", m68851 },
3776 48024e4a bellard
{"pbgs", 2,        one(0xf08c),        one(0xffbf), "Bc", m68851 },
3777 48024e4a bellard
{"pbgsw", 2,        one(0xf08c),        one(0xffff), "BW", m68851 },
3778 48024e4a bellard
{"pbic", 2,        one(0xf08b),        one(0xffbf), "Bc", m68851 },
3779 48024e4a bellard
{"pbicw", 2,        one(0xf08b),        one(0xffff), "BW", m68851 },
3780 48024e4a bellard
{"pbis", 2,        one(0xf08a),        one(0xffbf), "Bc", m68851 },
3781 48024e4a bellard
{"pbisw", 2,        one(0xf08a),        one(0xffff), "BW", m68851 },
3782 48024e4a bellard
{"pblc", 2,        one(0xf083),        one(0xffbf), "Bc", m68851 },
3783 48024e4a bellard
{"pblcw", 2,        one(0xf083),        one(0xffff), "BW", m68851 },
3784 48024e4a bellard
{"pbls", 2,        one(0xf082),        one(0xffbf), "Bc", m68851 },
3785 48024e4a bellard
{"pblsw", 2,        one(0xf082),        one(0xffff), "BW", m68851 },
3786 48024e4a bellard
{"pbsc", 2,        one(0xf085),        one(0xffbf), "Bc", m68851 },
3787 48024e4a bellard
{"pbscw", 2,        one(0xf085),        one(0xffff), "BW", m68851 },
3788 48024e4a bellard
{"pbss", 2,        one(0xf084),        one(0xffbf), "Bc", m68851 },
3789 48024e4a bellard
{"pbssw", 2,        one(0xf084),        one(0xffff), "BW", m68851 },
3790 48024e4a bellard
{"pbwc", 2,        one(0xf089),        one(0xffbf), "Bc", m68851 },
3791 48024e4a bellard
{"pbwcw", 2,        one(0xf089),        one(0xffff), "BW", m68851 },
3792 48024e4a bellard
{"pbws", 2,        one(0xf088),        one(0xffbf), "Bc", m68851 },
3793 48024e4a bellard
{"pbwsw", 2,        one(0xf088),        one(0xffff), "BW", m68851 },
3794 48024e4a bellard
3795 48024e4a bellard
{"pdbac", 4,        two(0xf048, 0x0007),        two(0xfff8, 0xffff), "DsBw", m68851 },
3796 48024e4a bellard
{"pdbas", 4,        two(0xf048, 0x0006),        two(0xfff8, 0xffff), "DsBw", m68851 },
3797 48024e4a bellard
{"pdbbc", 4,        two(0xf048, 0x0001),        two(0xfff8, 0xffff), "DsBw", m68851 },
3798 48024e4a bellard
{"pdbbs", 4,        two(0xf048, 0x0000),        two(0xfff8, 0xffff), "DsBw", m68851 },
3799 48024e4a bellard
{"pdbcc", 4,        two(0xf048, 0x000f),        two(0xfff8, 0xffff), "DsBw", m68851 },
3800 48024e4a bellard
{"pdbcs", 4,        two(0xf048, 0x000e),        two(0xfff8, 0xffff), "DsBw", m68851 },
3801 48024e4a bellard
{"pdbgc", 4,        two(0xf048, 0x000d),        two(0xfff8, 0xffff), "DsBw", m68851 },
3802 48024e4a bellard
{"pdbgs", 4,        two(0xf048, 0x000c),        two(0xfff8, 0xffff), "DsBw", m68851 },
3803 48024e4a bellard
{"pdbic", 4,        two(0xf048, 0x000b),        two(0xfff8, 0xffff), "DsBw", m68851 },
3804 48024e4a bellard
{"pdbis", 4,        two(0xf048, 0x000a),        two(0xfff8, 0xffff), "DsBw", m68851 },
3805 48024e4a bellard
{"pdblc", 4,        two(0xf048, 0x0003),        two(0xfff8, 0xffff), "DsBw", m68851 },
3806 48024e4a bellard
{"pdbls", 4,        two(0xf048, 0x0002),        two(0xfff8, 0xffff), "DsBw", m68851 },
3807 48024e4a bellard
{"pdbsc", 4,        two(0xf048, 0x0005),        two(0xfff8, 0xffff), "DsBw", m68851 },
3808 48024e4a bellard
{"pdbss", 4,        two(0xf048, 0x0004),        two(0xfff8, 0xffff), "DsBw", m68851 },
3809 48024e4a bellard
{"pdbwc", 4,        two(0xf048, 0x0009),        two(0xfff8, 0xffff), "DsBw", m68851 },
3810 48024e4a bellard
{"pdbws", 4,        two(0xf048, 0x0008),        two(0xfff8, 0xffff), "DsBw", m68851 },
3811 48024e4a bellard
3812 48024e4a bellard
{"pea", 2,        one(0044100),                one(0177700), "!s", m68000up|mcfisa_a },
3813 48024e4a bellard
3814 48024e4a bellard
{"pflusha", 2,        one(0xf518),                one(0xfff8), "", m68040up },
3815 48024e4a bellard
{"pflusha", 4,        two(0xf000,0x2400), two(0xffff,0xffff), "", m68030 | m68851 },
3816 48024e4a bellard
3817 48024e4a bellard
{"pflush", 4,   two(0xf000,0x3010), two(0xffc0,0xfe10), "T3T9", m68030|m68851 },
3818 48024e4a bellard
{"pflush", 4,   two(0xf000,0x3810), two(0xffc0,0xfe10), "T3T9&s", m68030|m68851 },
3819 48024e4a bellard
{"pflush", 4,   two(0xf000,0x3008), two(0xffc0,0xfe18), "D3T9", m68030|m68851 },
3820 48024e4a bellard
{"pflush", 4,   two(0xf000,0x3808), two(0xffc0,0xfe18), "D3T9&s", m68030|m68851 },
3821 48024e4a bellard
{"pflush", 4,   two(0xf000,0x3000), two(0xffc0,0xfe1e), "f3T9", m68030|m68851 },
3822 48024e4a bellard
{"pflush", 4,   two(0xf000,0x3800), two(0xffc0,0xfe1e), "f3T9&s", m68030|m68851 },
3823 48024e4a bellard
{"pflush", 2,        one(0xf508),                one(0xfff8), "as", m68040up },
3824 48024e4a bellard
{"pflush", 2,        one(0xf508),                one(0xfff8), "As", m68040up },
3825 48024e4a bellard
3826 48024e4a bellard
{"pflushan", 2,        one(0xf510),                one(0xfff8), "", m68040up },
3827 48024e4a bellard
{"pflushn", 2,        one(0xf500),                one(0xfff8), "as", m68040up },
3828 48024e4a bellard
{"pflushn", 2,        one(0xf500),                one(0xfff8), "As", m68040up },
3829 48024e4a bellard
3830 48024e4a bellard
{"pflushr", 4,        two(0xf000, 0xa000), two(0xffc0, 0xffff), "|s", m68851 },
3831 48024e4a bellard
3832 48024e4a bellard
{"pflushs", 4,        two(0xf000, 0x3410), two(0xfff8, 0xfe10), "T3T9", m68851 },
3833 48024e4a bellard
{"pflushs", 4,        two(0xf000, 0x3c10), two(0xfff8, 0xfe10), "T3T9&s", m68851 },
3834 48024e4a bellard
{"pflushs", 4,        two(0xf000, 0x3408), two(0xfff8, 0xfe18), "D3T9", m68851 },
3835 48024e4a bellard
{"pflushs", 4,        two(0xf000, 0x3c08), two(0xfff8, 0xfe18), "D3T9&s", m68851 },
3836 48024e4a bellard
{"pflushs", 4,        two(0xf000, 0x3400), two(0xfff8, 0xfe1e), "f3T9", m68851 },
3837 48024e4a bellard
{"pflushs", 4,        two(0xf000, 0x3c00), two(0xfff8, 0xfe1e), "f3T9&s", m68851 },
3838 48024e4a bellard
3839 48024e4a bellard
{"ploadr", 4,   two(0xf000,0x2210), two(0xffc0,0xfff0), "T3&s", m68030|m68851 },
3840 48024e4a bellard
{"ploadr", 4,   two(0xf000,0x2208), two(0xffc0,0xfff8), "D3&s", m68030|m68851 },
3841 48024e4a bellard
{"ploadr", 4,   two(0xf000,0x2200), two(0xffc0,0xfffe), "f3&s", m68030|m68851 },
3842 48024e4a bellard
{"ploadw", 4,   two(0xf000,0x2010), two(0xffc0,0xfff0), "T3&s", m68030|m68851 },
3843 48024e4a bellard
{"ploadw", 4,   two(0xf000,0x2008), two(0xffc0,0xfff8), "D3&s", m68030|m68851 },
3844 48024e4a bellard
{"ploadw", 4,   two(0xf000,0x2000), two(0xffc0,0xfffe), "f3&s", m68030|m68851 },
3845 48024e4a bellard
3846 48024e4a bellard
{"plpar", 2,        one(0xf5c8),                one(0xfff8), "as", m68060 },
3847 48024e4a bellard
{"plpaw", 2,        one(0xf588),                one(0xfff8), "as", m68060 },
3848 48024e4a bellard
3849 48024e4a bellard
{"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xffff), "*l08", m68030|m68851 },
3850 48024e4a bellard
{"pmove", 4,    two(0xf000,0x5c00), two(0xffc0,0xffff), "*w18", m68851 },
3851 48024e4a bellard
{"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xe3ff), "*b28", m68851 },
3852 48024e4a bellard
{"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xffff), "08%s", m68030|m68851 },
3853 48024e4a bellard
{"pmove", 4,    two(0xf000,0x5e00), two(0xffc0,0xffff), "18%s", m68851 },
3854 48024e4a bellard
{"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xe3ff), "28%s", m68851 },
3855 48024e4a bellard
{"pmove", 4,    two(0xf000,0x4000), two(0xffc0,0xe3ff), "|sW8", m68030|m68851 },
3856 48024e4a bellard
{"pmove", 4,    two(0xf000,0x4200), two(0xffc0,0xe3ff), "W8~s", m68030|m68851 },
3857 48024e4a bellard
{"pmove", 4,    two(0xf000,0x6200), two(0xffc0,0xe3e3), "*wX3", m68851 },
3858 48024e4a bellard
{"pmove", 4,    two(0xf000,0x6000), two(0xffc0,0xe3e3), "X3%s", m68851 },
3859 48024e4a bellard
{"pmove", 4,    two(0xf000,0x6000), two(0xffc0,0xffff), "*wY8", m68030|m68851 },
3860 48024e4a bellard
{"pmove", 4,    two(0xf000,0x6200), two(0xffc0,0xffff), "Y8%s", m68030|m68851 },
3861 48024e4a bellard
{"pmove", 4,    two(0xf000,0x6600), two(0xffc0,0xffff), "Z8%s", m68851 },
3862 48024e4a bellard
{"pmove", 4,    two(0xf000,0x0800), two(0xffc0,0xfbff), "*l38", m68030 },
3863 48024e4a bellard
{"pmove", 4,    two(0xf000,0x0a00), two(0xffc0,0xfbff), "38%s", m68030 },
3864 48024e4a bellard
3865 48024e4a bellard
{"pmovefd", 4,        two(0xf000, 0x4100),        two(0xffc0, 0xe3ff), "*l08", m68030 },
3866 48024e4a bellard
{"pmovefd", 4,        two(0xf000, 0x4100),        two(0xffc0, 0xe3ff), "|sW8", m68030 },
3867 48024e4a bellard
{"pmovefd", 4,        two(0xf000, 0x0900),        two(0xffc0, 0xfbff), "*l38", m68030 },
3868 48024e4a bellard
3869 48024e4a bellard
{"prestore", 2,        one(0xf140),                one(0xffc0), "<s", m68851 },
3870 48024e4a bellard
3871 48024e4a bellard
{"psave", 2,        one(0xf100),                one(0xffc0), ">s", m68851 },
3872 48024e4a bellard
3873 48024e4a bellard
{"psac", 4,        two(0xf040, 0x0007),        two(0xffc0, 0xffff), "$s", m68851 },
3874 48024e4a bellard
{"psas", 4,        two(0xf040, 0x0006),        two(0xffc0, 0xffff), "$s", m68851 },
3875 48024e4a bellard
{"psbc", 4,        two(0xf040, 0x0001),        two(0xffc0, 0xffff), "$s", m68851 },
3876 48024e4a bellard
{"psbs", 4,        two(0xf040, 0x0000),        two(0xffc0, 0xffff), "$s", m68851 },
3877 48024e4a bellard
{"pscc", 4,        two(0xf040, 0x000f),        two(0xffc0, 0xffff), "$s", m68851 },
3878 48024e4a bellard
{"pscs", 4,        two(0xf040, 0x000e),        two(0xffc0, 0xffff), "$s", m68851 },
3879 48024e4a bellard
{"psgc", 4,        two(0xf040, 0x000d),        two(0xffc0, 0xffff), "$s", m68851 },
3880 48024e4a bellard
{"psgs", 4,        two(0xf040, 0x000c),        two(0xffc0, 0xffff), "$s", m68851 },
3881 48024e4a bellard
{"psic", 4,        two(0xf040, 0x000b),        two(0xffc0, 0xffff), "$s", m68851 },
3882 48024e4a bellard
{"psis", 4,        two(0xf040, 0x000a),        two(0xffc0, 0xffff), "$s", m68851 },
3883 48024e4a bellard
{"pslc", 4,        two(0xf040, 0x0003),        two(0xffc0, 0xffff), "$s", m68851 },
3884 48024e4a bellard
{"psls", 4,        two(0xf040, 0x0002),        two(0xffc0, 0xffff), "$s", m68851 },
3885 48024e4a bellard
{"pssc", 4,        two(0xf040, 0x0005),        two(0xffc0, 0xffff), "$s", m68851 },
3886 48024e4a bellard
{"psss", 4,        two(0xf040, 0x0004),        two(0xffc0, 0xffff), "$s", m68851 },
3887 48024e4a bellard
{"pswc", 4,        two(0xf040, 0x0009),        two(0xffc0, 0xffff), "$s", m68851 },
3888 48024e4a bellard
{"psws", 4,        two(0xf040, 0x0008),        two(0xffc0, 0xffff), "$s", m68851 },
3889 48024e4a bellard
3890 48024e4a bellard
{"ptestr", 4,         two(0xf000,0x8210), two(0xffc0, 0xe3f0), "T3&st8", m68030|m68851 },
3891 48024e4a bellard
{"ptestr", 4,         two(0xf000,0x8310), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 },
3892 48024e4a bellard
{"ptestr", 4,         two(0xf000,0x8208), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 },
3893 48024e4a bellard
{"ptestr", 4,         two(0xf000,0x8308), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 },
3894 48024e4a bellard
{"ptestr", 4,         two(0xf000,0x8200), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 },
3895 48024e4a bellard
{"ptestr", 4,         two(0xf000,0x8300), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 },
3896 48024e4a bellard
{"ptestr", 2,        one(0xf568),                one(0xfff8), "as", m68040 },
3897 48024e4a bellard
3898 48024e4a bellard
{"ptestw", 4,         two(0xf000,0x8010), two(0xffc0,0xe3f0), "T3&st8", m68030|m68851 },
3899 48024e4a bellard
{"ptestw", 4,         two(0xf000,0x8110), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 },
3900 48024e4a bellard
{"ptestw", 4,         two(0xf000,0x8008), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 },
3901 48024e4a bellard
{"ptestw", 4,         two(0xf000,0x8108), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 },
3902 48024e4a bellard
{"ptestw", 4,         two(0xf000,0x8000), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 },
3903 48024e4a bellard
{"ptestw", 4,         two(0xf000,0x8100), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 },
3904 48024e4a bellard
{"ptestw", 2,        one(0xf548),                one(0xfff8), "as", m68040 },
3905 48024e4a bellard
3906 48024e4a bellard
{"ptrapacw", 6,        two(0xf07a, 0x0007),        two(0xffff, 0xffff), "#w", m68851 },
3907 48024e4a bellard
{"ptrapacl", 6,        two(0xf07b, 0x0007),        two(0xffff, 0xffff), "#l", m68851 },
3908 48024e4a bellard
{"ptrapac", 4,        two(0xf07c, 0x0007),        two(0xffff, 0xffff), "",   m68851 },
3909 48024e4a bellard
3910 48024e4a bellard
{"ptrapasw", 6,        two(0xf07a, 0x0006),        two(0xffff, 0xffff), "#w", m68851 },
3911 48024e4a bellard
{"ptrapasl", 6,        two(0xf07b, 0x0006),        two(0xffff, 0xffff), "#l", m68851 },
3912 48024e4a bellard
{"ptrapas", 4,        two(0xf07c, 0x0006),        two(0xffff, 0xffff), "",   m68851 },
3913 48024e4a bellard
3914 48024e4a bellard
{"ptrapbcw", 6,        two(0xf07a, 0x0001),        two(0xffff, 0xffff), "#w", m68851 },
3915 48024e4a bellard
{"ptrapbcl", 6,        two(0xf07b, 0x0001),        two(0xffff, 0xffff), "#l", m68851 },
3916 48024e4a bellard
{"ptrapbc", 4,        two(0xf07c, 0x0001),        two(0xffff, 0xffff), "",   m68851 },
3917 48024e4a bellard
3918 48024e4a bellard
{"ptrapbsw", 6,        two(0xf07a, 0x0000),        two(0xffff, 0xffff), "#w", m68851 },
3919 48024e4a bellard
{"ptrapbsl", 6,        two(0xf07b, 0x0000),        two(0xffff, 0xffff), "#l", m68851 },
3920 48024e4a bellard
{"ptrapbs", 4,        two(0xf07c, 0x0000),        two(0xffff, 0xffff), "",   m68851 },
3921 48024e4a bellard
3922 48024e4a bellard
{"ptrapccw", 6,        two(0xf07a, 0x000f),        two(0xffff, 0xffff), "#w", m68851 },
3923 48024e4a bellard
{"ptrapccl", 6,        two(0xf07b, 0x000f),        two(0xffff, 0xffff), "#l", m68851 },
3924 48024e4a bellard
{"ptrapcc", 4,        two(0xf07c, 0x000f),        two(0xffff, 0xffff), "",   m68851 },
3925 48024e4a bellard
3926 48024e4a bellard
{"ptrapcsw", 6,        two(0xf07a, 0x000e),        two(0xffff, 0xffff), "#w", m68851 },
3927 48024e4a bellard
{"ptrapcsl", 6,        two(0xf07b, 0x000e),        two(0xffff, 0xffff), "#l", m68851 },
3928 48024e4a bellard
{"ptrapcs", 4,        two(0xf07c, 0x000e),        two(0xffff, 0xffff), "",   m68851 },
3929 48024e4a bellard
3930 48024e4a bellard
{"ptrapgcw", 6,        two(0xf07a, 0x000d),        two(0xffff, 0xffff), "#w", m68851 },
3931 48024e4a bellard
{"ptrapgcl", 6,        two(0xf07b, 0x000d),        two(0xffff, 0xffff), "#l", m68851 },
3932 48024e4a bellard
{"ptrapgc", 4,        two(0xf07c, 0x000d),        two(0xffff, 0xffff), "",   m68851 },
3933 48024e4a bellard
3934 48024e4a bellard
{"ptrapgsw", 6,        two(0xf07a, 0x000c),        two(0xffff, 0xffff), "#w", m68851 },
3935 48024e4a bellard
{"ptrapgsl", 6,        two(0xf07b, 0x000c),        two(0xffff, 0xffff), "#l", m68851 },
3936 48024e4a bellard
{"ptrapgs", 4,        two(0xf07c, 0x000c),        two(0xffff, 0xffff), "",   m68851 },
3937 48024e4a bellard
3938 48024e4a bellard
{"ptrapicw", 6,        two(0xf07a, 0x000b),        two(0xffff, 0xffff), "#w", m68851 },
3939 48024e4a bellard
{"ptrapicl", 6,        two(0xf07b, 0x000b),        two(0xffff, 0xffff), "#l", m68851 },
3940 48024e4a bellard
{"ptrapic", 4,        two(0xf07c, 0x000b),        two(0xffff, 0xffff), "",   m68851 },
3941 48024e4a bellard
3942 48024e4a bellard
{"ptrapisw", 6,        two(0xf07a, 0x000a),        two(0xffff, 0xffff), "#w", m68851 },
3943 48024e4a bellard
{"ptrapisl", 6,        two(0xf07b, 0x000a),        two(0xffff, 0xffff), "#l", m68851 },
3944 48024e4a bellard
{"ptrapis", 4,        two(0xf07c, 0x000a),        two(0xffff, 0xffff), "",   m68851 },
3945 48024e4a bellard
3946 48024e4a bellard
{"ptraplcw", 6,        two(0xf07a, 0x0003),        two(0xffff, 0xffff), "#w", m68851 },
3947 48024e4a bellard
{"ptraplcl", 6,        two(0xf07b, 0x0003),        two(0xffff, 0xffff), "#l", m68851 },
3948 48024e4a bellard
{"ptraplc", 4,        two(0xf07c, 0x0003),        two(0xffff, 0xffff), "",   m68851 },
3949 48024e4a bellard
3950 48024e4a bellard
{"ptraplsw", 6,        two(0xf07a, 0x0002),        two(0xffff, 0xffff), "#w", m68851 },
3951 48024e4a bellard
{"ptraplsl", 6,        two(0xf07b, 0x0002),        two(0xffff, 0xffff), "#l", m68851 },
3952 48024e4a bellard
{"ptrapls", 4,        two(0xf07c, 0x0002),        two(0xffff, 0xffff), "",   m68851 },
3953 48024e4a bellard
3954 48024e4a bellard
{"ptrapscw", 6,        two(0xf07a, 0x0005),        two(0xffff, 0xffff), "#w", m68851 },
3955 48024e4a bellard
{"ptrapscl", 6,        two(0xf07b, 0x0005),        two(0xffff, 0xffff), "#l", m68851 },
3956 48024e4a bellard
{"ptrapsc", 4,        two(0xf07c, 0x0005),        two(0xffff, 0xffff), "",   m68851 },
3957 48024e4a bellard
3958 48024e4a bellard
{"ptrapssw", 6,        two(0xf07a, 0x0004),        two(0xffff, 0xffff), "#w", m68851 },
3959 48024e4a bellard
{"ptrapssl", 6,        two(0xf07b, 0x0004),        two(0xffff, 0xffff), "#l", m68851 },
3960 48024e4a bellard
{"ptrapss", 4,        two(0xf07c, 0x0004),        two(0xffff, 0xffff), "",   m68851 },
3961 48024e4a bellard
3962 48024e4a bellard
{"ptrapwcw", 6,        two(0xf07a, 0x0009),        two(0xffff, 0xffff), "#w", m68851 },
3963 48024e4a bellard
{"ptrapwcl", 6,        two(0xf07b, 0x0009),        two(0xffff, 0xffff), "#l", m68851 },
3964 48024e4a bellard
{"ptrapwc", 4,        two(0xf07c, 0x0009),        two(0xffff, 0xffff), "",   m68851 },
3965 48024e4a bellard
3966 48024e4a bellard
{"ptrapwsw", 6,        two(0xf07a, 0x0008),        two(0xffff, 0xffff), "#w", m68851 },
3967 48024e4a bellard
{"ptrapwsl", 6,        two(0xf07b, 0x0008),        two(0xffff, 0xffff), "#l", m68851 },
3968 48024e4a bellard
{"ptrapws", 4,        two(0xf07c, 0x0008),        two(0xffff, 0xffff), "",   m68851 },
3969 48024e4a bellard
3970 48024e4a bellard
{"pulse", 2,        one(0045314),                one(0177777), "", m68060 | mcfisa_a },
3971 48024e4a bellard
3972 48024e4a bellard
{"pvalid", 4,        two(0xf000, 0x2800),        two(0xffc0, 0xffff), "Vs&s", m68851 },
3973 48024e4a bellard
{"pvalid", 4,        two(0xf000, 0x2c00),        two(0xffc0, 0xfff8), "A3&s", m68851 },
3974 48024e4a bellard
3975 48024e4a bellard
  /* FIXME: don't allow Dw==Dx. */
3976 48024e4a bellard
{"remsl", 4,    two(0x4c40, 0x0800),    two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv },
3977 48024e4a bellard
{"remul", 4,    two(0x4c40, 0x0000),    two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv },
3978 48024e4a bellard
3979 48024e4a bellard
{"reset", 2,        one(0047160),                one(0177777), "", m68000up },
3980 48024e4a bellard
3981 48024e4a bellard
{"rolb", 2,        one(0160430),                one(0170770), "QdDs", m68000up },
3982 48024e4a bellard
{"rolb", 2,        one(0160470),                one(0170770), "DdDs", m68000up },
3983 48024e4a bellard
{"rolw", 2,        one(0160530),                one(0170770), "QdDs", m68000up },
3984 48024e4a bellard
{"rolw", 2,        one(0160570),                one(0170770), "DdDs", m68000up },
3985 48024e4a bellard
{"rolw", 2,        one(0163700),                one(0177700), "~s",   m68000up },
3986 48024e4a bellard
{"roll", 2,        one(0160630),                one(0170770), "QdDs", m68000up },
3987 48024e4a bellard
{"roll", 2,        one(0160670),                one(0170770), "DdDs", m68000up },
3988 48024e4a bellard
3989 48024e4a bellard
{"rorb", 2,        one(0160030),                one(0170770), "QdDs", m68000up },
3990 48024e4a bellard
{"rorb", 2,        one(0160070),                one(0170770), "DdDs", m68000up },
3991 48024e4a bellard
{"rorw", 2,        one(0160130),                one(0170770), "QdDs", m68000up },
3992 48024e4a bellard
{"rorw", 2,        one(0160170),                one(0170770), "DdDs", m68000up },
3993 48024e4a bellard
{"rorw", 2,        one(0163300),                one(0177700), "~s",   m68000up },
3994 48024e4a bellard
{"rorl", 2,        one(0160230),                one(0170770), "QdDs", m68000up },
3995 48024e4a bellard
{"rorl", 2,        one(0160270),                one(0170770), "DdDs", m68000up },
3996 48024e4a bellard
3997 48024e4a bellard
{"roxlb", 2,        one(0160420),                one(0170770), "QdDs", m68000up },
3998 48024e4a bellard
{"roxlb", 2,        one(0160460),                one(0170770), "DdDs", m68000up },
3999 48024e4a bellard
{"roxlw", 2,        one(0160520),                one(0170770), "QdDs", m68000up },
4000 48024e4a bellard
{"roxlw", 2,        one(0160560),                one(0170770), "DdDs", m68000up },
4001 48024e4a bellard
{"roxlw", 2,        one(0162700),                one(0177700), "~s",   m68000up },
4002 48024e4a bellard
{"roxll", 2,        one(0160620),                one(0170770), "QdDs", m68000up },
4003 48024e4a bellard
{"roxll", 2,        one(0160660),                one(0170770), "DdDs", m68000up },
4004 48024e4a bellard
4005 48024e4a bellard
{"roxrb", 2,        one(0160020),                one(0170770), "QdDs", m68000up },
4006 48024e4a bellard
{"roxrb", 2,        one(0160060),                one(0170770), "DdDs", m68000up },
4007 48024e4a bellard
{"roxrw", 2,        one(0160120),                one(0170770), "QdDs", m68000up },
4008 48024e4a bellard
{"roxrw", 2,        one(0160160),                one(0170770), "DdDs", m68000up },
4009 48024e4a bellard
{"roxrw", 2,        one(0162300),                one(0177700), "~s",   m68000up },
4010 48024e4a bellard
{"roxrl", 2,        one(0160220),                one(0170770), "QdDs", m68000up },
4011 48024e4a bellard
{"roxrl", 2,        one(0160260),                one(0170770), "DdDs", m68000up },
4012 48024e4a bellard
4013 48024e4a bellard
{"rtd", 4,        one(0047164),                one(0177777), "#w", m68010up },
4014 3b46e624 ths
4015 48024e4a bellard
{"rte", 2,        one(0047163),                one(0177777), "",   m68000up | mcfisa_a },
4016 3b46e624 ths
4017 48024e4a bellard
{"rtm", 2,        one(0003300),                one(0177760), "Rs", m68020 },
4018 3b46e624 ths
4019 48024e4a bellard
{"rtr", 2,        one(0047167),                one(0177777), "",   m68000up },
4020 3b46e624 ths
4021 48024e4a bellard
{"rts", 2,        one(0047165),                one(0177777), "",   m68000up | mcfisa_a },
4022 48024e4a bellard
4023 48024e4a bellard
{"satsl", 2,        one(0046200),                one(0177770), "Ds", mcfisa_b },
4024 48024e4a bellard
4025 48024e4a bellard
{"sbcd", 2,        one(0100400),                one(0170770), "DsDd", m68000up },
4026 48024e4a bellard
{"sbcd", 2,        one(0100410),                one(0170770), "-s-d", m68000up },
4027 48024e4a bellard
4028 48024e4a bellard
{"scc", 2,        one(0052300),        one(0177700), "$s", m68000up },
4029 48024e4a bellard
{"scc", 2,        one(0052300),        one(0177700), "Ds", mcfisa_a },
4030 48024e4a bellard
{"scs", 2,        one(0052700),        one(0177700), "$s", m68000up },
4031 48024e4a bellard
{"scs", 2,        one(0052700),        one(0177700), "Ds", mcfisa_a },
4032 48024e4a bellard
{"seq", 2,        one(0053700),        one(0177700), "$s", m68000up },
4033 48024e4a bellard
{"seq", 2,        one(0053700),        one(0177700), "Ds", mcfisa_a },
4034 48024e4a bellard
{"sf", 2,        one(0050700),        one(0177700), "$s", m68000up },
4035 48024e4a bellard
{"sf", 2,        one(0050700),        one(0177700), "Ds", mcfisa_a },
4036 48024e4a bellard
{"sge", 2,        one(0056300),        one(0177700), "$s", m68000up },
4037 48024e4a bellard
{"sge", 2,        one(0056300),        one(0177700), "Ds", mcfisa_a },
4038 48024e4a bellard
{"sgt", 2,        one(0057300),        one(0177700), "$s", m68000up },
4039 48024e4a bellard
{"sgt", 2,        one(0057300),        one(0177700), "Ds", mcfisa_a },
4040 48024e4a bellard
{"shi", 2,        one(0051300),        one(0177700), "$s", m68000up },
4041 48024e4a bellard
{"shi", 2,        one(0051300),        one(0177700), "Ds", mcfisa_a },
4042 48024e4a bellard
{"sle", 2,        one(0057700),        one(0177700), "$s", m68000up },
4043 48024e4a bellard
{"sle", 2,        one(0057700),        one(0177700), "Ds", mcfisa_a },
4044 48024e4a bellard
{"sls", 2,        one(0051700),        one(0177700), "$s", m68000up },
4045 48024e4a bellard
{"sls", 2,        one(0051700),        one(0177700), "Ds", mcfisa_a },
4046 48024e4a bellard
{"slt", 2,        one(0056700),        one(0177700), "$s", m68000up },
4047 48024e4a bellard
{"slt", 2,        one(0056700),        one(0177700), "Ds", mcfisa_a },
4048 48024e4a bellard
{"smi", 2,        one(0055700),        one(0177700), "$s", m68000up },
4049 48024e4a bellard
{"smi", 2,        one(0055700),        one(0177700), "Ds", mcfisa_a },
4050 48024e4a bellard
{"sne", 2,        one(0053300),        one(0177700), "$s", m68000up },
4051 48024e4a bellard
{"sne", 2,        one(0053300),        one(0177700), "Ds", mcfisa_a },
4052 48024e4a bellard
{"spl", 2,        one(0055300),        one(0177700), "$s", m68000up },
4053 48024e4a bellard
{"spl", 2,        one(0055300),        one(0177700), "Ds", mcfisa_a },
4054 48024e4a bellard
{"st", 2,        one(0050300),        one(0177700), "$s", m68000up },
4055 48024e4a bellard
{"st", 2,        one(0050300),        one(0177700), "Ds", mcfisa_a },
4056 48024e4a bellard
{"svc", 2,        one(0054300),        one(0177700), "$s", m68000up },
4057 48024e4a bellard
{"svc", 2,        one(0054300),        one(0177700), "Ds", mcfisa_a },
4058 48024e4a bellard
{"svs", 2,        one(0054700),        one(0177700), "$s", m68000up },
4059 48024e4a bellard
{"svs", 2,        one(0054700),        one(0177700), "Ds", mcfisa_a },
4060 48024e4a bellard
4061 48024e4a bellard
{"stop", 4,        one(0047162),        one(0177777), "#w", m68000up | mcfisa_a },
4062 48024e4a bellard
4063 48024e4a bellard
{"strldsr", 4, two(0040347,0043374), two(0177777,0177777), "#w", mcfisa_aa},
4064 48024e4a bellard
4065 48024e4a bellard
{"subal", 2,        one(0110700),        one(0170700), "*lAd", m68000up | mcfisa_a },
4066 48024e4a bellard
{"subaw", 2,        one(0110300),        one(0170700), "*wAd", m68000up },
4067 48024e4a bellard
4068 48024e4a bellard
{"subib", 4,        one(0002000),        one(0177700), "#b$s", m68000up },
4069 48024e4a bellard
{"subiw", 4,        one(0002100),        one(0177700), "#w$s", m68000up },
4070 48024e4a bellard
{"subil", 6,        one(0002200),        one(0177700), "#l$s", m68000up },
4071 48024e4a bellard
{"subil", 6,        one(0002200),        one(0177700), "#lDs", mcfisa_a },
4072 48024e4a bellard
4073 48024e4a bellard
{"subqb", 2,        one(0050400),        one(0170700), "Qd%s", m68000up },
4074 48024e4a bellard
{"subqw", 2,        one(0050500),        one(0170700), "Qd%s", m68000up },
4075 48024e4a bellard
{"subql", 2,        one(0050600),        one(0170700), "Qd%s", m68000up | mcfisa_a },
4076 48024e4a bellard
4077 48024e4a bellard
/* The sub opcode can generate the suba, subi, and subq instructions.  */
4078 48024e4a bellard
{"subb", 2,        one(0050400),        one(0170700), "Qd%s", m68000up },
4079 48024e4a bellard
{"subb", 4,        one(0002000),        one(0177700), "#b$s", m68000up },
4080 48024e4a bellard
{"subb", 2,        one(0110000),        one(0170700), ";bDd", m68000up },
4081 48024e4a bellard
{"subb", 2,        one(0110400),        one(0170700), "Dd~s", m68000up },
4082 48024e4a bellard
{"subw", 2,        one(0050500),        one(0170700), "Qd%s", m68000up },
4083 48024e4a bellard
{"subw", 4,        one(0002100),        one(0177700), "#w$s", m68000up },
4084 48024e4a bellard
{"subw", 2,        one(0110300),        one(0170700), "*wAd", m68000up },
4085 48024e4a bellard
{"subw", 2,        one(0110100),        one(0170700), "*wDd", m68000up },
4086 48024e4a bellard
{"subw", 2,        one(0110500),        one(0170700), "Dd~s", m68000up },
4087 48024e4a bellard
{"subl", 2,        one(0050600),        one(0170700), "Qd%s", m68000up | mcfisa_a },
4088 48024e4a bellard
{"subl", 6,        one(0002200),        one(0177700), "#l$s", m68000up },
4089 48024e4a bellard
{"subl", 6,        one(0002200),        one(0177700), "#lDs", mcfisa_a },
4090 48024e4a bellard
{"subl", 2,        one(0110700),        one(0170700), "*lAd", m68000up | mcfisa_a },
4091 48024e4a bellard
{"subl", 2,        one(0110200),        one(0170700), "*lDd", m68000up | mcfisa_a },
4092 48024e4a bellard
{"subl", 2,        one(0110600),        one(0170700), "Dd~s", m68000up | mcfisa_a },
4093 48024e4a bellard
4094 48024e4a bellard
{"subxb", 2,        one(0110400),        one(0170770), "DsDd", m68000up },
4095 48024e4a bellard
{"subxb", 2,        one(0110410),        one(0170770), "-s-d", m68000up },
4096 48024e4a bellard
{"subxw", 2,        one(0110500),        one(0170770), "DsDd", m68000up },
4097 48024e4a bellard
{"subxw", 2,        one(0110510),        one(0170770), "-s-d", m68000up },
4098 48024e4a bellard
{"subxl", 2,        one(0110600),        one(0170770), "DsDd", m68000up | mcfisa_a },
4099 48024e4a bellard
{"subxl", 2,        one(0110610),        one(0170770), "-s-d", m68000up },
4100 48024e4a bellard
4101 48024e4a bellard
{"swap", 2,        one(0044100),        one(0177770), "Ds", m68000up | mcfisa_a },
4102 48024e4a bellard
4103 48024e4a bellard
/* swbeg and swbegl are magic constants used on sysV68.  The compiler
4104 48024e4a bellard
   generates them before a switch table.  They tell the debugger and
4105 48024e4a bellard
   disassembler that a switch table follows.  The parameter is the
4106 48024e4a bellard
   number of elements in the table.  swbeg means that the entries in
4107 48024e4a bellard
   the table are word (2 byte) sized, and swbegl means that the
4108 48024e4a bellard
   entries in the table are longword (4 byte) sized.  */
4109 48024e4a bellard
{"swbeg", 4,        one(0045374),        one(0177777), "#w",   m68000up | mcfisa_a },
4110 48024e4a bellard
{"swbegl", 6,        one(0045375),        one(0177777), "#l",   m68000up | mcfisa_a },
4111 48024e4a bellard
4112 48024e4a bellard
{"tas", 2,        one(0045300),        one(0177700), "$s", m68000up | mcfisa_b},
4113 48024e4a bellard
4114 48024e4a bellard
#define TBL1(name,insn_size,signed,round,size)                                        \
4115 48024e4a bellard
  {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)|0000400),        \
4116 48024e4a bellard
     two(0177700,0107777), "!sD1", cpu32 },                                \
4117 48024e4a bellard
  {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)),                \
4118 48024e4a bellard
     two(0177770,0107770), "DsD3D1", cpu32 }
4119 48024e4a bellard
#define TBL(name1, name2, name3, s, r) \
4120 48024e4a bellard
  TBL1(name1, 4, s, r, 0), TBL1(name2, 4, s, r, 1), TBL1(name3, 4, s, r, 2)
4121 48024e4a bellard
TBL("tblsb", "tblsw", "tblsl", 2, 1),
4122 48024e4a bellard
TBL("tblsnb", "tblsnw", "tblsnl", 2, 0),
4123 48024e4a bellard
TBL("tblub", "tbluw", "tblul", 0, 1),
4124 48024e4a bellard
TBL("tblunb", "tblunw", "tblunl", 0, 0),
4125 48024e4a bellard
4126 48024e4a bellard
{"trap", 2,        one(0047100),        one(0177760), "Ts", m68000up | mcfisa_a },
4127 48024e4a bellard
4128 48024e4a bellard
{"trapcc", 2,        one(0052374),        one(0177777), "", m68020up | cpu32 },
4129 48024e4a bellard
{"trapcs", 2,        one(0052774),        one(0177777), "", m68020up | cpu32 },
4130 48024e4a bellard
{"trapeq", 2,        one(0053774),        one(0177777), "", m68020up | cpu32 },
4131 48024e4a bellard
{"trapf", 2,        one(0050774),        one(0177777), "", m68020up | cpu32 | mcfisa_a },
4132 48024e4a bellard
{"trapge", 2,        one(0056374),        one(0177777), "", m68020up | cpu32 },
4133 48024e4a bellard
{"trapgt", 2,        one(0057374),        one(0177777), "", m68020up | cpu32 },
4134 48024e4a bellard
{"traphi", 2,        one(0051374),        one(0177777), "", m68020up | cpu32 },
4135 48024e4a bellard
{"traple", 2,        one(0057774),        one(0177777), "", m68020up | cpu32 },
4136 48024e4a bellard
{"trapls", 2,        one(0051774),        one(0177777), "", m68020up | cpu32 },
4137 48024e4a bellard
{"traplt", 2,        one(0056774),        one(0177777), "", m68020up | cpu32 },
4138 48024e4a bellard
{"trapmi", 2,        one(0055774),        one(0177777), "", m68020up | cpu32 },
4139 48024e4a bellard
{"trapne", 2,        one(0053374),        one(0177777), "", m68020up | cpu32 },
4140 48024e4a bellard
{"trappl", 2,        one(0055374),        one(0177777), "", m68020up | cpu32 },
4141 48024e4a bellard
{"trapt", 2,        one(0050374),        one(0177777), "", m68020up | cpu32 },
4142 48024e4a bellard
{"trapvc", 2,        one(0054374),        one(0177777), "", m68020up | cpu32 },
4143 48024e4a bellard
{"trapvs", 2,        one(0054774),        one(0177777), "", m68020up | cpu32 },
4144 48024e4a bellard
4145 48024e4a bellard
{"trapccw", 4,        one(0052372),        one(0177777), "#w", m68020up|cpu32 },
4146 48024e4a bellard
{"trapcsw", 4,        one(0052772),        one(0177777), "#w", m68020up|cpu32 },
4147 48024e4a bellard
{"trapeqw", 4,        one(0053772),        one(0177777), "#w", m68020up|cpu32 },
4148 48024e4a bellard
{"trapfw", 4,        one(0050772),        one(0177777), "#w", m68020up|cpu32|mcfisa_a},
4149 48024e4a bellard
{"trapgew", 4,        one(0056372),        one(0177777), "#w", m68020up|cpu32 },
4150 48024e4a bellard
{"trapgtw", 4,        one(0057372),        one(0177777), "#w", m68020up|cpu32 },
4151 48024e4a bellard
{"traphiw", 4,        one(0051372),        one(0177777), "#w", m68020up|cpu32 },
4152 48024e4a bellard
{"traplew", 4,        one(0057772),        one(0177777), "#w", m68020up|cpu32 },
4153 48024e4a bellard
{"traplsw", 4,        one(0051772),        one(0177777), "#w", m68020up|cpu32 },
4154 48024e4a bellard
{"trapltw", 4,        one(0056772),        one(0177777), "#w", m68020up|cpu32 },
4155 48024e4a bellard
{"trapmiw", 4,        one(0055772),        one(0177777), "#w", m68020up|cpu32 },
4156 48024e4a bellard
{"trapnew", 4,        one(0053372),        one(0177777), "#w", m68020up|cpu32 },
4157 48024e4a bellard
{"trapplw", 4,        one(0055372),        one(0177777), "#w", m68020up|cpu32 },
4158 48024e4a bellard
{"traptw", 4,        one(0050372),        one(0177777), "#w", m68020up|cpu32 },
4159 48024e4a bellard
{"trapvcw", 4,        one(0054372),        one(0177777), "#w", m68020up|cpu32 },
4160 48024e4a bellard
{"trapvsw", 4,        one(0054772),        one(0177777), "#w", m68020up|cpu32 },
4161 48024e4a bellard
4162 48024e4a bellard
{"trapccl", 6,        one(0052373),        one(0177777), "#l", m68020up|cpu32 },
4163 48024e4a bellard
{"trapcsl", 6,        one(0052773),        one(0177777), "#l", m68020up|cpu32 },
4164 48024e4a bellard
{"trapeql", 6,        one(0053773),        one(0177777), "#l", m68020up|cpu32 },
4165 48024e4a bellard
{"trapfl", 6,        one(0050773),        one(0177777), "#l", m68020up|cpu32|mcfisa_a},
4166 48024e4a bellard
{"trapgel", 6,        one(0056373),        one(0177777), "#l", m68020up|cpu32 },
4167 48024e4a bellard
{"trapgtl", 6,        one(0057373),        one(0177777), "#l", m68020up|cpu32 },
4168 48024e4a bellard
{"traphil", 6,        one(0051373),        one(0177777), "#l", m68020up|cpu32 },
4169 48024e4a bellard
{"traplel", 6,        one(0057773),        one(0177777), "#l", m68020up|cpu32 },
4170 48024e4a bellard
{"traplsl", 6,        one(0051773),        one(0177777), "#l", m68020up|cpu32 },
4171 48024e4a bellard
{"trapltl", 6,        one(0056773),        one(0177777), "#l", m68020up|cpu32 },
4172 48024e4a bellard
{"trapmil", 6,        one(0055773),        one(0177777), "#l", m68020up|cpu32 },
4173 48024e4a bellard
{"trapnel", 6,        one(0053373),        one(0177777), "#l", m68020up|cpu32 },
4174 48024e4a bellard
{"trappll", 6,        one(0055373),        one(0177777), "#l", m68020up|cpu32 },
4175 48024e4a bellard
{"traptl", 6,        one(0050373),        one(0177777), "#l", m68020up|cpu32 },
4176 48024e4a bellard
{"trapvcl", 6,        one(0054373),        one(0177777), "#l", m68020up|cpu32 },
4177 48024e4a bellard
{"trapvsl", 6,        one(0054773),        one(0177777), "#l", m68020up|cpu32 },
4178 48024e4a bellard
4179 48024e4a bellard
{"trapv", 2,        one(0047166),        one(0177777), "", m68000up },
4180 48024e4a bellard
4181 48024e4a bellard
{"tstb", 2,        one(0045000),        one(0177700), ";b", m68020up|cpu32|mcfisa_a },
4182 48024e4a bellard
{"tstb", 2,        one(0045000),        one(0177700), "$b", m68000up },
4183 48024e4a bellard
{"tstw", 2,        one(0045100),        one(0177700), "*w", m68020up|cpu32|mcfisa_a },
4184 48024e4a bellard
{"tstw", 2,        one(0045100),        one(0177700), "$w", m68000up },
4185 48024e4a bellard
{"tstl", 2,        one(0045200),        one(0177700), "*l", m68020up|cpu32|mcfisa_a },
4186 48024e4a bellard
{"tstl", 2,        one(0045200),        one(0177700), "$l", m68000up },
4187 48024e4a bellard
4188 48024e4a bellard
{"unlk", 2,        one(0047130),        one(0177770), "As", m68000up | mcfisa_a },
4189 48024e4a bellard
4190 48024e4a bellard
{"unpk", 4,        one(0100600),        one(0170770), "DsDd#w", m68020up },
4191 48024e4a bellard
{"unpk", 4,        one(0100610),        one(0170770), "-s-d#w", m68020up },
4192 48024e4a bellard
4193 48024e4a bellard
{"wddatab", 2,        one(0175400),   one(0177700), "~s", mcfisa_a },
4194 48024e4a bellard
{"wddataw", 2,        one(0175500),   one(0177700), "~s", mcfisa_a },
4195 48024e4a bellard
{"wddatal", 2,        one(0175600),   one(0177700), "~s", mcfisa_a },
4196 48024e4a bellard
4197 48024e4a bellard
{"wdebug", 4,        two(0175720, 03),        two(0177770, 0xffff), "as", mcfisa_a },
4198 48024e4a bellard
{"wdebug", 4,        two(0175750, 03),        two(0177770, 0xffff), "ds", mcfisa_a },
4199 48024e4a bellard
};
4200 48024e4a bellard
4201 48024e4a bellard
const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0];
4202 48024e4a bellard
4203 48024e4a bellard
/* These aliases used to be in the above table, each one duplicating
4204 48024e4a bellard
   all of the entries for its primary exactly.  This table was
4205 48024e4a bellard
   constructed by mechanical processing of the opcode table, with a
4206 48024e4a bellard
   small number of tweaks done by hand.  There are probably a lot more
4207 48024e4a bellard
   aliases above that could be moved down here, except for very minor
4208 48024e4a bellard
   differences.  */
4209 48024e4a bellard
4210 48024e4a bellard
const struct m68k_opcode_alias m68k_opcode_aliases[] =
4211 48024e4a bellard
{
4212 48024e4a bellard
  { "add",        "addw", },
4213 48024e4a bellard
  { "adda",        "addaw", },
4214 48024e4a bellard
  { "addi",        "addiw", },
4215 48024e4a bellard
  { "addq",        "addqw", },
4216 48024e4a bellard
  { "addx",        "addxw", },
4217 48024e4a bellard
  { "asl",        "aslw", },
4218 48024e4a bellard
  { "asr",        "asrw", },
4219 48024e4a bellard
  { "bhi",        "bhiw", },
4220 48024e4a bellard
  { "bls",        "blsw", },
4221 48024e4a bellard
  { "bcc",        "bccw", },
4222 48024e4a bellard
  { "bcs",        "bcsw", },
4223 48024e4a bellard
  { "bne",        "bnew", },
4224 48024e4a bellard
  { "beq",        "beqw", },
4225 48024e4a bellard
  { "bvc",        "bvcw", },
4226 48024e4a bellard
  { "bvs",        "bvsw", },
4227 48024e4a bellard
  { "bpl",        "bplw", },
4228 48024e4a bellard
  { "bmi",        "bmiw", },
4229 48024e4a bellard
  { "bge",        "bgew", },
4230 48024e4a bellard
  { "blt",        "bltw", },
4231 48024e4a bellard
  { "bgt",        "bgtw", },
4232 48024e4a bellard
  { "ble",        "blew", },
4233 48024e4a bellard
  { "bra",        "braw", },
4234 48024e4a bellard
  { "bsr",        "bsrw", },
4235 48024e4a bellard
  { "bhib",        "bhis", },
4236 48024e4a bellard
  { "blsb",        "blss", },
4237 48024e4a bellard
  { "bccb",        "bccs", },
4238 48024e4a bellard
  { "bcsb",        "bcss", },
4239 48024e4a bellard
  { "bneb",        "bnes", },
4240 48024e4a bellard
  { "beqb",        "beqs", },
4241 48024e4a bellard
  { "bvcb",        "bvcs", },
4242 48024e4a bellard
  { "bvsb",        "bvss", },
4243 48024e4a bellard
  { "bplb",        "bpls", },
4244 48024e4a bellard
  { "bmib",        "bmis", },
4245 48024e4a bellard
  { "bgeb",        "bges", },
4246 48024e4a bellard
  { "bltb",        "blts", },
4247 48024e4a bellard
  { "bgtb",        "bgts", },
4248 48024e4a bellard
  { "bleb",        "bles", },
4249 48024e4a bellard
  { "brab",        "bras", },
4250 48024e4a bellard
  { "bsrb",        "bsrs", },
4251 48024e4a bellard
  { "bhs",        "bccw" },
4252 48024e4a bellard
  { "bhss",        "bccs" },
4253 48024e4a bellard
  { "bhsb",        "bccs" },
4254 48024e4a bellard
  { "bhsw",        "bccw" },
4255 48024e4a bellard
  { "bhsl",        "bccl" },
4256 48024e4a bellard
  { "blo",        "bcsw" },
4257 48024e4a bellard
  { "blos",        "bcss" },
4258 48024e4a bellard
  { "blob",        "bcss" },
4259 48024e4a bellard
  { "blow",        "bcsw" },
4260 48024e4a bellard
  { "blol",        "bcsl" },
4261 48024e4a bellard
  { "br",        "braw", },
4262 48024e4a bellard
  { "brs",        "bras", },
4263 48024e4a bellard
  { "brb",        "bras", },
4264 48024e4a bellard
  { "brw",        "braw", },
4265 48024e4a bellard
  { "brl",        "bral", },
4266 48024e4a bellard
  { "jfnlt",        "bcc", },        /* Apparently a sun alias.  */
4267 48024e4a bellard
  { "jfngt",        "ble", },        /* Apparently a sun alias.  */
4268 48024e4a bellard
  { "jfeq",        "beqs", },        /* Apparently a sun alias.  */
4269 48024e4a bellard
  { "bchgb",        "bchg", },
4270 48024e4a bellard
  { "bchgl",        "bchg", },
4271 48024e4a bellard
  { "bclrb",        "bclr", },
4272 48024e4a bellard
  { "bclrl",        "bclr", },
4273 48024e4a bellard
  { "bsetb",        "bset", },
4274 48024e4a bellard
  { "bsetl",        "bset", },
4275 48024e4a bellard
  { "btstb",        "btst", },
4276 48024e4a bellard
  { "btstl",        "btst", },
4277 48024e4a bellard
  { "cas2",        "cas2w", },
4278 48024e4a bellard
  { "cas",        "casw", },
4279 48024e4a bellard
  { "chk2",        "chk2w", },
4280 48024e4a bellard
  { "chk",        "chkw", },
4281 48024e4a bellard
  { "clr",        "clrw", },
4282 48024e4a bellard
  { "cmp2",        "cmp2w", },
4283 48024e4a bellard
  { "cmpa",        "cmpaw", },
4284 48024e4a bellard
  { "cmpi",        "cmpiw", },
4285 48024e4a bellard
  { "cmpm",        "cmpmw", },
4286 48024e4a bellard
  { "cmp",        "cmpw", },
4287 48024e4a bellard
  { "dbccw",        "dbcc", },
4288 48024e4a bellard
  { "dbcsw",        "dbcs", },
4289 48024e4a bellard
  { "dbeqw",        "dbeq", },
4290 48024e4a bellard
  { "dbfw",        "dbf", },
4291 48024e4a bellard
  { "dbgew",        "dbge", },
4292 48024e4a bellard
  { "dbgtw",        "dbgt", },
4293 48024e4a bellard
  { "dbhiw",        "dbhi", },
4294 48024e4a bellard
  { "dblew",        "dble", },
4295 48024e4a bellard
  { "dblsw",        "dbls", },
4296 48024e4a bellard
  { "dbltw",        "dblt", },
4297 48024e4a bellard
  { "dbmiw",        "dbmi", },
4298 48024e4a bellard
  { "dbnew",        "dbne", },
4299 48024e4a bellard
  { "dbplw",        "dbpl", },
4300 48024e4a bellard
  { "dbtw",        "dbt", },
4301 48024e4a bellard
  { "dbvcw",        "dbvc", },
4302 48024e4a bellard
  { "dbvsw",        "dbvs", },
4303 48024e4a bellard
  { "dbhs",        "dbcc", },
4304 48024e4a bellard
  { "dbhsw",        "dbcc", },
4305 48024e4a bellard
  { "dbra",        "dbf", },
4306 48024e4a bellard
  { "dbraw",        "dbf", },
4307 48024e4a bellard
  { "tdivsl",        "divsl", },
4308 48024e4a bellard
  { "divs",        "divsw", },
4309 48024e4a bellard
  { "divu",        "divuw", },
4310 48024e4a bellard
  { "ext",        "extw", },
4311 48024e4a bellard
  { "extbw",        "extw", },
4312 48024e4a bellard
  { "extwl",        "extl", },
4313 48024e4a bellard
  { "fbneq",        "fbne", },
4314 48024e4a bellard
  { "fbsneq",        "fbsne", },
4315 48024e4a bellard
  { "fdbneq",        "fdbne", },
4316 48024e4a bellard
  { "fdbsneq",        "fdbsne", },
4317 48024e4a bellard
  { "fmovecr",        "fmovecrx", },
4318 48024e4a bellard
  { "fmovm",        "fmovem", },
4319 48024e4a bellard
  { "fsneq",        "fsne", },
4320 48024e4a bellard
  { "fssneq",        "fssne", },
4321 48024e4a bellard
  { "ftrapneq",        "ftrapne", },
4322 48024e4a bellard
  { "ftrapsneq", "ftrapsne", },
4323 48024e4a bellard
  { "fjneq",        "fjne", },
4324 48024e4a bellard
  { "fjsneq",        "fjsne", },
4325 48024e4a bellard
  { "jmpl",        "jmp", },
4326 48024e4a bellard
  { "jmps",        "jmp", },
4327 48024e4a bellard
  { "jsrl",        "jsr", },
4328 48024e4a bellard
  { "jsrs",        "jsr", },
4329 48024e4a bellard
  { "leal",        "lea", },
4330 48024e4a bellard
  { "lsl",        "lslw", },
4331 48024e4a bellard
  { "lsr",        "lsrw", },
4332 48024e4a bellard
  { "mac",        "macw" },
4333 48024e4a bellard
  { "movea",        "moveaw", },
4334 48024e4a bellard
  { "movem",        "movemw", },
4335 48024e4a bellard
  { "movml",        "moveml", },
4336 48024e4a bellard
  { "movmw",        "movemw", },
4337 48024e4a bellard
  { "movm",        "movemw", },
4338 48024e4a bellard
  { "movep",        "movepw", },
4339 48024e4a bellard
  { "movpw",        "movepw", },
4340 48024e4a bellard
  { "moves",        "movesw" },
4341 48024e4a bellard
  { "muls",        "mulsw", },
4342 48024e4a bellard
  { "mulu",        "muluw", },
4343 48024e4a bellard
  { "msac",        "msacw" },
4344 48024e4a bellard
  { "nbcdb",        "nbcd" },
4345 48024e4a bellard
  { "neg",        "negw", },
4346 48024e4a bellard
  { "negx",        "negxw", },
4347 48024e4a bellard
  { "not",        "notw", },
4348 48024e4a bellard
  { "peal",        "pea", },
4349 48024e4a bellard
  { "rol",        "rolw", },
4350 48024e4a bellard
  { "ror",        "rorw", },
4351 48024e4a bellard
  { "roxl",        "roxlw", },
4352 48024e4a bellard
  { "roxr",        "roxrw", },
4353 48024e4a bellard
  { "sats",        "satsl", },
4354 48024e4a bellard
  { "sbcdb",        "sbcd", },
4355 48024e4a bellard
  { "sccb",        "scc", },
4356 48024e4a bellard
  { "scsb",        "scs", },
4357 48024e4a bellard
  { "seqb",        "seq", },
4358 48024e4a bellard
  { "sfb",        "sf", },
4359 48024e4a bellard
  { "sgeb",        "sge", },
4360 48024e4a bellard
  { "sgtb",        "sgt", },
4361 48024e4a bellard
  { "shib",        "shi", },
4362 48024e4a bellard
  { "sleb",        "sle", },
4363 48024e4a bellard
  { "slsb",        "sls", },
4364 48024e4a bellard
  { "sltb",        "slt", },
4365 48024e4a bellard
  { "smib",        "smi", },
4366 48024e4a bellard
  { "sneb",        "sne", },
4367 48024e4a bellard
  { "splb",        "spl", },
4368 48024e4a bellard
  { "stb",        "st", },
4369 48024e4a bellard
  { "svcb",        "svc", },
4370 48024e4a bellard
  { "svsb",        "svs", },
4371 48024e4a bellard
  { "sfge",        "sge", },
4372 48024e4a bellard
  { "sfgt",        "sgt", },
4373 48024e4a bellard
  { "sfle",        "sle", },
4374 48024e4a bellard
  { "sflt",        "slt", },
4375 48024e4a bellard
  { "sfneq",        "sne", },
4376 48024e4a bellard
  { "suba",        "subaw", },
4377 48024e4a bellard
  { "subi",        "subiw", },
4378 48024e4a bellard
  { "subq",        "subqw", },
4379 48024e4a bellard
  { "sub",        "subw", },
4380 48024e4a bellard
  { "subx",        "subxw", },
4381 48024e4a bellard
  { "swapw",        "swap", },
4382 48024e4a bellard
  { "tasb",        "tas", },
4383 48024e4a bellard
  { "tpcc",        "trapcc", },
4384 48024e4a bellard
  { "tcc",        "trapcc", },
4385 48024e4a bellard
  { "tst",        "tstw", },
4386 48024e4a bellard
  { "jbra",        "jra", },
4387 48024e4a bellard
  { "jbhi",        "jhi", },
4388 48024e4a bellard
  { "jbls",        "jls", },
4389 48024e4a bellard
  { "jbcc",        "jcc", },
4390 48024e4a bellard
  { "jbcs",        "jcs", },
4391 48024e4a bellard
  { "jbne",        "jne", },
4392 48024e4a bellard
  { "jbeq",        "jeq", },
4393 48024e4a bellard
  { "jbvc",        "jvc", },
4394 48024e4a bellard
  { "jbvs",        "jvs", },
4395 48024e4a bellard
  { "jbpl",        "jpl", },
4396 48024e4a bellard
  { "jbmi",        "jmi", },
4397 48024e4a bellard
  { "jbge",        "jge", },
4398 48024e4a bellard
  { "jblt",        "jlt", },
4399 48024e4a bellard
  { "jbgt",        "jgt", },
4400 48024e4a bellard
  { "jble",        "jle", },
4401 48024e4a bellard
  { "movql",        "moveq", },
4402 48024e4a bellard
  { "moveql",        "moveq", },
4403 48024e4a bellard
  { "movl",        "movel", },
4404 48024e4a bellard
  { "movq",        "moveq", },
4405 48024e4a bellard
  { "moval",        "moveal", },
4406 48024e4a bellard
  { "movaw",        "moveaw", },
4407 48024e4a bellard
  { "movb",        "moveb", },
4408 48024e4a bellard
  { "movc",        "movec", },
4409 48024e4a bellard
  { "movecl",        "movec", },
4410 48024e4a bellard
  { "movpl",        "movepl", },
4411 48024e4a bellard
  { "movw",        "movew", },
4412 48024e4a bellard
  { "movsb",        "movesb", },
4413 48024e4a bellard
  { "movsl",        "movesl", },
4414 48024e4a bellard
  { "movsw",        "movesw", },
4415 48024e4a bellard
  { "mov3q",        "mov3ql", },
4416 48024e4a bellard
4417 48024e4a bellard
  { "tdivul",        "divul", },        /* For m68k-svr4.  */
4418 48024e4a bellard
  { "fmovb",        "fmoveb", },
4419 48024e4a bellard
  { "fsmovb",        "fsmoveb", },
4420 48024e4a bellard
  { "fdmovb",        "fdmoveb", },
4421 48024e4a bellard
  { "fmovd",        "fmoved", },
4422 48024e4a bellard
  { "fsmovd",        "fsmoved", },
4423 48024e4a bellard
  { "fmovl",        "fmovel", },
4424 48024e4a bellard
  { "fsmovl",        "fsmovel", },
4425 48024e4a bellard
  { "fdmovl",        "fdmovel", },
4426 48024e4a bellard
  { "fmovp",        "fmovep", },
4427 48024e4a bellard
  { "fsmovp",        "fsmovep", },
4428 48024e4a bellard
  { "fdmovp",        "fdmovep", },
4429 48024e4a bellard
  { "fmovs",        "fmoves", },
4430 48024e4a bellard
  { "fsmovs",        "fsmoves", },
4431 48024e4a bellard
  { "fdmovs",        "fdmoves", },
4432 48024e4a bellard
  { "fmovw",        "fmovew", },
4433 48024e4a bellard
  { "fsmovw",        "fsmovew", },
4434 48024e4a bellard
  { "fdmovw",        "fdmovew", },
4435 48024e4a bellard
  { "fmovx",        "fmovex", },
4436 48024e4a bellard
  { "fsmovx",        "fsmovex", },
4437 48024e4a bellard
  { "fdmovx",        "fdmovex", },
4438 48024e4a bellard
  { "fmovcr",        "fmovecr", },
4439 48024e4a bellard
  { "fmovcrx",        "fmovecrx", },
4440 48024e4a bellard
  { "ftestb",        "ftstb", },
4441 48024e4a bellard
  { "ftestd",        "ftstd", },
4442 48024e4a bellard
  { "ftestl",        "ftstl", },
4443 48024e4a bellard
  { "ftestp",        "ftstp", },
4444 48024e4a bellard
  { "ftests",        "ftsts", },
4445 48024e4a bellard
  { "ftestw",        "ftstw", },
4446 48024e4a bellard
  { "ftestx",        "ftstx", },
4447 48024e4a bellard
4448 48024e4a bellard
  { "bitrevl",  "bitrev", },
4449 48024e4a bellard
  { "byterevl", "byterev", },
4450 48024e4a bellard
  { "ff1l",     "ff1", },
4451 48024e4a bellard
4452 48024e4a bellard
};
4453 48024e4a bellard
4454 48024e4a bellard
const int m68k_numaliases =
4455 48024e4a bellard
  sizeof m68k_opcode_aliases / sizeof m68k_opcode_aliases[0];
4456 48024e4a bellard
/* **** End of m68k-opc.c */
4457 48024e4a bellard
/* **** floatformat.c from sourceware.org CVS 2005-08-14.  */
4458 48024e4a bellard
/* IEEE floating point support routines, for GDB, the GNU Debugger.
4459 48024e4a bellard
   Copyright (C) 1991, 1994, 1999, 2000, 2003 Free Software Foundation, Inc.
4460 48024e4a bellard

4461 48024e4a bellard
This file is part of GDB.
4462 48024e4a bellard

4463 48024e4a bellard
This program is free software; you can redistribute it and/or modify
4464 48024e4a bellard
it under the terms of the GNU General Public License as published by
4465 48024e4a bellard
the Free Software Foundation; either version 2 of the License, or
4466 48024e4a bellard
(at your option) any later version.
4467 48024e4a bellard

4468 48024e4a bellard
This program is distributed in the hope that it will be useful,
4469 48024e4a bellard
but WITHOUT ANY WARRANTY; without even the implied warranty of
4470 48024e4a bellard
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4471 48024e4a bellard
GNU General Public License for more details.
4472 48024e4a bellard

4473 48024e4a bellard
You should have received a copy of the GNU General Public License
4474 48024e4a bellard
along with this program; if not, write to the Free Software
4475 48024e4a bellard
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
4476 48024e4a bellard
4477 48024e4a bellard
/* This is needed to pick up the NAN macro on some systems.  */
4478 48024e4a bellard
//#define _GNU_SOURCE
4479 48024e4a bellard
4480 48024e4a bellard
#ifndef INFINITY
4481 48024e4a bellard
#ifdef HUGE_VAL
4482 48024e4a bellard
#define INFINITY HUGE_VAL
4483 48024e4a bellard
#else
4484 48024e4a bellard
#define INFINITY (1.0 / 0.0)
4485 48024e4a bellard
#endif
4486 48024e4a bellard
#endif
4487 48024e4a bellard
4488 48024e4a bellard
#ifndef NAN
4489 48024e4a bellard
#define NAN (0.0 / 0.0)
4490 48024e4a bellard
#endif
4491 48024e4a bellard
4492 48024e4a bellard
static unsigned long get_field (const unsigned char *,
4493 48024e4a bellard
                                enum floatformat_byteorders,
4494 48024e4a bellard
                                unsigned int,
4495 48024e4a bellard
                                unsigned int,
4496 48024e4a bellard
                                unsigned int);
4497 48024e4a bellard
static int floatformat_always_valid (const struct floatformat *fmt,
4498 48024e4a bellard
                                     const char *from);
4499 48024e4a bellard
4500 48024e4a bellard
static int
4501 48024e4a bellard
floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED,
4502 48024e4a bellard
                          const char *from ATTRIBUTE_UNUSED)
4503 48024e4a bellard
{
4504 48024e4a bellard
  return 1;
4505 48024e4a bellard
}
4506 48024e4a bellard
4507 48024e4a bellard
/* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not
4508 48024e4a bellard
   going to bother with trying to muck around with whether it is defined in
4509 48024e4a bellard
   a system header, what we do if not, etc.  */
4510 48024e4a bellard
#define FLOATFORMAT_CHAR_BIT 8
4511 48024e4a bellard
4512 48024e4a bellard
/* floatformats for IEEE single and double, big and little endian.  */
4513 48024e4a bellard
const struct floatformat floatformat_ieee_single_big =
4514 48024e4a bellard
{
4515 48024e4a bellard
  floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
4516 48024e4a bellard
  floatformat_intbit_no,
4517 48024e4a bellard
  "floatformat_ieee_single_big",
4518 48024e4a bellard
  floatformat_always_valid
4519 48024e4a bellard
};
4520 48024e4a bellard
const struct floatformat floatformat_ieee_single_little =
4521 48024e4a bellard
{
4522 48024e4a bellard
  floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
4523 48024e4a bellard
  floatformat_intbit_no,
4524 48024e4a bellard
  "floatformat_ieee_single_little",
4525 48024e4a bellard
  floatformat_always_valid
4526 48024e4a bellard
};
4527 48024e4a bellard
const struct floatformat floatformat_ieee_double_big =
4528 48024e4a bellard
{
4529 48024e4a bellard
  floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
4530 48024e4a bellard
  floatformat_intbit_no,
4531 48024e4a bellard
  "floatformat_ieee_double_big",
4532 48024e4a bellard
  floatformat_always_valid
4533 48024e4a bellard
};
4534 48024e4a bellard
const struct floatformat floatformat_ieee_double_little =
4535 48024e4a bellard
{
4536 48024e4a bellard
  floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
4537 48024e4a bellard
  floatformat_intbit_no,
4538 48024e4a bellard
  "floatformat_ieee_double_little",
4539 48024e4a bellard
  floatformat_always_valid
4540 48024e4a bellard
};
4541 48024e4a bellard
4542 48024e4a bellard
/* floatformat for IEEE double, little endian byte order, with big endian word
4543 48024e4a bellard
   ordering, as on the ARM.  */
4544 48024e4a bellard
4545 48024e4a bellard
const struct floatformat floatformat_ieee_double_littlebyte_bigword =
4546 48024e4a bellard
{
4547 48024e4a bellard
  floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
4548 48024e4a bellard
  floatformat_intbit_no,
4549 48024e4a bellard
  "floatformat_ieee_double_littlebyte_bigword",
4550 48024e4a bellard
  floatformat_always_valid
4551 48024e4a bellard
};
4552 48024e4a bellard
4553 48024e4a bellard
static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from);
4554 48024e4a bellard
4555 48024e4a bellard
static int
4556 48024e4a bellard
floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from)
4557 48024e4a bellard
{
4558 48024e4a bellard
  /* In the i387 double-extended format, if the exponent is all ones,
4559 48024e4a bellard
     then the integer bit must be set.  If the exponent is neither 0
4560 48024e4a bellard
     nor ~0, the intbit must also be set.  Only if the exponent is
4561 48024e4a bellard
     zero can it be zero, and then it must be zero.  */
4562 48024e4a bellard
  unsigned long exponent, int_bit;
4563 48024e4a bellard
  const unsigned char *ufrom = (const unsigned char *) from;
4564 3b46e624 ths
4565 48024e4a bellard
  exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
4566 48024e4a bellard
                        fmt->exp_start, fmt->exp_len);
4567 48024e4a bellard
  int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize,
4568 48024e4a bellard
                       fmt->man_start, 1);
4569 3b46e624 ths
4570 48024e4a bellard
  if ((exponent == 0) != (int_bit == 0))
4571 48024e4a bellard
    return 0;
4572 48024e4a bellard
  else
4573 48024e4a bellard
    return 1;
4574 48024e4a bellard
}
4575 48024e4a bellard
4576 48024e4a bellard
const struct floatformat floatformat_i387_ext =
4577 48024e4a bellard
{
4578 48024e4a bellard
  floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
4579 48024e4a bellard
  floatformat_intbit_yes,
4580 48024e4a bellard
  "floatformat_i387_ext",
4581 48024e4a bellard
  floatformat_i387_ext_is_valid
4582 48024e4a bellard
};
4583 48024e4a bellard
const struct floatformat floatformat_m68881_ext =
4584 48024e4a bellard
{
4585 48024e4a bellard
  /* Note that the bits from 16 to 31 are unused.  */
4586 48024e4a bellard
  floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
4587 48024e4a bellard
  floatformat_intbit_yes,
4588 48024e4a bellard
  "floatformat_m68881_ext",
4589 48024e4a bellard
  floatformat_always_valid
4590 48024e4a bellard
};
4591 48024e4a bellard
const struct floatformat floatformat_i960_ext =
4592 48024e4a bellard
{
4593 48024e4a bellard
  /* Note that the bits from 0 to 15 are unused.  */
4594 48024e4a bellard
  floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
4595 48024e4a bellard
  floatformat_intbit_yes,
4596 48024e4a bellard
  "floatformat_i960_ext",
4597 48024e4a bellard
  floatformat_always_valid
4598 48024e4a bellard
};
4599 48024e4a bellard
const struct floatformat floatformat_m88110_ext =
4600 48024e4a bellard
{
4601 48024e4a bellard
  floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
4602 48024e4a bellard
  floatformat_intbit_yes,
4603 48024e4a bellard
  "floatformat_m88110_ext",
4604 48024e4a bellard
  floatformat_always_valid
4605 48024e4a bellard
};
4606 48024e4a bellard
const struct floatformat floatformat_m88110_harris_ext =
4607 48024e4a bellard
{
4608 48024e4a bellard
  /* Harris uses raw format 128 bytes long, but the number is just an ieee
4609 48024e4a bellard
     double, and the last 64 bits are wasted. */
4610 48024e4a bellard
  floatformat_big,128, 0, 1, 11,  0x3ff,  0x7ff, 12, 52,
4611 48024e4a bellard
  floatformat_intbit_no,
4612 48024e4a bellard
  "floatformat_m88110_ext_harris",
4613 48024e4a bellard
  floatformat_always_valid
4614 48024e4a bellard
};
4615 48024e4a bellard
const struct floatformat floatformat_arm_ext_big =
4616 48024e4a bellard
{
4617 48024e4a bellard
  /* Bits 1 to 16 are unused.  */
4618 48024e4a bellard
  floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
4619 48024e4a bellard
  floatformat_intbit_yes,
4620 48024e4a bellard
  "floatformat_arm_ext_big",
4621 48024e4a bellard
  floatformat_always_valid
4622 48024e4a bellard
};
4623 48024e4a bellard
const struct floatformat floatformat_arm_ext_littlebyte_bigword =
4624 48024e4a bellard
{
4625 48024e4a bellard
  /* Bits 1 to 16 are unused.  */
4626 48024e4a bellard
  floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
4627 48024e4a bellard
  floatformat_intbit_yes,
4628 48024e4a bellard
  "floatformat_arm_ext_littlebyte_bigword",
4629 48024e4a bellard
  floatformat_always_valid
4630 48024e4a bellard
};
4631 48024e4a bellard
const struct floatformat floatformat_ia64_spill_big =
4632 48024e4a bellard
{
4633 48024e4a bellard
  floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
4634 48024e4a bellard
  floatformat_intbit_yes,
4635 48024e4a bellard
  "floatformat_ia64_spill_big",
4636 48024e4a bellard
  floatformat_always_valid
4637 48024e4a bellard
};
4638 48024e4a bellard
const struct floatformat floatformat_ia64_spill_little =
4639 48024e4a bellard
{
4640 48024e4a bellard
  floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
4641 48024e4a bellard
  floatformat_intbit_yes,
4642 48024e4a bellard
  "floatformat_ia64_spill_little",
4643 48024e4a bellard
  floatformat_always_valid
4644 48024e4a bellard
};
4645 48024e4a bellard
const struct floatformat floatformat_ia64_quad_big =
4646 48024e4a bellard
{
4647 48024e4a bellard
  floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
4648 48024e4a bellard
  floatformat_intbit_no,
4649 48024e4a bellard
  "floatformat_ia64_quad_big",
4650 48024e4a bellard
  floatformat_always_valid
4651 48024e4a bellard
};
4652 48024e4a bellard
const struct floatformat floatformat_ia64_quad_little =
4653 48024e4a bellard
{
4654 48024e4a bellard
  floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
4655 48024e4a bellard
  floatformat_intbit_no,
4656 48024e4a bellard
  "floatformat_ia64_quad_little",
4657 48024e4a bellard
  floatformat_always_valid
4658 48024e4a bellard
};
4659 48024e4a bellard
 
4660 48024e4a bellard
/* Extract a field which starts at START and is LEN bits long.  DATA and
4661 48024e4a bellard
   TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
4662 48024e4a bellard
static unsigned long
4663 48024e4a bellard
get_field (const unsigned char *data, enum floatformat_byteorders order,
4664 48024e4a bellard
           unsigned int total_len, unsigned int start, unsigned int len)
4665 48024e4a bellard
{
4666 48024e4a bellard
  unsigned long result;
4667 48024e4a bellard
  unsigned int cur_byte;
4668 48024e4a bellard
  int cur_bitshift;
4669 48024e4a bellard
4670 48024e4a bellard
  /* Start at the least significant part of the field.  */
4671 48024e4a bellard
  cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
4672 48024e4a bellard
  if (order == floatformat_little)
4673 48024e4a bellard
    cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
4674 48024e4a bellard
  cur_bitshift =
4675 48024e4a bellard
    ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
4676 48024e4a bellard
  result = *(data + cur_byte) >> (-cur_bitshift);
4677 48024e4a bellard
  cur_bitshift += FLOATFORMAT_CHAR_BIT;
4678 48024e4a bellard
  if (order == floatformat_little)
4679 48024e4a bellard
    ++cur_byte;
4680 48024e4a bellard
  else
4681 48024e4a bellard
    --cur_byte;
4682 48024e4a bellard
4683 48024e4a bellard
  /* Move towards the most significant part of the field.  */
4684 48024e4a bellard
  while ((unsigned int) cur_bitshift < len)
4685 48024e4a bellard
    {
4686 48024e4a bellard
      if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
4687 48024e4a bellard
        /* This is the last byte; zero out the bits which are not part of
4688 48024e4a bellard
           this field.  */
4689 48024e4a bellard
        result |=
4690 48024e4a bellard
          (*(data + cur_byte) & ((1 << (len - cur_bitshift)) - 1))
4691 48024e4a bellard
            << cur_bitshift;
4692 48024e4a bellard
      else
4693 48024e4a bellard
        result |= *(data + cur_byte) << cur_bitshift;
4694 48024e4a bellard
      cur_bitshift += FLOATFORMAT_CHAR_BIT;
4695 48024e4a bellard
      if (order == floatformat_little)
4696 48024e4a bellard
        ++cur_byte;
4697 48024e4a bellard
      else
4698 48024e4a bellard
        --cur_byte;
4699 48024e4a bellard
    }
4700 48024e4a bellard
  return result;
4701 48024e4a bellard
}
4702 3b46e624 ths
4703 48024e4a bellard
#ifndef min
4704 48024e4a bellard
#define min(a, b) ((a) < (b) ? (a) : (b))
4705 48024e4a bellard
#endif
4706 48024e4a bellard
4707 48024e4a bellard
/* Convert from FMT to a double.
4708 48024e4a bellard
   FROM is the address of the extended float.
4709 48024e4a bellard
   Store the double in *TO.  */
4710 48024e4a bellard
4711 48024e4a bellard
void
4712 48024e4a bellard
floatformat_to_double (const struct floatformat *fmt,
4713 48024e4a bellard
                       const char *from, double *to)
4714 48024e4a bellard
{
4715 48024e4a bellard
  const unsigned char *ufrom = (const unsigned char *)from;
4716 48024e4a bellard
  double dto;
4717 48024e4a bellard
  long exponent;
4718 48024e4a bellard
  unsigned long mant;
4719 48024e4a bellard
  unsigned int mant_bits, mant_off;
4720 48024e4a bellard
  int mant_bits_left;
4721 48024e4a bellard
  int special_exponent;                /* It's a NaN, denorm or zero */
4722 48024e4a bellard
4723 48024e4a bellard
  exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
4724 48024e4a bellard
                        fmt->exp_start, fmt->exp_len);
4725 48024e4a bellard
4726 48024e4a bellard
  /* If the exponent indicates a NaN, we don't have information to
4727 48024e4a bellard
     decide what to do.  So we handle it like IEEE, except that we
4728 48024e4a bellard
     don't try to preserve the type of NaN.  FIXME.  */
4729 48024e4a bellard
  if ((unsigned long) exponent == fmt->exp_nan)
4730 48024e4a bellard
    {
4731 48024e4a bellard
      int nan;
4732 48024e4a bellard
4733 48024e4a bellard
      mant_off = fmt->man_start;
4734 48024e4a bellard
      mant_bits_left = fmt->man_len;
4735 48024e4a bellard
      nan = 0;
4736 48024e4a bellard
      while (mant_bits_left > 0)
4737 48024e4a bellard
        {
4738 48024e4a bellard
          mant_bits = min (mant_bits_left, 32);
4739 48024e4a bellard
4740 48024e4a bellard
          if (get_field (ufrom, fmt->byteorder, fmt->totalsize,
4741 48024e4a bellard
                         mant_off, mant_bits) != 0)
4742 48024e4a bellard
            {
4743 48024e4a bellard
              /* This is a NaN.  */
4744 48024e4a bellard
              nan = 1;
4745 48024e4a bellard
              break;
4746 48024e4a bellard
            }
4747 48024e4a bellard
4748 48024e4a bellard
          mant_off += mant_bits;
4749 48024e4a bellard
          mant_bits_left -= mant_bits;
4750 48024e4a bellard
        }
4751 48024e4a bellard
4752 48024e4a bellard
      /* On certain systems (such as GNU/Linux), the use of the
4753 48024e4a bellard
         INFINITY macro below may generate a warning that can not be
4754 48024e4a bellard
         silenced due to a bug in GCC (PR preprocessor/11931).  The
4755 48024e4a bellard
         preprocessor fails to recognise the __extension__ keyword in
4756 48024e4a bellard
         conjunction with the GNU/C99 extension for hexadecimal
4757 48024e4a bellard
         floating point constants and will issue a warning when
4758 48024e4a bellard
         compiling with -pedantic.  */
4759 48024e4a bellard
      if (nan)
4760 48024e4a bellard
        dto = NAN;
4761 48024e4a bellard
      else
4762 48024e4a bellard
        dto = INFINITY;
4763 48024e4a bellard
4764 48024e4a bellard
      if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
4765 48024e4a bellard
        dto = -dto;
4766 48024e4a bellard
4767 48024e4a bellard
      *to = dto;
4768 48024e4a bellard
4769 48024e4a bellard
      return;
4770 48024e4a bellard
    }
4771 48024e4a bellard
4772 48024e4a bellard
  mant_bits_left = fmt->man_len;
4773 48024e4a bellard
  mant_off = fmt->man_start;
4774 48024e4a bellard
  dto = 0.0;
4775 48024e4a bellard
4776 48024e4a bellard
  special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan;
4777 48024e4a bellard
4778 48024e4a bellard
  /* Don't bias zero's, denorms or NaNs.  */
4779 48024e4a bellard
  if (!special_exponent)
4780 48024e4a bellard
    exponent -= fmt->exp_bias;
4781 48024e4a bellard
4782 48024e4a bellard
  /* Build the result algebraically.  Might go infinite, underflow, etc;
4783 48024e4a bellard
     who cares. */
4784 48024e4a bellard
4785 48024e4a bellard
  /* If this format uses a hidden bit, explicitly add it in now.  Otherwise,
4786 48024e4a bellard
     increment the exponent by one to account for the integer bit.  */
4787 48024e4a bellard
4788 48024e4a bellard
  if (!special_exponent)
4789 48024e4a bellard
    {
4790 48024e4a bellard
      if (fmt->intbit == floatformat_intbit_no)
4791 48024e4a bellard
        dto = ldexp (1.0, exponent);
4792 48024e4a bellard
      else
4793 48024e4a bellard
        exponent++;
4794 48024e4a bellard
    }
4795 48024e4a bellard
4796 48024e4a bellard
  while (mant_bits_left > 0)
4797 48024e4a bellard
    {
4798 48024e4a bellard
      mant_bits = min (mant_bits_left, 32);
4799 48024e4a bellard
4800 48024e4a bellard
      mant = get_field (ufrom, fmt->byteorder, fmt->totalsize,
4801 48024e4a bellard
                         mant_off, mant_bits);
4802 48024e4a bellard
4803 48024e4a bellard
      /* Handle denormalized numbers.  FIXME: What should we do for
4804 48024e4a bellard
         non-IEEE formats?  */
4805 48024e4a bellard
      if (exponent == 0 && mant != 0)
4806 48024e4a bellard
        dto += ldexp ((double)mant,
4807 48024e4a bellard
                      (- fmt->exp_bias
4808 48024e4a bellard
                       - mant_bits
4809 48024e4a bellard
                       - (mant_off - fmt->man_start)
4810 48024e4a bellard
                       + 1));
4811 48024e4a bellard
      else
4812 48024e4a bellard
        dto += ldexp ((double)mant, exponent - mant_bits);
4813 48024e4a bellard
      if (exponent != 0)
4814 48024e4a bellard
        exponent -= mant_bits;
4815 48024e4a bellard
      mant_off += mant_bits;
4816 48024e4a bellard
      mant_bits_left -= mant_bits;
4817 48024e4a bellard
    }
4818 48024e4a bellard
4819 48024e4a bellard
  /* Negate it if negative.  */
4820 48024e4a bellard
  if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
4821 48024e4a bellard
    dto = -dto;
4822 48024e4a bellard
  *to = dto;
4823 48024e4a bellard
}
4824 48024e4a bellard
 
4825 48024e4a bellard
static void put_field (unsigned char *, enum floatformat_byteorders,
4826 48024e4a bellard
                       unsigned int,
4827 48024e4a bellard
                       unsigned int,
4828 48024e4a bellard
                       unsigned int,
4829 48024e4a bellard
                       unsigned long);
4830 48024e4a bellard
4831 48024e4a bellard
/* Set a field which starts at START and is LEN bits long.  DATA and
4832 48024e4a bellard
   TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
4833 48024e4a bellard
static void
4834 48024e4a bellard
put_field (unsigned char *data, enum floatformat_byteorders order,
4835 48024e4a bellard
           unsigned int total_len, unsigned int start, unsigned int len,
4836 48024e4a bellard
           unsigned long stuff_to_put)
4837 48024e4a bellard
{
4838 48024e4a bellard
  unsigned int cur_byte;
4839 48024e4a bellard
  int cur_bitshift;
4840 48024e4a bellard
4841 48024e4a bellard
  /* Start at the least significant part of the field.  */
4842 48024e4a bellard
  cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
4843 48024e4a bellard
  if (order == floatformat_little)
4844 48024e4a bellard
    cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
4845 48024e4a bellard
  cur_bitshift =
4846 48024e4a bellard
    ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
4847 48024e4a bellard
  *(data + cur_byte) &=
4848 48024e4a bellard
    ~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1) << (-cur_bitshift));
4849 48024e4a bellard
  *(data + cur_byte) |=
4850 48024e4a bellard
    (stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
4851 48024e4a bellard
  cur_bitshift += FLOATFORMAT_CHAR_BIT;
4852 48024e4a bellard
  if (order == floatformat_little)
4853 48024e4a bellard
    ++cur_byte;
4854 48024e4a bellard
  else
4855 48024e4a bellard
    --cur_byte;
4856 48024e4a bellard
4857 48024e4a bellard
  /* Move towards the most significant part of the field.  */
4858 48024e4a bellard
  while ((unsigned int) cur_bitshift < len)
4859 48024e4a bellard
    {
4860 48024e4a bellard
      if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
4861 48024e4a bellard
        {
4862 48024e4a bellard
          /* This is the last byte.  */
4863 48024e4a bellard
          *(data + cur_byte) &=
4864 48024e4a bellard
            ~((1 << (len - cur_bitshift)) - 1);
4865 48024e4a bellard
          *(data + cur_byte) |= (stuff_to_put >> cur_bitshift);
4866 48024e4a bellard
        }
4867 48024e4a bellard
      else
4868 48024e4a bellard
        *(data + cur_byte) = ((stuff_to_put >> cur_bitshift)
4869 48024e4a bellard
                              & ((1 << FLOATFORMAT_CHAR_BIT) - 1));
4870 48024e4a bellard
      cur_bitshift += FLOATFORMAT_CHAR_BIT;
4871 48024e4a bellard
      if (order == floatformat_little)
4872 48024e4a bellard
        ++cur_byte;
4873 48024e4a bellard
      else
4874 48024e4a bellard
        --cur_byte;
4875 48024e4a bellard
    }
4876 48024e4a bellard
}
4877 48024e4a bellard
4878 48024e4a bellard
/* The converse: convert the double *FROM to an extended float
4879 48024e4a bellard
   and store where TO points.  Neither FROM nor TO have any alignment
4880 48024e4a bellard
   restrictions.  */
4881 48024e4a bellard
4882 48024e4a bellard
void
4883 48024e4a bellard
floatformat_from_double (const struct floatformat *fmt,
4884 48024e4a bellard
                         const double *from, char *to)
4885 48024e4a bellard
{
4886 48024e4a bellard
  double dfrom;
4887 48024e4a bellard
  int exponent;
4888 48024e4a bellard
  double mant;
4889 48024e4a bellard
  unsigned int mant_bits, mant_off;
4890 48024e4a bellard
  int mant_bits_left;
4891 48024e4a bellard
  unsigned char *uto = (unsigned char *)to;
4892 48024e4a bellard
4893 48024e4a bellard
  dfrom = *from;
4894 48024e4a bellard
  memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
4895 48024e4a bellard
4896 48024e4a bellard
  /* If negative, set the sign bit.  */
4897 48024e4a bellard
  if (dfrom < 0)
4898 48024e4a bellard
    {
4899 48024e4a bellard
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1);
4900 48024e4a bellard
      dfrom = -dfrom;
4901 48024e4a bellard
    }
4902 48024e4a bellard
4903 48024e4a bellard
  if (dfrom == 0)
4904 48024e4a bellard
    {
4905 48024e4a bellard
      /* 0.0.  */
4906 48024e4a bellard
      return;
4907 48024e4a bellard
    }
4908 48024e4a bellard
4909 48024e4a bellard
  if (dfrom != dfrom)
4910 48024e4a bellard
    {
4911 48024e4a bellard
      /* NaN.  */
4912 48024e4a bellard
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
4913 48024e4a bellard
                 fmt->exp_len, fmt->exp_nan);
4914 48024e4a bellard
      /* Be sure it's not infinity, but NaN value is irrelevant.  */
4915 48024e4a bellard
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
4916 48024e4a bellard
                 32, 1);
4917 48024e4a bellard
      return;
4918 48024e4a bellard
    }
4919 48024e4a bellard
4920 48024e4a bellard
  if (dfrom + dfrom == dfrom)
4921 48024e4a bellard
    {
4922 48024e4a bellard
      /* This can only happen for an infinite value (or zero, which we
4923 48024e4a bellard
         already handled above).  */
4924 48024e4a bellard
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
4925 48024e4a bellard
                 fmt->exp_len, fmt->exp_nan);
4926 48024e4a bellard
      return;
4927 48024e4a bellard
    }
4928 48024e4a bellard
4929 48024e4a bellard
  mant = frexp (dfrom, &exponent);
4930 48024e4a bellard
  if (exponent + fmt->exp_bias - 1 > 0)
4931 48024e4a bellard
    put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
4932 48024e4a bellard
               fmt->exp_len, exponent + fmt->exp_bias - 1);
4933 48024e4a bellard
  else
4934 48024e4a bellard
    {
4935 48024e4a bellard
      /* Handle a denormalized number.  FIXME: What should we do for
4936 48024e4a bellard
         non-IEEE formats?  */
4937 48024e4a bellard
      put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
4938 48024e4a bellard
                 fmt->exp_len, 0);
4939 48024e4a bellard
      mant = ldexp (mant, exponent + fmt->exp_bias - 1);
4940 48024e4a bellard
    }
4941 48024e4a bellard
4942 48024e4a bellard
  mant_bits_left = fmt->man_len;
4943 48024e4a bellard
  mant_off = fmt->man_start;
4944 48024e4a bellard
  while (mant_bits_left > 0)
4945 48024e4a bellard
    {
4946 48024e4a bellard
      unsigned long mant_long;
4947 48024e4a bellard
      mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
4948 48024e4a bellard
4949 48024e4a bellard
      mant *= 4294967296.0;
4950 48024e4a bellard
      mant_long = (unsigned long)mant;
4951 48024e4a bellard
      mant -= mant_long;
4952 48024e4a bellard
4953 48024e4a bellard
      /* If the integer bit is implicit, and we are not creating a
4954 48024e4a bellard
         denormalized number, then we need to discard it.  */
4955 48024e4a bellard
      if ((unsigned int) mant_bits_left == fmt->man_len
4956 48024e4a bellard
          && fmt->intbit == floatformat_intbit_no
4957 48024e4a bellard
          && exponent + fmt->exp_bias - 1 > 0)
4958 48024e4a bellard
        {
4959 48024e4a bellard
          mant_long &= 0x7fffffff;
4960 48024e4a bellard
          mant_bits -= 1;
4961 48024e4a bellard
        }
4962 48024e4a bellard
      else if (mant_bits < 32)
4963 48024e4a bellard
        {
4964 48024e4a bellard
          /* The bits we want are in the most significant MANT_BITS bits of
4965 48024e4a bellard
             mant_long.  Move them to the least significant.  */
4966 48024e4a bellard
          mant_long >>= 32 - mant_bits;
4967 48024e4a bellard
        }
4968 48024e4a bellard
4969 48024e4a bellard
      put_field (uto, fmt->byteorder, fmt->totalsize,
4970 48024e4a bellard
                 mant_off, mant_bits, mant_long);
4971 48024e4a bellard
      mant_off += mant_bits;
4972 48024e4a bellard
      mant_bits_left -= mant_bits;
4973 48024e4a bellard
    }
4974 48024e4a bellard
}
4975 48024e4a bellard
4976 48024e4a bellard
/* Return non-zero iff the data at FROM is a valid number in format FMT.  */
4977 48024e4a bellard
4978 48024e4a bellard
int
4979 48024e4a bellard
floatformat_is_valid (const struct floatformat *fmt, const char *from)
4980 48024e4a bellard
{
4981 48024e4a bellard
  return fmt->is_valid (fmt, from);
4982 48024e4a bellard
}
4983 48024e4a bellard
4984 48024e4a bellard
4985 48024e4a bellard
#ifdef IEEE_DEBUG
4986 48024e4a bellard
4987 48024e4a bellard
/* This is to be run on a host which uses IEEE floating point.  */
4988 48024e4a bellard
4989 48024e4a bellard
void
4990 48024e4a bellard
ieee_test (double n)
4991 48024e4a bellard
{
4992 48024e4a bellard
  double result;
4993 48024e4a bellard
4994 48024e4a bellard
  floatformat_to_double (&floatformat_ieee_double_little, (char *) &n,
4995 48024e4a bellard
                         &result);
4996 48024e4a bellard
  if ((n != result && (! isnan (n) || ! isnan (result)))
4997 48024e4a bellard
      || (n < 0 && result >= 0)
4998 48024e4a bellard
      || (n >= 0 && result < 0))
4999 48024e4a bellard
    printf ("Differ(to): %.20g -> %.20g\n", n, result);
5000 48024e4a bellard
5001 48024e4a bellard
  floatformat_from_double (&floatformat_ieee_double_little, &n,
5002 48024e4a bellard
                           (char *) &result);
5003 48024e4a bellard
  if ((n != result && (! isnan (n) || ! isnan (result)))
5004 48024e4a bellard
      || (n < 0 && result >= 0)
5005 48024e4a bellard
      || (n >= 0 && result < 0))
5006 48024e4a bellard
    printf ("Differ(from): %.20g -> %.20g\n", n, result);
5007 48024e4a bellard
5008 48024e4a bellard
#if 0
5009 48024e4a bellard
  {
5010 48024e4a bellard
    char exten[16];
5011 48024e4a bellard

5012 48024e4a bellard
    floatformat_from_double (&floatformat_m68881_ext, &n, exten);
5013 48024e4a bellard
    floatformat_to_double (&floatformat_m68881_ext, exten, &result);
5014 48024e4a bellard
    if (n != result)
5015 48024e4a bellard
      printf ("Differ(to+from): %.20g -> %.20g\n", n, result);
5016 48024e4a bellard
  }
5017 48024e4a bellard
#endif
5018 48024e4a bellard
5019 48024e4a bellard
#if IEEE_DEBUG > 1
5020 48024e4a bellard
  /* This is to be run on a host which uses 68881 format.  */
5021 48024e4a bellard
  {
5022 48024e4a bellard
    long double ex = *(long double *)exten;
5023 48024e4a bellard
    if (ex != n)
5024 48024e4a bellard
      printf ("Differ(from vs. extended): %.20g\n", n);
5025 48024e4a bellard
  }
5026 48024e4a bellard
#endif
5027 48024e4a bellard
}
5028 48024e4a bellard
5029 48024e4a bellard
int
5030 48024e4a bellard
main (void)
5031 48024e4a bellard
{
5032 48024e4a bellard
  ieee_test (0.0);
5033 48024e4a bellard
  ieee_test (0.5);
5034 48024e4a bellard
  ieee_test (256.0);
5035 48024e4a bellard
  ieee_test (0.12345);
5036 48024e4a bellard
  ieee_test (234235.78907234);
5037 48024e4a bellard
  ieee_test (-512.0);
5038 48024e4a bellard
  ieee_test (-0.004321);
5039 48024e4a bellard
  ieee_test (1.2E-70);
5040 48024e4a bellard
  ieee_test (1.2E-316);
5041 48024e4a bellard
  ieee_test (4.9406564584124654E-324);
5042 48024e4a bellard
  ieee_test (- 4.9406564584124654E-324);
5043 48024e4a bellard
  ieee_test (- 0.0);
5044 48024e4a bellard
  ieee_test (- INFINITY);
5045 48024e4a bellard
  ieee_test (- NAN);
5046 48024e4a bellard
  ieee_test (INFINITY);
5047 48024e4a bellard
  ieee_test (NAN);
5048 48024e4a bellard
  return 0;
5049 48024e4a bellard
}
5050 48024e4a bellard
#endif
5051 48024e4a bellard
/* **** End of floatformat.c  */