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