148024e4aSbellard /* This file is composed of several different files from the upstream 248024e4aSbellard sourceware.org CVS. Original file boundaries marked with **** */ 348024e4aSbellard 448d4ab25SPeter Maydell #include "qemu/osdep.h" 548024e4aSbellard #include <math.h> 648024e4aSbellard 73979fca4SMarkus Armbruster #include "disas/dis-asm.h" 848024e4aSbellard 91addc7c5Saurel32 /* **** floatformat.h from sourceware.org CVS 2005-08-14. */ 1048024e4aSbellard /* IEEE floating point support declarations, for GDB, the GNU Debugger. 1148024e4aSbellard Copyright 1991, 1994, 1995, 1997, 2000, 2003 Free Software Foundation, Inc. 1248024e4aSbellard 1348024e4aSbellard This file is part of GDB. 1448024e4aSbellard 1548024e4aSbellard This program is free software; you can redistribute it and/or modify 1648024e4aSbellard it under the terms of the GNU General Public License as published by 1748024e4aSbellard the Free Software Foundation; either version 2 of the License, or 1848024e4aSbellard (at your option) any later version. 1948024e4aSbellard 2048024e4aSbellard This program is distributed in the hope that it will be useful, 2148024e4aSbellard but WITHOUT ANY WARRANTY; without even the implied warranty of 2248024e4aSbellard MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 2348024e4aSbellard GNU General Public License for more details. 2448024e4aSbellard 2548024e4aSbellard You should have received a copy of the GNU General Public License 268167ee88SBlue Swirl along with this program; if not, see <http://www.gnu.org/licenses/>. */ 2748024e4aSbellard 2848024e4aSbellard #if !defined (FLOATFORMAT_H) 2948024e4aSbellard #define FLOATFORMAT_H 1 3048024e4aSbellard 3148024e4aSbellard /*#include "ansidecl.h" */ 3248024e4aSbellard 3348024e4aSbellard /* A floatformat consists of a sign bit, an exponent and a mantissa. Once the 3448024e4aSbellard bytes are concatenated according to the byteorder flag, then each of those 3548024e4aSbellard fields is contiguous. We number the bits with 0 being the most significant 3648024e4aSbellard (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field 3748024e4aSbellard contains with the *_start and *_len fields. */ 3848024e4aSbellard 3948024e4aSbellard /* What is the order of the bytes. */ 4048024e4aSbellard 4148024e4aSbellard enum floatformat_byteorders { 4248024e4aSbellard 4348024e4aSbellard /* Standard little endian byte order. 4448024e4aSbellard EX: 1.2345678e10 => 00 00 80 c5 e0 fe 06 42 */ 4548024e4aSbellard 4648024e4aSbellard floatformat_little, 4748024e4aSbellard 4848024e4aSbellard /* Standard big endian byte order. 4948024e4aSbellard EX: 1.2345678e10 => 42 06 fe e0 c5 80 00 00 */ 5048024e4aSbellard 5148024e4aSbellard floatformat_big, 5248024e4aSbellard 5348024e4aSbellard /* Little endian byte order but big endian word order. 5448024e4aSbellard EX: 1.2345678e10 => e0 fe 06 42 00 00 80 c5 */ 5548024e4aSbellard 5648024e4aSbellard floatformat_littlebyte_bigword 5748024e4aSbellard 5848024e4aSbellard }; 5948024e4aSbellard 6048024e4aSbellard enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no }; 6148024e4aSbellard 6248024e4aSbellard struct floatformat 6348024e4aSbellard { 6448024e4aSbellard enum floatformat_byteorders byteorder; 6548024e4aSbellard unsigned int totalsize; /* Total size of number in bits */ 6648024e4aSbellard 6748024e4aSbellard /* Sign bit is always one bit long. 1 means negative, 0 means positive. */ 6848024e4aSbellard unsigned int sign_start; 6948024e4aSbellard 7048024e4aSbellard unsigned int exp_start; 7148024e4aSbellard unsigned int exp_len; 7248024e4aSbellard /* Bias added to a "true" exponent to form the biased exponent. It 73*2dbb1308Szhaolichang is intentionally signed as, otherwise, -exp_bias can turn into a 7448024e4aSbellard very large number (e.g., given the exp_bias of 0x3fff and a 64 7548024e4aSbellard bit long, the equation (long)(1 - exp_bias) evaluates to 7648024e4aSbellard 4294950914) instead of -16382). */ 7748024e4aSbellard int exp_bias; 7848024e4aSbellard /* Exponent value which indicates NaN. This is the actual value stored in 7948024e4aSbellard the float, not adjusted by the exp_bias. This usually consists of all 8048024e4aSbellard one bits. */ 8148024e4aSbellard unsigned int exp_nan; 8248024e4aSbellard 8348024e4aSbellard unsigned int man_start; 8448024e4aSbellard unsigned int man_len; 8548024e4aSbellard 8648024e4aSbellard /* Is the integer bit explicit or implicit? */ 8748024e4aSbellard enum floatformat_intbit intbit; 8848024e4aSbellard 8948024e4aSbellard /* Internal name for debugging. */ 9048024e4aSbellard const char *name; 9148024e4aSbellard 9248024e4aSbellard /* Validator method. */ 9348024e4aSbellard int (*is_valid) (const struct floatformat *fmt, const char *from); 9448024e4aSbellard }; 9548024e4aSbellard 9648024e4aSbellard /* floatformats for IEEE single and double, big and little endian. */ 9748024e4aSbellard 9848024e4aSbellard extern const struct floatformat floatformat_ieee_single_big; 9948024e4aSbellard extern const struct floatformat floatformat_ieee_single_little; 10048024e4aSbellard extern const struct floatformat floatformat_ieee_double_big; 10148024e4aSbellard extern const struct floatformat floatformat_ieee_double_little; 10248024e4aSbellard 10348024e4aSbellard /* floatformat for ARM IEEE double, little endian bytes and big endian words */ 10448024e4aSbellard 10548024e4aSbellard extern const struct floatformat floatformat_ieee_double_littlebyte_bigword; 10648024e4aSbellard 10748024e4aSbellard /* floatformats for various extendeds. */ 10848024e4aSbellard 10948024e4aSbellard extern const struct floatformat floatformat_i387_ext; 11048024e4aSbellard extern const struct floatformat floatformat_m68881_ext; 11148024e4aSbellard extern const struct floatformat floatformat_i960_ext; 11248024e4aSbellard extern const struct floatformat floatformat_m88110_ext; 11348024e4aSbellard extern const struct floatformat floatformat_m88110_harris_ext; 11448024e4aSbellard extern const struct floatformat floatformat_arm_ext_big; 11548024e4aSbellard extern const struct floatformat floatformat_arm_ext_littlebyte_bigword; 11648024e4aSbellard /* IA-64 Floating Point register spilt into memory. */ 11748024e4aSbellard extern const struct floatformat floatformat_ia64_spill_big; 11848024e4aSbellard extern const struct floatformat floatformat_ia64_spill_little; 11948024e4aSbellard extern const struct floatformat floatformat_ia64_quad_big; 12048024e4aSbellard extern const struct floatformat floatformat_ia64_quad_little; 12148024e4aSbellard 12248024e4aSbellard /* Convert from FMT to a double. 12348024e4aSbellard FROM is the address of the extended float. 12448024e4aSbellard Store the double in *TO. */ 12548024e4aSbellard 12648024e4aSbellard extern void 12748024e4aSbellard floatformat_to_double (const struct floatformat *, const char *, double *); 12848024e4aSbellard 12948024e4aSbellard /* The converse: convert the double *FROM to FMT 13048024e4aSbellard and store where TO points. */ 13148024e4aSbellard 13248024e4aSbellard extern void 13348024e4aSbellard floatformat_from_double (const struct floatformat *, const double *, char *); 13448024e4aSbellard 13548024e4aSbellard /* Return non-zero iff the data at FROM is a valid number in format FMT. */ 13648024e4aSbellard 13748024e4aSbellard extern int 13848024e4aSbellard floatformat_is_valid (const struct floatformat *fmt, const char *from); 13948024e4aSbellard 14048024e4aSbellard #endif /* defined (FLOATFORMAT_H) */ 14148024e4aSbellard /* **** End of floatformat.h */ 14248024e4aSbellard /* **** m68k-dis.h from sourceware.org CVS 2005-08-14. */ 14348024e4aSbellard /* Opcode table header for m680[01234]0/m6888[12]/m68851. 14448024e4aSbellard Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2001, 14548024e4aSbellard 2003, 2004 Free Software Foundation, Inc. 14648024e4aSbellard 14748024e4aSbellard This file is part of GDB, GAS, and the GNU binutils. 14848024e4aSbellard 14948024e4aSbellard GDB, GAS, and the GNU binutils are free software; you can redistribute 15048024e4aSbellard them and/or modify them under the terms of the GNU General Public 15148024e4aSbellard License as published by the Free Software Foundation; either version 15248024e4aSbellard 1, or (at your option) any later version. 15348024e4aSbellard 15448024e4aSbellard GDB, GAS, and the GNU binutils are distributed in the hope that they 15548024e4aSbellard will be useful, but WITHOUT ANY WARRANTY; without even the implied 15648024e4aSbellard warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 15748024e4aSbellard the GNU General Public License for more details. 15848024e4aSbellard 15948024e4aSbellard You should have received a copy of the GNU General Public License 1608167ee88SBlue Swirl along with this file; see the file COPYING. If not, 1618167ee88SBlue Swirl see <http://www.gnu.org/licenses/>. */ 16248024e4aSbellard 16348024e4aSbellard /* These are used as bit flags for the arch field in the m68k_opcode 16448024e4aSbellard structure. */ 16548024e4aSbellard #define _m68k_undef 0 16648024e4aSbellard #define m68000 0x001 16748024e4aSbellard #define m68008 m68000 /* Synonym for -m68000. otherwise unused. */ 16848024e4aSbellard #define m68010 0x002 16948024e4aSbellard #define m68020 0x004 17048024e4aSbellard #define m68030 0x008 17148024e4aSbellard #define m68ec030 m68030 /* Similar enough to -m68030 to ignore differences; 17248024e4aSbellard gas will deal with the few differences. */ 17348024e4aSbellard #define m68040 0x010 17448024e4aSbellard /* There is no 68050. */ 17548024e4aSbellard #define m68060 0x020 17648024e4aSbellard #define m68881 0x040 17748024e4aSbellard #define m68882 m68881 /* Synonym for -m68881. otherwise unused. */ 17848024e4aSbellard #define m68851 0x080 17948024e4aSbellard #define cpu32 0x100 /* e.g., 68332 */ 18048024e4aSbellard 18148024e4aSbellard #define mcfmac 0x200 /* ColdFire MAC. */ 18248024e4aSbellard #define mcfemac 0x400 /* ColdFire EMAC. */ 18348024e4aSbellard #define cfloat 0x800 /* ColdFire FPU. */ 18448024e4aSbellard #define mcfhwdiv 0x1000 /* ColdFire hardware divide. */ 18548024e4aSbellard 18648024e4aSbellard #define mcfisa_a 0x2000 /* ColdFire ISA_A. */ 18748024e4aSbellard #define mcfisa_aa 0x4000 /* ColdFire ISA_A+. */ 18848024e4aSbellard #define mcfisa_b 0x8000 /* ColdFire ISA_B. */ 18948024e4aSbellard #define mcfusp 0x10000 /* ColdFire USP instructions. */ 19048024e4aSbellard 19148024e4aSbellard #define mcf5200 0x20000 19248024e4aSbellard #define mcf5206e 0x40000 19348024e4aSbellard #define mcf521x 0x80000 19448024e4aSbellard #define mcf5249 0x100000 19548024e4aSbellard #define mcf528x 0x200000 19648024e4aSbellard #define mcf5307 0x400000 19748024e4aSbellard #define mcf5407 0x800000 19848024e4aSbellard #define mcf5470 0x1000000 19948024e4aSbellard #define mcf5480 0x2000000 20048024e4aSbellard 20148024e4aSbellard /* Handy aliases. */ 20248024e4aSbellard #define m68040up (m68040 | m68060) 20348024e4aSbellard #define m68030up (m68030 | m68040up) 20448024e4aSbellard #define m68020up (m68020 | m68030up) 20548024e4aSbellard #define m68010up (m68010 | cpu32 | m68020up) 20648024e4aSbellard #define m68000up (m68000 | m68010up) 20748024e4aSbellard 20848024e4aSbellard #define mfloat (m68881 | m68882 | m68040 | m68060) 20948024e4aSbellard #define mmmu (m68851 | m68030 | m68040 | m68060) 21048024e4aSbellard 21148024e4aSbellard /* The structure used to hold information for an opcode. */ 21248024e4aSbellard 21348024e4aSbellard struct m68k_opcode 21448024e4aSbellard { 21548024e4aSbellard /* The opcode name. */ 21648024e4aSbellard const char *name; 21748024e4aSbellard /* The pseudo-size of the instruction(in bytes). Used to determine 21848024e4aSbellard number of bytes necessary to disassemble the instruction. */ 21948024e4aSbellard unsigned int size; 22048024e4aSbellard /* The opcode itself. */ 22148024e4aSbellard unsigned long opcode; 22248024e4aSbellard /* The mask used by the disassembler. */ 22348024e4aSbellard unsigned long match; 22448024e4aSbellard /* The arguments. */ 22548024e4aSbellard const char *args; 22648024e4aSbellard /* The architectures which support this opcode. */ 22748024e4aSbellard unsigned int arch; 22848024e4aSbellard }; 22948024e4aSbellard 23048024e4aSbellard /* The structure used to hold information for an opcode alias. */ 23148024e4aSbellard 23248024e4aSbellard struct m68k_opcode_alias 23348024e4aSbellard { 23448024e4aSbellard /* The alias name. */ 23548024e4aSbellard const char *alias; 23648024e4aSbellard /* The instruction for which this is an alias. */ 23748024e4aSbellard const char *primary; 23848024e4aSbellard }; 23948024e4aSbellard 24048024e4aSbellard /* We store four bytes of opcode for all opcodes because that is the 24148024e4aSbellard most any of them need. The actual length of an instruction is 24248024e4aSbellard always at least 2 bytes, and is as much longer as necessary to hold 24348024e4aSbellard the operands it has. 24448024e4aSbellard 24548024e4aSbellard The match field is a mask saying which bits must match particular 24648024e4aSbellard opcode in order for an instruction to be an instance of that 24748024e4aSbellard opcode. 24848024e4aSbellard 24948024e4aSbellard The args field is a string containing two characters for each 25048024e4aSbellard operand of the instruction. The first specifies the kind of 25148024e4aSbellard operand; the second, the place it is stored. */ 25248024e4aSbellard 25348024e4aSbellard /* Kinds of operands: 25448024e4aSbellard Characters used: AaBbCcDdEeFfGgHIiJkLlMmnOopQqRrSsTtU VvWwXxYyZz01234|*~%;@!&$?/<>#^+- 25548024e4aSbellard 25648024e4aSbellard D data register only. Stored as 3 bits. 25748024e4aSbellard A address register only. Stored as 3 bits. 25848024e4aSbellard a address register indirect only. Stored as 3 bits. 25948024e4aSbellard R either kind of register. Stored as 4 bits. 26048024e4aSbellard r either kind of register indirect only. Stored as 4 bits. 26148024e4aSbellard At the moment, used only for cas2 instruction. 26248024e4aSbellard F floating point coprocessor register only. Stored as 3 bits. 26348024e4aSbellard O an offset (or width): immediate data 0-31 or data register. 26448024e4aSbellard Stored as 6 bits in special format for BF... insns. 26548024e4aSbellard + autoincrement only. Stored as 3 bits (number of the address register). 26648024e4aSbellard - autodecrement only. Stored as 3 bits (number of the address register). 26748024e4aSbellard Q quick immediate data. Stored as 3 bits. 26848024e4aSbellard This matches an immediate operand only when value is in range 1 .. 8. 26948024e4aSbellard M moveq immediate data. Stored as 8 bits. 27048024e4aSbellard This matches an immediate operand only when value is in range -128..127 27148024e4aSbellard T trap vector immediate data. Stored as 4 bits. 27248024e4aSbellard 27348024e4aSbellard k K-factor for fmove.p instruction. Stored as a 7-bit constant or 27448024e4aSbellard a three bit register offset, depending on the field type. 27548024e4aSbellard 27648024e4aSbellard # immediate data. Stored in special places (b, w or l) 27748024e4aSbellard which say how many bits to store. 27848024e4aSbellard ^ immediate data for floating point instructions. Special places 27948024e4aSbellard are offset by 2 bytes from '#'... 28048024e4aSbellard B pc-relative address, converted to an offset 28148024e4aSbellard that is treated as immediate data. 28248024e4aSbellard d displacement and register. Stores the register as 3 bits 28348024e4aSbellard and stores the displacement in the entire second word. 28448024e4aSbellard 28548024e4aSbellard C the CCR. No need to store it; this is just for filtering validity. 28648024e4aSbellard S the SR. No need to store, just as with CCR. 28748024e4aSbellard U the USP. No need to store, just as with CCR. 28848024e4aSbellard E the MAC ACC. No need to store, just as with CCR. 28948024e4aSbellard e the EMAC ACC[0123]. 29048024e4aSbellard G the MAC/EMAC MACSR. No need to store, just as with CCR. 29148024e4aSbellard g the EMAC ACCEXT{01,23}. 29248024e4aSbellard H the MASK. No need to store, just as with CCR. 29348024e4aSbellard i the MAC/EMAC scale factor. 29448024e4aSbellard 29548024e4aSbellard I Coprocessor ID. Not printed if 1. The Coprocessor ID is always 29648024e4aSbellard extracted from the 'd' field of word one, which means that an extended 29748024e4aSbellard coprocessor opcode can be skipped using the 'i' place, if needed. 29848024e4aSbellard 29948024e4aSbellard s System Control register for the floating point coprocessor. 30048024e4aSbellard 30148024e4aSbellard J Misc register for movec instruction, stored in 'j' format. 30248024e4aSbellard Possible values: 30348024e4aSbellard 0x000 SFC Source Function Code reg [60, 40, 30, 20, 10] 30448024e4aSbellard 0x001 DFC Data Function Code reg [60, 40, 30, 20, 10] 30548024e4aSbellard 0x002 CACR Cache Control Register [60, 40, 30, 20, mcf] 30648024e4aSbellard 0x003 TC MMU Translation Control [60, 40] 30748024e4aSbellard 0x004 ITT0 Instruction Transparent 30848024e4aSbellard Translation reg 0 [60, 40] 30948024e4aSbellard 0x005 ITT1 Instruction Transparent 31048024e4aSbellard Translation reg 1 [60, 40] 31148024e4aSbellard 0x006 DTT0 Data Transparent 31248024e4aSbellard Translation reg 0 [60, 40] 31348024e4aSbellard 0x007 DTT1 Data Transparent 31448024e4aSbellard Translation reg 1 [60, 40] 31548024e4aSbellard 0x008 BUSCR Bus Control Register [60] 31648024e4aSbellard 0x800 USP User Stack Pointer [60, 40, 30, 20, 10] 31748024e4aSbellard 0x801 VBR Vector Base reg [60, 40, 30, 20, 10, mcf] 31848024e4aSbellard 0x802 CAAR Cache Address Register [ 30, 20] 31948024e4aSbellard 0x803 MSP Master Stack Pointer [ 40, 30, 20] 32048024e4aSbellard 0x804 ISP Interrupt Stack Pointer [ 40, 30, 20] 32148024e4aSbellard 0x805 MMUSR MMU Status reg [ 40] 32248024e4aSbellard 0x806 URP User Root Pointer [60, 40] 32348024e4aSbellard 0x807 SRP Supervisor Root Pointer [60, 40] 32448024e4aSbellard 0x808 PCR Processor Configuration reg [60] 32548024e4aSbellard 0xC00 ROMBAR ROM Base Address Register [520X] 32648024e4aSbellard 0xC04 RAMBAR0 RAM Base Address Register 0 [520X] 32748024e4aSbellard 0xC05 RAMBAR1 RAM Base Address Register 0 [520X] 32848024e4aSbellard 0xC0F MBAR0 RAM Base Address Register 0 [520X] 32948024e4aSbellard 0xC04 FLASHBAR FLASH Base Address Register [mcf528x] 33048024e4aSbellard 0xC05 RAMBAR Static RAM Base Address Register [mcf528x] 33148024e4aSbellard 33248024e4aSbellard L Register list of the type d0-d7/a0-a7 etc. 33348024e4aSbellard (New! Improved! Can also hold fp0-fp7, as well!) 33448024e4aSbellard The assembler tries to see if the registers match the insn by 33548024e4aSbellard looking at where the insn wants them stored. 33648024e4aSbellard 33748024e4aSbellard l Register list like L, but with all the bits reversed. 33848024e4aSbellard Used for going the other way. . . 33948024e4aSbellard 34048024e4aSbellard c cache identifier which may be "nc" for no cache, "ic" 34148024e4aSbellard for instruction cache, "dc" for data cache, or "bc" 34248024e4aSbellard for both caches. Used in cinv and cpush. Always 34348024e4aSbellard stored in position "d". 34448024e4aSbellard 34548024e4aSbellard u Any register, with ``upper'' or ``lower'' specification. Used 34648024e4aSbellard in the mac instructions with size word. 34748024e4aSbellard 34848024e4aSbellard The remainder are all stored as 6 bits using an address mode and a 34948024e4aSbellard register number; they differ in which addressing modes they match. 35048024e4aSbellard 35148024e4aSbellard * all (modes 0-6,7.0-4) 35248024e4aSbellard ~ alterable memory (modes 2-6,7.0,7.1) 35348024e4aSbellard (not 0,1,7.2-4) 35448024e4aSbellard % alterable (modes 0-6,7.0,7.1) 35548024e4aSbellard (not 7.2-4) 35648024e4aSbellard ; data (modes 0,2-6,7.0-4) 35748024e4aSbellard (not 1) 35848024e4aSbellard @ data, but not immediate (modes 0,2-6,7.0-3) 35948024e4aSbellard (not 1,7.4) 36048024e4aSbellard ! control (modes 2,5,6,7.0-3) 36148024e4aSbellard (not 0,1,3,4,7.4) 36248024e4aSbellard & alterable control (modes 2,5,6,7.0,7.1) 36348024e4aSbellard (not 0,1,3,4,7.2-4) 36448024e4aSbellard $ alterable data (modes 0,2-6,7.0,7.1) 36548024e4aSbellard (not 1,7.2-4) 36648024e4aSbellard ? alterable control, or data register (modes 0,2,5,6,7.0,7.1) 36748024e4aSbellard (not 1,3,4,7.2-4) 36848024e4aSbellard / control, or data register (modes 0,2,5,6,7.0-3) 36948024e4aSbellard (not 1,3,4,7.4) 37048024e4aSbellard > *save operands (modes 2,4,5,6,7.0,7.1) 37148024e4aSbellard (not 0,1,3,7.2-4) 37248024e4aSbellard < *restore operands (modes 2,3,5,6,7.0-3) 37348024e4aSbellard (not 0,1,4,7.4) 37448024e4aSbellard 37548024e4aSbellard coldfire move operands: 37648024e4aSbellard m (modes 0-4) 37748024e4aSbellard n (modes 5,7.2) 37848024e4aSbellard o (modes 6,7.0,7.1,7.3,7.4) 37948024e4aSbellard p (modes 0-5) 38048024e4aSbellard 38148024e4aSbellard coldfire bset/bclr/btst/mulsl/mulul operands: 38248024e4aSbellard q (modes 0,2-5) 38348024e4aSbellard v (modes 0,2-5,7.0,7.1) 38448024e4aSbellard b (modes 0,2-5,7.2) 38548024e4aSbellard w (modes 2-5,7.2) 38648024e4aSbellard y (modes 2,5) 38748024e4aSbellard z (modes 2,5,7.2) 38848024e4aSbellard x mov3q immediate operand. 38948024e4aSbellard 4 (modes 2,3,4,5) 39048024e4aSbellard */ 39148024e4aSbellard 39248024e4aSbellard /* For the 68851: */ 39348024e4aSbellard /* I didn't use much imagination in choosing the 39448024e4aSbellard following codes, so many of them aren't very 39548024e4aSbellard mnemonic. -rab 39648024e4aSbellard 39748024e4aSbellard 0 32 bit pmmu register 39848024e4aSbellard Possible values: 39948024e4aSbellard 000 TC Translation Control Register (68030, 68851) 40048024e4aSbellard 40148024e4aSbellard 1 16 bit pmmu register 40248024e4aSbellard 111 AC Access Control (68851) 40348024e4aSbellard 40448024e4aSbellard 2 8 bit pmmu register 40548024e4aSbellard 100 CAL Current Access Level (68851) 40648024e4aSbellard 101 VAL Validate Access Level (68851) 40748024e4aSbellard 110 SCC Stack Change Control (68851) 40848024e4aSbellard 40948024e4aSbellard 3 68030-only pmmu registers (32 bit) 41048024e4aSbellard 010 TT0 Transparent Translation reg 0 41148024e4aSbellard (aka Access Control reg 0 -- AC0 -- on 68ec030) 41248024e4aSbellard 011 TT1 Transparent Translation reg 1 41348024e4aSbellard (aka Access Control reg 1 -- AC1 -- on 68ec030) 41448024e4aSbellard 41548024e4aSbellard W wide pmmu registers 41648024e4aSbellard Possible values: 41748024e4aSbellard 001 DRP Dma Root Pointer (68851) 41848024e4aSbellard 010 SRP Supervisor Root Pointer (68030, 68851) 41948024e4aSbellard 011 CRP Cpu Root Pointer (68030, 68851) 42048024e4aSbellard 42148024e4aSbellard f function code register (68030, 68851) 42248024e4aSbellard 0 SFC 42348024e4aSbellard 1 DFC 42448024e4aSbellard 42548024e4aSbellard V VAL register only (68851) 42648024e4aSbellard 42748024e4aSbellard X BADx, BACx (16 bit) 42848024e4aSbellard 100 BAD Breakpoint Acknowledge Data (68851) 42948024e4aSbellard 101 BAC Breakpoint Acknowledge Control (68851) 43048024e4aSbellard 43148024e4aSbellard Y PSR (68851) (MMUSR on 68030) (ACUSR on 68ec030) 43248024e4aSbellard Z PCSR (68851) 43348024e4aSbellard 43448024e4aSbellard | memory (modes 2-6, 7.*) 43548024e4aSbellard 43648024e4aSbellard t address test level (68030 only) 43748024e4aSbellard Stored as 3 bits, range 0-7. 43848024e4aSbellard Also used for breakpoint instruction now. 43948024e4aSbellard 44048024e4aSbellard */ 44148024e4aSbellard 44248024e4aSbellard /* Places to put an operand, for non-general operands: 44348024e4aSbellard Characters used: BbCcDdFfGgHhIijkLlMmNnostWw123456789/ 44448024e4aSbellard 44548024e4aSbellard s source, low bits of first word. 44648024e4aSbellard d dest, shifted 9 in first word 44748024e4aSbellard 1 second word, shifted 12 44848024e4aSbellard 2 second word, shifted 6 44948024e4aSbellard 3 second word, shifted 0 45048024e4aSbellard 4 third word, shifted 12 45148024e4aSbellard 5 third word, shifted 6 45248024e4aSbellard 6 third word, shifted 0 45348024e4aSbellard 7 second word, shifted 7 45448024e4aSbellard 8 second word, shifted 10 45548024e4aSbellard 9 second word, shifted 5 45648024e4aSbellard D store in both place 1 and place 3; for divul and divsl. 45748024e4aSbellard B first word, low byte, for branch displacements 45848024e4aSbellard W second word (entire), for branch displacements 45948024e4aSbellard L second and third words (entire), for branch displacements 46048024e4aSbellard (also overloaded for move16) 46148024e4aSbellard b second word, low byte 46248024e4aSbellard w second word (entire) [variable word/long branch offset for dbra] 46348024e4aSbellard W second word (entire) (must be signed 16 bit value) 46448024e4aSbellard l second and third word (entire) 46548024e4aSbellard g variable branch offset for bra and similar instructions. 46648024e4aSbellard The place to store depends on the magnitude of offset. 46748024e4aSbellard t store in both place 7 and place 8; for floating point operations 46848024e4aSbellard c branch offset for cpBcc operations. 46948024e4aSbellard The place to store is word two if bit six of word one is zero, 47048024e4aSbellard and words two and three if bit six of word one is one. 47148024e4aSbellard i Increment by two, to skip over coprocessor extended operands. Only 47248024e4aSbellard works with the 'I' format. 47348024e4aSbellard k Dynamic K-factor field. Bits 6-4 of word 2, used as a register number. 47448024e4aSbellard Also used for dynamic fmovem instruction. 47548024e4aSbellard C floating point coprocessor constant - 7 bits. Also used for static 47648024e4aSbellard K-factors... 47748024e4aSbellard j Movec register #, stored in 12 low bits of second word. 47848024e4aSbellard m For M[S]ACx; 4 bits split with MSB shifted 6 bits in first word 47948024e4aSbellard and remaining 3 bits of register shifted 9 bits in first word. 48048024e4aSbellard Indicate upper/lower in 1 bit shifted 7 bits in second word. 48148024e4aSbellard Use with `R' or `u' format. 482*2dbb1308Szhaolichang n `m' without upper/lower indication. (For M[S]ACx; 4 bits split 48348024e4aSbellard with MSB shifted 6 bits in first word and remaining 3 bits of 48448024e4aSbellard register shifted 9 bits in first word. No upper/lower 48548024e4aSbellard indication is done.) Use with `R' or `u' format. 48648024e4aSbellard o For M[S]ACw; 4 bits shifted 12 in second word (like `1'). 48748024e4aSbellard Indicate upper/lower in 1 bit shifted 7 bits in second word. 48848024e4aSbellard Use with `R' or `u' format. 48948024e4aSbellard M For M[S]ACw; 4 bits in low bits of first word. Indicate 49048024e4aSbellard upper/lower in 1 bit shifted 6 bits in second word. Use with 49148024e4aSbellard `R' or `u' format. 49248024e4aSbellard N For M[S]ACw; 4 bits in low bits of second word. Indicate 49348024e4aSbellard upper/lower in 1 bit shifted 6 bits in second word. Use with 49448024e4aSbellard `R' or `u' format. 49548024e4aSbellard h shift indicator (scale factor), 1 bit shifted 10 in second word 49648024e4aSbellard 49748024e4aSbellard Places to put operand, for general operands: 49848024e4aSbellard d destination, shifted 6 bits in first word 49948024e4aSbellard b source, at low bit of first word, and immediate uses one byte 50048024e4aSbellard w source, at low bit of first word, and immediate uses two bytes 50148024e4aSbellard l source, at low bit of first word, and immediate uses four bytes 50248024e4aSbellard s source, at low bit of first word. 50348024e4aSbellard Used sometimes in contexts where immediate is not allowed anyway. 50448024e4aSbellard f single precision float, low bit of 1st word, immediate uses 4 bytes 50548024e4aSbellard F double precision float, low bit of 1st word, immediate uses 8 bytes 50648024e4aSbellard x extended precision float, low bit of 1st word, immediate uses 12 bytes 50748024e4aSbellard p packed float, low bit of 1st word, immediate uses 12 bytes 50848024e4aSbellard G EMAC accumulator, load (bit 4 2nd word, !bit8 first word) 50948024e4aSbellard H EMAC accumulator, non load (bit 4 2nd word, bit 8 first word) 51048024e4aSbellard F EMAC ACCx 51148024e4aSbellard f EMAC ACCy 51248024e4aSbellard I MAC/EMAC scale factor 51348024e4aSbellard / Like 's', but set 2nd word, bit 5 if trailing_ampersand set 51448024e4aSbellard ] first word, bit 10 51548024e4aSbellard */ 51648024e4aSbellard 51748024e4aSbellard extern const struct m68k_opcode m68k_opcodes[]; 51848024e4aSbellard extern const struct m68k_opcode_alias m68k_opcode_aliases[]; 51948024e4aSbellard 52048024e4aSbellard extern const int m68k_numopcodes, m68k_numaliases; 52148024e4aSbellard 52248024e4aSbellard /* **** End of m68k-opcode.h */ 52348024e4aSbellard /* **** m68k-dis.c from sourceware.org CVS 2005-08-14. */ 52448024e4aSbellard /* Print Motorola 68k instructions. 52548024e4aSbellard Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 52648024e4aSbellard 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 52748024e4aSbellard Free Software Foundation, Inc. 52848024e4aSbellard 52948024e4aSbellard This file is free software; you can redistribute it and/or modify 53048024e4aSbellard it under the terms of the GNU General Public License as published by 53148024e4aSbellard the Free Software Foundation; either version 2 of the License, or 53248024e4aSbellard (at your option) any later version. 53348024e4aSbellard 53448024e4aSbellard This program is distributed in the hope that it will be useful, 53548024e4aSbellard but WITHOUT ANY WARRANTY; without even the implied warranty of 53648024e4aSbellard MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 53748024e4aSbellard GNU General Public License for more details. 53848024e4aSbellard 53948024e4aSbellard You should have received a copy of the GNU General Public License 5408167ee88SBlue Swirl along with this program; if not, see <http://www.gnu.org/licenses/>. */ 54148024e4aSbellard 54248024e4aSbellard /* Local function prototypes. */ 54348024e4aSbellard 5447ccfb2ebSblueswir1 static const char * const fpcr_names[] = 54548024e4aSbellard { 54648024e4aSbellard "", "%fpiar", "%fpsr", "%fpiar/%fpsr", "%fpcr", 54748024e4aSbellard "%fpiar/%fpcr", "%fpsr/%fpcr", "%fpiar/%fpsr/%fpcr" 54848024e4aSbellard }; 54948024e4aSbellard 5507ccfb2ebSblueswir1 static const char *const reg_names[] = 55148024e4aSbellard { 55248024e4aSbellard "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", 55348024e4aSbellard "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%fp", "%sp", 55448024e4aSbellard "%ps", "%pc" 55548024e4aSbellard }; 55648024e4aSbellard 55748024e4aSbellard /* Name of register halves for MAC/EMAC. 558aa1f17c1Sths Separate from reg_names since 'spu', 'fpl' look weird. */ 5597ccfb2ebSblueswir1 static const char *const reg_half_names[] = 56048024e4aSbellard { 56148024e4aSbellard "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6", "%d7", 56248024e4aSbellard "%a0", "%a1", "%a2", "%a3", "%a4", "%a5", "%a6", "%a7", 56348024e4aSbellard "%ps", "%pc" 56448024e4aSbellard }; 56548024e4aSbellard 56648024e4aSbellard /* Sign-extend an (unsigned char). */ 56748024e4aSbellard #if __STDC__ == 1 56848024e4aSbellard #define COERCE_SIGNED_CHAR(ch) ((signed char) (ch)) 56948024e4aSbellard #else 57048024e4aSbellard #define COERCE_SIGNED_CHAR(ch) ((int) (((ch) ^ 0x80) & 0xFF) - 128) 57148024e4aSbellard #endif 57248024e4aSbellard 57348024e4aSbellard /* Get a 1 byte signed integer. */ 57467774a04SBlue Swirl #define NEXTBYTE(p) (p += 2, fetch_data(info, p), COERCE_SIGNED_CHAR(p[-1])) 57548024e4aSbellard 57648024e4aSbellard /* Get a 2 byte signed integer. */ 57748024e4aSbellard #define COERCE16(x) ((int) (((x) ^ 0x8000) - 0x8000)) 57848024e4aSbellard #define NEXTWORD(p) \ 57967774a04SBlue Swirl (p += 2, fetch_data(info, p), \ 58048024e4aSbellard COERCE16 ((p[-2] << 8) + p[-1])) 58148024e4aSbellard 58248024e4aSbellard /* Get a 4 byte signed integer. */ 58348024e4aSbellard #define COERCE32(x) ((bfd_signed_vma) ((x) ^ 0x80000000) - 0x80000000) 58448024e4aSbellard #define NEXTLONG(p) \ 58567774a04SBlue Swirl (p += 4, fetch_data(info, p), \ 58648024e4aSbellard (COERCE32 ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1]))) 58748024e4aSbellard 58848024e4aSbellard /* Get a 4 byte unsigned integer. */ 58948024e4aSbellard #define NEXTULONG(p) \ 59067774a04SBlue Swirl (p += 4, fetch_data(info, p), \ 59148024e4aSbellard (unsigned int) ((((((p[-4] << 8) + p[-3]) << 8) + p[-2]) << 8) + p[-1])) 59248024e4aSbellard 59348024e4aSbellard /* Get a single precision float. */ 59448024e4aSbellard #define NEXTSINGLE(val, p) \ 59567774a04SBlue Swirl (p += 4, fetch_data(info, p), \ 59648024e4aSbellard floatformat_to_double (&floatformat_ieee_single_big, (char *) p - 4, &val)) 59748024e4aSbellard 59848024e4aSbellard /* Get a double precision float. */ 59948024e4aSbellard #define NEXTDOUBLE(val, p) \ 60067774a04SBlue Swirl (p += 8, fetch_data(info, p), \ 60148024e4aSbellard floatformat_to_double (&floatformat_ieee_double_big, (char *) p - 8, &val)) 60248024e4aSbellard 60348024e4aSbellard /* Get an extended precision float. */ 60448024e4aSbellard #define NEXTEXTEND(val, p) \ 60567774a04SBlue Swirl (p += 12, fetch_data(info, p), \ 60648024e4aSbellard floatformat_to_double (&floatformat_m68881_ext, (char *) p - 12, &val)) 60748024e4aSbellard 60848024e4aSbellard /* Need a function to convert from packed to double 60948024e4aSbellard precision. Actually, it's easier to print a 61048024e4aSbellard packed number than a double anyway, so maybe 61148024e4aSbellard there should be a special case to handle this... */ 61248024e4aSbellard #define NEXTPACKED(p) \ 61367774a04SBlue Swirl (p += 12, fetch_data(info, p), 0.0) 61448024e4aSbellard 61548024e4aSbellard /* Maximum length of an instruction. */ 61648024e4aSbellard #define MAXLEN 22 61748024e4aSbellard 61848024e4aSbellard struct private 61948024e4aSbellard { 62048024e4aSbellard /* Points to first byte not fetched. */ 62148024e4aSbellard bfd_byte *max_fetched; 62248024e4aSbellard bfd_byte the_buffer[MAXLEN]; 62348024e4aSbellard bfd_vma insn_start; 6246ab7e546SPeter Maydell sigjmp_buf bailout; 62548024e4aSbellard }; 62648024e4aSbellard 62748024e4aSbellard /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive) 62848024e4aSbellard to ADDR (exclusive) are valid. Returns 1 for success, longjmps 62948024e4aSbellard on error. */ 63048024e4aSbellard static int 63167774a04SBlue Swirl fetch_data2(struct disassemble_info *info, bfd_byte *addr) 63248024e4aSbellard { 63348024e4aSbellard int status; 63448024e4aSbellard struct private *priv = (struct private *)info->private_data; 63548024e4aSbellard bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer); 63648024e4aSbellard 63748024e4aSbellard status = (*info->read_memory_func) (start, 63848024e4aSbellard priv->max_fetched, 63948024e4aSbellard addr - priv->max_fetched, 64048024e4aSbellard info); 64148024e4aSbellard if (status != 0) 64248024e4aSbellard { 64348024e4aSbellard (*info->memory_error_func) (status, start, info); 6446ab7e546SPeter Maydell siglongjmp(priv->bailout, 1); 64548024e4aSbellard } 64648024e4aSbellard else 64748024e4aSbellard priv->max_fetched = addr; 64848024e4aSbellard return 1; 64948024e4aSbellard } 65067774a04SBlue Swirl 65167774a04SBlue Swirl static int 65267774a04SBlue Swirl fetch_data(struct disassemble_info *info, bfd_byte *addr) 65367774a04SBlue Swirl { 65467774a04SBlue Swirl if (addr <= ((struct private *) (info->private_data))->max_fetched) { 65567774a04SBlue Swirl return 1; 65667774a04SBlue Swirl } else { 65767774a04SBlue Swirl return fetch_data2(info, addr); 65867774a04SBlue Swirl } 65967774a04SBlue Swirl } 66067774a04SBlue Swirl 66148024e4aSbellard /* This function is used to print to the bit-bucket. */ 66248024e4aSbellard static int 66348024e4aSbellard dummy_printer (FILE *file ATTRIBUTE_UNUSED, 66448024e4aSbellard const char *format ATTRIBUTE_UNUSED, 66548024e4aSbellard ...) 66648024e4aSbellard { 66748024e4aSbellard return 0; 66848024e4aSbellard } 66948024e4aSbellard 67048024e4aSbellard static void 67148024e4aSbellard dummy_print_address (bfd_vma vma ATTRIBUTE_UNUSED, 67248024e4aSbellard struct disassemble_info *info ATTRIBUTE_UNUSED) 67348024e4aSbellard { 67448024e4aSbellard } 67548024e4aSbellard 67648024e4aSbellard /* Fetch BITS bits from a position in the instruction specified by CODE. 67748024e4aSbellard CODE is a "place to put an argument", or 'x' for a destination 67848024e4aSbellard that is a general address (mode and register). 67948024e4aSbellard BUFFER contains the instruction. */ 68048024e4aSbellard 68148024e4aSbellard static int 68248024e4aSbellard fetch_arg (unsigned char *buffer, 68348024e4aSbellard int code, 68448024e4aSbellard int bits, 68548024e4aSbellard disassemble_info *info) 68648024e4aSbellard { 68748024e4aSbellard int val = 0; 68848024e4aSbellard 68948024e4aSbellard switch (code) 69048024e4aSbellard { 69148024e4aSbellard case '/': /* MAC/EMAC mask bit. */ 69248024e4aSbellard val = buffer[3] >> 5; 69348024e4aSbellard break; 69448024e4aSbellard 69548024e4aSbellard case 'G': /* EMAC ACC load. */ 69648024e4aSbellard val = ((buffer[3] >> 3) & 0x2) | ((~buffer[1] >> 7) & 0x1); 69748024e4aSbellard break; 69848024e4aSbellard 69948024e4aSbellard case 'H': /* EMAC ACC !load. */ 70048024e4aSbellard val = ((buffer[3] >> 3) & 0x2) | ((buffer[1] >> 7) & 0x1); 70148024e4aSbellard break; 70248024e4aSbellard 70348024e4aSbellard case ']': /* EMAC ACCEXT bit. */ 70448024e4aSbellard val = buffer[0] >> 2; 70548024e4aSbellard break; 70648024e4aSbellard 70748024e4aSbellard case 'I': /* MAC/EMAC scale factor. */ 70848024e4aSbellard val = buffer[2] >> 1; 70948024e4aSbellard break; 71048024e4aSbellard 71148024e4aSbellard case 'F': /* EMAC ACCx. */ 71248024e4aSbellard val = buffer[0] >> 1; 71348024e4aSbellard break; 71448024e4aSbellard 71548024e4aSbellard case 'f': 71648024e4aSbellard val = buffer[1]; 71748024e4aSbellard break; 71848024e4aSbellard 71948024e4aSbellard case 's': 72048024e4aSbellard val = buffer[1]; 72148024e4aSbellard break; 72248024e4aSbellard 72348024e4aSbellard case 'd': /* Destination, for register or quick. */ 72448024e4aSbellard val = (buffer[0] << 8) + buffer[1]; 72548024e4aSbellard val >>= 9; 72648024e4aSbellard break; 72748024e4aSbellard 72848024e4aSbellard case 'x': /* Destination, for general arg. */ 72948024e4aSbellard val = (buffer[0] << 8) + buffer[1]; 73048024e4aSbellard val >>= 6; 73148024e4aSbellard break; 73248024e4aSbellard 73348024e4aSbellard case 'k': 73467774a04SBlue Swirl fetch_data(info, buffer + 3); 73548024e4aSbellard val = (buffer[3] >> 4); 73648024e4aSbellard break; 73748024e4aSbellard 73848024e4aSbellard case 'C': 73967774a04SBlue Swirl fetch_data(info, buffer + 3); 74048024e4aSbellard val = buffer[3]; 74148024e4aSbellard break; 74248024e4aSbellard 74348024e4aSbellard case '1': 74467774a04SBlue Swirl fetch_data(info, buffer + 3); 74548024e4aSbellard val = (buffer[2] << 8) + buffer[3]; 74648024e4aSbellard val >>= 12; 74748024e4aSbellard break; 74848024e4aSbellard 74948024e4aSbellard case '2': 75067774a04SBlue Swirl fetch_data(info, buffer + 3); 75148024e4aSbellard val = (buffer[2] << 8) + buffer[3]; 75248024e4aSbellard val >>= 6; 75348024e4aSbellard break; 75448024e4aSbellard 75548024e4aSbellard case '3': 75648024e4aSbellard case 'j': 75767774a04SBlue Swirl fetch_data(info, buffer + 3); 75848024e4aSbellard val = (buffer[2] << 8) + buffer[3]; 75948024e4aSbellard break; 76048024e4aSbellard 76148024e4aSbellard case '4': 76267774a04SBlue Swirl fetch_data(info, buffer + 5); 76348024e4aSbellard val = (buffer[4] << 8) + buffer[5]; 76448024e4aSbellard val >>= 12; 76548024e4aSbellard break; 76648024e4aSbellard 76748024e4aSbellard case '5': 76867774a04SBlue Swirl fetch_data(info, buffer + 5); 76948024e4aSbellard val = (buffer[4] << 8) + buffer[5]; 77048024e4aSbellard val >>= 6; 77148024e4aSbellard break; 77248024e4aSbellard 77348024e4aSbellard case '6': 77467774a04SBlue Swirl fetch_data(info, buffer + 5); 77548024e4aSbellard val = (buffer[4] << 8) + buffer[5]; 77648024e4aSbellard break; 77748024e4aSbellard 77848024e4aSbellard case '7': 77967774a04SBlue Swirl fetch_data(info, buffer + 3); 78048024e4aSbellard val = (buffer[2] << 8) + buffer[3]; 78148024e4aSbellard val >>= 7; 78248024e4aSbellard break; 78348024e4aSbellard 78448024e4aSbellard case '8': 78567774a04SBlue Swirl fetch_data(info, buffer + 3); 78648024e4aSbellard val = (buffer[2] << 8) + buffer[3]; 78748024e4aSbellard val >>= 10; 78848024e4aSbellard break; 78948024e4aSbellard 79048024e4aSbellard case '9': 79167774a04SBlue Swirl fetch_data(info, buffer + 3); 79248024e4aSbellard val = (buffer[2] << 8) + buffer[3]; 79348024e4aSbellard val >>= 5; 79448024e4aSbellard break; 79548024e4aSbellard 79648024e4aSbellard case 'e': 79748024e4aSbellard val = (buffer[1] >> 6); 79848024e4aSbellard break; 79948024e4aSbellard 80048024e4aSbellard case 'm': 80148024e4aSbellard val = (buffer[1] & 0x40 ? 0x8 : 0) 80248024e4aSbellard | ((buffer[0] >> 1) & 0x7) 80348024e4aSbellard | (buffer[3] & 0x80 ? 0x10 : 0); 80448024e4aSbellard break; 80548024e4aSbellard 80648024e4aSbellard case 'n': 80748024e4aSbellard val = (buffer[1] & 0x40 ? 0x8 : 0) | ((buffer[0] >> 1) & 0x7); 80848024e4aSbellard break; 80948024e4aSbellard 81048024e4aSbellard case 'o': 81148024e4aSbellard val = (buffer[2] >> 4) | (buffer[3] & 0x80 ? 0x10 : 0); 81248024e4aSbellard break; 81348024e4aSbellard 81448024e4aSbellard case 'M': 81548024e4aSbellard val = (buffer[1] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0); 81648024e4aSbellard break; 81748024e4aSbellard 81848024e4aSbellard case 'N': 81948024e4aSbellard val = (buffer[3] & 0xf) | (buffer[3] & 0x40 ? 0x10 : 0); 82048024e4aSbellard break; 82148024e4aSbellard 82248024e4aSbellard case 'h': 82348024e4aSbellard val = buffer[2] >> 2; 82448024e4aSbellard break; 82548024e4aSbellard 82648024e4aSbellard default: 82748024e4aSbellard abort (); 82848024e4aSbellard } 82948024e4aSbellard 83048024e4aSbellard switch (bits) 83148024e4aSbellard { 83248024e4aSbellard case 1: 83348024e4aSbellard return val & 1; 83448024e4aSbellard case 2: 83548024e4aSbellard return val & 3; 83648024e4aSbellard case 3: 83748024e4aSbellard return val & 7; 83848024e4aSbellard case 4: 83948024e4aSbellard return val & 017; 84048024e4aSbellard case 5: 84148024e4aSbellard return val & 037; 84248024e4aSbellard case 6: 84348024e4aSbellard return val & 077; 84448024e4aSbellard case 7: 84548024e4aSbellard return val & 0177; 84648024e4aSbellard case 8: 84748024e4aSbellard return val & 0377; 84848024e4aSbellard case 12: 84948024e4aSbellard return val & 07777; 85048024e4aSbellard default: 85148024e4aSbellard abort (); 85248024e4aSbellard } 85348024e4aSbellard } 85448024e4aSbellard 85548024e4aSbellard /* Check if an EA is valid for a particular code. This is required 85648024e4aSbellard for the EMAC instructions since the type of source address determines 857*2dbb1308Szhaolichang if it is a EMAC-load instruction if the EA is mode 2-5, otherwise it 85848024e4aSbellard is a non-load EMAC instruction and the bits mean register Ry. 85948024e4aSbellard A similar case exists for the movem instructions where the register 86048024e4aSbellard mask is interpreted differently for different EAs. */ 86148024e4aSbellard 86248024e4aSbellard static bfd_boolean 86348024e4aSbellard m68k_valid_ea (char code, int val) 86448024e4aSbellard { 86548024e4aSbellard int mode, mask; 86648024e4aSbellard #define M(n0,n1,n2,n3,n4,n5,n6,n70,n71,n72,n73,n74) \ 86748024e4aSbellard (n0 | n1 << 1 | n2 << 2 | n3 << 3 | n4 << 4 | n5 << 5 | n6 << 6 \ 86848024e4aSbellard | n70 << 7 | n71 << 8 | n72 << 9 | n73 << 10 | n74 << 11) 86948024e4aSbellard 87048024e4aSbellard switch (code) 87148024e4aSbellard { 87248024e4aSbellard case '*': 87348024e4aSbellard mask = M (1,1,1,1,1,1,1,1,1,1,1,1); 87448024e4aSbellard break; 87548024e4aSbellard case '~': 87648024e4aSbellard mask = M (0,0,1,1,1,1,1,1,1,0,0,0); 87748024e4aSbellard break; 87848024e4aSbellard case '%': 87948024e4aSbellard mask = M (1,1,1,1,1,1,1,1,1,0,0,0); 88048024e4aSbellard break; 88148024e4aSbellard case ';': 88248024e4aSbellard mask = M (1,0,1,1,1,1,1,1,1,1,1,1); 88348024e4aSbellard break; 88448024e4aSbellard case '@': 88548024e4aSbellard mask = M (1,0,1,1,1,1,1,1,1,1,1,0); 88648024e4aSbellard break; 88748024e4aSbellard case '!': 88848024e4aSbellard mask = M (0,0,1,0,0,1,1,1,1,1,1,0); 88948024e4aSbellard break; 89048024e4aSbellard case '&': 89148024e4aSbellard mask = M (0,0,1,0,0,1,1,1,1,0,0,0); 89248024e4aSbellard break; 89348024e4aSbellard case '$': 89448024e4aSbellard mask = M (1,0,1,1,1,1,1,1,1,0,0,0); 89548024e4aSbellard break; 89648024e4aSbellard case '?': 89748024e4aSbellard mask = M (1,0,1,0,0,1,1,1,1,0,0,0); 89848024e4aSbellard break; 89948024e4aSbellard case '/': 90048024e4aSbellard mask = M (1,0,1,0,0,1,1,1,1,1,1,0); 90148024e4aSbellard break; 90248024e4aSbellard case '|': 90348024e4aSbellard mask = M (0,0,1,0,0,1,1,1,1,1,1,0); 90448024e4aSbellard break; 90548024e4aSbellard case '>': 90648024e4aSbellard mask = M (0,0,1,0,1,1,1,1,1,0,0,0); 90748024e4aSbellard break; 90848024e4aSbellard case '<': 90948024e4aSbellard mask = M (0,0,1,1,0,1,1,1,1,1,1,0); 91048024e4aSbellard break; 91148024e4aSbellard case 'm': 91248024e4aSbellard mask = M (1,1,1,1,1,0,0,0,0,0,0,0); 91348024e4aSbellard break; 91448024e4aSbellard case 'n': 91548024e4aSbellard mask = M (0,0,0,0,0,1,0,0,0,1,0,0); 91648024e4aSbellard break; 91748024e4aSbellard case 'o': 91848024e4aSbellard mask = M (0,0,0,0,0,0,1,1,1,0,1,1); 91948024e4aSbellard break; 92048024e4aSbellard case 'p': 92148024e4aSbellard mask = M (1,1,1,1,1,1,0,0,0,0,0,0); 92248024e4aSbellard break; 92348024e4aSbellard case 'q': 92448024e4aSbellard mask = M (1,0,1,1,1,1,0,0,0,0,0,0); 92548024e4aSbellard break; 92648024e4aSbellard case 'v': 92748024e4aSbellard mask = M (1,0,1,1,1,1,0,1,1,0,0,0); 92848024e4aSbellard break; 92948024e4aSbellard case 'b': 93048024e4aSbellard mask = M (1,0,1,1,1,1,0,0,0,1,0,0); 93148024e4aSbellard break; 93248024e4aSbellard case 'w': 93348024e4aSbellard mask = M (0,0,1,1,1,1,0,0,0,1,0,0); 93448024e4aSbellard break; 93548024e4aSbellard case 'y': 93648024e4aSbellard mask = M (0,0,1,0,0,1,0,0,0,0,0,0); 93748024e4aSbellard break; 93848024e4aSbellard case 'z': 93948024e4aSbellard mask = M (0,0,1,0,0,1,0,0,0,1,0,0); 94048024e4aSbellard break; 94148024e4aSbellard case '4': 94248024e4aSbellard mask = M (0,0,1,1,1,1,0,0,0,0,0,0); 94348024e4aSbellard break; 94448024e4aSbellard default: 94548024e4aSbellard abort (); 94648024e4aSbellard } 94748024e4aSbellard #undef M 94848024e4aSbellard 94948024e4aSbellard mode = (val >> 3) & 7; 95048024e4aSbellard if (mode == 7) 95148024e4aSbellard mode += val & 7; 95248024e4aSbellard return (mask & (1 << mode)) != 0; 95348024e4aSbellard } 95448024e4aSbellard 95548024e4aSbellard /* Print a base register REGNO and displacement DISP, on INFO->STREAM. 95648024e4aSbellard REGNO = -1 for pc, -2 for none (suppressed). */ 95748024e4aSbellard 95848024e4aSbellard static void 95948024e4aSbellard print_base (int regno, bfd_vma disp, disassemble_info *info) 96048024e4aSbellard { 96148024e4aSbellard if (regno == -1) 96248024e4aSbellard { 96348024e4aSbellard (*info->fprintf_func) (info->stream, "%%pc@("); 96448024e4aSbellard (*info->print_address_func) (disp, info); 96548024e4aSbellard } 96648024e4aSbellard else 96748024e4aSbellard { 96848024e4aSbellard char buf[50]; 96948024e4aSbellard 97048024e4aSbellard if (regno == -2) 97148024e4aSbellard (*info->fprintf_func) (info->stream, "@("); 97248024e4aSbellard else if (regno == -3) 97348024e4aSbellard (*info->fprintf_func) (info->stream, "%%zpc@("); 97448024e4aSbellard else 97548024e4aSbellard (*info->fprintf_func) (info->stream, "%s@(", reg_names[regno]); 97648024e4aSbellard 97748024e4aSbellard sprintf_vma (buf, disp); 97848024e4aSbellard (*info->fprintf_func) (info->stream, "%s", buf); 97948024e4aSbellard } 98048024e4aSbellard } 98148024e4aSbellard 98248024e4aSbellard /* Print an indexed argument. The base register is BASEREG (-1 for pc). 98348024e4aSbellard P points to extension word, in buffer. 98448024e4aSbellard ADDR is the nominal core address of that extension word. */ 98548024e4aSbellard 98648024e4aSbellard static unsigned char * 98748024e4aSbellard print_indexed (int basereg, 98848024e4aSbellard unsigned char *p, 98948024e4aSbellard bfd_vma addr, 99048024e4aSbellard disassemble_info *info) 99148024e4aSbellard { 99248024e4aSbellard int word; 9937ccfb2ebSblueswir1 static const char *const scales[] = { "", ":2", ":4", ":8" }; 99448024e4aSbellard bfd_vma base_disp; 99548024e4aSbellard bfd_vma outer_disp; 99648024e4aSbellard char buf[40]; 99748024e4aSbellard char vmabuf[50]; 99848024e4aSbellard 99948024e4aSbellard word = NEXTWORD (p); 100048024e4aSbellard 100148024e4aSbellard /* Generate the text for the index register. 100248024e4aSbellard Where this will be output is not yet determined. */ 100348024e4aSbellard sprintf (buf, "%s:%c%s", 100448024e4aSbellard reg_names[(word >> 12) & 0xf], 100548024e4aSbellard (word & 0x800) ? 'l' : 'w', 100648024e4aSbellard scales[(word >> 9) & 3]); 100748024e4aSbellard 100848024e4aSbellard /* Handle the 68000 style of indexing. */ 100948024e4aSbellard 101048024e4aSbellard if ((word & 0x100) == 0) 101148024e4aSbellard { 101248024e4aSbellard base_disp = word & 0xff; 101348024e4aSbellard if ((base_disp & 0x80) != 0) 101448024e4aSbellard base_disp -= 0x100; 101548024e4aSbellard if (basereg == -1) 101648024e4aSbellard base_disp += addr; 101748024e4aSbellard print_base (basereg, base_disp, info); 101848024e4aSbellard (*info->fprintf_func) (info->stream, ",%s)", buf); 101948024e4aSbellard return p; 102048024e4aSbellard } 102148024e4aSbellard 102248024e4aSbellard /* Handle the generalized kind. */ 102348024e4aSbellard /* First, compute the displacement to add to the base register. */ 102448024e4aSbellard if (word & 0200) 102548024e4aSbellard { 102648024e4aSbellard if (basereg == -1) 102748024e4aSbellard basereg = -3; 102848024e4aSbellard else 102948024e4aSbellard basereg = -2; 103048024e4aSbellard } 103148024e4aSbellard if (word & 0100) 103248024e4aSbellard buf[0] = '\0'; 103348024e4aSbellard base_disp = 0; 103448024e4aSbellard switch ((word >> 4) & 3) 103548024e4aSbellard { 103648024e4aSbellard case 2: 103748024e4aSbellard base_disp = NEXTWORD (p); 103848024e4aSbellard break; 103948024e4aSbellard case 3: 104048024e4aSbellard base_disp = NEXTLONG (p); 104148024e4aSbellard } 104248024e4aSbellard if (basereg == -1) 104348024e4aSbellard base_disp += addr; 104448024e4aSbellard 104548024e4aSbellard /* Handle single-level case (not indirect). */ 104648024e4aSbellard if ((word & 7) == 0) 104748024e4aSbellard { 104848024e4aSbellard print_base (basereg, base_disp, info); 104948024e4aSbellard if (buf[0] != '\0') 105048024e4aSbellard (*info->fprintf_func) (info->stream, ",%s", buf); 105148024e4aSbellard (*info->fprintf_func) (info->stream, ")"); 105248024e4aSbellard return p; 105348024e4aSbellard } 105448024e4aSbellard 105548024e4aSbellard /* Two level. Compute displacement to add after indirection. */ 105648024e4aSbellard outer_disp = 0; 105748024e4aSbellard switch (word & 3) 105848024e4aSbellard { 105948024e4aSbellard case 2: 106048024e4aSbellard outer_disp = NEXTWORD (p); 106148024e4aSbellard break; 106248024e4aSbellard case 3: 106348024e4aSbellard outer_disp = NEXTLONG (p); 106448024e4aSbellard } 106548024e4aSbellard 106648024e4aSbellard print_base (basereg, base_disp, info); 106748024e4aSbellard if ((word & 4) == 0 && buf[0] != '\0') 106848024e4aSbellard { 106948024e4aSbellard (*info->fprintf_func) (info->stream, ",%s", buf); 107048024e4aSbellard buf[0] = '\0'; 107148024e4aSbellard } 107248024e4aSbellard sprintf_vma (vmabuf, outer_disp); 107348024e4aSbellard (*info->fprintf_func) (info->stream, ")@(%s", vmabuf); 107448024e4aSbellard if (buf[0] != '\0') 107548024e4aSbellard (*info->fprintf_func) (info->stream, ",%s", buf); 107648024e4aSbellard (*info->fprintf_func) (info->stream, ")"); 107748024e4aSbellard 107848024e4aSbellard return p; 107948024e4aSbellard } 108048024e4aSbellard 108148024e4aSbellard /* Returns number of bytes "eaten" by the operand, or 108248024e4aSbellard return -1 if an invalid operand was found, or -2 if 1083*2dbb1308Szhaolichang an opcode table error was found. 108448024e4aSbellard ADDR is the pc for this arg to be relative to. */ 108548024e4aSbellard 108648024e4aSbellard static int 108748024e4aSbellard print_insn_arg (const char *d, 108848024e4aSbellard unsigned char *buffer, 108948024e4aSbellard unsigned char *p0, 109048024e4aSbellard bfd_vma addr, 109148024e4aSbellard disassemble_info *info) 109248024e4aSbellard { 109348024e4aSbellard int val = 0; 109448024e4aSbellard int place = d[1]; 109548024e4aSbellard unsigned char *p = p0; 109648024e4aSbellard int regno; 109748024e4aSbellard const char *regname; 109848024e4aSbellard unsigned char *p1; 109948024e4aSbellard double flval; 110048024e4aSbellard int flt_p; 110148024e4aSbellard bfd_signed_vma disp; 110248024e4aSbellard unsigned int uval; 110348024e4aSbellard 110448024e4aSbellard switch (*d) 110548024e4aSbellard { 110648024e4aSbellard case 'c': /* Cache identifier. */ 110748024e4aSbellard { 11087ccfb2ebSblueswir1 static const char *const cacheFieldName[] = { "nc", "dc", "ic", "bc" }; 110948024e4aSbellard val = fetch_arg (buffer, place, 2, info); 1110d14a68b6SStefan Weil (*info->fprintf_func) (info->stream, "%s", cacheFieldName[val]); 111148024e4aSbellard break; 111248024e4aSbellard } 111348024e4aSbellard 111448024e4aSbellard case 'a': /* Address register indirect only. Cf. case '+'. */ 111548024e4aSbellard { 111648024e4aSbellard (*info->fprintf_func) 111748024e4aSbellard (info->stream, 111848024e4aSbellard "%s@", 111948024e4aSbellard reg_names[fetch_arg (buffer, place, 3, info) + 8]); 112048024e4aSbellard break; 112148024e4aSbellard } 112248024e4aSbellard 112348024e4aSbellard case '_': /* 32-bit absolute address for move16. */ 112448024e4aSbellard { 112548024e4aSbellard uval = NEXTULONG (p); 112648024e4aSbellard (*info->print_address_func) (uval, info); 112748024e4aSbellard break; 112848024e4aSbellard } 112948024e4aSbellard 113048024e4aSbellard case 'C': 113148024e4aSbellard (*info->fprintf_func) (info->stream, "%%ccr"); 113248024e4aSbellard break; 113348024e4aSbellard 113448024e4aSbellard case 'S': 113548024e4aSbellard (*info->fprintf_func) (info->stream, "%%sr"); 113648024e4aSbellard break; 113748024e4aSbellard 113848024e4aSbellard case 'U': 113948024e4aSbellard (*info->fprintf_func) (info->stream, "%%usp"); 114048024e4aSbellard break; 114148024e4aSbellard 114248024e4aSbellard case 'E': 114348024e4aSbellard (*info->fprintf_func) (info->stream, "%%acc"); 114448024e4aSbellard break; 114548024e4aSbellard 114648024e4aSbellard case 'G': 114748024e4aSbellard (*info->fprintf_func) (info->stream, "%%macsr"); 114848024e4aSbellard break; 114948024e4aSbellard 115048024e4aSbellard case 'H': 115148024e4aSbellard (*info->fprintf_func) (info->stream, "%%mask"); 115248024e4aSbellard break; 115348024e4aSbellard 115448024e4aSbellard case 'J': 115548024e4aSbellard { 115648024e4aSbellard /* FIXME: There's a problem here, different m68k processors call the 115748024e4aSbellard same address different names. This table can't get it right 115848024e4aSbellard because it doesn't know which processor it's disassembling for. */ 11597ccfb2ebSblueswir1 static const struct { const char *name; int value; } names[] 116048024e4aSbellard = {{"%sfc", 0x000}, {"%dfc", 0x001}, {"%cacr", 0x002}, 116148024e4aSbellard {"%tc", 0x003}, {"%itt0",0x004}, {"%itt1", 0x005}, 116248024e4aSbellard {"%dtt0",0x006}, {"%dtt1",0x007}, {"%buscr",0x008}, 116348024e4aSbellard {"%usp", 0x800}, {"%vbr", 0x801}, {"%caar", 0x802}, 116448024e4aSbellard {"%msp", 0x803}, {"%isp", 0x804}, 116548024e4aSbellard {"%flashbar", 0xc04}, {"%rambar", 0xc05}, /* mcf528x added these. */ 116648024e4aSbellard 116748024e4aSbellard /* Should we be calling this psr like we do in case 'Y'? */ 116848024e4aSbellard {"%mmusr",0x805}, 116948024e4aSbellard 117048024e4aSbellard {"%urp", 0x806}, {"%srp", 0x807}, {"%pcr", 0x808}}; 117148024e4aSbellard 117248024e4aSbellard val = fetch_arg (buffer, place, 12, info); 117348024e4aSbellard for (regno = sizeof names / sizeof names[0] - 1; regno >= 0; regno--) 117448024e4aSbellard if (names[regno].value == val) 117548024e4aSbellard { 117648024e4aSbellard (*info->fprintf_func) (info->stream, "%s", names[regno].name); 117748024e4aSbellard break; 117848024e4aSbellard } 117948024e4aSbellard if (regno < 0) 118048024e4aSbellard (*info->fprintf_func) (info->stream, "%d", val); 118148024e4aSbellard } 118248024e4aSbellard break; 118348024e4aSbellard 118448024e4aSbellard case 'Q': 118548024e4aSbellard val = fetch_arg (buffer, place, 3, info); 118648024e4aSbellard /* 0 means 8, except for the bkpt instruction... */ 118748024e4aSbellard if (val == 0 && d[1] != 's') 118848024e4aSbellard val = 8; 118948024e4aSbellard (*info->fprintf_func) (info->stream, "#%d", val); 119048024e4aSbellard break; 119148024e4aSbellard 119248024e4aSbellard case 'x': 119348024e4aSbellard val = fetch_arg (buffer, place, 3, info); 119448024e4aSbellard /* 0 means -1. */ 119548024e4aSbellard if (val == 0) 119648024e4aSbellard val = -1; 119748024e4aSbellard (*info->fprintf_func) (info->stream, "#%d", val); 119848024e4aSbellard break; 119948024e4aSbellard 120048024e4aSbellard case 'M': 120148024e4aSbellard if (place == 'h') 120248024e4aSbellard { 12037ccfb2ebSblueswir1 static const char *const scalefactor_name[] = { "<<", ">>" }; 120448024e4aSbellard val = fetch_arg (buffer, place, 1, info); 1205d14a68b6SStefan Weil (*info->fprintf_func) (info->stream, "%s", scalefactor_name[val]); 120648024e4aSbellard } 120748024e4aSbellard else 120848024e4aSbellard { 120948024e4aSbellard val = fetch_arg (buffer, place, 8, info); 121048024e4aSbellard if (val & 0x80) 121148024e4aSbellard val = val - 0x100; 121248024e4aSbellard (*info->fprintf_func) (info->stream, "#%d", val); 121348024e4aSbellard } 121448024e4aSbellard break; 121548024e4aSbellard 121648024e4aSbellard case 'T': 121748024e4aSbellard val = fetch_arg (buffer, place, 4, info); 121848024e4aSbellard (*info->fprintf_func) (info->stream, "#%d", val); 121948024e4aSbellard break; 122048024e4aSbellard 122148024e4aSbellard case 'D': 122248024e4aSbellard (*info->fprintf_func) (info->stream, "%s", 122348024e4aSbellard reg_names[fetch_arg (buffer, place, 3, info)]); 122448024e4aSbellard break; 122548024e4aSbellard 122648024e4aSbellard case 'A': 122748024e4aSbellard (*info->fprintf_func) 122848024e4aSbellard (info->stream, "%s", 122948024e4aSbellard reg_names[fetch_arg (buffer, place, 3, info) + 010]); 123048024e4aSbellard break; 123148024e4aSbellard 123248024e4aSbellard case 'R': 123348024e4aSbellard (*info->fprintf_func) 123448024e4aSbellard (info->stream, "%s", 123548024e4aSbellard reg_names[fetch_arg (buffer, place, 4, info)]); 123648024e4aSbellard break; 123748024e4aSbellard 123848024e4aSbellard case 'r': 123948024e4aSbellard regno = fetch_arg (buffer, place, 4, info); 124048024e4aSbellard if (regno > 7) 124148024e4aSbellard (*info->fprintf_func) (info->stream, "%s@", reg_names[regno]); 124248024e4aSbellard else 124348024e4aSbellard (*info->fprintf_func) (info->stream, "@(%s)", reg_names[regno]); 124448024e4aSbellard break; 124548024e4aSbellard 124648024e4aSbellard case 'F': 124748024e4aSbellard (*info->fprintf_func) 124848024e4aSbellard (info->stream, "%%fp%d", 124948024e4aSbellard fetch_arg (buffer, place, 3, info)); 125048024e4aSbellard break; 125148024e4aSbellard 125248024e4aSbellard case 'O': 125348024e4aSbellard val = fetch_arg (buffer, place, 6, info); 125448024e4aSbellard if (val & 0x20) 125548024e4aSbellard (*info->fprintf_func) (info->stream, "%s", reg_names[val & 7]); 125648024e4aSbellard else 125748024e4aSbellard (*info->fprintf_func) (info->stream, "%d", val); 125848024e4aSbellard break; 125948024e4aSbellard 126048024e4aSbellard case '+': 126148024e4aSbellard (*info->fprintf_func) 126248024e4aSbellard (info->stream, "%s@+", 126348024e4aSbellard reg_names[fetch_arg (buffer, place, 3, info) + 8]); 126448024e4aSbellard break; 126548024e4aSbellard 126648024e4aSbellard case '-': 126748024e4aSbellard (*info->fprintf_func) 126848024e4aSbellard (info->stream, "%s@-", 126948024e4aSbellard reg_names[fetch_arg (buffer, place, 3, info) + 8]); 127048024e4aSbellard break; 127148024e4aSbellard 127248024e4aSbellard case 'k': 127348024e4aSbellard if (place == 'k') 127448024e4aSbellard (*info->fprintf_func) 127548024e4aSbellard (info->stream, "{%s}", 127648024e4aSbellard reg_names[fetch_arg (buffer, place, 3, info)]); 127748024e4aSbellard else if (place == 'C') 127848024e4aSbellard { 127948024e4aSbellard val = fetch_arg (buffer, place, 7, info); 128048024e4aSbellard if (val > 63) /* This is a signed constant. */ 128148024e4aSbellard val -= 128; 128248024e4aSbellard (*info->fprintf_func) (info->stream, "{#%d}", val); 128348024e4aSbellard } 128448024e4aSbellard else 128548024e4aSbellard return -2; 128648024e4aSbellard break; 128748024e4aSbellard 128848024e4aSbellard case '#': 128948024e4aSbellard case '^': 129048024e4aSbellard p1 = buffer + (*d == '#' ? 2 : 4); 129148024e4aSbellard if (place == 's') 129248024e4aSbellard val = fetch_arg (buffer, place, 4, info); 129348024e4aSbellard else if (place == 'C') 129448024e4aSbellard val = fetch_arg (buffer, place, 7, info); 129548024e4aSbellard else if (place == '8') 129648024e4aSbellard val = fetch_arg (buffer, place, 3, info); 129748024e4aSbellard else if (place == '3') 129848024e4aSbellard val = fetch_arg (buffer, place, 8, info); 129948024e4aSbellard else if (place == 'b') 130048024e4aSbellard val = NEXTBYTE (p1); 130148024e4aSbellard else if (place == 'w' || place == 'W') 130248024e4aSbellard val = NEXTWORD (p1); 130348024e4aSbellard else if (place == 'l') 130448024e4aSbellard val = NEXTLONG (p1); 130548024e4aSbellard else 130648024e4aSbellard return -2; 130748024e4aSbellard (*info->fprintf_func) (info->stream, "#%d", val); 130848024e4aSbellard break; 130948024e4aSbellard 131048024e4aSbellard case 'B': 131148024e4aSbellard if (place == 'b') 131248024e4aSbellard disp = NEXTBYTE (p); 131348024e4aSbellard else if (place == 'B') 131448024e4aSbellard disp = COERCE_SIGNED_CHAR (buffer[1]); 131548024e4aSbellard else if (place == 'w' || place == 'W') 131648024e4aSbellard disp = NEXTWORD (p); 131748024e4aSbellard else if (place == 'l' || place == 'L' || place == 'C') 131848024e4aSbellard disp = NEXTLONG (p); 131948024e4aSbellard else if (place == 'g') 132048024e4aSbellard { 132148024e4aSbellard disp = NEXTBYTE (buffer); 132248024e4aSbellard if (disp == 0) 132348024e4aSbellard disp = NEXTWORD (p); 132448024e4aSbellard else if (disp == -1) 132548024e4aSbellard disp = NEXTLONG (p); 132648024e4aSbellard } 132748024e4aSbellard else if (place == 'c') 132848024e4aSbellard { 132948024e4aSbellard if (buffer[1] & 0x40) /* If bit six is one, long offset. */ 133048024e4aSbellard disp = NEXTLONG (p); 133148024e4aSbellard else 133248024e4aSbellard disp = NEXTWORD (p); 133348024e4aSbellard } 133448024e4aSbellard else 133548024e4aSbellard return -2; 133648024e4aSbellard 133748024e4aSbellard (*info->print_address_func) (addr + disp, info); 133848024e4aSbellard break; 133948024e4aSbellard 134048024e4aSbellard case 'd': 134148024e4aSbellard val = NEXTWORD (p); 134248024e4aSbellard (*info->fprintf_func) 134348024e4aSbellard (info->stream, "%s@(%d)", 134448024e4aSbellard reg_names[fetch_arg (buffer, place, 3, info) + 8], val); 134548024e4aSbellard break; 134648024e4aSbellard 134748024e4aSbellard case 's': 134848024e4aSbellard (*info->fprintf_func) (info->stream, "%s", 134948024e4aSbellard fpcr_names[fetch_arg (buffer, place, 3, info)]); 135048024e4aSbellard break; 135148024e4aSbellard 135248024e4aSbellard case 'e': 135348024e4aSbellard val = fetch_arg(buffer, place, 2, info); 135448024e4aSbellard (*info->fprintf_func) (info->stream, "%%acc%d", val); 135548024e4aSbellard break; 135648024e4aSbellard 135748024e4aSbellard case 'g': 135848024e4aSbellard val = fetch_arg(buffer, place, 1, info); 135948024e4aSbellard (*info->fprintf_func) (info->stream, "%%accext%s", val==0 ? "01" : "23"); 136048024e4aSbellard break; 136148024e4aSbellard 136248024e4aSbellard case 'i': 136348024e4aSbellard val = fetch_arg(buffer, place, 2, info); 136448024e4aSbellard if (val == 1) 136548024e4aSbellard (*info->fprintf_func) (info->stream, "<<"); 136648024e4aSbellard else if (val == 3) 136748024e4aSbellard (*info->fprintf_func) (info->stream, ">>"); 136848024e4aSbellard else 136948024e4aSbellard return -1; 137048024e4aSbellard break; 137148024e4aSbellard 137248024e4aSbellard case 'I': 137348024e4aSbellard /* Get coprocessor ID... */ 137448024e4aSbellard val = fetch_arg (buffer, 'd', 3, info); 137548024e4aSbellard 137648024e4aSbellard if (val != 1) /* Unusual coprocessor ID? */ 137748024e4aSbellard (*info->fprintf_func) (info->stream, "(cpid=%d) ", val); 137848024e4aSbellard break; 137948024e4aSbellard 138048024e4aSbellard case '4': 138148024e4aSbellard case '*': 138248024e4aSbellard case '~': 138348024e4aSbellard case '%': 138448024e4aSbellard case ';': 138548024e4aSbellard case '@': 138648024e4aSbellard case '!': 138748024e4aSbellard case '$': 138848024e4aSbellard case '?': 138948024e4aSbellard case '/': 139048024e4aSbellard case '&': 139148024e4aSbellard case '|': 139248024e4aSbellard case '<': 139348024e4aSbellard case '>': 139448024e4aSbellard case 'm': 139548024e4aSbellard case 'n': 139648024e4aSbellard case 'o': 139748024e4aSbellard case 'p': 139848024e4aSbellard case 'q': 139948024e4aSbellard case 'v': 140048024e4aSbellard case 'b': 140148024e4aSbellard case 'w': 140248024e4aSbellard case 'y': 140348024e4aSbellard case 'z': 140448024e4aSbellard if (place == 'd') 140548024e4aSbellard { 140648024e4aSbellard val = fetch_arg (buffer, 'x', 6, info); 140748024e4aSbellard val = ((val & 7) << 3) + ((val >> 3) & 7); 140848024e4aSbellard } 140948024e4aSbellard else 141048024e4aSbellard val = fetch_arg (buffer, 's', 6, info); 141148024e4aSbellard 141248024e4aSbellard /* If the <ea> is invalid for *d, then reject this match. */ 141348024e4aSbellard if (!m68k_valid_ea (*d, val)) 141448024e4aSbellard return -1; 141548024e4aSbellard 141648024e4aSbellard /* Get register number assuming address register. */ 141748024e4aSbellard regno = (val & 7) + 8; 141848024e4aSbellard regname = reg_names[regno]; 141948024e4aSbellard switch (val >> 3) 142048024e4aSbellard { 142148024e4aSbellard case 0: 142248024e4aSbellard (*info->fprintf_func) (info->stream, "%s", reg_names[val]); 142348024e4aSbellard break; 142448024e4aSbellard 142548024e4aSbellard case 1: 142648024e4aSbellard (*info->fprintf_func) (info->stream, "%s", regname); 142748024e4aSbellard break; 142848024e4aSbellard 142948024e4aSbellard case 2: 143048024e4aSbellard (*info->fprintf_func) (info->stream, "%s@", regname); 143148024e4aSbellard break; 143248024e4aSbellard 143348024e4aSbellard case 3: 143448024e4aSbellard (*info->fprintf_func) (info->stream, "%s@+", regname); 143548024e4aSbellard break; 143648024e4aSbellard 143748024e4aSbellard case 4: 143848024e4aSbellard (*info->fprintf_func) (info->stream, "%s@-", regname); 143948024e4aSbellard break; 144048024e4aSbellard 144148024e4aSbellard case 5: 144248024e4aSbellard val = NEXTWORD (p); 144348024e4aSbellard (*info->fprintf_func) (info->stream, "%s@(%d)", regname, val); 144448024e4aSbellard break; 144548024e4aSbellard 144648024e4aSbellard case 6: 144748024e4aSbellard p = print_indexed (regno, p, addr, info); 144848024e4aSbellard break; 144948024e4aSbellard 145048024e4aSbellard case 7: 145148024e4aSbellard switch (val & 7) 145248024e4aSbellard { 145348024e4aSbellard case 0: 145448024e4aSbellard val = NEXTWORD (p); 145548024e4aSbellard (*info->print_address_func) (val, info); 145648024e4aSbellard break; 145748024e4aSbellard 145848024e4aSbellard case 1: 145948024e4aSbellard uval = NEXTULONG (p); 146048024e4aSbellard (*info->print_address_func) (uval, info); 146148024e4aSbellard break; 146248024e4aSbellard 146348024e4aSbellard case 2: 146448024e4aSbellard val = NEXTWORD (p); 146548024e4aSbellard (*info->fprintf_func) (info->stream, "%%pc@("); 146648024e4aSbellard (*info->print_address_func) (addr + val, info); 146748024e4aSbellard (*info->fprintf_func) (info->stream, ")"); 146848024e4aSbellard break; 146948024e4aSbellard 147048024e4aSbellard case 3: 147148024e4aSbellard p = print_indexed (-1, p, addr, info); 147248024e4aSbellard break; 147348024e4aSbellard 147448024e4aSbellard case 4: 147548024e4aSbellard flt_p = 1; /* Assume it's a float... */ 147648024e4aSbellard switch (place) 147748024e4aSbellard { 147848024e4aSbellard case 'b': 147948024e4aSbellard val = NEXTBYTE (p); 148048024e4aSbellard flt_p = 0; 148148024e4aSbellard break; 148248024e4aSbellard 148348024e4aSbellard case 'w': 148448024e4aSbellard val = NEXTWORD (p); 148548024e4aSbellard flt_p = 0; 148648024e4aSbellard break; 148748024e4aSbellard 148848024e4aSbellard case 'l': 148948024e4aSbellard val = NEXTLONG (p); 149048024e4aSbellard flt_p = 0; 149148024e4aSbellard break; 149248024e4aSbellard 149348024e4aSbellard case 'f': 149448024e4aSbellard NEXTSINGLE (flval, p); 149548024e4aSbellard break; 149648024e4aSbellard 149748024e4aSbellard case 'F': 149848024e4aSbellard NEXTDOUBLE (flval, p); 149948024e4aSbellard break; 150048024e4aSbellard 150148024e4aSbellard case 'x': 150248024e4aSbellard NEXTEXTEND (flval, p); 150348024e4aSbellard break; 150448024e4aSbellard 150548024e4aSbellard case 'p': 150648024e4aSbellard flval = NEXTPACKED (p); 150748024e4aSbellard break; 150848024e4aSbellard 150948024e4aSbellard default: 151048024e4aSbellard return -1; 151148024e4aSbellard } 151248024e4aSbellard if (flt_p) /* Print a float? */ 151348024e4aSbellard (*info->fprintf_func) (info->stream, "#%g", flval); 151448024e4aSbellard else 151548024e4aSbellard (*info->fprintf_func) (info->stream, "#%d", val); 151648024e4aSbellard break; 151748024e4aSbellard 151848024e4aSbellard default: 151948024e4aSbellard return -1; 152048024e4aSbellard } 152148024e4aSbellard } 152248024e4aSbellard 152348024e4aSbellard /* If place is '/', then this is the case of the mask bit for 152448024e4aSbellard mac/emac loads. Now that the arg has been printed, grab the 152548024e4aSbellard mask bit and if set, add a '&' to the arg. */ 152648024e4aSbellard if (place == '/') 152748024e4aSbellard { 152848024e4aSbellard val = fetch_arg (buffer, place, 1, info); 152948024e4aSbellard if (val) 153048024e4aSbellard info->fprintf_func (info->stream, "&"); 153148024e4aSbellard } 153248024e4aSbellard break; 153348024e4aSbellard 153448024e4aSbellard case 'L': 153548024e4aSbellard case 'l': 153648024e4aSbellard if (place == 'w') 153748024e4aSbellard { 153848024e4aSbellard char doneany; 153948024e4aSbellard p1 = buffer + 2; 154048024e4aSbellard val = NEXTWORD (p1); 154148024e4aSbellard /* Move the pointer ahead if this point is farther ahead 154248024e4aSbellard than the last. */ 154348024e4aSbellard p = p1 > p ? p1 : p; 154448024e4aSbellard if (val == 0) 154548024e4aSbellard { 154648024e4aSbellard (*info->fprintf_func) (info->stream, "#0"); 154748024e4aSbellard break; 154848024e4aSbellard } 154948024e4aSbellard if (*d == 'l') 155048024e4aSbellard { 155148024e4aSbellard int newval = 0; 155248024e4aSbellard 155348024e4aSbellard for (regno = 0; regno < 16; ++regno) 155448024e4aSbellard if (val & (0x8000 >> regno)) 155548024e4aSbellard newval |= 1 << regno; 155648024e4aSbellard val = newval; 155748024e4aSbellard } 155848024e4aSbellard val &= 0xffff; 155948024e4aSbellard doneany = 0; 156048024e4aSbellard for (regno = 0; regno < 16; ++regno) 156148024e4aSbellard if (val & (1 << regno)) 156248024e4aSbellard { 156348024e4aSbellard int first_regno; 156448024e4aSbellard 156548024e4aSbellard if (doneany) 156648024e4aSbellard (*info->fprintf_func) (info->stream, "/"); 156748024e4aSbellard doneany = 1; 156848024e4aSbellard (*info->fprintf_func) (info->stream, "%s", reg_names[regno]); 156948024e4aSbellard first_regno = regno; 157048024e4aSbellard while (val & (1 << (regno + 1))) 157148024e4aSbellard ++regno; 157248024e4aSbellard if (regno > first_regno) 157348024e4aSbellard (*info->fprintf_func) (info->stream, "-%s", 157448024e4aSbellard reg_names[regno]); 157548024e4aSbellard } 157648024e4aSbellard } 157748024e4aSbellard else if (place == '3') 157848024e4aSbellard { 157948024e4aSbellard /* `fmovem' insn. */ 158048024e4aSbellard char doneany; 158148024e4aSbellard val = fetch_arg (buffer, place, 8, info); 158248024e4aSbellard if (val == 0) 158348024e4aSbellard { 158448024e4aSbellard (*info->fprintf_func) (info->stream, "#0"); 158548024e4aSbellard break; 158648024e4aSbellard } 158748024e4aSbellard if (*d == 'l') 158848024e4aSbellard { 158948024e4aSbellard int newval = 0; 159048024e4aSbellard 159148024e4aSbellard for (regno = 0; regno < 8; ++regno) 159248024e4aSbellard if (val & (0x80 >> regno)) 159348024e4aSbellard newval |= 1 << regno; 159448024e4aSbellard val = newval; 159548024e4aSbellard } 159648024e4aSbellard val &= 0xff; 159748024e4aSbellard doneany = 0; 159848024e4aSbellard for (regno = 0; regno < 8; ++regno) 159948024e4aSbellard if (val & (1 << regno)) 160048024e4aSbellard { 160148024e4aSbellard int first_regno; 160248024e4aSbellard if (doneany) 160348024e4aSbellard (*info->fprintf_func) (info->stream, "/"); 160448024e4aSbellard doneany = 1; 160548024e4aSbellard (*info->fprintf_func) (info->stream, "%%fp%d", regno); 160648024e4aSbellard first_regno = regno; 160748024e4aSbellard while (val & (1 << (regno + 1))) 160848024e4aSbellard ++regno; 160948024e4aSbellard if (regno > first_regno) 161048024e4aSbellard (*info->fprintf_func) (info->stream, "-%%fp%d", regno); 161148024e4aSbellard } 161248024e4aSbellard } 161348024e4aSbellard else if (place == '8') 161448024e4aSbellard { 161548024e4aSbellard /* fmoveml for FP status registers. */ 161648024e4aSbellard (*info->fprintf_func) (info->stream, "%s", 161748024e4aSbellard fpcr_names[fetch_arg (buffer, place, 3, 161848024e4aSbellard info)]); 161948024e4aSbellard } 162048024e4aSbellard else 162148024e4aSbellard return -2; 162248024e4aSbellard break; 162348024e4aSbellard 162448024e4aSbellard case 'X': 162548024e4aSbellard place = '8'; 1626edd7541bSPaolo Bonzini /* fall through */ 162748024e4aSbellard case 'Y': 162848024e4aSbellard case 'Z': 162948024e4aSbellard case 'W': 163048024e4aSbellard case '0': 163148024e4aSbellard case '1': 163248024e4aSbellard case '2': 163348024e4aSbellard case '3': 163448024e4aSbellard { 163548024e4aSbellard int val = fetch_arg (buffer, place, 5, info); 16367ccfb2ebSblueswir1 const char *name = 0; 163748024e4aSbellard 163848024e4aSbellard switch (val) 163948024e4aSbellard { 164048024e4aSbellard case 2: name = "%tt0"; break; 164148024e4aSbellard case 3: name = "%tt1"; break; 164248024e4aSbellard case 0x10: name = "%tc"; break; 164348024e4aSbellard case 0x11: name = "%drp"; break; 164448024e4aSbellard case 0x12: name = "%srp"; break; 164548024e4aSbellard case 0x13: name = "%crp"; break; 164648024e4aSbellard case 0x14: name = "%cal"; break; 164748024e4aSbellard case 0x15: name = "%val"; break; 164848024e4aSbellard case 0x16: name = "%scc"; break; 164948024e4aSbellard case 0x17: name = "%ac"; break; 165048024e4aSbellard case 0x18: name = "%psr"; break; 165148024e4aSbellard case 0x19: name = "%pcsr"; break; 165248024e4aSbellard case 0x1c: 165348024e4aSbellard case 0x1d: 165448024e4aSbellard { 165548024e4aSbellard int break_reg = ((buffer[3] >> 2) & 7); 165648024e4aSbellard 165748024e4aSbellard (*info->fprintf_func) 165848024e4aSbellard (info->stream, val == 0x1c ? "%%bad%d" : "%%bac%d", 165948024e4aSbellard break_reg); 166048024e4aSbellard } 166148024e4aSbellard break; 166248024e4aSbellard default: 166348024e4aSbellard (*info->fprintf_func) (info->stream, "<mmu register %d>", val); 166448024e4aSbellard } 166548024e4aSbellard if (name) 166648024e4aSbellard (*info->fprintf_func) (info->stream, "%s", name); 166748024e4aSbellard } 166848024e4aSbellard break; 166948024e4aSbellard 167048024e4aSbellard case 'f': 167148024e4aSbellard { 167248024e4aSbellard int fc = fetch_arg (buffer, place, 5, info); 167348024e4aSbellard 167448024e4aSbellard if (fc == 1) 167548024e4aSbellard (*info->fprintf_func) (info->stream, "%%dfc"); 167648024e4aSbellard else if (fc == 0) 167748024e4aSbellard (*info->fprintf_func) (info->stream, "%%sfc"); 167848024e4aSbellard else 167948024e4aSbellard /* xgettext:c-format */ 1680ca66f1a1SLluÃs Vilanova (*info->fprintf_func) (info->stream, "<function code %d>", fc); 168148024e4aSbellard } 168248024e4aSbellard break; 168348024e4aSbellard 168448024e4aSbellard case 'V': 168548024e4aSbellard (*info->fprintf_func) (info->stream, "%%val"); 168648024e4aSbellard break; 168748024e4aSbellard 168848024e4aSbellard case 't': 168948024e4aSbellard { 169048024e4aSbellard int level = fetch_arg (buffer, place, 3, info); 169148024e4aSbellard 169248024e4aSbellard (*info->fprintf_func) (info->stream, "%d", level); 169348024e4aSbellard } 169448024e4aSbellard break; 169548024e4aSbellard 169648024e4aSbellard case 'u': 169748024e4aSbellard { 169848024e4aSbellard short is_upper = 0; 169948024e4aSbellard int reg = fetch_arg (buffer, place, 5, info); 170048024e4aSbellard 170148024e4aSbellard if (reg & 0x10) 170248024e4aSbellard { 170348024e4aSbellard is_upper = 1; 170448024e4aSbellard reg &= 0xf; 170548024e4aSbellard } 170648024e4aSbellard (*info->fprintf_func) (info->stream, "%s%s", 170748024e4aSbellard reg_half_names[reg], 170848024e4aSbellard is_upper ? "u" : "l"); 170948024e4aSbellard } 171048024e4aSbellard break; 171148024e4aSbellard 171248024e4aSbellard default: 171348024e4aSbellard return -2; 171448024e4aSbellard } 171548024e4aSbellard 171648024e4aSbellard return p - p0; 171748024e4aSbellard } 171848024e4aSbellard 171948024e4aSbellard /* Try to match the current instruction to best and if so, return the 172048024e4aSbellard number of bytes consumed from the instruction stream, else zero. */ 172148024e4aSbellard 172248024e4aSbellard static int 172348024e4aSbellard match_insn_m68k (bfd_vma memaddr, 172448024e4aSbellard disassemble_info * info, 172548024e4aSbellard const struct m68k_opcode * best, 172648024e4aSbellard struct private * priv) 172748024e4aSbellard { 172848024e4aSbellard unsigned char *save_p; 172948024e4aSbellard unsigned char *p; 173048024e4aSbellard const char *d; 173148024e4aSbellard 173248024e4aSbellard bfd_byte *buffer = priv->the_buffer; 17336e2d864eSStefan Weil fprintf_function save_printer = info->fprintf_func; 173448024e4aSbellard void (* save_print_address) (bfd_vma, struct disassemble_info *) 173548024e4aSbellard = info->print_address_func; 173648024e4aSbellard 173748024e4aSbellard /* Point at first word of argument data, 173848024e4aSbellard and at descriptor for first argument. */ 173948024e4aSbellard p = buffer + 2; 174048024e4aSbellard 174148024e4aSbellard /* Figure out how long the fixed-size portion of the instruction is. 174248024e4aSbellard The only place this is stored in the opcode table is 174348024e4aSbellard in the arguments--look for arguments which specify fields in the 2nd 174448024e4aSbellard or 3rd words of the instruction. */ 174548024e4aSbellard for (d = best->args; *d; d += 2) 174648024e4aSbellard { 174748024e4aSbellard /* I don't think it is necessary to be checking d[0] here; 174848024e4aSbellard I suspect all this could be moved to the case statement below. */ 174948024e4aSbellard if (d[0] == '#') 175048024e4aSbellard { 175148024e4aSbellard if (d[1] == 'l' && p - buffer < 6) 175248024e4aSbellard p = buffer + 6; 175348024e4aSbellard else if (p - buffer < 4 && d[1] != 'C' && d[1] != '8') 175448024e4aSbellard p = buffer + 4; 175548024e4aSbellard } 175648024e4aSbellard 175748024e4aSbellard if ((d[0] == 'L' || d[0] == 'l') && d[1] == 'w' && p - buffer < 4) 175848024e4aSbellard p = buffer + 4; 175948024e4aSbellard 176048024e4aSbellard switch (d[1]) 176148024e4aSbellard { 176248024e4aSbellard case '1': 176348024e4aSbellard case '2': 176448024e4aSbellard case '3': 176548024e4aSbellard case '7': 176648024e4aSbellard case '8': 176748024e4aSbellard case '9': 176848024e4aSbellard case 'i': 176948024e4aSbellard if (p - buffer < 4) 177048024e4aSbellard p = buffer + 4; 177148024e4aSbellard break; 177248024e4aSbellard case '4': 177348024e4aSbellard case '5': 177448024e4aSbellard case '6': 177548024e4aSbellard if (p - buffer < 6) 177648024e4aSbellard p = buffer + 6; 177748024e4aSbellard break; 177848024e4aSbellard default: 177948024e4aSbellard break; 178048024e4aSbellard } 178148024e4aSbellard } 178248024e4aSbellard 178348024e4aSbellard /* pflusha is an exceptions. It takes no arguments but is two words 178448024e4aSbellard long. Recognize it by looking at the lower 16 bits of the mask. */ 178548024e4aSbellard if (p - buffer < 4 && (best->match & 0xFFFF) != 0) 178648024e4aSbellard p = buffer + 4; 178748024e4aSbellard 178848024e4aSbellard /* lpstop is another exception. It takes a one word argument but is 178948024e4aSbellard three words long. */ 179048024e4aSbellard if (p - buffer < 6 179148024e4aSbellard && (best->match & 0xffff) == 0xffff 179248024e4aSbellard && best->args[0] == '#' 179348024e4aSbellard && best->args[1] == 'w') 179448024e4aSbellard { 179548024e4aSbellard /* Copy the one word argument into the usual location for a one 179648024e4aSbellard word argument, to simplify printing it. We can get away with 179748024e4aSbellard this because we know exactly what the second word is, and we 179848024e4aSbellard aren't going to print anything based on it. */ 179948024e4aSbellard p = buffer + 6; 180067774a04SBlue Swirl fetch_data(info, p); 180148024e4aSbellard buffer[2] = buffer[4]; 180248024e4aSbellard buffer[3] = buffer[5]; 180348024e4aSbellard } 180448024e4aSbellard 180567774a04SBlue Swirl fetch_data(info, p); 180648024e4aSbellard 180748024e4aSbellard d = best->args; 180848024e4aSbellard 180948024e4aSbellard save_p = p; 181048024e4aSbellard info->print_address_func = dummy_print_address; 1811d14a68b6SStefan Weil info->fprintf_func = dummy_printer; 181248024e4aSbellard 181348024e4aSbellard /* We scan the operands twice. The first time we don't print anything, 181448024e4aSbellard but look for errors. */ 181548024e4aSbellard for (; *d; d += 2) 181648024e4aSbellard { 181748024e4aSbellard int eaten = print_insn_arg (d, buffer, p, memaddr + (p - buffer), info); 181848024e4aSbellard 181948024e4aSbellard if (eaten >= 0) 182048024e4aSbellard p += eaten; 182148024e4aSbellard else if (eaten == -1) 182248024e4aSbellard { 182348024e4aSbellard info->fprintf_func = save_printer; 182448024e4aSbellard info->print_address_func = save_print_address; 182548024e4aSbellard return 0; 182648024e4aSbellard } 182748024e4aSbellard else 182848024e4aSbellard { 182948024e4aSbellard info->fprintf_func (info->stream, 183048024e4aSbellard /* xgettext:c-format */ 1831ca66f1a1SLluÃs Vilanova "<internal error in opcode table: %s %s>\n", 183248024e4aSbellard best->name, best->args); 183348024e4aSbellard info->fprintf_func = save_printer; 183448024e4aSbellard info->print_address_func = save_print_address; 183548024e4aSbellard return 2; 183648024e4aSbellard } 183748024e4aSbellard } 183848024e4aSbellard 183948024e4aSbellard p = save_p; 184048024e4aSbellard info->fprintf_func = save_printer; 184148024e4aSbellard info->print_address_func = save_print_address; 184248024e4aSbellard 184348024e4aSbellard d = best->args; 184448024e4aSbellard 184548024e4aSbellard info->fprintf_func (info->stream, "%s", best->name); 184648024e4aSbellard 184748024e4aSbellard if (*d) 184848024e4aSbellard info->fprintf_func (info->stream, " "); 184948024e4aSbellard 185048024e4aSbellard while (*d) 185148024e4aSbellard { 185248024e4aSbellard p += print_insn_arg (d, buffer, p, memaddr + (p - buffer), info); 185348024e4aSbellard d += 2; 185448024e4aSbellard 185548024e4aSbellard if (*d && *(d - 2) != 'I' && *d != 'k') 185648024e4aSbellard info->fprintf_func (info->stream, ","); 185748024e4aSbellard } 185848024e4aSbellard 185948024e4aSbellard return p - buffer; 186048024e4aSbellard } 186148024e4aSbellard 186248024e4aSbellard /* Print the m68k instruction at address MEMADDR in debugged memory, 186348024e4aSbellard on INFO->STREAM. Returns length of the instruction, in bytes. */ 186448024e4aSbellard 186548024e4aSbellard int 186648024e4aSbellard print_insn_m68k (bfd_vma memaddr, disassemble_info *info) 186748024e4aSbellard { 186848024e4aSbellard int i; 186948024e4aSbellard const char *d; 187048024e4aSbellard unsigned int arch_mask; 187148024e4aSbellard struct private priv; 187248024e4aSbellard bfd_byte *buffer = priv.the_buffer; 187348024e4aSbellard int major_opcode; 187448024e4aSbellard static int numopcodes[16]; 187548024e4aSbellard static const struct m68k_opcode **opcodes[16]; 187648024e4aSbellard int val; 187748024e4aSbellard 187848024e4aSbellard if (!opcodes[0]) 187948024e4aSbellard { 188048024e4aSbellard /* Speed up the matching by sorting the opcode 188148024e4aSbellard table on the upper four bits of the opcode. */ 188248024e4aSbellard const struct m68k_opcode **opc_pointer[16]; 188348024e4aSbellard 188448024e4aSbellard /* First count how many opcodes are in each of the sixteen buckets. */ 188548024e4aSbellard for (i = 0; i < m68k_numopcodes; i++) 188648024e4aSbellard numopcodes[(m68k_opcodes[i].opcode >> 28) & 15]++; 188748024e4aSbellard 188848024e4aSbellard /* Then create a sorted table of pointers 188948024e4aSbellard that point into the unsorted table. */ 189048024e4aSbellard opc_pointer[0] = malloc (sizeof (struct m68k_opcode *) 189148024e4aSbellard * m68k_numopcodes); 189248024e4aSbellard opcodes[0] = opc_pointer[0]; 189348024e4aSbellard 189448024e4aSbellard for (i = 1; i < 16; i++) 189548024e4aSbellard { 189648024e4aSbellard opc_pointer[i] = opc_pointer[i - 1] + numopcodes[i - 1]; 189748024e4aSbellard opcodes[i] = opc_pointer[i]; 189848024e4aSbellard } 189948024e4aSbellard 190048024e4aSbellard for (i = 0; i < m68k_numopcodes; i++) 190148024e4aSbellard *opc_pointer[(m68k_opcodes[i].opcode >> 28) & 15]++ = &m68k_opcodes[i]; 190248024e4aSbellard } 190348024e4aSbellard 190448024e4aSbellard info->private_data = (PTR) &priv; 190548024e4aSbellard /* Tell objdump to use two bytes per chunk 190648024e4aSbellard and six bytes per line for displaying raw data. */ 190748024e4aSbellard info->bytes_per_chunk = 2; 190848024e4aSbellard info->bytes_per_line = 6; 190948024e4aSbellard info->display_endian = BFD_ENDIAN_BIG; 191048024e4aSbellard priv.max_fetched = priv.the_buffer; 191148024e4aSbellard priv.insn_start = memaddr; 191248024e4aSbellard 19136ab7e546SPeter Maydell if (sigsetjmp(priv.bailout, 0) != 0) { 191448024e4aSbellard /* Error return. */ 191548024e4aSbellard return -1; 19166ab7e546SPeter Maydell } 191748024e4aSbellard 191848024e4aSbellard switch (info->mach) 191948024e4aSbellard { 192048024e4aSbellard default: 192148024e4aSbellard case 0: 192248024e4aSbellard arch_mask = (unsigned int) -1; 192348024e4aSbellard break; 192448024e4aSbellard case bfd_mach_m68000: 192548024e4aSbellard arch_mask = m68000|m68881|m68851; 192648024e4aSbellard break; 192748024e4aSbellard case bfd_mach_m68008: 192848024e4aSbellard arch_mask = m68008|m68881|m68851; 192948024e4aSbellard break; 193048024e4aSbellard case bfd_mach_m68010: 193148024e4aSbellard arch_mask = m68010|m68881|m68851; 193248024e4aSbellard break; 193348024e4aSbellard case bfd_mach_m68020: 193448024e4aSbellard arch_mask = m68020|m68881|m68851; 193548024e4aSbellard break; 193648024e4aSbellard case bfd_mach_m68030: 193748024e4aSbellard arch_mask = m68030|m68881|m68851; 193848024e4aSbellard break; 193948024e4aSbellard case bfd_mach_m68040: 194048024e4aSbellard arch_mask = m68040|m68881|m68851; 194148024e4aSbellard break; 194248024e4aSbellard case bfd_mach_m68060: 194348024e4aSbellard arch_mask = m68060|m68881|m68851; 194448024e4aSbellard break; 194548024e4aSbellard case bfd_mach_mcf5200: 194648024e4aSbellard arch_mask = mcfisa_a; 194748024e4aSbellard break; 194848024e4aSbellard case bfd_mach_mcf521x: 194948024e4aSbellard case bfd_mach_mcf528x: 195048024e4aSbellard arch_mask = mcfisa_a|mcfhwdiv|mcfisa_aa|mcfusp|mcfemac; 195148024e4aSbellard break; 195248024e4aSbellard case bfd_mach_mcf5206e: 195348024e4aSbellard arch_mask = mcfisa_a|mcfhwdiv|mcfmac; 195448024e4aSbellard break; 195548024e4aSbellard case bfd_mach_mcf5249: 195648024e4aSbellard arch_mask = mcfisa_a|mcfhwdiv|mcfemac; 195748024e4aSbellard break; 195848024e4aSbellard case bfd_mach_mcf5307: 195948024e4aSbellard arch_mask = mcfisa_a|mcfhwdiv|mcfmac; 196048024e4aSbellard break; 196148024e4aSbellard case bfd_mach_mcf5407: 196248024e4aSbellard arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfmac; 196348024e4aSbellard break; 196448024e4aSbellard case bfd_mach_mcf547x: 196548024e4aSbellard case bfd_mach_mcf548x: 196648024e4aSbellard case bfd_mach_mcfv4e: 196748024e4aSbellard arch_mask = mcfisa_a|mcfhwdiv|mcfisa_b|mcfusp|cfloat|mcfemac; 196848024e4aSbellard break; 196948024e4aSbellard } 197048024e4aSbellard 197167774a04SBlue Swirl fetch_data(info, buffer + 2); 197248024e4aSbellard major_opcode = (buffer[0] >> 4) & 15; 197348024e4aSbellard 197448024e4aSbellard for (i = 0; i < numopcodes[major_opcode]; i++) 197548024e4aSbellard { 197648024e4aSbellard const struct m68k_opcode *opc = opcodes[major_opcode][i]; 197748024e4aSbellard unsigned long opcode = opc->opcode; 197848024e4aSbellard unsigned long match = opc->match; 197948024e4aSbellard 198048024e4aSbellard if (((0xff & buffer[0] & (match >> 24)) == (0xff & (opcode >> 24))) 198148024e4aSbellard && ((0xff & buffer[1] & (match >> 16)) == (0xff & (opcode >> 16))) 198248024e4aSbellard /* Only fetch the next two bytes if we need to. */ 198348024e4aSbellard && (((0xffff & match) == 0) 198448024e4aSbellard || 198567774a04SBlue Swirl (fetch_data(info, buffer + 4) 198648024e4aSbellard && ((0xff & buffer[2] & (match >> 8)) == (0xff & (opcode >> 8))) 198748024e4aSbellard && ((0xff & buffer[3] & match) == (0xff & opcode))) 198848024e4aSbellard ) 198948024e4aSbellard && (opc->arch & arch_mask) != 0) 199048024e4aSbellard { 199148024e4aSbellard /* Don't use for printout the variants of divul and divsl 199248024e4aSbellard that have the same register number in two places. 199348024e4aSbellard The more general variants will match instead. */ 199448024e4aSbellard for (d = opc->args; *d; d += 2) 199548024e4aSbellard if (d[1] == 'D') 199648024e4aSbellard break; 199748024e4aSbellard 199848024e4aSbellard /* Don't use for printout the variants of most floating 199948024e4aSbellard point coprocessor instructions which use the same 200048024e4aSbellard register number in two places, as above. */ 200148024e4aSbellard if (*d == '\0') 200248024e4aSbellard for (d = opc->args; *d; d += 2) 200348024e4aSbellard if (d[1] == 't') 200448024e4aSbellard break; 200548024e4aSbellard 200648024e4aSbellard /* Don't match fmovel with more than one register; 200748024e4aSbellard wait for fmoveml. */ 200848024e4aSbellard if (*d == '\0') 200948024e4aSbellard { 201048024e4aSbellard for (d = opc->args; *d; d += 2) 201148024e4aSbellard { 201248024e4aSbellard if (d[0] == 's' && d[1] == '8') 201348024e4aSbellard { 201448024e4aSbellard val = fetch_arg (buffer, d[1], 3, info); 201548024e4aSbellard if ((val & (val - 1)) != 0) 201648024e4aSbellard break; 201748024e4aSbellard } 201848024e4aSbellard } 201948024e4aSbellard } 202048024e4aSbellard 2021d9345f1eSLaurent Vivier /* Don't match FPU insns with non-default coprocessor ID. */ 2022d9345f1eSLaurent Vivier if (*d == '\0') 2023d9345f1eSLaurent Vivier { 2024d9345f1eSLaurent Vivier for (d = opc->args; *d; d += 2) 2025d9345f1eSLaurent Vivier { 2026d9345f1eSLaurent Vivier if (d[0] == 'I') 2027d9345f1eSLaurent Vivier { 2028d9345f1eSLaurent Vivier val = fetch_arg (buffer, 'd', 3, info); 2029d9345f1eSLaurent Vivier if (val != 1) 2030d9345f1eSLaurent Vivier break; 2031d9345f1eSLaurent Vivier } 2032d9345f1eSLaurent Vivier } 2033d9345f1eSLaurent Vivier } 2034d9345f1eSLaurent Vivier 203548024e4aSbellard if (*d == '\0') 203648024e4aSbellard if ((val = match_insn_m68k (memaddr, info, opc, & priv))) 203748024e4aSbellard return val; 203848024e4aSbellard } 203948024e4aSbellard } 204048024e4aSbellard 204148024e4aSbellard /* Handle undefined instructions. */ 204248024e4aSbellard info->fprintf_func (info->stream, "0%o", (buffer[0] << 8) + buffer[1]); 204348024e4aSbellard return 2; 204448024e4aSbellard } 204548024e4aSbellard /* **** End of m68k-dis.c */ 204648024e4aSbellard /* **** m68k-opc.h from sourceware.org CVS 2005-08-14. */ 204748024e4aSbellard /* Opcode table for m680[012346]0/m6888[12]/m68851/mcf5200. 204848024e4aSbellard Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 204948024e4aSbellard 2000, 2001, 2003, 2004, 2005 205048024e4aSbellard Free Software Foundation, Inc. 205148024e4aSbellard 205248024e4aSbellard This file is part of GDB, GAS, and the GNU binutils. 205348024e4aSbellard 205448024e4aSbellard GDB, GAS, and the GNU binutils are free software; you can redistribute 205548024e4aSbellard them and/or modify them under the terms of the GNU General Public 205648024e4aSbellard License as published by the Free Software Foundation; either version 205748024e4aSbellard 1, or (at your option) any later version. 205848024e4aSbellard 205948024e4aSbellard GDB, GAS, and the GNU binutils are distributed in the hope that they 206048024e4aSbellard will be useful, but WITHOUT ANY WARRANTY; without even the implied 206148024e4aSbellard warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 206248024e4aSbellard the GNU General Public License for more details. 206348024e4aSbellard 206448024e4aSbellard You should have received a copy of the GNU General Public License 20658167ee88SBlue Swirl along with this file; see the file COPYING. If not, 20668167ee88SBlue Swirl see <http://www.gnu.org/licenses/>. */ 206748024e4aSbellard 206848024e4aSbellard #define one(x) ((unsigned int) (x) << 16) 206948024e4aSbellard #define two(x, y) (((unsigned int) (x) << 16) + (y)) 207048024e4aSbellard 207148024e4aSbellard /* The assembler requires that all instances of the same mnemonic must 207248024e4aSbellard be consecutive. If they aren't, the assembler will bomb at 207348024e4aSbellard runtime. */ 207448024e4aSbellard 207548024e4aSbellard const struct m68k_opcode m68k_opcodes[] = 207648024e4aSbellard { 207748024e4aSbellard {"abcd", 2, one(0140400), one(0170770), "DsDd", m68000up }, 207848024e4aSbellard {"abcd", 2, one(0140410), one(0170770), "-s-d", m68000up }, 207948024e4aSbellard 208048024e4aSbellard {"addaw", 2, one(0150300), one(0170700), "*wAd", m68000up }, 208148024e4aSbellard {"addal", 2, one(0150700), one(0170700), "*lAd", m68000up | mcfisa_a }, 208248024e4aSbellard 208348024e4aSbellard {"addib", 4, one(0003000), one(0177700), "#b$s", m68000up }, 208448024e4aSbellard {"addiw", 4, one(0003100), one(0177700), "#w$s", m68000up }, 208548024e4aSbellard {"addil", 6, one(0003200), one(0177700), "#l$s", m68000up }, 208648024e4aSbellard {"addil", 6, one(0003200), one(0177700), "#lDs", mcfisa_a }, 208748024e4aSbellard 208848024e4aSbellard {"addqb", 2, one(0050000), one(0170700), "Qd$b", m68000up }, 208948024e4aSbellard {"addqw", 2, one(0050100), one(0170700), "Qd%w", m68000up }, 209048024e4aSbellard {"addql", 2, one(0050200), one(0170700), "Qd%l", m68000up | mcfisa_a }, 209148024e4aSbellard 209248024e4aSbellard /* The add opcode can generate the adda, addi, and addq instructions. */ 209348024e4aSbellard {"addb", 2, one(0050000), one(0170700), "Qd$b", m68000up }, 209448024e4aSbellard {"addb", 4, one(0003000), one(0177700), "#b$s", m68000up }, 209548024e4aSbellard {"addb", 2, one(0150000), one(0170700), ";bDd", m68000up }, 209648024e4aSbellard {"addb", 2, one(0150400), one(0170700), "Dd~b", m68000up }, 209748024e4aSbellard {"addw", 2, one(0050100), one(0170700), "Qd%w", m68000up }, 209848024e4aSbellard {"addw", 2, one(0150300), one(0170700), "*wAd", m68000up }, 209948024e4aSbellard {"addw", 4, one(0003100), one(0177700), "#w$s", m68000up }, 210048024e4aSbellard {"addw", 2, one(0150100), one(0170700), "*wDd", m68000up }, 210148024e4aSbellard {"addw", 2, one(0150500), one(0170700), "Dd~w", m68000up }, 210248024e4aSbellard {"addl", 2, one(0050200), one(0170700), "Qd%l", m68000up | mcfisa_a }, 210348024e4aSbellard {"addl", 6, one(0003200), one(0177700), "#l$s", m68000up }, 210448024e4aSbellard {"addl", 6, one(0003200), one(0177700), "#lDs", mcfisa_a }, 210548024e4aSbellard {"addl", 2, one(0150700), one(0170700), "*lAd", m68000up | mcfisa_a }, 210648024e4aSbellard {"addl", 2, one(0150200), one(0170700), "*lDd", m68000up | mcfisa_a }, 210748024e4aSbellard {"addl", 2, one(0150600), one(0170700), "Dd~l", m68000up | mcfisa_a }, 210848024e4aSbellard 210948024e4aSbellard {"addxb", 2, one(0150400), one(0170770), "DsDd", m68000up }, 211048024e4aSbellard {"addxb", 2, one(0150410), one(0170770), "-s-d", m68000up }, 211148024e4aSbellard {"addxw", 2, one(0150500), one(0170770), "DsDd", m68000up }, 211248024e4aSbellard {"addxw", 2, one(0150510), one(0170770), "-s-d", m68000up }, 211348024e4aSbellard {"addxl", 2, one(0150600), one(0170770), "DsDd", m68000up | mcfisa_a }, 211448024e4aSbellard {"addxl", 2, one(0150610), one(0170770), "-s-d", m68000up }, 211548024e4aSbellard 211648024e4aSbellard {"andib", 4, one(0001000), one(0177700), "#b$s", m68000up }, 211748024e4aSbellard {"andib", 4, one(0001074), one(0177777), "#bCs", m68000up }, 211848024e4aSbellard {"andiw", 4, one(0001100), one(0177700), "#w$s", m68000up }, 211948024e4aSbellard {"andiw", 4, one(0001174), one(0177777), "#wSs", m68000up }, 212048024e4aSbellard {"andil", 6, one(0001200), one(0177700), "#l$s", m68000up }, 212148024e4aSbellard {"andil", 6, one(0001200), one(0177700), "#lDs", mcfisa_a }, 212248024e4aSbellard {"andi", 4, one(0001100), one(0177700), "#w$s", m68000up }, 212348024e4aSbellard {"andi", 4, one(0001074), one(0177777), "#bCs", m68000up }, 212448024e4aSbellard {"andi", 4, one(0001174), one(0177777), "#wSs", m68000up }, 212548024e4aSbellard 212648024e4aSbellard /* The and opcode can generate the andi instruction. */ 212748024e4aSbellard {"andb", 4, one(0001000), one(0177700), "#b$s", m68000up }, 212848024e4aSbellard {"andb", 4, one(0001074), one(0177777), "#bCs", m68000up }, 212948024e4aSbellard {"andb", 2, one(0140000), one(0170700), ";bDd", m68000up }, 213048024e4aSbellard {"andb", 2, one(0140400), one(0170700), "Dd~b", m68000up }, 213148024e4aSbellard {"andw", 4, one(0001100), one(0177700), "#w$s", m68000up }, 213248024e4aSbellard {"andw", 4, one(0001174), one(0177777), "#wSs", m68000up }, 213348024e4aSbellard {"andw", 2, one(0140100), one(0170700), ";wDd", m68000up }, 213448024e4aSbellard {"andw", 2, one(0140500), one(0170700), "Dd~w", m68000up }, 213548024e4aSbellard {"andl", 6, one(0001200), one(0177700), "#l$s", m68000up }, 213648024e4aSbellard {"andl", 6, one(0001200), one(0177700), "#lDs", mcfisa_a }, 213748024e4aSbellard {"andl", 2, one(0140200), one(0170700), ";lDd", m68000up | mcfisa_a }, 213848024e4aSbellard {"andl", 2, one(0140600), one(0170700), "Dd~l", m68000up | mcfisa_a }, 213948024e4aSbellard {"and", 4, one(0001100), one(0177700), "#w$w", m68000up }, 214048024e4aSbellard {"and", 4, one(0001074), one(0177777), "#bCs", m68000up }, 214148024e4aSbellard {"and", 4, one(0001174), one(0177777), "#wSs", m68000up }, 214248024e4aSbellard {"and", 2, one(0140100), one(0170700), ";wDd", m68000up }, 214348024e4aSbellard {"and", 2, one(0140500), one(0170700), "Dd~w", m68000up }, 214448024e4aSbellard 214548024e4aSbellard {"aslb", 2, one(0160400), one(0170770), "QdDs", m68000up }, 214648024e4aSbellard {"aslb", 2, one(0160440), one(0170770), "DdDs", m68000up }, 214748024e4aSbellard {"aslw", 2, one(0160500), one(0170770), "QdDs", m68000up }, 214848024e4aSbellard {"aslw", 2, one(0160540), one(0170770), "DdDs", m68000up }, 214948024e4aSbellard {"aslw", 2, one(0160700), one(0177700), "~s", m68000up }, 215048024e4aSbellard {"asll", 2, one(0160600), one(0170770), "QdDs", m68000up | mcfisa_a }, 215148024e4aSbellard {"asll", 2, one(0160640), one(0170770), "DdDs", m68000up | mcfisa_a }, 215248024e4aSbellard 215348024e4aSbellard {"asrb", 2, one(0160000), one(0170770), "QdDs", m68000up }, 215448024e4aSbellard {"asrb", 2, one(0160040), one(0170770), "DdDs", m68000up }, 215548024e4aSbellard {"asrw", 2, one(0160100), one(0170770), "QdDs", m68000up }, 215648024e4aSbellard {"asrw", 2, one(0160140), one(0170770), "DdDs", m68000up }, 215748024e4aSbellard {"asrw", 2, one(0160300), one(0177700), "~s", m68000up }, 215848024e4aSbellard {"asrl", 2, one(0160200), one(0170770), "QdDs", m68000up | mcfisa_a }, 215948024e4aSbellard {"asrl", 2, one(0160240), one(0170770), "DdDs", m68000up | mcfisa_a }, 216048024e4aSbellard 216148024e4aSbellard {"bhiw", 2, one(0061000), one(0177777), "BW", m68000up | mcfisa_a }, 216248024e4aSbellard {"blsw", 2, one(0061400), one(0177777), "BW", m68000up | mcfisa_a }, 216348024e4aSbellard {"bccw", 2, one(0062000), one(0177777), "BW", m68000up | mcfisa_a }, 216448024e4aSbellard {"bcsw", 2, one(0062400), one(0177777), "BW", m68000up | mcfisa_a }, 216548024e4aSbellard {"bnew", 2, one(0063000), one(0177777), "BW", m68000up | mcfisa_a }, 216648024e4aSbellard {"beqw", 2, one(0063400), one(0177777), "BW", m68000up | mcfisa_a }, 216748024e4aSbellard {"bvcw", 2, one(0064000), one(0177777), "BW", m68000up | mcfisa_a }, 216848024e4aSbellard {"bvsw", 2, one(0064400), one(0177777), "BW", m68000up | mcfisa_a }, 216948024e4aSbellard {"bplw", 2, one(0065000), one(0177777), "BW", m68000up | mcfisa_a }, 217048024e4aSbellard {"bmiw", 2, one(0065400), one(0177777), "BW", m68000up | mcfisa_a }, 217148024e4aSbellard {"bgew", 2, one(0066000), one(0177777), "BW", m68000up | mcfisa_a }, 217248024e4aSbellard {"bltw", 2, one(0066400), one(0177777), "BW", m68000up | mcfisa_a }, 217348024e4aSbellard {"bgtw", 2, one(0067000), one(0177777), "BW", m68000up | mcfisa_a }, 217448024e4aSbellard {"blew", 2, one(0067400), one(0177777), "BW", m68000up | mcfisa_a }, 217548024e4aSbellard 217648024e4aSbellard {"bhil", 2, one(0061377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 217748024e4aSbellard {"blsl", 2, one(0061777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 217848024e4aSbellard {"bccl", 2, one(0062377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 217948024e4aSbellard {"bcsl", 2, one(0062777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218048024e4aSbellard {"bnel", 2, one(0063377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218148024e4aSbellard {"beql", 2, one(0063777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218248024e4aSbellard {"bvcl", 2, one(0064377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218348024e4aSbellard {"bvsl", 2, one(0064777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218448024e4aSbellard {"bpll", 2, one(0065377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218548024e4aSbellard {"bmil", 2, one(0065777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218648024e4aSbellard {"bgel", 2, one(0066377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218748024e4aSbellard {"bltl", 2, one(0066777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218848024e4aSbellard {"bgtl", 2, one(0067377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 218948024e4aSbellard {"blel", 2, one(0067777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 219048024e4aSbellard 219148024e4aSbellard {"bhis", 2, one(0061000), one(0177400), "BB", m68000up | mcfisa_a }, 219248024e4aSbellard {"blss", 2, one(0061400), one(0177400), "BB", m68000up | mcfisa_a }, 219348024e4aSbellard {"bccs", 2, one(0062000), one(0177400), "BB", m68000up | mcfisa_a }, 219448024e4aSbellard {"bcss", 2, one(0062400), one(0177400), "BB", m68000up | mcfisa_a }, 219548024e4aSbellard {"bnes", 2, one(0063000), one(0177400), "BB", m68000up | mcfisa_a }, 219648024e4aSbellard {"beqs", 2, one(0063400), one(0177400), "BB", m68000up | mcfisa_a }, 219748024e4aSbellard {"bvcs", 2, one(0064000), one(0177400), "BB", m68000up | mcfisa_a }, 219848024e4aSbellard {"bvss", 2, one(0064400), one(0177400), "BB", m68000up | mcfisa_a }, 219948024e4aSbellard {"bpls", 2, one(0065000), one(0177400), "BB", m68000up | mcfisa_a }, 220048024e4aSbellard {"bmis", 2, one(0065400), one(0177400), "BB", m68000up | mcfisa_a }, 220148024e4aSbellard {"bges", 2, one(0066000), one(0177400), "BB", m68000up | mcfisa_a }, 220248024e4aSbellard {"blts", 2, one(0066400), one(0177400), "BB", m68000up | mcfisa_a }, 220348024e4aSbellard {"bgts", 2, one(0067000), one(0177400), "BB", m68000up | mcfisa_a }, 220448024e4aSbellard {"bles", 2, one(0067400), one(0177400), "BB", m68000up | mcfisa_a }, 220548024e4aSbellard 220648024e4aSbellard {"jhi", 2, one(0061000), one(0177400), "Bg", m68000up | mcfisa_a }, 220748024e4aSbellard {"jls", 2, one(0061400), one(0177400), "Bg", m68000up | mcfisa_a }, 220848024e4aSbellard {"jcc", 2, one(0062000), one(0177400), "Bg", m68000up | mcfisa_a }, 220948024e4aSbellard {"jcs", 2, one(0062400), one(0177400), "Bg", m68000up | mcfisa_a }, 221048024e4aSbellard {"jne", 2, one(0063000), one(0177400), "Bg", m68000up | mcfisa_a }, 221148024e4aSbellard {"jeq", 2, one(0063400), one(0177400), "Bg", m68000up | mcfisa_a }, 221248024e4aSbellard {"jvc", 2, one(0064000), one(0177400), "Bg", m68000up | mcfisa_a }, 221348024e4aSbellard {"jvs", 2, one(0064400), one(0177400), "Bg", m68000up | mcfisa_a }, 221448024e4aSbellard {"jpl", 2, one(0065000), one(0177400), "Bg", m68000up | mcfisa_a }, 221548024e4aSbellard {"jmi", 2, one(0065400), one(0177400), "Bg", m68000up | mcfisa_a }, 221648024e4aSbellard {"jge", 2, one(0066000), one(0177400), "Bg", m68000up | mcfisa_a }, 221748024e4aSbellard {"jlt", 2, one(0066400), one(0177400), "Bg", m68000up | mcfisa_a }, 221848024e4aSbellard {"jgt", 2, one(0067000), one(0177400), "Bg", m68000up | mcfisa_a }, 221948024e4aSbellard {"jle", 2, one(0067400), one(0177400), "Bg", m68000up | mcfisa_a }, 222048024e4aSbellard 222148024e4aSbellard {"bchg", 2, one(0000500), one(0170700), "Dd$s", m68000up | mcfisa_a }, 222248024e4aSbellard {"bchg", 4, one(0004100), one(0177700), "#b$s", m68000up }, 222348024e4aSbellard {"bchg", 4, one(0004100), one(0177700), "#bqs", mcfisa_a }, 222448024e4aSbellard 222548024e4aSbellard {"bclr", 2, one(0000600), one(0170700), "Dd$s", m68000up | mcfisa_a }, 222648024e4aSbellard {"bclr", 4, one(0004200), one(0177700), "#b$s", m68000up }, 222748024e4aSbellard {"bclr", 4, one(0004200), one(0177700), "#bqs", mcfisa_a }, 222848024e4aSbellard 222948024e4aSbellard {"bfchg", 4, two(0165300, 0), two(0177700, 0170000), "?sO2O3", m68020up }, 223048024e4aSbellard {"bfclr", 4, two(0166300, 0), two(0177700, 0170000), "?sO2O3", m68020up }, 223148024e4aSbellard {"bfexts", 4, two(0165700, 0), two(0177700, 0100000), "/sO2O3D1", m68020up }, 223248024e4aSbellard {"bfextu", 4, two(0164700, 0), two(0177700, 0100000), "/sO2O3D1", m68020up }, 223348024e4aSbellard {"bfffo", 4, two(0166700, 0), two(0177700, 0100000), "/sO2O3D1", m68020up }, 223448024e4aSbellard {"bfins", 4, two(0167700, 0), two(0177700, 0100000), "D1?sO2O3", m68020up }, 223548024e4aSbellard {"bfset", 4, two(0167300, 0), two(0177700, 0170000), "?sO2O3", m68020up }, 223648024e4aSbellard {"bftst", 4, two(0164300, 0), two(0177700, 0170000), "/sO2O3", m68020up }, 223748024e4aSbellard 223848024e4aSbellard {"bgnd", 2, one(0045372), one(0177777), "", cpu32 }, 223948024e4aSbellard 224048024e4aSbellard {"bitrev", 2, one(0000300), one(0177770), "Ds", mcfisa_aa}, 224148024e4aSbellard 224248024e4aSbellard {"bkpt", 2, one(0044110), one(0177770), "ts", m68010up }, 224348024e4aSbellard 224448024e4aSbellard {"braw", 2, one(0060000), one(0177777), "BW", m68000up | mcfisa_a }, 224548024e4aSbellard {"bral", 2, one(0060377), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 224648024e4aSbellard {"bras", 2, one(0060000), one(0177400), "BB", m68000up | mcfisa_a }, 224748024e4aSbellard 224848024e4aSbellard {"bset", 2, one(0000700), one(0170700), "Dd$s", m68000up | mcfisa_a }, 224948024e4aSbellard {"bset", 2, one(0000700), one(0170700), "Ddvs", mcfisa_a }, 225048024e4aSbellard {"bset", 4, one(0004300), one(0177700), "#b$s", m68000up }, 225148024e4aSbellard {"bset", 4, one(0004300), one(0177700), "#bqs", mcfisa_a }, 225248024e4aSbellard 225348024e4aSbellard {"bsrw", 2, one(0060400), one(0177777), "BW", m68000up | mcfisa_a }, 225448024e4aSbellard {"bsrl", 2, one(0060777), one(0177777), "BL", m68020up | cpu32 | mcfisa_b}, 225548024e4aSbellard {"bsrs", 2, one(0060400), one(0177400), "BB", m68000up | mcfisa_a }, 225648024e4aSbellard 225748024e4aSbellard {"btst", 2, one(0000400), one(0170700), "Dd;b", m68000up | mcfisa_a }, 225848024e4aSbellard {"btst", 4, one(0004000), one(0177700), "#b@s", m68000up }, 225948024e4aSbellard {"btst", 4, one(0004000), one(0177700), "#bqs", mcfisa_a }, 226048024e4aSbellard 226148024e4aSbellard {"byterev", 2, one(0001300), one(0177770), "Ds", mcfisa_aa}, 226248024e4aSbellard 226348024e4aSbellard {"callm", 4, one(0003300), one(0177700), "#b!s", m68020 }, 226448024e4aSbellard 226548024e4aSbellard {"cas2w", 6, two(0006374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up }, 226648024e4aSbellard {"cas2w", 6, two(0006374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up }, 226748024e4aSbellard {"cas2l", 6, two(0007374,0), two(0177777,0007070), "D3D6D2D5r1r4", m68020up }, 226848024e4aSbellard {"cas2l", 6, two(0007374,0), two(0177777,0007070), "D3D6D2D5R1R4", m68020up }, 226948024e4aSbellard 227048024e4aSbellard {"casb", 4, two(0005300, 0), two(0177700, 0177070), "D3D2~s", m68020up }, 227148024e4aSbellard {"casw", 4, two(0006300, 0), two(0177700, 0177070), "D3D2~s", m68020up }, 227248024e4aSbellard {"casl", 4, two(0007300, 0), two(0177700, 0177070), "D3D2~s", m68020up }, 227348024e4aSbellard 227448024e4aSbellard {"chk2b", 4, two(0000300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 }, 227548024e4aSbellard {"chk2w", 4, two(0001300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 }, 227648024e4aSbellard {"chk2l", 4, two(0002300,0004000), two(0177700,07777), "!sR1", m68020up | cpu32 }, 227748024e4aSbellard 227848024e4aSbellard {"chkl", 2, one(0040400), one(0170700), ";lDd", m68000up }, 227948024e4aSbellard {"chkw", 2, one(0040600), one(0170700), ";wDd", m68000up }, 228048024e4aSbellard 228148024e4aSbellard #define SCOPE_LINE (0x1 << 3) 228248024e4aSbellard #define SCOPE_PAGE (0x2 << 3) 228348024e4aSbellard #define SCOPE_ALL (0x3 << 3) 228448024e4aSbellard 228548024e4aSbellard {"cinva", 2, one(0xf400|SCOPE_ALL), one(0xff38), "ce", m68040up }, 228648024e4aSbellard {"cinvl", 2, one(0xf400|SCOPE_LINE), one(0xff38), "ceas", m68040up }, 228748024e4aSbellard {"cinvp", 2, one(0xf400|SCOPE_PAGE), one(0xff38), "ceas", m68040up }, 228848024e4aSbellard 228948024e4aSbellard {"cpusha", 2, one(0xf420|SCOPE_ALL), one(0xff38), "ce", m68040up }, 229048024e4aSbellard {"cpushl", 2, one(0xf420|SCOPE_LINE), one(0xff38), "ceas", m68040up | mcfisa_a }, 229148024e4aSbellard {"cpushp", 2, one(0xf420|SCOPE_PAGE), one(0xff38), "ceas", m68040up }, 229248024e4aSbellard 229348024e4aSbellard #undef SCOPE_LINE 229448024e4aSbellard #undef SCOPE_PAGE 229548024e4aSbellard #undef SCOPE_ALL 229648024e4aSbellard 229748024e4aSbellard {"clrb", 2, one(0041000), one(0177700), "$s", m68000up | mcfisa_a }, 229848024e4aSbellard {"clrw", 2, one(0041100), one(0177700), "$s", m68000up | mcfisa_a }, 229948024e4aSbellard {"clrl", 2, one(0041200), one(0177700), "$s", m68000up | mcfisa_a }, 230048024e4aSbellard 230148024e4aSbellard {"cmp2b", 4, two(0000300,0), two(0177700,07777), "!sR1", m68020up | cpu32 }, 230248024e4aSbellard {"cmp2w", 4, two(0001300,0), two(0177700,07777), "!sR1", m68020up | cpu32 }, 230348024e4aSbellard {"cmp2l", 4, two(0002300,0), two(0177700,07777), "!sR1", m68020up | cpu32 }, 230448024e4aSbellard 230548024e4aSbellard {"cmpaw", 2, one(0130300), one(0170700), "*wAd", m68000up }, 230648024e4aSbellard {"cmpal", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a }, 230748024e4aSbellard 230848024e4aSbellard {"cmpib", 4, one(0006000), one(0177700), "#b@s", m68000up }, 230948024e4aSbellard {"cmpib", 4, one(0006000), one(0177700), "#bDs", mcfisa_b }, 231048024e4aSbellard {"cmpiw", 4, one(0006100), one(0177700), "#w@s", m68000up }, 231148024e4aSbellard {"cmpiw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b }, 231248024e4aSbellard {"cmpil", 6, one(0006200), one(0177700), "#l@s", m68000up }, 231348024e4aSbellard {"cmpil", 6, one(0006200), one(0177700), "#lDs", mcfisa_a }, 231448024e4aSbellard 231548024e4aSbellard {"cmpmb", 2, one(0130410), one(0170770), "+s+d", m68000up }, 231648024e4aSbellard {"cmpmw", 2, one(0130510), one(0170770), "+s+d", m68000up }, 231748024e4aSbellard {"cmpml", 2, one(0130610), one(0170770), "+s+d", m68000up }, 231848024e4aSbellard 231948024e4aSbellard /* The cmp opcode can generate the cmpa, cmpm, and cmpi instructions. */ 232048024e4aSbellard {"cmpb", 4, one(0006000), one(0177700), "#b@s", m68000up }, 232148024e4aSbellard {"cmpb", 4, one(0006000), one(0177700), "#bDs", mcfisa_b }, 232248024e4aSbellard {"cmpb", 2, one(0130410), one(0170770), "+s+d", m68000up }, 232348024e4aSbellard {"cmpb", 2, one(0130000), one(0170700), ";bDd", m68000up }, 232448024e4aSbellard {"cmpb", 2, one(0130000), one(0170700), "*bDd", mcfisa_b }, 232548024e4aSbellard {"cmpw", 2, one(0130300), one(0170700), "*wAd", m68000up }, 232648024e4aSbellard {"cmpw", 4, one(0006100), one(0177700), "#w@s", m68000up }, 232748024e4aSbellard {"cmpw", 4, one(0006100), one(0177700), "#wDs", mcfisa_b }, 232848024e4aSbellard {"cmpw", 2, one(0130510), one(0170770), "+s+d", m68000up }, 232948024e4aSbellard {"cmpw", 2, one(0130100), one(0170700), "*wDd", m68000up | mcfisa_b }, 233048024e4aSbellard {"cmpl", 2, one(0130700), one(0170700), "*lAd", m68000up | mcfisa_a }, 233148024e4aSbellard {"cmpl", 6, one(0006200), one(0177700), "#l@s", m68000up }, 233248024e4aSbellard {"cmpl", 6, one(0006200), one(0177700), "#lDs", mcfisa_a }, 233348024e4aSbellard {"cmpl", 2, one(0130610), one(0170770), "+s+d", m68000up }, 233448024e4aSbellard {"cmpl", 2, one(0130200), one(0170700), "*lDd", m68000up | mcfisa_a }, 233548024e4aSbellard 233648024e4aSbellard {"dbcc", 2, one(0052310), one(0177770), "DsBw", m68000up }, 233748024e4aSbellard {"dbcs", 2, one(0052710), one(0177770), "DsBw", m68000up }, 233848024e4aSbellard {"dbeq", 2, one(0053710), one(0177770), "DsBw", m68000up }, 233948024e4aSbellard {"dbf", 2, one(0050710), one(0177770), "DsBw", m68000up }, 234048024e4aSbellard {"dbge", 2, one(0056310), one(0177770), "DsBw", m68000up }, 234148024e4aSbellard {"dbgt", 2, one(0057310), one(0177770), "DsBw", m68000up }, 234248024e4aSbellard {"dbhi", 2, one(0051310), one(0177770), "DsBw", m68000up }, 234348024e4aSbellard {"dble", 2, one(0057710), one(0177770), "DsBw", m68000up }, 234448024e4aSbellard {"dbls", 2, one(0051710), one(0177770), "DsBw", m68000up }, 234548024e4aSbellard {"dblt", 2, one(0056710), one(0177770), "DsBw", m68000up }, 234648024e4aSbellard {"dbmi", 2, one(0055710), one(0177770), "DsBw", m68000up }, 234748024e4aSbellard {"dbne", 2, one(0053310), one(0177770), "DsBw", m68000up }, 234848024e4aSbellard {"dbpl", 2, one(0055310), one(0177770), "DsBw", m68000up }, 234948024e4aSbellard {"dbt", 2, one(0050310), one(0177770), "DsBw", m68000up }, 235048024e4aSbellard {"dbvc", 2, one(0054310), one(0177770), "DsBw", m68000up }, 235148024e4aSbellard {"dbvs", 2, one(0054710), one(0177770), "DsBw", m68000up }, 235248024e4aSbellard 235348024e4aSbellard {"divsw", 2, one(0100700), one(0170700), ";wDd", m68000up | mcfhwdiv }, 235448024e4aSbellard 235548024e4aSbellard {"divsl", 4, two(0046100,0006000),two(0177700,0107770),";lD3D1", m68020up|cpu32 }, 235648024e4aSbellard {"divsl", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up|cpu32 }, 235748024e4aSbellard {"divsl", 4, two(0046100,0004000),two(0177700,0107770),"qsDD", mcfhwdiv }, 235848024e4aSbellard 235948024e4aSbellard {"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lD3D1",m68020up|cpu32 }, 236048024e4aSbellard {"divsll", 4, two(0046100,0004000),two(0177700,0107770),";lDD", m68020up|cpu32 }, 236148024e4aSbellard 236248024e4aSbellard {"divuw", 2, one(0100300), one(0170700), ";wDd", m68000up | mcfhwdiv }, 236348024e4aSbellard 236448024e4aSbellard {"divul", 4, two(0046100,0002000),two(0177700,0107770),";lD3D1", m68020up|cpu32 }, 236548024e4aSbellard {"divul", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up|cpu32 }, 236648024e4aSbellard {"divul", 4, two(0046100,0000000),two(0177700,0107770),"qsDD", mcfhwdiv }, 236748024e4aSbellard 236848024e4aSbellard {"divull", 4, two(0046100,0000000),two(0177700,0107770),";lD3D1",m68020up|cpu32 }, 236948024e4aSbellard {"divull", 4, two(0046100,0000000),two(0177700,0107770),";lDD", m68020up|cpu32 }, 237048024e4aSbellard 237148024e4aSbellard {"eorib", 4, one(0005000), one(0177700), "#b$s", m68000up }, 237248024e4aSbellard {"eorib", 4, one(0005074), one(0177777), "#bCs", m68000up }, 237348024e4aSbellard {"eoriw", 4, one(0005100), one(0177700), "#w$s", m68000up }, 237448024e4aSbellard {"eoriw", 4, one(0005174), one(0177777), "#wSs", m68000up }, 237548024e4aSbellard {"eoril", 6, one(0005200), one(0177700), "#l$s", m68000up }, 237648024e4aSbellard {"eoril", 6, one(0005200), one(0177700), "#lDs", mcfisa_a }, 237748024e4aSbellard {"eori", 4, one(0005074), one(0177777), "#bCs", m68000up }, 237848024e4aSbellard {"eori", 4, one(0005174), one(0177777), "#wSs", m68000up }, 237948024e4aSbellard {"eori", 4, one(0005100), one(0177700), "#w$s", m68000up }, 238048024e4aSbellard 238148024e4aSbellard /* The eor opcode can generate the eori instruction. */ 238248024e4aSbellard {"eorb", 4, one(0005000), one(0177700), "#b$s", m68000up }, 238348024e4aSbellard {"eorb", 4, one(0005074), one(0177777), "#bCs", m68000up }, 238448024e4aSbellard {"eorb", 2, one(0130400), one(0170700), "Dd$s", m68000up }, 238548024e4aSbellard {"eorw", 4, one(0005100), one(0177700), "#w$s", m68000up }, 238648024e4aSbellard {"eorw", 4, one(0005174), one(0177777), "#wSs", m68000up }, 238748024e4aSbellard {"eorw", 2, one(0130500), one(0170700), "Dd$s", m68000up }, 238848024e4aSbellard {"eorl", 6, one(0005200), one(0177700), "#l$s", m68000up }, 238948024e4aSbellard {"eorl", 6, one(0005200), one(0177700), "#lDs", mcfisa_a }, 239048024e4aSbellard {"eorl", 2, one(0130600), one(0170700), "Dd$s", m68000up | mcfisa_a }, 239148024e4aSbellard {"eor", 4, one(0005074), one(0177777), "#bCs", m68000up }, 239248024e4aSbellard {"eor", 4, one(0005174), one(0177777), "#wSs", m68000up }, 239348024e4aSbellard {"eor", 4, one(0005100), one(0177700), "#w$s", m68000up }, 239448024e4aSbellard {"eor", 2, one(0130500), one(0170700), "Dd$s", m68000up }, 239548024e4aSbellard 239648024e4aSbellard {"exg", 2, one(0140500), one(0170770), "DdDs", m68000up }, 239748024e4aSbellard {"exg", 2, one(0140510), one(0170770), "AdAs", m68000up }, 239848024e4aSbellard {"exg", 2, one(0140610), one(0170770), "DdAs", m68000up }, 239948024e4aSbellard {"exg", 2, one(0140610), one(0170770), "AsDd", m68000up }, 240048024e4aSbellard 240148024e4aSbellard {"extw", 2, one(0044200), one(0177770), "Ds", m68000up|mcfisa_a }, 240248024e4aSbellard {"extl", 2, one(0044300), one(0177770), "Ds", m68000up|mcfisa_a }, 240348024e4aSbellard {"extbl", 2, one(0044700), one(0177770), "Ds", m68020up|cpu32|mcfisa_a }, 240448024e4aSbellard 240548024e4aSbellard {"ff1", 2, one(0002300), one(0177770), "Ds", mcfisa_aa}, 240648024e4aSbellard 240748024e4aSbellard /* float stuff starts here */ 240848024e4aSbellard 240948024e4aSbellard {"fabsb", 4, two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 241048024e4aSbellard {"fabsb", 4, two(0xF000, 0x5818), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 241148024e4aSbellard {"fabsd", 4, two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 241248024e4aSbellard {"fabsd", 4, two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 241348024e4aSbellard {"fabsd", 4, two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 241448024e4aSbellard {"fabsd", 4, two(0xF000, 0x5418), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 241548024e4aSbellard {"fabsl", 4, two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 241648024e4aSbellard {"fabsl", 4, two(0xF000, 0x4018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 241748024e4aSbellard {"fabsp", 4, two(0xF000, 0x4C18), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 241848024e4aSbellard {"fabss", 4, two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", cfloat }, 241948024e4aSbellard {"fabss", 4, two(0xF000, 0x4418), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 242048024e4aSbellard {"fabsw", 4, two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 242148024e4aSbellard {"fabsw", 4, two(0xF000, 0x5018), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 242248024e4aSbellard {"fabsx", 4, two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 242348024e4aSbellard {"fabsx", 4, two(0xF000, 0x4818), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 242448024e4aSbellard {"fabsx", 4, two(0xF000, 0x0018), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 242548024e4aSbellard 242648024e4aSbellard {"fsabsb", 4, two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 242748024e4aSbellard {"fsabsb", 4, two(0xF000, 0x5858), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 242848024e4aSbellard {"fsabsd", 4, two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 242948024e4aSbellard {"fsabsd", 4, two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 243048024e4aSbellard {"fsabsd", 4, two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 243148024e4aSbellard {"fsabsd", 4, two(0xF000, 0x5458), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 243248024e4aSbellard {"fsabsl", 4, two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 243348024e4aSbellard {"fsabsl", 4, two(0xF000, 0x4058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 243448024e4aSbellard {"fsabsp", 4, two(0xF000, 0x4C58), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 243548024e4aSbellard {"fsabss", 4, two(0xF000, 0x4258), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 243648024e4aSbellard {"fsabss", 4, two(0xF000, 0x4458), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 243748024e4aSbellard {"fsabsw", 4, two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 243848024e4aSbellard {"fsabsw", 4, two(0xF000, 0x5058), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 243948024e4aSbellard {"fsabsx", 4, two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 244048024e4aSbellard {"fsabsx", 4, two(0xF000, 0x4858), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 244148024e4aSbellard {"fsabsx", 4, two(0xF000, 0x0058), two(0xF1C0, 0xE07F), "IiFt", m68040up }, 244248024e4aSbellard 244348024e4aSbellard {"fdabsb", 4, two(0xF000, 0x585C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 244448024e4aSbellard {"fdabsb", 4, two(0xF000, 0x585c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up}, 244548024e4aSbellard {"fdabsd", 4, two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 244648024e4aSbellard {"fdabsd", 4, two(0xF000, 0x005C), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 244748024e4aSbellard {"fdabsd", 4, two(0xF000, 0x545C), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 244848024e4aSbellard {"fdabsd", 4, two(0xF000, 0x545c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up}, 244948024e4aSbellard {"fdabsl", 4, two(0xF000, 0x405C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 245048024e4aSbellard {"fdabsl", 4, two(0xF000, 0x405c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up}, 245148024e4aSbellard {"fdabsp", 4, two(0xF000, 0x4C5c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up}, 245248024e4aSbellard {"fdabss", 4, two(0xF000, 0x425C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 245348024e4aSbellard {"fdabss", 4, two(0xF000, 0x445c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up}, 245448024e4aSbellard {"fdabsw", 4, two(0xF000, 0x505C), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 245548024e4aSbellard {"fdabsw", 4, two(0xF000, 0x505c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up}, 245648024e4aSbellard {"fdabsx", 4, two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up}, 245748024e4aSbellard {"fdabsx", 4, two(0xF000, 0x485c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up}, 245848024e4aSbellard {"fdabsx", 4, two(0xF000, 0x005c), two(0xF1C0, 0xE07F), "IiFt", m68040up}, 245948024e4aSbellard 246048024e4aSbellard {"facosb", 4, two(0xF000, 0x581C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 246148024e4aSbellard {"facosd", 4, two(0xF000, 0x541C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 246248024e4aSbellard {"facosl", 4, two(0xF000, 0x401C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 246348024e4aSbellard {"facosp", 4, two(0xF000, 0x4C1C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 246448024e4aSbellard {"facoss", 4, two(0xF000, 0x441C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 246548024e4aSbellard {"facosw", 4, two(0xF000, 0x501C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 246648024e4aSbellard {"facosx", 4, two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 246748024e4aSbellard {"facosx", 4, two(0xF000, 0x481C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 246848024e4aSbellard {"facosx", 4, two(0xF000, 0x001C), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 246948024e4aSbellard 247048024e4aSbellard {"faddb", 4, two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 247148024e4aSbellard {"faddb", 4, two(0xF000, 0x5822), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 247248024e4aSbellard {"faddd", 4, two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 247348024e4aSbellard {"faddd", 4, two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 247448024e4aSbellard {"faddd", 4, two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 247548024e4aSbellard {"faddd", 4, two(0xF000, 0x5422), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 247648024e4aSbellard {"faddl", 4, two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 247748024e4aSbellard {"faddl", 4, two(0xF000, 0x4022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 247848024e4aSbellard {"faddp", 4, two(0xF000, 0x4C22), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 247948024e4aSbellard {"fadds", 4, two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 248048024e4aSbellard {"fadds", 4, two(0xF000, 0x4422), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 248148024e4aSbellard {"faddw", 4, two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 248248024e4aSbellard {"faddw", 4, two(0xF000, 0x5022), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 248348024e4aSbellard {"faddx", 4, two(0xF000, 0x0022), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 248448024e4aSbellard {"faddx", 4, two(0xF000, 0x4822), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 248548024e4aSbellard 248648024e4aSbellard {"fsaddb", 4, two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 248748024e4aSbellard {"fsaddb", 4, two(0xF000, 0x5862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 248848024e4aSbellard {"fsaddd", 4, two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 248948024e4aSbellard {"fsaddd", 4, two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 249048024e4aSbellard {"fsaddd", 4, two(0xF000, 0x5462), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 249148024e4aSbellard {"fsaddl", 4, two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 249248024e4aSbellard {"fsaddl", 4, two(0xF000, 0x4062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 249348024e4aSbellard {"fsaddp", 4, two(0xF000, 0x4C62), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 249448024e4aSbellard {"fsadds", 4, two(0xF000, 0x4462), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 249548024e4aSbellard {"fsadds", 4, two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 249648024e4aSbellard {"fsaddw", 4, two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 249748024e4aSbellard {"fsaddw", 4, two(0xF000, 0x5062), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 249848024e4aSbellard {"fsaddx", 4, two(0xF000, 0x0062), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 249948024e4aSbellard {"fsaddx", 4, two(0xF000, 0x4862), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 250048024e4aSbellard 250148024e4aSbellard {"fdaddb", 4, two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 250248024e4aSbellard {"fdaddb", 4, two(0xF000, 0x5866), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 250348024e4aSbellard {"fdaddd", 4, two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 250448024e4aSbellard {"fdaddd", 4, two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 250548024e4aSbellard {"fdaddd", 4, two(0xF000, 0x5466), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 250648024e4aSbellard {"fdaddl", 4, two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 250748024e4aSbellard {"fdaddl", 4, two(0xF000, 0x4066), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 250848024e4aSbellard {"fdaddp", 4, two(0xF000, 0x4C66), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 250948024e4aSbellard {"fdadds", 4, two(0xF000, 0x4466), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 251048024e4aSbellard {"fdadds", 4, two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 251148024e4aSbellard {"fdaddw", 4, two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 251248024e4aSbellard {"fdaddw", 4, two(0xF000, 0x5066), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 251348024e4aSbellard {"fdaddx", 4, two(0xF000, 0x0066), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 251448024e4aSbellard {"fdaddx", 4, two(0xF000, 0x4866), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 251548024e4aSbellard 251648024e4aSbellard {"fasinb", 4, two(0xF000, 0x580C), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 251748024e4aSbellard {"fasind", 4, two(0xF000, 0x540C), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 251848024e4aSbellard {"fasinl", 4, two(0xF000, 0x400C), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 251948024e4aSbellard {"fasinp", 4, two(0xF000, 0x4C0C), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 252048024e4aSbellard {"fasins", 4, two(0xF000, 0x440C), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 252148024e4aSbellard {"fasinw", 4, two(0xF000, 0x500C), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 252248024e4aSbellard {"fasinx", 4, two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 252348024e4aSbellard {"fasinx", 4, two(0xF000, 0x480C), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 252448024e4aSbellard {"fasinx", 4, two(0xF000, 0x000C), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 252548024e4aSbellard 252648024e4aSbellard {"fatanb", 4, two(0xF000, 0x580A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 252748024e4aSbellard {"fatand", 4, two(0xF000, 0x540A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 252848024e4aSbellard {"fatanl", 4, two(0xF000, 0x400A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 252948024e4aSbellard {"fatanp", 4, two(0xF000, 0x4C0A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 253048024e4aSbellard {"fatans", 4, two(0xF000, 0x440A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 253148024e4aSbellard {"fatanw", 4, two(0xF000, 0x500A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 253248024e4aSbellard {"fatanx", 4, two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 253348024e4aSbellard {"fatanx", 4, two(0xF000, 0x480A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 253448024e4aSbellard {"fatanx", 4, two(0xF000, 0x000A), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 253548024e4aSbellard 253648024e4aSbellard {"fatanhb", 4, two(0xF000, 0x580D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 253748024e4aSbellard {"fatanhd", 4, two(0xF000, 0x540D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 253848024e4aSbellard {"fatanhl", 4, two(0xF000, 0x400D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 253948024e4aSbellard {"fatanhp", 4, two(0xF000, 0x4C0D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 254048024e4aSbellard {"fatanhs", 4, two(0xF000, 0x440D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 254148024e4aSbellard {"fatanhw", 4, two(0xF000, 0x500D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 254248024e4aSbellard {"fatanhx", 4, two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 254348024e4aSbellard {"fatanhx", 4, two(0xF000, 0x480D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 254448024e4aSbellard {"fatanhx", 4, two(0xF000, 0x000D), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 254548024e4aSbellard 254648024e4aSbellard {"fbeq", 2, one(0xF081), one(0xF1FF), "IdBW", mfloat | cfloat }, 254748024e4aSbellard {"fbf", 2, one(0xF080), one(0xF1FF), "IdBW", mfloat | cfloat }, 254848024e4aSbellard {"fbge", 2, one(0xF093), one(0xF1FF), "IdBW", mfloat | cfloat }, 254948024e4aSbellard {"fbgl", 2, one(0xF096), one(0xF1FF), "IdBW", mfloat | cfloat }, 255048024e4aSbellard {"fbgle", 2, one(0xF097), one(0xF1FF), "IdBW", mfloat | cfloat }, 255148024e4aSbellard {"fbgt", 2, one(0xF092), one(0xF1FF), "IdBW", mfloat | cfloat }, 255248024e4aSbellard {"fble", 2, one(0xF095), one(0xF1FF), "IdBW", mfloat | cfloat }, 255348024e4aSbellard {"fblt", 2, one(0xF094), one(0xF1FF), "IdBW", mfloat | cfloat }, 255448024e4aSbellard {"fbne", 2, one(0xF08E), one(0xF1FF), "IdBW", mfloat | cfloat }, 255548024e4aSbellard {"fbnge", 2, one(0xF09C), one(0xF1FF), "IdBW", mfloat | cfloat }, 255648024e4aSbellard {"fbngl", 2, one(0xF099), one(0xF1FF), "IdBW", mfloat | cfloat }, 255748024e4aSbellard {"fbngle", 2, one(0xF098), one(0xF1FF), "IdBW", mfloat | cfloat }, 255848024e4aSbellard {"fbngt", 2, one(0xF09D), one(0xF1FF), "IdBW", mfloat | cfloat }, 255948024e4aSbellard {"fbnle", 2, one(0xF09A), one(0xF1FF), "IdBW", mfloat | cfloat }, 256048024e4aSbellard {"fbnlt", 2, one(0xF09B), one(0xF1FF), "IdBW", mfloat | cfloat }, 256148024e4aSbellard {"fboge", 2, one(0xF083), one(0xF1FF), "IdBW", mfloat | cfloat }, 256248024e4aSbellard {"fbogl", 2, one(0xF086), one(0xF1FF), "IdBW", mfloat | cfloat }, 256348024e4aSbellard {"fbogt", 2, one(0xF082), one(0xF1FF), "IdBW", mfloat | cfloat }, 256448024e4aSbellard {"fbole", 2, one(0xF085), one(0xF1FF), "IdBW", mfloat | cfloat }, 256548024e4aSbellard {"fbolt", 2, one(0xF084), one(0xF1FF), "IdBW", mfloat | cfloat }, 256648024e4aSbellard {"fbor", 2, one(0xF087), one(0xF1FF), "IdBW", mfloat | cfloat }, 256748024e4aSbellard {"fbseq", 2, one(0xF091), one(0xF1FF), "IdBW", mfloat | cfloat }, 256848024e4aSbellard {"fbsf", 2, one(0xF090), one(0xF1FF), "IdBW", mfloat | cfloat }, 256948024e4aSbellard {"fbsne", 2, one(0xF09E), one(0xF1FF), "IdBW", mfloat | cfloat }, 257048024e4aSbellard {"fbst", 2, one(0xF09F), one(0xF1FF), "IdBW", mfloat | cfloat }, 257148024e4aSbellard {"fbt", 2, one(0xF08F), one(0xF1FF), "IdBW", mfloat | cfloat }, 257248024e4aSbellard {"fbueq", 2, one(0xF089), one(0xF1FF), "IdBW", mfloat | cfloat }, 257348024e4aSbellard {"fbuge", 2, one(0xF08B), one(0xF1FF), "IdBW", mfloat | cfloat }, 257448024e4aSbellard {"fbugt", 2, one(0xF08A), one(0xF1FF), "IdBW", mfloat | cfloat }, 257548024e4aSbellard {"fbule", 2, one(0xF08D), one(0xF1FF), "IdBW", mfloat | cfloat }, 257648024e4aSbellard {"fbult", 2, one(0xF08C), one(0xF1FF), "IdBW", mfloat | cfloat }, 257748024e4aSbellard {"fbun", 2, one(0xF088), one(0xF1FF), "IdBW", mfloat | cfloat }, 257848024e4aSbellard 257948024e4aSbellard {"fbeql", 2, one(0xF0C1), one(0xF1FF), "IdBC", mfloat | cfloat }, 258048024e4aSbellard {"fbfl", 2, one(0xF0C0), one(0xF1FF), "IdBC", mfloat | cfloat }, 258148024e4aSbellard {"fbgel", 2, one(0xF0D3), one(0xF1FF), "IdBC", mfloat | cfloat }, 258248024e4aSbellard {"fbgll", 2, one(0xF0D6), one(0xF1FF), "IdBC", mfloat | cfloat }, 258348024e4aSbellard {"fbglel", 2, one(0xF0D7), one(0xF1FF), "IdBC", mfloat | cfloat }, 258448024e4aSbellard {"fbgtl", 2, one(0xF0D2), one(0xF1FF), "IdBC", mfloat | cfloat }, 258548024e4aSbellard {"fblel", 2, one(0xF0D5), one(0xF1FF), "IdBC", mfloat | cfloat }, 258648024e4aSbellard {"fbltl", 2, one(0xF0D4), one(0xF1FF), "IdBC", mfloat | cfloat }, 258748024e4aSbellard {"fbnel", 2, one(0xF0CE), one(0xF1FF), "IdBC", mfloat | cfloat }, 258848024e4aSbellard {"fbngel", 2, one(0xF0DC), one(0xF1FF), "IdBC", mfloat | cfloat }, 258948024e4aSbellard {"fbngll", 2, one(0xF0D9), one(0xF1FF), "IdBC", mfloat | cfloat }, 259048024e4aSbellard {"fbnglel", 2, one(0xF0D8), one(0xF1FF), "IdBC", mfloat | cfloat }, 259148024e4aSbellard {"fbngtl", 2, one(0xF0DD), one(0xF1FF), "IdBC", mfloat | cfloat }, 259248024e4aSbellard {"fbnlel", 2, one(0xF0DA), one(0xF1FF), "IdBC", mfloat | cfloat }, 259348024e4aSbellard {"fbnltl", 2, one(0xF0DB), one(0xF1FF), "IdBC", mfloat | cfloat }, 259448024e4aSbellard {"fbogel", 2, one(0xF0C3), one(0xF1FF), "IdBC", mfloat | cfloat }, 259548024e4aSbellard {"fbogll", 2, one(0xF0C6), one(0xF1FF), "IdBC", mfloat | cfloat }, 259648024e4aSbellard {"fbogtl", 2, one(0xF0C2), one(0xF1FF), "IdBC", mfloat | cfloat }, 259748024e4aSbellard {"fbolel", 2, one(0xF0C5), one(0xF1FF), "IdBC", mfloat | cfloat }, 259848024e4aSbellard {"fboltl", 2, one(0xF0C4), one(0xF1FF), "IdBC", mfloat | cfloat }, 259948024e4aSbellard {"fborl", 2, one(0xF0C7), one(0xF1FF), "IdBC", mfloat | cfloat }, 260048024e4aSbellard {"fbseql", 2, one(0xF0D1), one(0xF1FF), "IdBC", mfloat | cfloat }, 260148024e4aSbellard {"fbsfl", 2, one(0xF0D0), one(0xF1FF), "IdBC", mfloat | cfloat }, 260248024e4aSbellard {"fbsnel", 2, one(0xF0DE), one(0xF1FF), "IdBC", mfloat | cfloat }, 260348024e4aSbellard {"fbstl", 2, one(0xF0DF), one(0xF1FF), "IdBC", mfloat | cfloat }, 260448024e4aSbellard {"fbtl", 2, one(0xF0CF), one(0xF1FF), "IdBC", mfloat | cfloat }, 260548024e4aSbellard {"fbueql", 2, one(0xF0C9), one(0xF1FF), "IdBC", mfloat | cfloat }, 260648024e4aSbellard {"fbugel", 2, one(0xF0CB), one(0xF1FF), "IdBC", mfloat | cfloat }, 260748024e4aSbellard {"fbugtl", 2, one(0xF0CA), one(0xF1FF), "IdBC", mfloat | cfloat }, 260848024e4aSbellard {"fbulel", 2, one(0xF0CD), one(0xF1FF), "IdBC", mfloat | cfloat }, 260948024e4aSbellard {"fbultl", 2, one(0xF0CC), one(0xF1FF), "IdBC", mfloat | cfloat }, 261048024e4aSbellard {"fbunl", 2, one(0xF0C8), one(0xF1FF), "IdBC", mfloat | cfloat }, 261148024e4aSbellard 261248024e4aSbellard {"fjeq", 2, one(0xF081), one(0xF1BF), "IdBc", mfloat | cfloat }, 261348024e4aSbellard {"fjf", 2, one(0xF080), one(0xF1BF), "IdBc", mfloat | cfloat }, 261448024e4aSbellard {"fjge", 2, one(0xF093), one(0xF1BF), "IdBc", mfloat | cfloat }, 261548024e4aSbellard {"fjgl", 2, one(0xF096), one(0xF1BF), "IdBc", mfloat | cfloat }, 261648024e4aSbellard {"fjgle", 2, one(0xF097), one(0xF1BF), "IdBc", mfloat | cfloat }, 261748024e4aSbellard {"fjgt", 2, one(0xF092), one(0xF1BF), "IdBc", mfloat | cfloat }, 261848024e4aSbellard {"fjle", 2, one(0xF095), one(0xF1BF), "IdBc", mfloat | cfloat }, 261948024e4aSbellard {"fjlt", 2, one(0xF094), one(0xF1BF), "IdBc", mfloat | cfloat }, 262048024e4aSbellard {"fjne", 2, one(0xF08E), one(0xF1BF), "IdBc", mfloat | cfloat }, 262148024e4aSbellard {"fjnge", 2, one(0xF09C), one(0xF1BF), "IdBc", mfloat | cfloat }, 262248024e4aSbellard {"fjngl", 2, one(0xF099), one(0xF1BF), "IdBc", mfloat | cfloat }, 262348024e4aSbellard {"fjngle", 2, one(0xF098), one(0xF1BF), "IdBc", mfloat | cfloat }, 262448024e4aSbellard {"fjngt", 2, one(0xF09D), one(0xF1BF), "IdBc", mfloat | cfloat }, 262548024e4aSbellard {"fjnle", 2, one(0xF09A), one(0xF1BF), "IdBc", mfloat | cfloat }, 262648024e4aSbellard {"fjnlt", 2, one(0xF09B), one(0xF1BF), "IdBc", mfloat | cfloat }, 262748024e4aSbellard {"fjoge", 2, one(0xF083), one(0xF1BF), "IdBc", mfloat | cfloat }, 262848024e4aSbellard {"fjogl", 2, one(0xF086), one(0xF1BF), "IdBc", mfloat | cfloat }, 262948024e4aSbellard {"fjogt", 2, one(0xF082), one(0xF1BF), "IdBc", mfloat | cfloat }, 263048024e4aSbellard {"fjole", 2, one(0xF085), one(0xF1BF), "IdBc", mfloat | cfloat }, 263148024e4aSbellard {"fjolt", 2, one(0xF084), one(0xF1BF), "IdBc", mfloat | cfloat }, 263248024e4aSbellard {"fjor", 2, one(0xF087), one(0xF1BF), "IdBc", mfloat | cfloat }, 263348024e4aSbellard {"fjseq", 2, one(0xF091), one(0xF1BF), "IdBc", mfloat | cfloat }, 263448024e4aSbellard {"fjsf", 2, one(0xF090), one(0xF1BF), "IdBc", mfloat | cfloat }, 263548024e4aSbellard {"fjsne", 2, one(0xF09E), one(0xF1BF), "IdBc", mfloat | cfloat }, 263648024e4aSbellard {"fjst", 2, one(0xF09F), one(0xF1BF), "IdBc", mfloat | cfloat }, 263748024e4aSbellard {"fjt", 2, one(0xF08F), one(0xF1BF), "IdBc", mfloat | cfloat }, 263848024e4aSbellard {"fjueq", 2, one(0xF089), one(0xF1BF), "IdBc", mfloat | cfloat }, 263948024e4aSbellard {"fjuge", 2, one(0xF08B), one(0xF1BF), "IdBc", mfloat | cfloat }, 264048024e4aSbellard {"fjugt", 2, one(0xF08A), one(0xF1BF), "IdBc", mfloat | cfloat }, 264148024e4aSbellard {"fjule", 2, one(0xF08D), one(0xF1BF), "IdBc", mfloat | cfloat }, 264248024e4aSbellard {"fjult", 2, one(0xF08C), one(0xF1BF), "IdBc", mfloat | cfloat }, 264348024e4aSbellard {"fjun", 2, one(0xF088), one(0xF1BF), "IdBc", mfloat | cfloat }, 264448024e4aSbellard 264548024e4aSbellard {"fcmpb", 4, two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 264648024e4aSbellard {"fcmpb", 4, two(0xF000, 0x5838), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 264748024e4aSbellard {"fcmpd", 4, two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 264848024e4aSbellard {"fcmpd", 4, two(0xF000, 0x5438), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 264948024e4aSbellard {"fcmpd", 4, two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 265048024e4aSbellard {"fcmpl", 4, two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 265148024e4aSbellard {"fcmpl", 4, two(0xF000, 0x4038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 265248024e4aSbellard {"fcmpp", 4, two(0xF000, 0x4C38), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 265348024e4aSbellard {"fcmps", 4, two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 265448024e4aSbellard {"fcmps", 4, two(0xF000, 0x4438), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 265548024e4aSbellard {"fcmpw", 4, two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 265648024e4aSbellard {"fcmpw", 4, two(0xF000, 0x5038), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 265748024e4aSbellard {"fcmpx", 4, two(0xF000, 0x0038), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 265848024e4aSbellard {"fcmpx", 4, two(0xF000, 0x4838), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 265948024e4aSbellard 266048024e4aSbellard {"fcosb", 4, two(0xF000, 0x581D), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 266148024e4aSbellard {"fcosd", 4, two(0xF000, 0x541D), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 266248024e4aSbellard {"fcosl", 4, two(0xF000, 0x401D), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 266348024e4aSbellard {"fcosp", 4, two(0xF000, 0x4C1D), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 266448024e4aSbellard {"fcoss", 4, two(0xF000, 0x441D), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 266548024e4aSbellard {"fcosw", 4, two(0xF000, 0x501D), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 266648024e4aSbellard {"fcosx", 4, two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 266748024e4aSbellard {"fcosx", 4, two(0xF000, 0x481D), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 266848024e4aSbellard {"fcosx", 4, two(0xF000, 0x001D), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 266948024e4aSbellard 267048024e4aSbellard {"fcoshb", 4, two(0xF000, 0x5819), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 267148024e4aSbellard {"fcoshd", 4, two(0xF000, 0x5419), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 267248024e4aSbellard {"fcoshl", 4, two(0xF000, 0x4019), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 267348024e4aSbellard {"fcoshp", 4, two(0xF000, 0x4C19), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 267448024e4aSbellard {"fcoshs", 4, two(0xF000, 0x4419), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 267548024e4aSbellard {"fcoshw", 4, two(0xF000, 0x5019), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 267648024e4aSbellard {"fcoshx", 4, two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 267748024e4aSbellard {"fcoshx", 4, two(0xF000, 0x4819), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 267848024e4aSbellard {"fcoshx", 4, two(0xF000, 0x0019), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 267948024e4aSbellard 268048024e4aSbellard {"fdbeq", 4, two(0xF048, 0x0001), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 268148024e4aSbellard {"fdbf", 4, two(0xF048, 0x0000), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 268248024e4aSbellard {"fdbge", 4, two(0xF048, 0x0013), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 268348024e4aSbellard {"fdbgl", 4, two(0xF048, 0x0016), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 268448024e4aSbellard {"fdbgle", 4, two(0xF048, 0x0017), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 268548024e4aSbellard {"fdbgt", 4, two(0xF048, 0x0012), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 268648024e4aSbellard {"fdble", 4, two(0xF048, 0x0015), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 268748024e4aSbellard {"fdblt", 4, two(0xF048, 0x0014), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 268848024e4aSbellard {"fdbne", 4, two(0xF048, 0x000E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 268948024e4aSbellard {"fdbnge", 4, two(0xF048, 0x001C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269048024e4aSbellard {"fdbngl", 4, two(0xF048, 0x0019), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269148024e4aSbellard {"fdbngle", 4, two(0xF048, 0x0018), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269248024e4aSbellard {"fdbngt", 4, two(0xF048, 0x001D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269348024e4aSbellard {"fdbnle", 4, two(0xF048, 0x001A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269448024e4aSbellard {"fdbnlt", 4, two(0xF048, 0x001B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269548024e4aSbellard {"fdboge", 4, two(0xF048, 0x0003), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269648024e4aSbellard {"fdbogl", 4, two(0xF048, 0x0006), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269748024e4aSbellard {"fdbogt", 4, two(0xF048, 0x0002), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269848024e4aSbellard {"fdbole", 4, two(0xF048, 0x0005), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 269948024e4aSbellard {"fdbolt", 4, two(0xF048, 0x0004), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270048024e4aSbellard {"fdbor", 4, two(0xF048, 0x0007), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270148024e4aSbellard {"fdbseq", 4, two(0xF048, 0x0011), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270248024e4aSbellard {"fdbsf", 4, two(0xF048, 0x0010), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270348024e4aSbellard {"fdbsne", 4, two(0xF048, 0x001E), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270448024e4aSbellard {"fdbst", 4, two(0xF048, 0x001F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270548024e4aSbellard {"fdbt", 4, two(0xF048, 0x000F), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270648024e4aSbellard {"fdbueq", 4, two(0xF048, 0x0009), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270748024e4aSbellard {"fdbuge", 4, two(0xF048, 0x000B), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270848024e4aSbellard {"fdbugt", 4, two(0xF048, 0x000A), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 270948024e4aSbellard {"fdbule", 4, two(0xF048, 0x000D), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 271048024e4aSbellard {"fdbult", 4, two(0xF048, 0x000C), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 271148024e4aSbellard {"fdbun", 4, two(0xF048, 0x0008), two(0xF1F8, 0xFFFF), "IiDsBw", mfloat }, 271248024e4aSbellard 271348024e4aSbellard {"fdivb", 4, two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 271448024e4aSbellard {"fdivb", 4, two(0xF000, 0x5820), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 271548024e4aSbellard {"fdivd", 4, two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 271648024e4aSbellard {"fdivd", 4, two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 271748024e4aSbellard {"fdivd", 4, two(0xF000, 0x5420), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 271848024e4aSbellard {"fdivl", 4, two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 271948024e4aSbellard {"fdivl", 4, two(0xF000, 0x4020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 272048024e4aSbellard {"fdivp", 4, two(0xF000, 0x4C20), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 272148024e4aSbellard {"fdivs", 4, two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 272248024e4aSbellard {"fdivs", 4, two(0xF000, 0x4420), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 272348024e4aSbellard {"fdivw", 4, two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 272448024e4aSbellard {"fdivw", 4, two(0xF000, 0x5020), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 272548024e4aSbellard {"fdivx", 4, two(0xF000, 0x0020), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 272648024e4aSbellard {"fdivx", 4, two(0xF000, 0x4820), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 272748024e4aSbellard 272848024e4aSbellard {"fsdivb", 4, two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 272948024e4aSbellard {"fsdivb", 4, two(0xF000, 0x5860), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 273048024e4aSbellard {"fsdivd", 4, two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 273148024e4aSbellard {"fsdivd", 4, two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 273248024e4aSbellard {"fsdivd", 4, two(0xF000, 0x5460), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 273348024e4aSbellard {"fsdivl", 4, two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 273448024e4aSbellard {"fsdivl", 4, two(0xF000, 0x4060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 273548024e4aSbellard {"fsdivp", 4, two(0xF000, 0x4C60), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 273648024e4aSbellard {"fsdivs", 4, two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 273748024e4aSbellard {"fsdivs", 4, two(0xF000, 0x4460), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 273848024e4aSbellard {"fsdivw", 4, two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 273948024e4aSbellard {"fsdivw", 4, two(0xF000, 0x5060), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 274048024e4aSbellard {"fsdivx", 4, two(0xF000, 0x0060), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 274148024e4aSbellard {"fsdivx", 4, two(0xF000, 0x4860), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 274248024e4aSbellard 274348024e4aSbellard {"fddivb", 4, two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 274448024e4aSbellard {"fddivb", 4, two(0xF000, 0x5864), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 274548024e4aSbellard {"fddivd", 4, two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 274648024e4aSbellard {"fddivd", 4, two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 274748024e4aSbellard {"fddivd", 4, two(0xF000, 0x5464), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 274848024e4aSbellard {"fddivl", 4, two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 274948024e4aSbellard {"fddivl", 4, two(0xF000, 0x4064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 275048024e4aSbellard {"fddivp", 4, two(0xF000, 0x4C64), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 275148024e4aSbellard {"fddivs", 4, two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 275248024e4aSbellard {"fddivs", 4, two(0xF000, 0x4464), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 275348024e4aSbellard {"fddivw", 4, two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 275448024e4aSbellard {"fddivw", 4, two(0xF000, 0x5064), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 275548024e4aSbellard {"fddivx", 4, two(0xF000, 0x0064), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 275648024e4aSbellard {"fddivx", 4, two(0xF000, 0x4864), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 275748024e4aSbellard 275848024e4aSbellard {"fetoxb", 4, two(0xF000, 0x5810), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 275948024e4aSbellard {"fetoxd", 4, two(0xF000, 0x5410), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 276048024e4aSbellard {"fetoxl", 4, two(0xF000, 0x4010), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 276148024e4aSbellard {"fetoxp", 4, two(0xF000, 0x4C10), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 276248024e4aSbellard {"fetoxs", 4, two(0xF000, 0x4410), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 276348024e4aSbellard {"fetoxw", 4, two(0xF000, 0x5010), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 276448024e4aSbellard {"fetoxx", 4, two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 276548024e4aSbellard {"fetoxx", 4, two(0xF000, 0x4810), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 276648024e4aSbellard {"fetoxx", 4, two(0xF000, 0x0010), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 276748024e4aSbellard 276848024e4aSbellard {"fetoxm1b", 4, two(0xF000, 0x5808), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 276948024e4aSbellard {"fetoxm1d", 4, two(0xF000, 0x5408), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 277048024e4aSbellard {"fetoxm1l", 4, two(0xF000, 0x4008), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 277148024e4aSbellard {"fetoxm1p", 4, two(0xF000, 0x4C08), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 277248024e4aSbellard {"fetoxm1s", 4, two(0xF000, 0x4408), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 277348024e4aSbellard {"fetoxm1w", 4, two(0xF000, 0x5008), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 277448024e4aSbellard {"fetoxm1x", 4, two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 277548024e4aSbellard {"fetoxm1x", 4, two(0xF000, 0x4808), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 277648024e4aSbellard {"fetoxm1x", 4, two(0xF000, 0x0008), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 277748024e4aSbellard 277848024e4aSbellard {"fgetexpb", 4, two(0xF000, 0x581E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 277948024e4aSbellard {"fgetexpd", 4, two(0xF000, 0x541E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 278048024e4aSbellard {"fgetexpl", 4, two(0xF000, 0x401E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 278148024e4aSbellard {"fgetexpp", 4, two(0xF000, 0x4C1E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 278248024e4aSbellard {"fgetexps", 4, two(0xF000, 0x441E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 278348024e4aSbellard {"fgetexpw", 4, two(0xF000, 0x501E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 278448024e4aSbellard {"fgetexpx", 4, two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 278548024e4aSbellard {"fgetexpx", 4, two(0xF000, 0x481E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 278648024e4aSbellard {"fgetexpx", 4, two(0xF000, 0x001E), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 278748024e4aSbellard 278848024e4aSbellard {"fgetmanb", 4, two(0xF000, 0x581F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 278948024e4aSbellard {"fgetmand", 4, two(0xF000, 0x541F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 279048024e4aSbellard {"fgetmanl", 4, two(0xF000, 0x401F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 279148024e4aSbellard {"fgetmanp", 4, two(0xF000, 0x4C1F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 279248024e4aSbellard {"fgetmans", 4, two(0xF000, 0x441F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 279348024e4aSbellard {"fgetmanw", 4, two(0xF000, 0x501F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 279448024e4aSbellard {"fgetmanx", 4, two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 279548024e4aSbellard {"fgetmanx", 4, two(0xF000, 0x481F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 279648024e4aSbellard {"fgetmanx", 4, two(0xF000, 0x001F), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 279748024e4aSbellard 279848024e4aSbellard {"fintb", 4, two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 279948024e4aSbellard {"fintb", 4, two(0xF000, 0x5801), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 280048024e4aSbellard {"fintd", 4, two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 280148024e4aSbellard {"fintd", 4, two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 280248024e4aSbellard {"fintd", 4, two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 280348024e4aSbellard {"fintd", 4, two(0xF000, 0x5401), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 280448024e4aSbellard {"fintl", 4, two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 280548024e4aSbellard {"fintl", 4, two(0xF000, 0x4001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 280648024e4aSbellard {"fintp", 4, two(0xF000, 0x4C01), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 280748024e4aSbellard {"fints", 4, two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 280848024e4aSbellard {"fints", 4, two(0xF000, 0x4401), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 280948024e4aSbellard {"fintw", 4, two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 281048024e4aSbellard {"fintw", 4, two(0xF000, 0x5001), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 281148024e4aSbellard {"fintx", 4, two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 281248024e4aSbellard {"fintx", 4, two(0xF000, 0x4801), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 281348024e4aSbellard {"fintx", 4, two(0xF000, 0x0001), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 281448024e4aSbellard 281548024e4aSbellard {"fintrzb", 4, two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 281648024e4aSbellard {"fintrzb", 4, two(0xF000, 0x5803), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 281748024e4aSbellard {"fintrzd", 4, two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 281848024e4aSbellard {"fintrzd", 4, two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 281948024e4aSbellard {"fintrzd", 4, two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 282048024e4aSbellard {"fintrzd", 4, two(0xF000, 0x5403), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 282148024e4aSbellard {"fintrzl", 4, two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 282248024e4aSbellard {"fintrzl", 4, two(0xF000, 0x4003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 282348024e4aSbellard {"fintrzp", 4, two(0xF000, 0x4C03), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 282448024e4aSbellard {"fintrzs", 4, two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 282548024e4aSbellard {"fintrzs", 4, two(0xF000, 0x4403), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 282648024e4aSbellard {"fintrzw", 4, two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 282748024e4aSbellard {"fintrzw", 4, two(0xF000, 0x5003), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 282848024e4aSbellard {"fintrzx", 4, two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 282948024e4aSbellard {"fintrzx", 4, two(0xF000, 0x4803), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 283048024e4aSbellard {"fintrzx", 4, two(0xF000, 0x0003), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 283148024e4aSbellard 283248024e4aSbellard {"flog10b", 4, two(0xF000, 0x5815), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 283348024e4aSbellard {"flog10d", 4, two(0xF000, 0x5415), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 283448024e4aSbellard {"flog10l", 4, two(0xF000, 0x4015), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 283548024e4aSbellard {"flog10p", 4, two(0xF000, 0x4C15), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 283648024e4aSbellard {"flog10s", 4, two(0xF000, 0x4415), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 283748024e4aSbellard {"flog10w", 4, two(0xF000, 0x5015), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 283848024e4aSbellard {"flog10x", 4, two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 283948024e4aSbellard {"flog10x", 4, two(0xF000, 0x4815), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 284048024e4aSbellard {"flog10x", 4, two(0xF000, 0x0015), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 284148024e4aSbellard 284248024e4aSbellard {"flog2b", 4, two(0xF000, 0x5816), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 284348024e4aSbellard {"flog2d", 4, two(0xF000, 0x5416), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 284448024e4aSbellard {"flog2l", 4, two(0xF000, 0x4016), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 284548024e4aSbellard {"flog2p", 4, two(0xF000, 0x4C16), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 284648024e4aSbellard {"flog2s", 4, two(0xF000, 0x4416), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 284748024e4aSbellard {"flog2w", 4, two(0xF000, 0x5016), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 284848024e4aSbellard {"flog2x", 4, two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 284948024e4aSbellard {"flog2x", 4, two(0xF000, 0x4816), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 285048024e4aSbellard {"flog2x", 4, two(0xF000, 0x0016), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 285148024e4aSbellard 285248024e4aSbellard {"flognb", 4, two(0xF000, 0x5814), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 285348024e4aSbellard {"flognd", 4, two(0xF000, 0x5414), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 285448024e4aSbellard {"flognl", 4, two(0xF000, 0x4014), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 285548024e4aSbellard {"flognp", 4, two(0xF000, 0x4C14), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 285648024e4aSbellard {"flogns", 4, two(0xF000, 0x4414), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 285748024e4aSbellard {"flognw", 4, two(0xF000, 0x5014), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 285848024e4aSbellard {"flognx", 4, two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 285948024e4aSbellard {"flognx", 4, two(0xF000, 0x4814), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 286048024e4aSbellard {"flognx", 4, two(0xF000, 0x0014), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 286148024e4aSbellard 286248024e4aSbellard {"flognp1b", 4, two(0xF000, 0x5806), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 286348024e4aSbellard {"flognp1d", 4, two(0xF000, 0x5406), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 286448024e4aSbellard {"flognp1l", 4, two(0xF000, 0x4006), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 286548024e4aSbellard {"flognp1p", 4, two(0xF000, 0x4C06), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 286648024e4aSbellard {"flognp1s", 4, two(0xF000, 0x4406), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 286748024e4aSbellard {"flognp1w", 4, two(0xF000, 0x5006), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 286848024e4aSbellard {"flognp1x", 4, two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 286948024e4aSbellard {"flognp1x", 4, two(0xF000, 0x4806), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 287048024e4aSbellard {"flognp1x", 4, two(0xF000, 0x0006), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 287148024e4aSbellard 287248024e4aSbellard {"fmodb", 4, two(0xF000, 0x5821), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 287348024e4aSbellard {"fmodd", 4, two(0xF000, 0x5421), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 287448024e4aSbellard {"fmodl", 4, two(0xF000, 0x4021), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 287548024e4aSbellard {"fmodp", 4, two(0xF000, 0x4C21), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 287648024e4aSbellard {"fmods", 4, two(0xF000, 0x4421), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 287748024e4aSbellard {"fmodw", 4, two(0xF000, 0x5021), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 287848024e4aSbellard {"fmodx", 4, two(0xF000, 0x0021), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 287948024e4aSbellard {"fmodx", 4, two(0xF000, 0x4821), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 288048024e4aSbellard 288148024e4aSbellard {"fmoveb", 4, two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 288248024e4aSbellard {"fmoveb", 4, two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat }, 288348024e4aSbellard {"fmoveb", 4, two(0xF000, 0x5800), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 288448024e4aSbellard {"fmoveb", 4, two(0xF000, 0x7800), two(0xF1C0, 0xFC7F), "IiF7$b", mfloat }, 288548024e4aSbellard {"fmoved", 4, two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 288648024e4aSbellard {"fmoved", 4, two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7~F", mfloat }, 288748024e4aSbellard {"fmoved", 4, two(0xF000, 0x0000), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 288848024e4aSbellard {"fmoved", 4, two(0xF000, 0x5400), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 288948024e4aSbellard {"fmoved", 4, two(0xF000, 0x7400), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat }, 289048024e4aSbellard {"fmovel", 4, two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 289148024e4aSbellard {"fmovel", 4, two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7$l", mfloat }, 289248024e4aSbellard /* FIXME: the next two variants should not permit moving an address 289348024e4aSbellard register to anything but the floating point instruction register. */ 289448024e4aSbellard {"fmovel", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat }, 289548024e4aSbellard {"fmovel", 4, two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ls8", mfloat }, 289648024e4aSbellard {"fmovel", 4, two(0xF000, 0x4000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 289748024e4aSbellard {"fmovel", 4, two(0xF000, 0x6000), two(0xF1C0, 0xFC7F), "IiF7bs", cfloat }, 289848024e4aSbellard /* Move the FP control registers. */ 289948024e4aSbellard {"fmovel", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8ps", cfloat }, 290048024e4aSbellard {"fmovel", 4, two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Iibss8", cfloat }, 290148024e4aSbellard {"fmovep", 4, two(0xF000, 0x4C00), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 290248024e4aSbellard {"fmovep", 4, two(0xF000, 0x6C00), two(0xF1C0, 0xFC00), "IiF7~pkC", mfloat }, 290348024e4aSbellard {"fmovep", 4, two(0xF000, 0x7C00), two(0xF1C0, 0xFC0F), "IiF7~pDk", mfloat }, 290448024e4aSbellard {"fmoves", 4, two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 290548024e4aSbellard {"fmoves", 4, two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7$f", mfloat }, 290648024e4aSbellard {"fmoves", 4, two(0xF000, 0x4400), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 290748024e4aSbellard {"fmoves", 4, two(0xF000, 0x6400), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 290848024e4aSbellard {"fmovew", 4, two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 290948024e4aSbellard {"fmovew", 4, two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7$w", mfloat }, 291048024e4aSbellard {"fmovew", 4, two(0xF000, 0x5000), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 291148024e4aSbellard {"fmovew", 4, two(0xF000, 0x7000), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 291248024e4aSbellard {"fmovex", 4, two(0xF000, 0x0000), two(0xF1FF, 0xE07F), "IiF8F7", mfloat }, 291348024e4aSbellard {"fmovex", 4, two(0xF000, 0x4800), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 291448024e4aSbellard {"fmovex", 4, two(0xF000, 0x6800), two(0xF1C0, 0xFC7F), "IiF7~x", mfloat }, 291548024e4aSbellard 291648024e4aSbellard {"fsmoveb", 4, two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 291748024e4aSbellard {"fsmoveb", 4, two(0xF000, 0x5840), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 291848024e4aSbellard {"fsmoveb", 4, two(0xF000, 0x7840), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 291948024e4aSbellard {"fsmoved", 4, two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 292048024e4aSbellard {"fsmoved", 4, two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 292148024e4aSbellard {"fsmoved", 4, two(0xF000, 0x5440), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 292248024e4aSbellard {"fsmoved", 4, two(0xF000, 0x7440), two(0xF1C0, 0xFC7F), "IiF7ws", cfloat }, 292348024e4aSbellard {"fsmovel", 4, two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 292448024e4aSbellard {"fsmovel", 4, two(0xF000, 0x4040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 292548024e4aSbellard {"fsmovel", 4, two(0xF000, 0x6040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 292648024e4aSbellard {"fsmoves", 4, two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 292748024e4aSbellard {"fsmoves", 4, two(0xF000, 0x4440), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 292848024e4aSbellard {"fsmoves", 4, two(0xF000, 0x6440), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 292948024e4aSbellard {"fsmovew", 4, two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 293048024e4aSbellard {"fsmovew", 4, two(0xF000, 0x5040), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 293148024e4aSbellard {"fsmovew", 4, two(0xF000, 0x7040), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 293248024e4aSbellard {"fsmovex", 4, two(0xF000, 0x0040), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 293348024e4aSbellard {"fsmovex", 4, two(0xF000, 0x4840), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 293448024e4aSbellard {"fsmovep", 4, two(0xF000, 0x4C40), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 293548024e4aSbellard 293648024e4aSbellard {"fdmoveb", 4, two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 293748024e4aSbellard {"fdmoveb", 4, two(0xF000, 0x5844), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 293848024e4aSbellard {"fdmoveb", 4, two(0xF000, 0x7844), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 293948024e4aSbellard {"fdmoved", 4, two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 294048024e4aSbellard {"fdmoved", 4, two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 294148024e4aSbellard {"fdmoved", 4, two(0xF000, 0x5444), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 294248024e4aSbellard {"fdmoved", 4, two(0xF000, 0x7444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 294348024e4aSbellard {"fdmovel", 4, two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 294448024e4aSbellard {"fdmovel", 4, two(0xF000, 0x4044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 294548024e4aSbellard {"fdmovel", 4, two(0xF000, 0x6044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 294648024e4aSbellard {"fdmoves", 4, two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 294748024e4aSbellard {"fdmoves", 4, two(0xF000, 0x4444), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 294848024e4aSbellard {"fdmoves", 4, two(0xF000, 0x6444), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 294948024e4aSbellard {"fdmovew", 4, two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 295048024e4aSbellard {"fdmovew", 4, two(0xF000, 0x5044), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 295148024e4aSbellard {"fdmovew", 4, two(0xF000, 0x7044), two(0xF1C0, 0xFC7F), "IiF7qs", cfloat }, 295248024e4aSbellard {"fdmovex", 4, two(0xF000, 0x0044), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 295348024e4aSbellard {"fdmovex", 4, two(0xF000, 0x4844), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 295448024e4aSbellard {"fdmovep", 4, two(0xF000, 0x4C44), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 295548024e4aSbellard 295648024e4aSbellard {"fmovecrx", 4, two(0xF000, 0x5C00), two(0xF1FF, 0xFC00), "Ii#CF7", mfloat }, 295748024e4aSbellard 295848024e4aSbellard {"fmovemd", 4, two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizsl3", cfloat }, 295948024e4aSbellard {"fmovemd", 4, two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat }, 296048024e4aSbellard {"fmovemd", 4, two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat }, 296148024e4aSbellard {"fmovemd", 4, two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Iil3ys", cfloat }, 296248024e4aSbellard 296348024e4aSbellard {"fmovemx", 4, two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat }, 296448024e4aSbellard {"fmovemx", 4, two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat }, 296548024e4aSbellard {"fmovemx", 4, two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat }, 296648024e4aSbellard {"fmovemx", 4, two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat }, 296748024e4aSbellard {"fmovemx", 4, two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat }, 296848024e4aSbellard {"fmovemx", 4, two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat }, 296948024e4aSbellard {"fmovemx", 4, two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat }, 297048024e4aSbellard {"fmovemx", 4, two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat }, 297148024e4aSbellard {"fmovemx", 4, two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat }, 297248024e4aSbellard {"fmovemx", 4, two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat }, 297348024e4aSbellard {"fmovemx", 4, two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat }, 297448024e4aSbellard {"fmovemx", 4, two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat }, 297548024e4aSbellard 297648024e4aSbellard {"fmoveml", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat }, 297748024e4aSbellard {"fmoveml", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat }, 297848024e4aSbellard /* FIXME: In the next instruction, we should only permit %dn if the 297948024e4aSbellard target is a single register. We should only permit %an if the 298048024e4aSbellard target is a single %fpiar. */ 298148024e4aSbellard {"fmoveml", 4, two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*lL8", mfloat }, 298248024e4aSbellard 298348024e4aSbellard {"fmovem", 4, two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "IizsL3", cfloat }, 298448024e4aSbellard {"fmovem", 4, two(0xF000, 0xD000), two(0xFFC0, 0xFF00), "Iizs#3", cfloat }, 298548024e4aSbellard {"fmovem", 4, two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "Ii#3ys", cfloat }, 298648024e4aSbellard {"fmovem", 4, two(0xF000, 0xF000), two(0xFFC0, 0xFF00), "IiL3ys", cfloat }, 298748024e4aSbellard 298848024e4aSbellard {"fmovem", 4, two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "IdL3-s", mfloat }, 298948024e4aSbellard {"fmovem", 4, two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Idl3&s", mfloat }, 299048024e4aSbellard {"fmovem", 4, two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+sl3", mfloat }, 299148024e4aSbellard {"fmovem", 4, two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&sl3", mfloat }, 299248024e4aSbellard {"fmovem", 4, two(0xF020, 0xE000), two(0xF1F8, 0xFF00), "Id#3-s", mfloat }, 299348024e4aSbellard {"fmovem", 4, two(0xF020, 0xE800), two(0xF1F8, 0xFF8F), "IiDk-s", mfloat }, 299448024e4aSbellard {"fmovem", 4, two(0xF000, 0xF000), two(0xF1C0, 0xFF00), "Id#3&s", mfloat }, 299548024e4aSbellard {"fmovem", 4, two(0xF000, 0xF800), two(0xF1C0, 0xFF8F), "IiDk&s", mfloat }, 299648024e4aSbellard {"fmovem", 4, two(0xF018, 0xD000), two(0xF1F8, 0xFF00), "Id+s#3", mfloat }, 299748024e4aSbellard {"fmovem", 4, two(0xF018, 0xD800), two(0xF1F8, 0xFF8F), "Ii+sDk", mfloat }, 299848024e4aSbellard {"fmovem", 4, two(0xF000, 0xD000), two(0xF1C0, 0xFF00), "Id&s#3", mfloat }, 299948024e4aSbellard {"fmovem", 4, two(0xF000, 0xD800), two(0xF1C0, 0xFF8F), "Ii&sDk", mfloat }, 300048024e4aSbellard {"fmovem", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "Iis8%s", mfloat }, 300148024e4aSbellard {"fmovem", 4, two(0xF000, 0x8000), two(0xF1C0, 0xE3FF), "Ii*ss8", mfloat }, 300248024e4aSbellard {"fmovem", 4, two(0xF000, 0xA000), two(0xF1C0, 0xE3FF), "IiL8~s", mfloat }, 300348024e4aSbellard {"fmovem", 4, two(0xF000, 0x8000), two(0xF2C0, 0xE3FF), "Ii*sL8", mfloat }, 300448024e4aSbellard 300548024e4aSbellard {"fmulb", 4, two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 300648024e4aSbellard {"fmulb", 4, two(0xF000, 0x5823), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 300748024e4aSbellard {"fmuld", 4, two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 300848024e4aSbellard {"fmuld", 4, two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 300948024e4aSbellard {"fmuld", 4, two(0xF000, 0x5423), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 301048024e4aSbellard {"fmull", 4, two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 301148024e4aSbellard {"fmull", 4, two(0xF000, 0x4023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 301248024e4aSbellard {"fmulp", 4, two(0xF000, 0x4C23), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 301348024e4aSbellard {"fmuls", 4, two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 301448024e4aSbellard {"fmuls", 4, two(0xF000, 0x4423), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 301548024e4aSbellard {"fmulw", 4, two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 301648024e4aSbellard {"fmulw", 4, two(0xF000, 0x5023), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 301748024e4aSbellard {"fmulx", 4, two(0xF000, 0x0023), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 301848024e4aSbellard {"fmulx", 4, two(0xF000, 0x4823), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 301948024e4aSbellard 302048024e4aSbellard {"fsmulb", 4, two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 302148024e4aSbellard {"fsmulb", 4, two(0xF000, 0x5863), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 302248024e4aSbellard {"fsmuld", 4, two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 302348024e4aSbellard {"fsmuld", 4, two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 302448024e4aSbellard {"fsmuld", 4, two(0xF000, 0x5463), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 302548024e4aSbellard {"fsmull", 4, two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 302648024e4aSbellard {"fsmull", 4, two(0xF000, 0x4063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 302748024e4aSbellard {"fsmulp", 4, two(0xF000, 0x4C63), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 302848024e4aSbellard {"fsmuls", 4, two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 302948024e4aSbellard {"fsmuls", 4, two(0xF000, 0x4463), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 303048024e4aSbellard {"fsmulw", 4, two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 303148024e4aSbellard {"fsmulw", 4, two(0xF000, 0x5063), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 303248024e4aSbellard {"fsmulx", 4, two(0xF000, 0x0063), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 303348024e4aSbellard {"fsmulx", 4, two(0xF000, 0x4863), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 303448024e4aSbellard 303548024e4aSbellard {"fdmulb", 4, two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 303648024e4aSbellard {"fdmulb", 4, two(0xF000, 0x5867), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 303748024e4aSbellard {"fdmuld", 4, two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 303848024e4aSbellard {"fdmuld", 4, two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 303948024e4aSbellard {"fdmuld", 4, two(0xF000, 0x5467), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 304048024e4aSbellard {"fdmull", 4, two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 304148024e4aSbellard {"fdmull", 4, two(0xF000, 0x4067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 304248024e4aSbellard {"fdmulp", 4, two(0xF000, 0x4C67), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 304348024e4aSbellard {"fdmuls", 4, two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 304448024e4aSbellard {"fdmuls", 4, two(0xF000, 0x4467), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 304548024e4aSbellard {"fdmulw", 4, two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 304648024e4aSbellard {"fdmulw", 4, two(0xF000, 0x5067), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 304748024e4aSbellard {"fdmulx", 4, two(0xF000, 0x0067), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 304848024e4aSbellard {"fdmulx", 4, two(0xF000, 0x4867), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 304948024e4aSbellard 305048024e4aSbellard {"fnegb", 4, two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 305148024e4aSbellard {"fnegb", 4, two(0xF000, 0x581A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 305248024e4aSbellard {"fnegd", 4, two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 305348024e4aSbellard {"fnegd", 4, two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 305448024e4aSbellard {"fnegd", 4, two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 305548024e4aSbellard {"fnegd", 4, two(0xF000, 0x541A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 305648024e4aSbellard {"fnegl", 4, two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 305748024e4aSbellard {"fnegl", 4, two(0xF000, 0x401A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 305848024e4aSbellard {"fnegp", 4, two(0xF000, 0x4C1A), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 305948024e4aSbellard {"fnegs", 4, two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 306048024e4aSbellard {"fnegs", 4, two(0xF000, 0x441A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 306148024e4aSbellard {"fnegw", 4, two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 306248024e4aSbellard {"fnegw", 4, two(0xF000, 0x501A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 306348024e4aSbellard {"fnegx", 4, two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 306448024e4aSbellard {"fnegx", 4, two(0xF000, 0x481A), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 306548024e4aSbellard {"fnegx", 4, two(0xF000, 0x001A), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 306648024e4aSbellard 306748024e4aSbellard {"fsnegb", 4, two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 306848024e4aSbellard {"fsnegb", 4, two(0xF000, 0x585A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 306948024e4aSbellard {"fsnegd", 4, two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 307048024e4aSbellard {"fsnegd", 4, two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 307148024e4aSbellard {"fsnegd", 4, two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 307248024e4aSbellard {"fsnegd", 4, two(0xF000, 0x545A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 307348024e4aSbellard {"fsnegl", 4, two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 307448024e4aSbellard {"fsnegl", 4, two(0xF000, 0x405A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 307548024e4aSbellard {"fsnegp", 4, two(0xF000, 0x4C5A), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 307648024e4aSbellard {"fsnegs", 4, two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 307748024e4aSbellard {"fsnegs", 4, two(0xF000, 0x445A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 307848024e4aSbellard {"fsnegw", 4, two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 307948024e4aSbellard {"fsnegw", 4, two(0xF000, 0x505A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 308048024e4aSbellard {"fsnegx", 4, two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 308148024e4aSbellard {"fsnegx", 4, two(0xF000, 0x485A), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 308248024e4aSbellard {"fsnegx", 4, two(0xF000, 0x005A), two(0xF1C0, 0xE07F), "IiFt", m68040up }, 308348024e4aSbellard 308448024e4aSbellard {"fdnegb", 4, two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 308548024e4aSbellard {"fdnegb", 4, two(0xF000, 0x585E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 308648024e4aSbellard {"fdnegd", 4, two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 308748024e4aSbellard {"fdnegd", 4, two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 308848024e4aSbellard {"fdnegd", 4, two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 308948024e4aSbellard {"fdnegd", 4, two(0xF000, 0x545E), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 309048024e4aSbellard {"fdnegl", 4, two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 309148024e4aSbellard {"fdnegl", 4, two(0xF000, 0x405E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 309248024e4aSbellard {"fdnegp", 4, two(0xF000, 0x4C5E), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 309348024e4aSbellard {"fdnegs", 4, two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 309448024e4aSbellard {"fdnegs", 4, two(0xF000, 0x445E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 309548024e4aSbellard {"fdnegw", 4, two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 309648024e4aSbellard {"fdnegw", 4, two(0xF000, 0x505E), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 309748024e4aSbellard {"fdnegx", 4, two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 309848024e4aSbellard {"fdnegx", 4, two(0xF000, 0x485E), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 309948024e4aSbellard {"fdnegx", 4, two(0xF000, 0x005E), two(0xF1C0, 0xE07F), "IiFt", m68040up }, 310048024e4aSbellard 310148024e4aSbellard {"fnop", 4, two(0xF280, 0x0000), two(0xFFFF, 0xFFFF), "Ii", mfloat | cfloat }, 310248024e4aSbellard 310348024e4aSbellard {"fremb", 4, two(0xF000, 0x5825), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 310448024e4aSbellard {"fremd", 4, two(0xF000, 0x5425), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 310548024e4aSbellard {"freml", 4, two(0xF000, 0x4025), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 310648024e4aSbellard {"fremp", 4, two(0xF000, 0x4C25), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 310748024e4aSbellard {"frems", 4, two(0xF000, 0x4425), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 310848024e4aSbellard {"fremw", 4, two(0xF000, 0x5025), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 310948024e4aSbellard {"fremx", 4, two(0xF000, 0x0025), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 311048024e4aSbellard {"fremx", 4, two(0xF000, 0x4825), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 311148024e4aSbellard 311248024e4aSbellard {"frestore", 2, one(0xF140), one(0xF1C0), "Id<s", mfloat }, 311348024e4aSbellard {"frestore", 2, one(0xF140), one(0xF1C0), "Idys", cfloat }, 311448024e4aSbellard 311548024e4aSbellard {"fsave", 2, one(0xF100), one(0xF1C0), "Id>s", mfloat }, 311648024e4aSbellard {"fsave", 2, one(0xF100), one(0xF1C0), "Idzs", cfloat }, 311748024e4aSbellard 311848024e4aSbellard {"fscaleb", 4, two(0xF000, 0x5826), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 311948024e4aSbellard {"fscaled", 4, two(0xF000, 0x5426), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 312048024e4aSbellard {"fscalel", 4, two(0xF000, 0x4026), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 312148024e4aSbellard {"fscalep", 4, two(0xF000, 0x4C26), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 312248024e4aSbellard {"fscales", 4, two(0xF000, 0x4426), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 312348024e4aSbellard {"fscalew", 4, two(0xF000, 0x5026), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 312448024e4aSbellard {"fscalex", 4, two(0xF000, 0x0026), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 312548024e4aSbellard {"fscalex", 4, two(0xF000, 0x4826), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 312648024e4aSbellard 312748024e4aSbellard /* $ is necessary to prevent the assembler from using PC-relative. 312848024e4aSbellard If @ were used, "label: fseq label" could produce "ftrapeq", 2, 312948024e4aSbellard because "label" became "pc@label". */ 313048024e4aSbellard {"fseq", 4, two(0xF040, 0x0001), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 313148024e4aSbellard {"fsf", 4, two(0xF040, 0x0000), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 313248024e4aSbellard {"fsge", 4, two(0xF040, 0x0013), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 313348024e4aSbellard {"fsgl", 4, two(0xF040, 0x0016), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 313448024e4aSbellard {"fsgle", 4, two(0xF040, 0x0017), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 313548024e4aSbellard {"fsgt", 4, two(0xF040, 0x0012), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 313648024e4aSbellard {"fsle", 4, two(0xF040, 0x0015), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 313748024e4aSbellard {"fslt", 4, two(0xF040, 0x0014), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 313848024e4aSbellard {"fsne", 4, two(0xF040, 0x000E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 313948024e4aSbellard {"fsnge", 4, two(0xF040, 0x001C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314048024e4aSbellard {"fsngl", 4, two(0xF040, 0x0019), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314148024e4aSbellard {"fsngle", 4, two(0xF040, 0x0018), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314248024e4aSbellard {"fsngt", 4, two(0xF040, 0x001D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314348024e4aSbellard {"fsnle", 4, two(0xF040, 0x001A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314448024e4aSbellard {"fsnlt", 4, two(0xF040, 0x001B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314548024e4aSbellard {"fsoge", 4, two(0xF040, 0x0003), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314648024e4aSbellard {"fsogl", 4, two(0xF040, 0x0006), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314748024e4aSbellard {"fsogt", 4, two(0xF040, 0x0002), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314848024e4aSbellard {"fsole", 4, two(0xF040, 0x0005), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 314948024e4aSbellard {"fsolt", 4, two(0xF040, 0x0004), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315048024e4aSbellard {"fsor", 4, two(0xF040, 0x0007), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315148024e4aSbellard {"fsseq", 4, two(0xF040, 0x0011), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315248024e4aSbellard {"fssf", 4, two(0xF040, 0x0010), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315348024e4aSbellard {"fssne", 4, two(0xF040, 0x001E), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315448024e4aSbellard {"fsst", 4, two(0xF040, 0x001F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315548024e4aSbellard {"fst", 4, two(0xF040, 0x000F), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315648024e4aSbellard {"fsueq", 4, two(0xF040, 0x0009), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315748024e4aSbellard {"fsuge", 4, two(0xF040, 0x000B), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315848024e4aSbellard {"fsugt", 4, two(0xF040, 0x000A), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 315948024e4aSbellard {"fsule", 4, two(0xF040, 0x000D), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 316048024e4aSbellard {"fsult", 4, two(0xF040, 0x000C), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 316148024e4aSbellard {"fsun", 4, two(0xF040, 0x0008), two(0xF1C0, 0xFFFF), "Ii$s", mfloat }, 316248024e4aSbellard 316348024e4aSbellard {"fsgldivb", 4, two(0xF000, 0x5824), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 316448024e4aSbellard {"fsgldivd", 4, two(0xF000, 0x5424), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 316548024e4aSbellard {"fsgldivl", 4, two(0xF000, 0x4024), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 316648024e4aSbellard {"fsgldivp", 4, two(0xF000, 0x4C24), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 316748024e4aSbellard {"fsgldivs", 4, two(0xF000, 0x4424), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 316848024e4aSbellard {"fsgldivw", 4, two(0xF000, 0x5024), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 316948024e4aSbellard {"fsgldivx", 4, two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 317048024e4aSbellard {"fsgldivx", 4, two(0xF000, 0x4824), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 317148024e4aSbellard {"fsgldivx", 4, two(0xF000, 0x0024), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 317248024e4aSbellard 317348024e4aSbellard {"fsglmulb", 4, two(0xF000, 0x5827), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 317448024e4aSbellard {"fsglmuld", 4, two(0xF000, 0x5427), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 317548024e4aSbellard {"fsglmull", 4, two(0xF000, 0x4027), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 317648024e4aSbellard {"fsglmulp", 4, two(0xF000, 0x4C27), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 317748024e4aSbellard {"fsglmuls", 4, two(0xF000, 0x4427), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 317848024e4aSbellard {"fsglmulw", 4, two(0xF000, 0x5027), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 317948024e4aSbellard {"fsglmulx", 4, two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 318048024e4aSbellard {"fsglmulx", 4, two(0xF000, 0x4827), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 318148024e4aSbellard {"fsglmulx", 4, two(0xF000, 0x0027), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 318248024e4aSbellard 318348024e4aSbellard {"fsinb", 4, two(0xF000, 0x580E), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 318448024e4aSbellard {"fsind", 4, two(0xF000, 0x540E), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 318548024e4aSbellard {"fsinl", 4, two(0xF000, 0x400E), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 318648024e4aSbellard {"fsinp", 4, two(0xF000, 0x4C0E), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 318748024e4aSbellard {"fsins", 4, two(0xF000, 0x440E), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 318848024e4aSbellard {"fsinw", 4, two(0xF000, 0x500E), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 318948024e4aSbellard {"fsinx", 4, two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 319048024e4aSbellard {"fsinx", 4, two(0xF000, 0x480E), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 319148024e4aSbellard {"fsinx", 4, two(0xF000, 0x000E), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 319248024e4aSbellard 319348024e4aSbellard {"fsincosb", 4, two(0xF000, 0x5830), two(0xF1C0, 0xFC78), "Ii;bF3F7", mfloat }, 319448024e4aSbellard {"fsincosd", 4, two(0xF000, 0x5430), two(0xF1C0, 0xFC78), "Ii;FF3F7", mfloat }, 319548024e4aSbellard {"fsincosl", 4, two(0xF000, 0x4030), two(0xF1C0, 0xFC78), "Ii;lF3F7", mfloat }, 319648024e4aSbellard {"fsincosp", 4, two(0xF000, 0x4C30), two(0xF1C0, 0xFC78), "Ii;pF3F7", mfloat }, 319748024e4aSbellard {"fsincoss", 4, two(0xF000, 0x4430), two(0xF1C0, 0xFC78), "Ii;fF3F7", mfloat }, 319848024e4aSbellard {"fsincosw", 4, two(0xF000, 0x5030), two(0xF1C0, 0xFC78), "Ii;wF3F7", mfloat }, 319948024e4aSbellard {"fsincosx", 4, two(0xF000, 0x0030), two(0xF1C0, 0xE078), "IiF8F3F7", mfloat }, 320048024e4aSbellard {"fsincosx", 4, two(0xF000, 0x4830), two(0xF1C0, 0xFC78), "Ii;xF3F7", mfloat }, 320148024e4aSbellard 320248024e4aSbellard {"fsinhb", 4, two(0xF000, 0x5802), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 320348024e4aSbellard {"fsinhd", 4, two(0xF000, 0x5402), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 320448024e4aSbellard {"fsinhl", 4, two(0xF000, 0x4002), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 320548024e4aSbellard {"fsinhp", 4, two(0xF000, 0x4C02), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 320648024e4aSbellard {"fsinhs", 4, two(0xF000, 0x4402), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 320748024e4aSbellard {"fsinhw", 4, two(0xF000, 0x5002), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 320848024e4aSbellard {"fsinhx", 4, two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 320948024e4aSbellard {"fsinhx", 4, two(0xF000, 0x4802), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 321048024e4aSbellard {"fsinhx", 4, two(0xF000, 0x0002), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 321148024e4aSbellard 321248024e4aSbellard {"fsqrtb", 4, two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 321348024e4aSbellard {"fsqrtb", 4, two(0xF000, 0x5804), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 321448024e4aSbellard {"fsqrtd", 4, two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 321548024e4aSbellard {"fsqrtd", 4, two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 321648024e4aSbellard {"fsqrtd", 4, two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 321748024e4aSbellard {"fsqrtd", 4, two(0xF000, 0x5404), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 321848024e4aSbellard {"fsqrtl", 4, two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 321948024e4aSbellard {"fsqrtl", 4, two(0xF000, 0x4004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 322048024e4aSbellard {"fsqrtp", 4, two(0xF000, 0x4C04), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 322148024e4aSbellard {"fsqrts", 4, two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 322248024e4aSbellard {"fsqrts", 4, two(0xF000, 0x4404), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 322348024e4aSbellard {"fsqrtw", 4, two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 322448024e4aSbellard {"fsqrtw", 4, two(0xF000, 0x5004), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 322548024e4aSbellard {"fsqrtx", 4, two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 322648024e4aSbellard {"fsqrtx", 4, two(0xF000, 0x4804), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 322748024e4aSbellard {"fsqrtx", 4, two(0xF000, 0x0004), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 322848024e4aSbellard 322948024e4aSbellard {"fssqrtb", 4, two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 323048024e4aSbellard {"fssqrtb", 4, two(0xF000, 0x5841), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 323148024e4aSbellard {"fssqrtd", 4, two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 323248024e4aSbellard {"fssqrtd", 4, two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 323348024e4aSbellard {"fssqrtd", 4, two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 323448024e4aSbellard {"fssqrtd", 4, two(0xF000, 0x5441), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 323548024e4aSbellard {"fssqrtl", 4, two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 323648024e4aSbellard {"fssqrtl", 4, two(0xF000, 0x4041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 323748024e4aSbellard {"fssqrtp", 4, two(0xF000, 0x4C41), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 323848024e4aSbellard {"fssqrts", 4, two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 323948024e4aSbellard {"fssqrts", 4, two(0xF000, 0x4441), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 324048024e4aSbellard {"fssqrtw", 4, two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 324148024e4aSbellard {"fssqrtw", 4, two(0xF000, 0x5041), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 324248024e4aSbellard {"fssqrtx", 4, two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 324348024e4aSbellard {"fssqrtx", 4, two(0xF000, 0x4841), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 324448024e4aSbellard {"fssqrtx", 4, two(0xF000, 0x0041), two(0xF1C0, 0xE07F), "IiFt", m68040up }, 324548024e4aSbellard 324648024e4aSbellard {"fdsqrtb", 4, two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 324748024e4aSbellard {"fdsqrtb", 4, two(0xF000, 0x5845), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 324848024e4aSbellard {"fdsqrtd", 4, two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 324948024e4aSbellard {"fdsqrtd", 4, two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt", cfloat }, 325048024e4aSbellard {"fdsqrtd", 4, two(0xF000, 0x5445), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 325148024e4aSbellard {"fdsqrtl", 4, two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 325248024e4aSbellard {"fdsqrtl", 4, two(0xF000, 0x4045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 325348024e4aSbellard {"fdsqrtp", 4, two(0xF000, 0x4C45), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 325448024e4aSbellard {"fdsqrts", 4, two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 325548024e4aSbellard {"fdsqrts", 4, two(0xF000, 0x4445), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 325648024e4aSbellard {"fdsqrtw", 4, two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 325748024e4aSbellard {"fdsqrtw", 4, two(0xF000, 0x5045), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 325848024e4aSbellard {"fdsqrtx", 4, two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 325948024e4aSbellard {"fdsqrtx", 4, two(0xF000, 0x4845), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 326048024e4aSbellard {"fdsqrtx", 4, two(0xF000, 0x0045), two(0xF1C0, 0xE07F), "IiFt", m68040up }, 326148024e4aSbellard 326248024e4aSbellard {"fsubb", 4, two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 326348024e4aSbellard {"fsubb", 4, two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 326448024e4aSbellard {"fsubd", 4, two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 326548024e4aSbellard {"fsubd", 4, two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 326648024e4aSbellard {"fsubd", 4, two(0xF000, 0x5428), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 326748024e4aSbellard {"fsubl", 4, two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 326848024e4aSbellard {"fsubl", 4, two(0xF000, 0x4028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 326948024e4aSbellard {"fsubp", 4, two(0xF000, 0x4C28), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 327048024e4aSbellard {"fsubs", 4, two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 327148024e4aSbellard {"fsubs", 4, two(0xF000, 0x4428), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 327248024e4aSbellard {"fsubw", 4, two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 327348024e4aSbellard {"fsubw", 4, two(0xF000, 0x5028), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 327448024e4aSbellard {"fsubx", 4, two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 327548024e4aSbellard {"fsubx", 4, two(0xF000, 0x4828), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 327648024e4aSbellard {"fsubx", 4, two(0xF000, 0x0028), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 327748024e4aSbellard 327848024e4aSbellard {"fssubb", 4, two(0xF000, 0x5828), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 327948024e4aSbellard {"fssubb", 4, two(0xF000, 0x5868), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 328048024e4aSbellard {"fssubd", 4, two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 328148024e4aSbellard {"fssubd", 4, two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 328248024e4aSbellard {"fssubd", 4, two(0xF000, 0x5468), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 328348024e4aSbellard {"fssubl", 4, two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 328448024e4aSbellard {"fssubl", 4, two(0xF000, 0x4068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 328548024e4aSbellard {"fssubp", 4, two(0xF000, 0x4C68), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 328648024e4aSbellard {"fssubs", 4, two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 328748024e4aSbellard {"fssubs", 4, two(0xF000, 0x4468), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 328848024e4aSbellard {"fssubw", 4, two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 328948024e4aSbellard {"fssubw", 4, two(0xF000, 0x5068), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 329048024e4aSbellard {"fssubx", 4, two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 329148024e4aSbellard {"fssubx", 4, two(0xF000, 0x4868), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 329248024e4aSbellard {"fssubx", 4, two(0xF000, 0x0068), two(0xF1C0, 0xE07F), "IiFt", m68040up }, 329348024e4aSbellard 329448024e4aSbellard {"fdsubb", 4, two(0xF000, 0x586A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 329548024e4aSbellard {"fdsubb", 4, two(0xF000, 0x586c), two(0xF1C0, 0xFC7F), "Ii;bF7", m68040up }, 329648024e4aSbellard {"fdsubd", 4, two(0xF000, 0x006A), two(0xF1C0, 0xE07F), "IiF8F7", cfloat }, 329748024e4aSbellard {"fdsubd", 4, two(0xF000, 0x546A), two(0xF1C0, 0xFC7F), "IiwsF7", cfloat }, 329848024e4aSbellard {"fdsubd", 4, two(0xF000, 0x546c), two(0xF1C0, 0xFC7F), "Ii;FF7", m68040up }, 329948024e4aSbellard {"fdsubl", 4, two(0xF000, 0x406A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 330048024e4aSbellard {"fdsubl", 4, two(0xF000, 0x406c), two(0xF1C0, 0xFC7F), "Ii;lF7", m68040up }, 330148024e4aSbellard {"fdsubp", 4, two(0xF000, 0x4C6c), two(0xF1C0, 0xFC7F), "Ii;pF7", m68040up }, 330248024e4aSbellard {"fdsubs", 4, two(0xF000, 0x446A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 330348024e4aSbellard {"fdsubs", 4, two(0xF000, 0x446c), two(0xF1C0, 0xFC7F), "Ii;fF7", m68040up }, 330448024e4aSbellard {"fdsubw", 4, two(0xF000, 0x506A), two(0xF1C0, 0xFC7F), "IibsF7", cfloat }, 330548024e4aSbellard {"fdsubw", 4, two(0xF000, 0x506c), two(0xF1C0, 0xFC7F), "Ii;wF7", m68040up }, 330648024e4aSbellard {"fdsubx", 4, two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiF8F7", m68040up }, 330748024e4aSbellard {"fdsubx", 4, two(0xF000, 0x486c), two(0xF1C0, 0xFC7F), "Ii;xF7", m68040up }, 330848024e4aSbellard {"fdsubx", 4, two(0xF000, 0x006c), two(0xF1C0, 0xE07F), "IiFt", m68040up }, 330948024e4aSbellard 331048024e4aSbellard {"ftanb", 4, two(0xF000, 0x580F), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 331148024e4aSbellard {"ftand", 4, two(0xF000, 0x540F), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 331248024e4aSbellard {"ftanl", 4, two(0xF000, 0x400F), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 331348024e4aSbellard {"ftanp", 4, two(0xF000, 0x4C0F), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 331448024e4aSbellard {"ftans", 4, two(0xF000, 0x440F), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 331548024e4aSbellard {"ftanw", 4, two(0xF000, 0x500F), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 331648024e4aSbellard {"ftanx", 4, two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 331748024e4aSbellard {"ftanx", 4, two(0xF000, 0x480F), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 331848024e4aSbellard {"ftanx", 4, two(0xF000, 0x000F), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 331948024e4aSbellard 332048024e4aSbellard {"ftanhb", 4, two(0xF000, 0x5809), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 332148024e4aSbellard {"ftanhd", 4, two(0xF000, 0x5409), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 332248024e4aSbellard {"ftanhl", 4, two(0xF000, 0x4009), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 332348024e4aSbellard {"ftanhp", 4, two(0xF000, 0x4C09), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 332448024e4aSbellard {"ftanhs", 4, two(0xF000, 0x4409), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 332548024e4aSbellard {"ftanhw", 4, two(0xF000, 0x5009), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 332648024e4aSbellard {"ftanhx", 4, two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 332748024e4aSbellard {"ftanhx", 4, two(0xF000, 0x4809), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 332848024e4aSbellard {"ftanhx", 4, two(0xF000, 0x0009), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 332948024e4aSbellard 333048024e4aSbellard {"ftentoxb", 4, two(0xF000, 0x5812), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 333148024e4aSbellard {"ftentoxd", 4, two(0xF000, 0x5412), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 333248024e4aSbellard {"ftentoxl", 4, two(0xF000, 0x4012), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 333348024e4aSbellard {"ftentoxp", 4, two(0xF000, 0x4C12), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 333448024e4aSbellard {"ftentoxs", 4, two(0xF000, 0x4412), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 333548024e4aSbellard {"ftentoxw", 4, two(0xF000, 0x5012), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 333648024e4aSbellard {"ftentoxx", 4, two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 333748024e4aSbellard {"ftentoxx", 4, two(0xF000, 0x4812), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 333848024e4aSbellard {"ftentoxx", 4, two(0xF000, 0x0012), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 333948024e4aSbellard 334048024e4aSbellard {"ftrapeq", 4, two(0xF07C, 0x0001), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 334148024e4aSbellard {"ftrapf", 4, two(0xF07C, 0x0000), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 334248024e4aSbellard {"ftrapge", 4, two(0xF07C, 0x0013), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 334348024e4aSbellard {"ftrapgl", 4, two(0xF07C, 0x0016), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 334448024e4aSbellard {"ftrapgle", 4, two(0xF07C, 0x0017), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 334548024e4aSbellard {"ftrapgt", 4, two(0xF07C, 0x0012), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 334648024e4aSbellard {"ftraple", 4, two(0xF07C, 0x0015), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 334748024e4aSbellard {"ftraplt", 4, two(0xF07C, 0x0014), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 334848024e4aSbellard {"ftrapne", 4, two(0xF07C, 0x000E), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 334948024e4aSbellard {"ftrapnge", 4, two(0xF07C, 0x001C), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335048024e4aSbellard {"ftrapngl", 4, two(0xF07C, 0x0019), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335148024e4aSbellard {"ftrapngle", 4,two(0xF07C, 0x0018), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335248024e4aSbellard {"ftrapngt", 4, two(0xF07C, 0x001D), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335348024e4aSbellard {"ftrapnle", 4, two(0xF07C, 0x001A), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335448024e4aSbellard {"ftrapnlt", 4, two(0xF07C, 0x001B), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335548024e4aSbellard {"ftrapoge", 4, two(0xF07C, 0x0003), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335648024e4aSbellard {"ftrapogl", 4, two(0xF07C, 0x0006), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335748024e4aSbellard {"ftrapogt", 4, two(0xF07C, 0x0002), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335848024e4aSbellard {"ftrapole", 4, two(0xF07C, 0x0005), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 335948024e4aSbellard {"ftrapolt", 4, two(0xF07C, 0x0004), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336048024e4aSbellard {"ftrapor", 4, two(0xF07C, 0x0007), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336148024e4aSbellard {"ftrapseq", 4, two(0xF07C, 0x0011), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336248024e4aSbellard {"ftrapsf", 4, two(0xF07C, 0x0010), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336348024e4aSbellard {"ftrapsne", 4, two(0xF07C, 0x001E), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336448024e4aSbellard {"ftrapst", 4, two(0xF07C, 0x001F), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336548024e4aSbellard {"ftrapt", 4, two(0xF07C, 0x000F), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336648024e4aSbellard {"ftrapueq", 4, two(0xF07C, 0x0009), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336748024e4aSbellard {"ftrapuge", 4, two(0xF07C, 0x000B), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336848024e4aSbellard {"ftrapugt", 4, two(0xF07C, 0x000A), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 336948024e4aSbellard {"ftrapule", 4, two(0xF07C, 0x000D), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 337048024e4aSbellard {"ftrapult", 4, two(0xF07C, 0x000C), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 337148024e4aSbellard {"ftrapun", 4, two(0xF07C, 0x0008), two(0xF1FF, 0xFFFF), "Ii", mfloat }, 337248024e4aSbellard 337348024e4aSbellard {"ftrapeqw", 4, two(0xF07A, 0x0001), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 337448024e4aSbellard {"ftrapfw", 4, two(0xF07A, 0x0000), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 337548024e4aSbellard {"ftrapgew", 4, two(0xF07A, 0x0013), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 337648024e4aSbellard {"ftrapglw", 4, two(0xF07A, 0x0016), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 337748024e4aSbellard {"ftrapglew", 4,two(0xF07A, 0x0017), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 337848024e4aSbellard {"ftrapgtw", 4, two(0xF07A, 0x0012), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 337948024e4aSbellard {"ftraplew", 4, two(0xF07A, 0x0015), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338048024e4aSbellard {"ftrapltw", 4, two(0xF07A, 0x0014), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338148024e4aSbellard {"ftrapnew", 4, two(0xF07A, 0x000E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338248024e4aSbellard {"ftrapngew", 4,two(0xF07A, 0x001C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338348024e4aSbellard {"ftrapnglw", 4,two(0xF07A, 0x0019), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338448024e4aSbellard {"ftrapnglew", 4,two(0xF07A, 0x0018), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338548024e4aSbellard {"ftrapngtw", 4,two(0xF07A, 0x001D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338648024e4aSbellard {"ftrapnlew", 4,two(0xF07A, 0x001A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338748024e4aSbellard {"ftrapnltw", 4,two(0xF07A, 0x001B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338848024e4aSbellard {"ftrapogew", 4,two(0xF07A, 0x0003), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 338948024e4aSbellard {"ftrapoglw", 4,two(0xF07A, 0x0006), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339048024e4aSbellard {"ftrapogtw", 4,two(0xF07A, 0x0002), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339148024e4aSbellard {"ftrapolew", 4,two(0xF07A, 0x0005), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339248024e4aSbellard {"ftrapoltw", 4,two(0xF07A, 0x0004), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339348024e4aSbellard {"ftraporw", 4, two(0xF07A, 0x0007), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339448024e4aSbellard {"ftrapseqw", 4,two(0xF07A, 0x0011), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339548024e4aSbellard {"ftrapsfw", 4, two(0xF07A, 0x0010), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339648024e4aSbellard {"ftrapsnew", 4,two(0xF07A, 0x001E), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339748024e4aSbellard {"ftrapstw", 4, two(0xF07A, 0x001F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339848024e4aSbellard {"ftraptw", 4, two(0xF07A, 0x000F), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 339948024e4aSbellard {"ftrapueqw", 4,two(0xF07A, 0x0009), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 340048024e4aSbellard {"ftrapugew", 4,two(0xF07A, 0x000B), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 340148024e4aSbellard {"ftrapugtw", 4,two(0xF07A, 0x000A), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 340248024e4aSbellard {"ftrapulew", 4,two(0xF07A, 0x000D), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 340348024e4aSbellard {"ftrapultw", 4,two(0xF07A, 0x000C), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 340448024e4aSbellard {"ftrapunw", 4, two(0xF07A, 0x0008), two(0xF1FF, 0xFFFF), "Ii^w", mfloat }, 340548024e4aSbellard 340648024e4aSbellard {"ftrapeql", 4, two(0xF07B, 0x0001), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 340748024e4aSbellard {"ftrapfl", 4, two(0xF07B, 0x0000), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 340848024e4aSbellard {"ftrapgel", 4, two(0xF07B, 0x0013), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 340948024e4aSbellard {"ftrapgll", 4, two(0xF07B, 0x0016), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341048024e4aSbellard {"ftrapglel", 4,two(0xF07B, 0x0017), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341148024e4aSbellard {"ftrapgtl", 4, two(0xF07B, 0x0012), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341248024e4aSbellard {"ftraplel", 4, two(0xF07B, 0x0015), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341348024e4aSbellard {"ftrapltl", 4, two(0xF07B, 0x0014), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341448024e4aSbellard {"ftrapnel", 4, two(0xF07B, 0x000E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341548024e4aSbellard {"ftrapngel", 4,two(0xF07B, 0x001C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341648024e4aSbellard {"ftrapngll", 4,two(0xF07B, 0x0019), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341748024e4aSbellard {"ftrapnglel", 4,two(0xF07B, 0x0018), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341848024e4aSbellard {"ftrapngtl", 4,two(0xF07B, 0x001D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 341948024e4aSbellard {"ftrapnlel", 4,two(0xF07B, 0x001A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342048024e4aSbellard {"ftrapnltl", 4,two(0xF07B, 0x001B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342148024e4aSbellard {"ftrapogel", 4,two(0xF07B, 0x0003), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342248024e4aSbellard {"ftrapogll", 4,two(0xF07B, 0x0006), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342348024e4aSbellard {"ftrapogtl", 4,two(0xF07B, 0x0002), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342448024e4aSbellard {"ftrapolel", 4,two(0xF07B, 0x0005), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342548024e4aSbellard {"ftrapoltl", 4,two(0xF07B, 0x0004), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342648024e4aSbellard {"ftraporl", 4, two(0xF07B, 0x0007), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342748024e4aSbellard {"ftrapseql", 4,two(0xF07B, 0x0011), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342848024e4aSbellard {"ftrapsfl", 4, two(0xF07B, 0x0010), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 342948024e4aSbellard {"ftrapsnel", 4,two(0xF07B, 0x001E), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 343048024e4aSbellard {"ftrapstl", 4, two(0xF07B, 0x001F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 343148024e4aSbellard {"ftraptl", 4, two(0xF07B, 0x000F), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 343248024e4aSbellard {"ftrapueql", 4,two(0xF07B, 0x0009), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 343348024e4aSbellard {"ftrapugel", 4,two(0xF07B, 0x000B), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 343448024e4aSbellard {"ftrapugtl", 4,two(0xF07B, 0x000A), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 343548024e4aSbellard {"ftrapulel", 4,two(0xF07B, 0x000D), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 343648024e4aSbellard {"ftrapultl", 4,two(0xF07B, 0x000C), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 343748024e4aSbellard {"ftrapunl", 4, two(0xF07B, 0x0008), two(0xF1FF, 0xFFFF), "Ii^l", mfloat }, 343848024e4aSbellard 343948024e4aSbellard {"ftstb", 4, two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Ii;b", mfloat }, 344048024e4aSbellard {"ftstb", 4, two(0xF000, 0x583A), two(0xF1C0, 0xFC7F), "Iibs", cfloat }, 344148024e4aSbellard {"ftstd", 4, two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", cfloat }, 344248024e4aSbellard {"ftstd", 4, two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Ii;F", mfloat }, 344348024e4aSbellard {"ftstd", 4, two(0xF000, 0x543A), two(0xF1C0, 0xFC7F), "Iibs", cfloat }, 344448024e4aSbellard {"ftstl", 4, two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Ii;l", mfloat }, 344548024e4aSbellard {"ftstl", 4, two(0xF000, 0x403A), two(0xF1C0, 0xFC7F), "Iibs", cfloat }, 344648024e4aSbellard {"ftstp", 4, two(0xF000, 0x4C3A), two(0xF1C0, 0xFC7F), "Ii;p", mfloat }, 344748024e4aSbellard {"ftsts", 4, two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Ii;f", mfloat }, 344848024e4aSbellard {"ftsts", 4, two(0xF000, 0x443A), two(0xF1C0, 0xFC7F), "Iibs", cfloat }, 344948024e4aSbellard {"ftstw", 4, two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Ii;w", mfloat }, 345048024e4aSbellard {"ftstw", 4, two(0xF000, 0x503A), two(0xF1C0, 0xFC7F), "Iibs", cfloat }, 345148024e4aSbellard {"ftstx", 4, two(0xF000, 0x003A), two(0xF1C0, 0xE07F), "IiF8", mfloat }, 345248024e4aSbellard {"ftstx", 4, two(0xF000, 0x483A), two(0xF1C0, 0xFC7F), "Ii;x", mfloat }, 345348024e4aSbellard 345448024e4aSbellard {"ftwotoxb", 4, two(0xF000, 0x5811), two(0xF1C0, 0xFC7F), "Ii;bF7", mfloat }, 345548024e4aSbellard {"ftwotoxd", 4, two(0xF000, 0x5411), two(0xF1C0, 0xFC7F), "Ii;FF7", mfloat }, 345648024e4aSbellard {"ftwotoxl", 4, two(0xF000, 0x4011), two(0xF1C0, 0xFC7F), "Ii;lF7", mfloat }, 345748024e4aSbellard {"ftwotoxp", 4, two(0xF000, 0x4C11), two(0xF1C0, 0xFC7F), "Ii;pF7", mfloat }, 345848024e4aSbellard {"ftwotoxs", 4, two(0xF000, 0x4411), two(0xF1C0, 0xFC7F), "Ii;fF7", mfloat }, 345948024e4aSbellard {"ftwotoxw", 4, two(0xF000, 0x5011), two(0xF1C0, 0xFC7F), "Ii;wF7", mfloat }, 346048024e4aSbellard {"ftwotoxx", 4, two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiF8F7", mfloat }, 346148024e4aSbellard {"ftwotoxx", 4, two(0xF000, 0x4811), two(0xF1C0, 0xFC7F), "Ii;xF7", mfloat }, 346248024e4aSbellard {"ftwotoxx", 4, two(0xF000, 0x0011), two(0xF1C0, 0xE07F), "IiFt", mfloat }, 346348024e4aSbellard 346448024e4aSbellard {"halt", 2, one(0045310), one(0177777), "", m68060 | mcfisa_a }, 346548024e4aSbellard 346648024e4aSbellard {"illegal", 2, one(0045374), one(0177777), "", m68000up | mcfisa_a }, 346748024e4aSbellard {"intouch", 2, one(0xf428), one(0xfff8), "As", mcfisa_b }, 346848024e4aSbellard 346948024e4aSbellard {"jmp", 2, one(0047300), one(0177700), "!s", m68000up | mcfisa_a }, 347048024e4aSbellard 347148024e4aSbellard {"jra", 2, one(0060000), one(0177400), "Bg", m68000up | mcfisa_a }, 347248024e4aSbellard {"jra", 2, one(0047300), one(0177700), "!s", m68000up | mcfisa_a }, 347348024e4aSbellard 347448024e4aSbellard {"jsr", 2, one(0047200), one(0177700), "!s", m68000up | mcfisa_a }, 347548024e4aSbellard 347648024e4aSbellard {"jbsr", 2, one(0060400), one(0177400), "Bg", m68000up | mcfisa_a }, 347748024e4aSbellard {"jbsr", 2, one(0047200), one(0177700), "!s", m68000up | mcfisa_a }, 347848024e4aSbellard 347948024e4aSbellard {"lea", 2, one(0040700), one(0170700), "!sAd", m68000up | mcfisa_a }, 348048024e4aSbellard 348148024e4aSbellard {"lpstop", 6, two(0174000,0000700),two(0177777,0177777),"#w", cpu32|m68060 }, 348248024e4aSbellard 348348024e4aSbellard {"linkw", 4, one(0047120), one(0177770), "As#w", m68000up | mcfisa_a }, 348448024e4aSbellard {"linkl", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 }, 348548024e4aSbellard {"link", 4, one(0047120), one(0177770), "As#W", m68000up | mcfisa_a }, 348648024e4aSbellard {"link", 6, one(0044010), one(0177770), "As#l", m68020up | cpu32 }, 348748024e4aSbellard 348848024e4aSbellard {"lslb", 2, one(0160410), one(0170770), "QdDs", m68000up }, 348948024e4aSbellard {"lslb", 2, one(0160450), one(0170770), "DdDs", m68000up }, 349048024e4aSbellard {"lslw", 2, one(0160510), one(0170770), "QdDs", m68000up }, 349148024e4aSbellard {"lslw", 2, one(0160550), one(0170770), "DdDs", m68000up }, 349248024e4aSbellard {"lslw", 2, one(0161700), one(0177700), "~s", m68000up }, 349348024e4aSbellard {"lsll", 2, one(0160610), one(0170770), "QdDs", m68000up | mcfisa_a }, 349448024e4aSbellard {"lsll", 2, one(0160650), one(0170770), "DdDs", m68000up | mcfisa_a }, 349548024e4aSbellard 349648024e4aSbellard {"lsrb", 2, one(0160010), one(0170770), "QdDs", m68000up }, 349748024e4aSbellard {"lsrb", 2, one(0160050), one(0170770), "DdDs", m68000up }, 349848024e4aSbellard {"lsrw", 2, one(0160110), one(0170770), "QdDs", m68000up }, 349948024e4aSbellard {"lsrw", 2, one(0160150), one(0170770), "DdDs", m68000up }, 350048024e4aSbellard {"lsrw", 2, one(0161300), one(0177700), "~s", m68000up }, 350148024e4aSbellard {"lsrl", 2, one(0160210), one(0170770), "QdDs", m68000up | mcfisa_a }, 350248024e4aSbellard {"lsrl", 2, one(0160250), one(0170770), "DdDs", m68000up | mcfisa_a }, 350348024e4aSbellard 350448024e4aSbellard {"macw", 4, two(0xa080, 0x0000), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac }, 350548024e4aSbellard {"macw", 4, two(0xa080, 0x0200), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac }, 350648024e4aSbellard {"macw", 4, two(0xa080, 0x0000), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac }, 350748024e4aSbellard {"macw", 4, two(0xa000, 0x0000), two(0xf1b0, 0x0900), "uMumiI", mcfmac }, 350848024e4aSbellard {"macw", 4, two(0xa000, 0x0200), two(0xf1b0, 0x0900), "uMumMh", mcfmac }, 350948024e4aSbellard {"macw", 4, two(0xa000, 0x0000), two(0xf1b0, 0x0f00), "uMum", mcfmac }, 351048024e4aSbellard 351148024e4aSbellard {"macw", 4, two(0xa000, 0x0000), two(0xf100, 0x0900), "uNuoiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX. */ 351248024e4aSbellard {"macw", 4, two(0xa000, 0x0200), two(0xf100, 0x0900), "uNuoMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX. */ 351348024e4aSbellard {"macw", 4, two(0xa000, 0x0000), two(0xf100, 0x0f00), "uNuo4/RneG", mcfemac },/* Ry,Rx,<ea>,accX. */ 351448024e4aSbellard {"macw", 4, two(0xa000, 0x0000), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX. */ 351548024e4aSbellard {"macw", 4, two(0xa000, 0x0200), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX. */ 351648024e4aSbellard {"macw", 4, two(0xa000, 0x0000), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX. */ 351748024e4aSbellard 351848024e4aSbellard {"macl", 4, two(0xa080, 0x0800), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac }, 351948024e4aSbellard {"macl", 4, two(0xa080, 0x0a00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac }, 352048024e4aSbellard {"macl", 4, two(0xa080, 0x0800), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac }, 352148024e4aSbellard {"macl", 4, two(0xa000, 0x0800), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac }, 352248024e4aSbellard {"macl", 4, two(0xa000, 0x0a00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac }, 352348024e4aSbellard {"macl", 4, two(0xa000, 0x0800), two(0xf1b0, 0x0800), "RMRm", mcfmac }, 352448024e4aSbellard 352548024e4aSbellard {"macl", 4, two(0xa000, 0x0800), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac }, 352648024e4aSbellard {"macl", 4, two(0xa000, 0x0a00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac }, 352748024e4aSbellard {"macl", 4, two(0xa000, 0x0800), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac }, 352848024e4aSbellard {"macl", 4, two(0xa000, 0x0800), two(0xf130, 0x0900), "RMRmiIeH", mcfemac }, 352948024e4aSbellard {"macl", 4, two(0xa000, 0x0a00), two(0xf130, 0x0900), "RMRmMheH", mcfemac }, 353048024e4aSbellard {"macl", 4, two(0xa000, 0x0800), two(0xf130, 0x0f00), "RMRmeH", mcfemac }, 353148024e4aSbellard 353248024e4aSbellard /* NOTE: The mcf5200 family programmer's reference manual does not 353348024e4aSbellard indicate the byte form of the movea instruction is invalid (as it 353407f35073SDong Xu Wang is on 68000 family cpus). However, experiments on the 5202 yield 353548024e4aSbellard unexpected results. The value is copied, but it is not sign extended 353648024e4aSbellard (as is done with movea.w) and the top three bytes in the address 353748024e4aSbellard register are not disturbed. I don't know if this is the intended 353848024e4aSbellard behavior --- it could be a hole in instruction decoding (Motorola 353948024e4aSbellard decided not to trap all invalid instructions for performance reasons) 354048024e4aSbellard --- but I suspect that it is not. 354148024e4aSbellard 354248024e4aSbellard I reported this to Motorola ISD Technical Communications Support, 354348024e4aSbellard which replied that other coldfire assemblers reject movea.b. For 354448024e4aSbellard this reason I've decided to not allow moveab. 354548024e4aSbellard 354648024e4aSbellard jtc@cygnus.com - 97/01/24. */ 354748024e4aSbellard 354848024e4aSbellard {"moveal", 2, one(0020100), one(0170700), "*lAd", m68000up | mcfisa_a }, 354948024e4aSbellard {"moveaw", 2, one(0030100), one(0170700), "*wAd", m68000up | mcfisa_a }, 355048024e4aSbellard 355148024e4aSbellard {"movclrl", 2, one(0xA1C0), one(0xf9f0), "eFRs", mcfemac }, 355248024e4aSbellard 355348024e4aSbellard {"movec", 4, one(0047173), one(0177777), "R1Jj", m68010up | mcfisa_a }, 355448024e4aSbellard {"movec", 4, one(0047173), one(0177777), "R1#j", m68010up | mcfisa_a }, 355548024e4aSbellard {"movec", 4, one(0047172), one(0177777), "JjR1", m68010up }, 355648024e4aSbellard {"movec", 4, one(0047172), one(0177777), "#jR1", m68010up }, 355748024e4aSbellard 355848024e4aSbellard {"movemw", 4, one(0044200), one(0177700), "Lw&s", m68000up }, 355948024e4aSbellard {"movemw", 4, one(0044240), one(0177770), "lw-s", m68000up }, 356048024e4aSbellard {"movemw", 4, one(0044200), one(0177700), "#w>s", m68000up }, 356148024e4aSbellard {"movemw", 4, one(0046200), one(0177700), "<sLw", m68000up }, 356248024e4aSbellard {"movemw", 4, one(0046200), one(0177700), "<s#w", m68000up }, 356348024e4aSbellard {"moveml", 4, one(0044300), one(0177700), "Lw&s", m68000up }, 356448024e4aSbellard {"moveml", 4, one(0044340), one(0177770), "lw-s", m68000up }, 356548024e4aSbellard {"moveml", 4, one(0044300), one(0177700), "#w>s", m68000up }, 356648024e4aSbellard {"moveml", 4, one(0046300), one(0177700), "<sLw", m68000up }, 356748024e4aSbellard {"moveml", 4, one(0046300), one(0177700), "<s#w", m68000up }, 356848024e4aSbellard /* FIXME: need specifier for mode 2 and 5 to simplify below insn patterns. */ 356948024e4aSbellard {"moveml", 4, one(0044320), one(0177770), "Lwas", mcfisa_a }, 357048024e4aSbellard {"moveml", 4, one(0044320), one(0177770), "#was", mcfisa_a }, 357148024e4aSbellard {"moveml", 4, one(0044350), one(0177770), "Lwds", mcfisa_a }, 357248024e4aSbellard {"moveml", 4, one(0044350), one(0177770), "#wds", mcfisa_a }, 357348024e4aSbellard {"moveml", 4, one(0046320), one(0177770), "asLw", mcfisa_a }, 357448024e4aSbellard {"moveml", 4, one(0046320), one(0177770), "as#w", mcfisa_a }, 357548024e4aSbellard {"moveml", 4, one(0046350), one(0177770), "dsLw", mcfisa_a }, 357648024e4aSbellard {"moveml", 4, one(0046350), one(0177770), "ds#w", mcfisa_a }, 357748024e4aSbellard 357848024e4aSbellard {"movepw", 2, one(0000410), one(0170770), "dsDd", m68000up }, 357948024e4aSbellard {"movepw", 2, one(0000610), one(0170770), "Ddds", m68000up }, 358048024e4aSbellard {"movepl", 2, one(0000510), one(0170770), "dsDd", m68000up }, 358148024e4aSbellard {"movepl", 2, one(0000710), one(0170770), "Ddds", m68000up }, 358248024e4aSbellard 358348024e4aSbellard {"moveq", 2, one(0070000), one(0170400), "MsDd", m68000up | mcfisa_a }, 358448024e4aSbellard {"moveq", 2, one(0070000), one(0170400), "#BDd", m68000up | mcfisa_a }, 358548024e4aSbellard 358648024e4aSbellard /* The move opcode can generate the movea and moveq instructions. */ 358748024e4aSbellard {"moveb", 2, one(0010000), one(0170000), ";b$d", m68000up }, 358848024e4aSbellard {"moveb", 2, one(0010000), one(0170070), "Ds$d", mcfisa_a }, 358948024e4aSbellard {"moveb", 2, one(0010020), one(0170070), "as$d", mcfisa_a }, 359048024e4aSbellard {"moveb", 2, one(0010030), one(0170070), "+s$d", mcfisa_a }, 359148024e4aSbellard {"moveb", 2, one(0010040), one(0170070), "-s$d", mcfisa_a }, 359248024e4aSbellard {"moveb", 2, one(0010000), one(0170000), "nsqd", mcfisa_a }, 359348024e4aSbellard {"moveb", 2, one(0010000), one(0170700), "obDd", mcfisa_a }, 359448024e4aSbellard {"moveb", 2, one(0010200), one(0170700), "obad", mcfisa_a }, 359548024e4aSbellard {"moveb", 2, one(0010300), one(0170700), "ob+d", mcfisa_a }, 359648024e4aSbellard {"moveb", 2, one(0010400), one(0170700), "ob-d", mcfisa_a }, 359748024e4aSbellard {"moveb", 2, one(0010000), one(0170000), "obnd", mcfisa_b }, 359848024e4aSbellard 359948024e4aSbellard {"movew", 2, one(0030000), one(0170000), "*w%d", m68000up }, 360048024e4aSbellard {"movew", 2, one(0030000), one(0170000), "ms%d", mcfisa_a }, 360148024e4aSbellard {"movew", 2, one(0030000), one(0170000), "nspd", mcfisa_a }, 360248024e4aSbellard {"movew", 2, one(0030000), one(0170000), "owmd", mcfisa_a }, 360348024e4aSbellard {"movew", 2, one(0030000), one(0170000), "ownd", mcfisa_b }, 360448024e4aSbellard {"movew", 2, one(0040300), one(0177700), "Ss$s", m68000up }, 360548024e4aSbellard {"movew", 2, one(0040300), one(0177770), "SsDs", mcfisa_a }, 360648024e4aSbellard {"movew", 2, one(0041300), one(0177700), "Cs$s", m68010up }, 360748024e4aSbellard {"movew", 2, one(0041300), one(0177770), "CsDs", mcfisa_a }, 360848024e4aSbellard {"movew", 2, one(0042300), one(0177700), ";wCd", m68000up }, 360948024e4aSbellard {"movew", 2, one(0042300), one(0177700), "DsCd", mcfisa_a }, 361048024e4aSbellard {"movew", 4, one(0042374), one(0177777), "#wCd", mcfisa_a }, 361148024e4aSbellard {"movew", 2, one(0043300), one(0177700), ";wSd", m68000up }, 361248024e4aSbellard {"movew", 2, one(0043300), one(0177700), "DsSd", mcfisa_a }, 361348024e4aSbellard {"movew", 4, one(0043374), one(0177777), "#wSd", mcfisa_a }, 361448024e4aSbellard 361548024e4aSbellard {"movel", 2, one(0070000), one(0170400), "MsDd", m68000up | mcfisa_a }, 361648024e4aSbellard {"movel", 2, one(0020000), one(0170000), "*l%d", m68000up }, 361748024e4aSbellard {"movel", 2, one(0020000), one(0170000), "ms%d", mcfisa_a }, 361848024e4aSbellard {"movel", 2, one(0020000), one(0170000), "nspd", mcfisa_a }, 361948024e4aSbellard {"movel", 2, one(0020000), one(0170000), "olmd", mcfisa_a }, 362048024e4aSbellard {"movel", 2, one(0020000), one(0170000), "olnd", mcfisa_b }, 362148024e4aSbellard {"movel", 2, one(0047140), one(0177770), "AsUd", m68000up | mcfusp }, 362248024e4aSbellard {"movel", 2, one(0047150), one(0177770), "UdAs", m68000up | mcfusp }, 362348024e4aSbellard {"movel", 2, one(0120600), one(0177760), "EsRs", mcfmac }, 362448024e4aSbellard {"movel", 2, one(0120400), one(0177760), "RsEs", mcfmac }, 362548024e4aSbellard {"movel", 6, one(0120474), one(0177777), "#lEs", mcfmac }, 362648024e4aSbellard {"movel", 2, one(0124600), one(0177760), "GsRs", mcfmac }, 362748024e4aSbellard {"movel", 2, one(0124400), one(0177760), "RsGs", mcfmac }, 362848024e4aSbellard {"movel", 6, one(0124474), one(0177777), "#lGs", mcfmac }, 362948024e4aSbellard {"movel", 2, one(0126600), one(0177760), "HsRs", mcfmac }, 363048024e4aSbellard {"movel", 2, one(0126400), one(0177760), "RsHs", mcfmac }, 363148024e4aSbellard {"movel", 6, one(0126474), one(0177777), "#lHs", mcfmac }, 363248024e4aSbellard {"movel", 2, one(0124700), one(0177777), "GsCs", mcfmac }, 363348024e4aSbellard 363448024e4aSbellard {"movel", 2, one(0xa180), one(0xf9f0), "eFRs", mcfemac }, /* ACCx,Rx. */ 363548024e4aSbellard {"movel", 2, one(0xab80), one(0xfbf0), "g]Rs", mcfemac }, /* ACCEXTx,Rx. */ 363648024e4aSbellard {"movel", 2, one(0xa980), one(0xfff0), "G-Rs", mcfemac }, /* macsr,Rx. */ 363748024e4aSbellard {"movel", 2, one(0xad80), one(0xfff0), "H-Rs", mcfemac }, /* mask,Rx. */ 363848024e4aSbellard {"movel", 2, one(0xa110), one(0xf9fc), "efeF", mcfemac }, /* ACCy,ACCx. */ 363948024e4aSbellard {"movel", 2, one(0xa9c0), one(0xffff), "G-C-", mcfemac }, /* macsr,ccr. */ 364048024e4aSbellard {"movel", 2, one(0xa100), one(0xf9f0), "RseF", mcfemac }, /* Rx,ACCx. */ 364148024e4aSbellard {"movel", 6, one(0xa13c), one(0xf9ff), "#leF", mcfemac }, /* #,ACCx. */ 364248024e4aSbellard {"movel", 2, one(0xab00), one(0xfbc0), "Rsg]", mcfemac }, /* Rx,ACCEXTx. */ 364348024e4aSbellard {"movel", 6, one(0xab3c), one(0xfbff), "#lg]", mcfemac }, /* #,ACCEXTx. */ 364448024e4aSbellard {"movel", 2, one(0xa900), one(0xffc0), "RsG-", mcfemac }, /* Rx,macsr. */ 364548024e4aSbellard {"movel", 6, one(0xa93c), one(0xffff), "#lG-", mcfemac }, /* #,macsr. */ 364648024e4aSbellard {"movel", 2, one(0xad00), one(0xffc0), "RsH-", mcfemac }, /* Rx,mask. */ 364748024e4aSbellard {"movel", 6, one(0xad3c), one(0xffff), "#lH-", mcfemac }, /* #,mask. */ 364848024e4aSbellard 364948024e4aSbellard {"move", 2, one(0030000), one(0170000), "*w%d", m68000up }, 365048024e4aSbellard {"move", 2, one(0030000), one(0170000), "ms%d", mcfisa_a }, 365148024e4aSbellard {"move", 2, one(0030000), one(0170000), "nspd", mcfisa_a }, 365248024e4aSbellard {"move", 2, one(0030000), one(0170000), "owmd", mcfisa_a }, 365348024e4aSbellard {"move", 2, one(0030000), one(0170000), "ownd", mcfisa_b }, 365448024e4aSbellard {"move", 2, one(0040300), one(0177700), "Ss$s", m68000up }, 365548024e4aSbellard {"move", 2, one(0040300), one(0177770), "SsDs", mcfisa_a }, 365648024e4aSbellard {"move", 2, one(0041300), one(0177700), "Cs$s", m68010up }, 365748024e4aSbellard {"move", 2, one(0041300), one(0177770), "CsDs", mcfisa_a }, 365848024e4aSbellard {"move", 2, one(0042300), one(0177700), ";wCd", m68000up }, 365948024e4aSbellard {"move", 2, one(0042300), one(0177700), "DsCd", mcfisa_a }, 366048024e4aSbellard {"move", 4, one(0042374), one(0177777), "#wCd", mcfisa_a }, 366148024e4aSbellard {"move", 2, one(0043300), one(0177700), ";wSd", m68000up }, 366248024e4aSbellard {"move", 2, one(0043300), one(0177700), "DsSd", mcfisa_a }, 366348024e4aSbellard {"move", 4, one(0043374), one(0177777), "#wSd", mcfisa_a }, 366448024e4aSbellard 366548024e4aSbellard {"move", 2, one(0047140), one(0177770), "AsUd", m68000up }, 366648024e4aSbellard {"move", 2, one(0047150), one(0177770), "UdAs", m68000up }, 366748024e4aSbellard 366848024e4aSbellard {"mov3ql", 2, one(0120500), one(0170700), "xd%s", mcfisa_b }, 366948024e4aSbellard {"mvsb", 2, one(0070400), one(0170700), "*bDd", mcfisa_b }, 367048024e4aSbellard {"mvsw", 2, one(0070500), one(0170700), "*wDd", mcfisa_b }, 367148024e4aSbellard {"mvzb", 2, one(0070600), one(0170700), "*bDd", mcfisa_b }, 367248024e4aSbellard {"mvzw", 2, one(0070700), one(0170700), "*wDd", mcfisa_b }, 367348024e4aSbellard 367448024e4aSbellard {"movesb", 4, two(0007000, 0), two(0177700, 07777), "~sR1", m68010up }, 367548024e4aSbellard {"movesb", 4, two(0007000, 04000), two(0177700, 07777), "R1~s", m68010up }, 367648024e4aSbellard {"movesw", 4, two(0007100, 0), two(0177700, 07777), "~sR1", m68010up }, 367748024e4aSbellard {"movesw", 4, two(0007100, 04000), two(0177700, 07777), "R1~s", m68010up }, 367848024e4aSbellard {"movesl", 4, two(0007200, 0), two(0177700, 07777), "~sR1", m68010up }, 367948024e4aSbellard {"movesl", 4, two(0007200, 04000), two(0177700, 07777), "R1~s", m68010up }, 368048024e4aSbellard 368148024e4aSbellard {"move16", 4, two(0xf620, 0x8000), two(0xfff8, 0x8fff), "+s+1", m68040up }, 368248024e4aSbellard {"move16", 2, one(0xf600), one(0xfff8), "+s_L", m68040up }, 368348024e4aSbellard {"move16", 2, one(0xf608), one(0xfff8), "_L+s", m68040up }, 368448024e4aSbellard {"move16", 2, one(0xf610), one(0xfff8), "as_L", m68040up }, 368548024e4aSbellard {"move16", 2, one(0xf618), one(0xfff8), "_Las", m68040up }, 368648024e4aSbellard 368748024e4aSbellard {"msacw", 4, two(0xa080, 0x0100), two(0xf180, 0x0910), "uNuoiI4/Rn", mcfmac }, 368848024e4aSbellard {"msacw", 4, two(0xa080, 0x0300), two(0xf180, 0x0910), "uNuoMh4/Rn", mcfmac }, 368948024e4aSbellard {"msacw", 4, two(0xa080, 0x0100), two(0xf180, 0x0f10), "uNuo4/Rn", mcfmac }, 369048024e4aSbellard {"msacw", 4, two(0xa000, 0x0100), two(0xf1b0, 0x0900), "uMumiI", mcfmac }, 369148024e4aSbellard {"msacw", 4, two(0xa000, 0x0300), two(0xf1b0, 0x0900), "uMumMh", mcfmac }, 369248024e4aSbellard {"msacw", 4, two(0xa000, 0x0100), two(0xf1b0, 0x0f00), "uMum", mcfmac }, 369348024e4aSbellard 369448024e4aSbellard {"msacw", 4, two(0xa000, 0x0100), two(0xf100, 0x0900), "uMumiI4/RneG", mcfemac },/* Ry,Rx,SF,<ea>,accX. */ 369548024e4aSbellard {"msacw", 4, two(0xa000, 0x0300), two(0xf100, 0x0900), "uMumMh4/RneG", mcfemac },/* Ry,Rx,+1/-1,<ea>,accX. */ 369648024e4aSbellard {"msacw", 4, two(0xa000, 0x0100), two(0xf100, 0x0f00), "uMum4/RneG", mcfemac },/* Ry,Rx,<ea>,accX. */ 369748024e4aSbellard {"msacw", 4, two(0xa000, 0x0100), two(0xf130, 0x0900), "uMumiIeH", mcfemac },/* Ry,Rx,SF,accX. */ 369848024e4aSbellard {"msacw", 4, two(0xa000, 0x0300), two(0xf130, 0x0900), "uMumMheH", mcfemac },/* Ry,Rx,+1/-1,accX. */ 369948024e4aSbellard {"msacw", 4, two(0xa000, 0x0100), two(0xf130, 0x0f00), "uMumeH", mcfemac }, /* Ry,Rx,accX. */ 370048024e4aSbellard 370148024e4aSbellard {"msacl", 4, two(0xa080, 0x0900), two(0xf180, 0x0910), "RNRoiI4/Rn", mcfmac }, 370248024e4aSbellard {"msacl", 4, two(0xa080, 0x0b00), two(0xf180, 0x0910), "RNRoMh4/Rn", mcfmac }, 370348024e4aSbellard {"msacl", 4, two(0xa080, 0x0900), two(0xf180, 0x0f10), "RNRo4/Rn", mcfmac }, 370448024e4aSbellard {"msacl", 4, two(0xa000, 0x0900), two(0xf1b0, 0x0b00), "RMRmiI", mcfmac }, 370548024e4aSbellard {"msacl", 4, two(0xa000, 0x0b00), two(0xf1b0, 0x0b00), "RMRmMh", mcfmac }, 370648024e4aSbellard {"msacl", 4, two(0xa000, 0x0900), two(0xf1b0, 0x0800), "RMRm", mcfmac }, 370748024e4aSbellard 370848024e4aSbellard {"msacl", 4, two(0xa000, 0x0900), two(0xf100, 0x0900), "R3R1iI4/RneG", mcfemac }, 370948024e4aSbellard {"msacl", 4, two(0xa000, 0x0b00), two(0xf100, 0x0900), "R3R1Mh4/RneG", mcfemac }, 371048024e4aSbellard {"msacl", 4, two(0xa000, 0x0900), two(0xf100, 0x0f00), "R3R14/RneG", mcfemac }, 371148024e4aSbellard {"msacl", 4, two(0xa000, 0x0900), two(0xf130, 0x0900), "RMRmiIeH", mcfemac }, 371248024e4aSbellard {"msacl", 4, two(0xa000, 0x0b00), two(0xf130, 0x0900), "RMRmMheH", mcfemac }, 371348024e4aSbellard {"msacl", 4, two(0xa000, 0x0900), two(0xf130, 0x0f00), "RMRmeH", mcfemac }, 371448024e4aSbellard 371548024e4aSbellard {"mulsw", 2, one(0140700), one(0170700), ";wDd", m68000up|mcfisa_a }, 371648024e4aSbellard {"mulsl", 4, two(0046000,004000), two(0177700,0107770), ";lD1", m68020up|cpu32 }, 371748024e4aSbellard {"mulsl", 4, two(0046000,004000), two(0177700,0107770), "qsD1", mcfisa_a }, 371848024e4aSbellard {"mulsl", 4, two(0046000,006000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 }, 371948024e4aSbellard 372048024e4aSbellard {"muluw", 2, one(0140300), one(0170700), ";wDd", m68000up|mcfisa_a }, 372148024e4aSbellard {"mulul", 4, two(0046000,000000), two(0177700,0107770), ";lD1", m68020up|cpu32 }, 372248024e4aSbellard {"mulul", 4, two(0046000,000000), two(0177700,0107770), "qsD1", mcfisa_a }, 372348024e4aSbellard {"mulul", 4, two(0046000,002000), two(0177700,0107770), ";lD3D1",m68020up|cpu32 }, 372448024e4aSbellard 372548024e4aSbellard {"nbcd", 2, one(0044000), one(0177700), "$s", m68000up }, 372648024e4aSbellard 372748024e4aSbellard {"negb", 2, one(0042000), one(0177700), "$s", m68000up }, 372848024e4aSbellard {"negw", 2, one(0042100), one(0177700), "$s", m68000up }, 372948024e4aSbellard {"negl", 2, one(0042200), one(0177700), "$s", m68000up }, 373048024e4aSbellard {"negl", 2, one(0042200), one(0177700), "Ds", mcfisa_a}, 373148024e4aSbellard 373248024e4aSbellard {"negxb", 2, one(0040000), one(0177700), "$s", m68000up }, 373348024e4aSbellard {"negxw", 2, one(0040100), one(0177700), "$s", m68000up }, 373448024e4aSbellard {"negxl", 2, one(0040200), one(0177700), "$s", m68000up }, 373548024e4aSbellard {"negxl", 2, one(0040200), one(0177700), "Ds", mcfisa_a}, 373648024e4aSbellard 373748024e4aSbellard {"nop", 2, one(0047161), one(0177777), "", m68000up | mcfisa_a}, 373848024e4aSbellard 373948024e4aSbellard {"notb", 2, one(0043000), one(0177700), "$s", m68000up }, 374048024e4aSbellard {"notw", 2, one(0043100), one(0177700), "$s", m68000up }, 374148024e4aSbellard {"notl", 2, one(0043200), one(0177700), "$s", m68000up }, 374248024e4aSbellard {"notl", 2, one(0043200), one(0177700), "Ds", mcfisa_a}, 374348024e4aSbellard 374448024e4aSbellard {"orib", 4, one(0000000), one(0177700), "#b$s", m68000up }, 374548024e4aSbellard {"orib", 4, one(0000074), one(0177777), "#bCs", m68000up }, 374648024e4aSbellard {"oriw", 4, one(0000100), one(0177700), "#w$s", m68000up }, 374748024e4aSbellard {"oriw", 4, one(0000174), one(0177777), "#wSs", m68000up }, 374848024e4aSbellard {"oril", 6, one(0000200), one(0177700), "#l$s", m68000up }, 374948024e4aSbellard {"oril", 6, one(0000200), one(0177700), "#lDs", mcfisa_a }, 375048024e4aSbellard {"ori", 4, one(0000074), one(0177777), "#bCs", m68000up }, 375148024e4aSbellard {"ori", 4, one(0000100), one(0177700), "#w$s", m68000up }, 375248024e4aSbellard {"ori", 4, one(0000174), one(0177777), "#wSs", m68000up }, 375348024e4aSbellard 375448024e4aSbellard /* The or opcode can generate the ori instruction. */ 375548024e4aSbellard {"orb", 4, one(0000000), one(0177700), "#b$s", m68000up }, 375648024e4aSbellard {"orb", 4, one(0000074), one(0177777), "#bCs", m68000up }, 375748024e4aSbellard {"orb", 2, one(0100000), one(0170700), ";bDd", m68000up }, 375848024e4aSbellard {"orb", 2, one(0100400), one(0170700), "Dd~s", m68000up }, 375948024e4aSbellard {"orw", 4, one(0000100), one(0177700), "#w$s", m68000up }, 376048024e4aSbellard {"orw", 4, one(0000174), one(0177777), "#wSs", m68000up }, 376148024e4aSbellard {"orw", 2, one(0100100), one(0170700), ";wDd", m68000up }, 376248024e4aSbellard {"orw", 2, one(0100500), one(0170700), "Dd~s", m68000up }, 376348024e4aSbellard {"orl", 6, one(0000200), one(0177700), "#l$s", m68000up }, 376448024e4aSbellard {"orl", 6, one(0000200), one(0177700), "#lDs", mcfisa_a }, 376548024e4aSbellard {"orl", 2, one(0100200), one(0170700), ";lDd", m68000up | mcfisa_a }, 376648024e4aSbellard {"orl", 2, one(0100600), one(0170700), "Dd~s", m68000up | mcfisa_a }, 376748024e4aSbellard {"or", 4, one(0000074), one(0177777), "#bCs", m68000up }, 376848024e4aSbellard {"or", 4, one(0000100), one(0177700), "#w$s", m68000up }, 376948024e4aSbellard {"or", 4, one(0000174), one(0177777), "#wSs", m68000up }, 377048024e4aSbellard {"or", 2, one(0100100), one(0170700), ";wDd", m68000up }, 377148024e4aSbellard {"or", 2, one(0100500), one(0170700), "Dd~s", m68000up }, 377248024e4aSbellard 377348024e4aSbellard {"pack", 4, one(0100500), one(0170770), "DsDd#w", m68020up }, 377448024e4aSbellard {"pack", 4, one(0100510), one(0170770), "-s-d#w", m68020up }, 377548024e4aSbellard 377648024e4aSbellard {"pbac", 2, one(0xf087), one(0xffbf), "Bc", m68851 }, 377748024e4aSbellard {"pbacw", 2, one(0xf087), one(0xffff), "BW", m68851 }, 377848024e4aSbellard {"pbas", 2, one(0xf086), one(0xffbf), "Bc", m68851 }, 377948024e4aSbellard {"pbasw", 2, one(0xf086), one(0xffff), "BW", m68851 }, 378048024e4aSbellard {"pbbc", 2, one(0xf081), one(0xffbf), "Bc", m68851 }, 378148024e4aSbellard {"pbbcw", 2, one(0xf081), one(0xffff), "BW", m68851 }, 378248024e4aSbellard {"pbbs", 2, one(0xf080), one(0xffbf), "Bc", m68851 }, 378348024e4aSbellard {"pbbsw", 2, one(0xf080), one(0xffff), "BW", m68851 }, 378448024e4aSbellard {"pbcc", 2, one(0xf08f), one(0xffbf), "Bc", m68851 }, 378548024e4aSbellard {"pbccw", 2, one(0xf08f), one(0xffff), "BW", m68851 }, 378648024e4aSbellard {"pbcs", 2, one(0xf08e), one(0xffbf), "Bc", m68851 }, 378748024e4aSbellard {"pbcsw", 2, one(0xf08e), one(0xffff), "BW", m68851 }, 378848024e4aSbellard {"pbgc", 2, one(0xf08d), one(0xffbf), "Bc", m68851 }, 378948024e4aSbellard {"pbgcw", 2, one(0xf08d), one(0xffff), "BW", m68851 }, 379048024e4aSbellard {"pbgs", 2, one(0xf08c), one(0xffbf), "Bc", m68851 }, 379148024e4aSbellard {"pbgsw", 2, one(0xf08c), one(0xffff), "BW", m68851 }, 379248024e4aSbellard {"pbic", 2, one(0xf08b), one(0xffbf), "Bc", m68851 }, 379348024e4aSbellard {"pbicw", 2, one(0xf08b), one(0xffff), "BW", m68851 }, 379448024e4aSbellard {"pbis", 2, one(0xf08a), one(0xffbf), "Bc", m68851 }, 379548024e4aSbellard {"pbisw", 2, one(0xf08a), one(0xffff), "BW", m68851 }, 379648024e4aSbellard {"pblc", 2, one(0xf083), one(0xffbf), "Bc", m68851 }, 379748024e4aSbellard {"pblcw", 2, one(0xf083), one(0xffff), "BW", m68851 }, 379848024e4aSbellard {"pbls", 2, one(0xf082), one(0xffbf), "Bc", m68851 }, 379948024e4aSbellard {"pblsw", 2, one(0xf082), one(0xffff), "BW", m68851 }, 380048024e4aSbellard {"pbsc", 2, one(0xf085), one(0xffbf), "Bc", m68851 }, 380148024e4aSbellard {"pbscw", 2, one(0xf085), one(0xffff), "BW", m68851 }, 380248024e4aSbellard {"pbss", 2, one(0xf084), one(0xffbf), "Bc", m68851 }, 380348024e4aSbellard {"pbssw", 2, one(0xf084), one(0xffff), "BW", m68851 }, 380448024e4aSbellard {"pbwc", 2, one(0xf089), one(0xffbf), "Bc", m68851 }, 380548024e4aSbellard {"pbwcw", 2, one(0xf089), one(0xffff), "BW", m68851 }, 380648024e4aSbellard {"pbws", 2, one(0xf088), one(0xffbf), "Bc", m68851 }, 380748024e4aSbellard {"pbwsw", 2, one(0xf088), one(0xffff), "BW", m68851 }, 380848024e4aSbellard 380948024e4aSbellard {"pdbac", 4, two(0xf048, 0x0007), two(0xfff8, 0xffff), "DsBw", m68851 }, 381048024e4aSbellard {"pdbas", 4, two(0xf048, 0x0006), two(0xfff8, 0xffff), "DsBw", m68851 }, 381148024e4aSbellard {"pdbbc", 4, two(0xf048, 0x0001), two(0xfff8, 0xffff), "DsBw", m68851 }, 381248024e4aSbellard {"pdbbs", 4, two(0xf048, 0x0000), two(0xfff8, 0xffff), "DsBw", m68851 }, 381348024e4aSbellard {"pdbcc", 4, two(0xf048, 0x000f), two(0xfff8, 0xffff), "DsBw", m68851 }, 381448024e4aSbellard {"pdbcs", 4, two(0xf048, 0x000e), two(0xfff8, 0xffff), "DsBw", m68851 }, 381548024e4aSbellard {"pdbgc", 4, two(0xf048, 0x000d), two(0xfff8, 0xffff), "DsBw", m68851 }, 381648024e4aSbellard {"pdbgs", 4, two(0xf048, 0x000c), two(0xfff8, 0xffff), "DsBw", m68851 }, 381748024e4aSbellard {"pdbic", 4, two(0xf048, 0x000b), two(0xfff8, 0xffff), "DsBw", m68851 }, 381848024e4aSbellard {"pdbis", 4, two(0xf048, 0x000a), two(0xfff8, 0xffff), "DsBw", m68851 }, 381948024e4aSbellard {"pdblc", 4, two(0xf048, 0x0003), two(0xfff8, 0xffff), "DsBw", m68851 }, 382048024e4aSbellard {"pdbls", 4, two(0xf048, 0x0002), two(0xfff8, 0xffff), "DsBw", m68851 }, 382148024e4aSbellard {"pdbsc", 4, two(0xf048, 0x0005), two(0xfff8, 0xffff), "DsBw", m68851 }, 382248024e4aSbellard {"pdbss", 4, two(0xf048, 0x0004), two(0xfff8, 0xffff), "DsBw", m68851 }, 382348024e4aSbellard {"pdbwc", 4, two(0xf048, 0x0009), two(0xfff8, 0xffff), "DsBw", m68851 }, 382448024e4aSbellard {"pdbws", 4, two(0xf048, 0x0008), two(0xfff8, 0xffff), "DsBw", m68851 }, 382548024e4aSbellard 382648024e4aSbellard {"pea", 2, one(0044100), one(0177700), "!s", m68000up|mcfisa_a }, 382748024e4aSbellard 382848024e4aSbellard {"pflusha", 2, one(0xf518), one(0xfff8), "", m68040up }, 382948024e4aSbellard {"pflusha", 4, two(0xf000,0x2400), two(0xffff,0xffff), "", m68030 | m68851 }, 383048024e4aSbellard 383148024e4aSbellard {"pflush", 4, two(0xf000,0x3010), two(0xffc0,0xfe10), "T3T9", m68030|m68851 }, 383248024e4aSbellard {"pflush", 4, two(0xf000,0x3810), two(0xffc0,0xfe10), "T3T9&s", m68030|m68851 }, 383348024e4aSbellard {"pflush", 4, two(0xf000,0x3008), two(0xffc0,0xfe18), "D3T9", m68030|m68851 }, 383448024e4aSbellard {"pflush", 4, two(0xf000,0x3808), two(0xffc0,0xfe18), "D3T9&s", m68030|m68851 }, 383548024e4aSbellard {"pflush", 4, two(0xf000,0x3000), two(0xffc0,0xfe1e), "f3T9", m68030|m68851 }, 383648024e4aSbellard {"pflush", 4, two(0xf000,0x3800), two(0xffc0,0xfe1e), "f3T9&s", m68030|m68851 }, 383748024e4aSbellard {"pflush", 2, one(0xf508), one(0xfff8), "as", m68040up }, 383848024e4aSbellard {"pflush", 2, one(0xf508), one(0xfff8), "As", m68040up }, 383948024e4aSbellard 384048024e4aSbellard {"pflushan", 2, one(0xf510), one(0xfff8), "", m68040up }, 384148024e4aSbellard {"pflushn", 2, one(0xf500), one(0xfff8), "as", m68040up }, 384248024e4aSbellard {"pflushn", 2, one(0xf500), one(0xfff8), "As", m68040up }, 384348024e4aSbellard 384448024e4aSbellard {"pflushr", 4, two(0xf000, 0xa000), two(0xffc0, 0xffff), "|s", m68851 }, 384548024e4aSbellard 384648024e4aSbellard {"pflushs", 4, two(0xf000, 0x3410), two(0xfff8, 0xfe10), "T3T9", m68851 }, 384748024e4aSbellard {"pflushs", 4, two(0xf000, 0x3c10), two(0xfff8, 0xfe10), "T3T9&s", m68851 }, 384848024e4aSbellard {"pflushs", 4, two(0xf000, 0x3408), two(0xfff8, 0xfe18), "D3T9", m68851 }, 384948024e4aSbellard {"pflushs", 4, two(0xf000, 0x3c08), two(0xfff8, 0xfe18), "D3T9&s", m68851 }, 385048024e4aSbellard {"pflushs", 4, two(0xf000, 0x3400), two(0xfff8, 0xfe1e), "f3T9", m68851 }, 385148024e4aSbellard {"pflushs", 4, two(0xf000, 0x3c00), two(0xfff8, 0xfe1e), "f3T9&s", m68851 }, 385248024e4aSbellard 385348024e4aSbellard {"ploadr", 4, two(0xf000,0x2210), two(0xffc0,0xfff0), "T3&s", m68030|m68851 }, 385448024e4aSbellard {"ploadr", 4, two(0xf000,0x2208), two(0xffc0,0xfff8), "D3&s", m68030|m68851 }, 385548024e4aSbellard {"ploadr", 4, two(0xf000,0x2200), two(0xffc0,0xfffe), "f3&s", m68030|m68851 }, 385648024e4aSbellard {"ploadw", 4, two(0xf000,0x2010), two(0xffc0,0xfff0), "T3&s", m68030|m68851 }, 385748024e4aSbellard {"ploadw", 4, two(0xf000,0x2008), two(0xffc0,0xfff8), "D3&s", m68030|m68851 }, 385848024e4aSbellard {"ploadw", 4, two(0xf000,0x2000), two(0xffc0,0xfffe), "f3&s", m68030|m68851 }, 385948024e4aSbellard 386048024e4aSbellard {"plpar", 2, one(0xf5c8), one(0xfff8), "as", m68060 }, 386148024e4aSbellard {"plpaw", 2, one(0xf588), one(0xfff8), "as", m68060 }, 386248024e4aSbellard 386348024e4aSbellard {"pmove", 4, two(0xf000,0x4000), two(0xffc0,0xffff), "*l08", m68030|m68851 }, 386448024e4aSbellard {"pmove", 4, two(0xf000,0x5c00), two(0xffc0,0xffff), "*w18", m68851 }, 386548024e4aSbellard {"pmove", 4, two(0xf000,0x4000), two(0xffc0,0xe3ff), "*b28", m68851 }, 386648024e4aSbellard {"pmove", 4, two(0xf000,0x4200), two(0xffc0,0xffff), "08%s", m68030|m68851 }, 386748024e4aSbellard {"pmove", 4, two(0xf000,0x5e00), two(0xffc0,0xffff), "18%s", m68851 }, 386848024e4aSbellard {"pmove", 4, two(0xf000,0x4200), two(0xffc0,0xe3ff), "28%s", m68851 }, 386948024e4aSbellard {"pmove", 4, two(0xf000,0x4000), two(0xffc0,0xe3ff), "|sW8", m68030|m68851 }, 387048024e4aSbellard {"pmove", 4, two(0xf000,0x4200), two(0xffc0,0xe3ff), "W8~s", m68030|m68851 }, 387148024e4aSbellard {"pmove", 4, two(0xf000,0x6200), two(0xffc0,0xe3e3), "*wX3", m68851 }, 387248024e4aSbellard {"pmove", 4, two(0xf000,0x6000), two(0xffc0,0xe3e3), "X3%s", m68851 }, 387348024e4aSbellard {"pmove", 4, two(0xf000,0x6000), two(0xffc0,0xffff), "*wY8", m68030|m68851 }, 387448024e4aSbellard {"pmove", 4, two(0xf000,0x6200), two(0xffc0,0xffff), "Y8%s", m68030|m68851 }, 387548024e4aSbellard {"pmove", 4, two(0xf000,0x6600), two(0xffc0,0xffff), "Z8%s", m68851 }, 387648024e4aSbellard {"pmove", 4, two(0xf000,0x0800), two(0xffc0,0xfbff), "*l38", m68030 }, 387748024e4aSbellard {"pmove", 4, two(0xf000,0x0a00), two(0xffc0,0xfbff), "38%s", m68030 }, 387848024e4aSbellard 387948024e4aSbellard {"pmovefd", 4, two(0xf000, 0x4100), two(0xffc0, 0xe3ff), "*l08", m68030 }, 388048024e4aSbellard {"pmovefd", 4, two(0xf000, 0x4100), two(0xffc0, 0xe3ff), "|sW8", m68030 }, 388148024e4aSbellard {"pmovefd", 4, two(0xf000, 0x0900), two(0xffc0, 0xfbff), "*l38", m68030 }, 388248024e4aSbellard 388348024e4aSbellard {"prestore", 2, one(0xf140), one(0xffc0), "<s", m68851 }, 388448024e4aSbellard 388548024e4aSbellard {"psave", 2, one(0xf100), one(0xffc0), ">s", m68851 }, 388648024e4aSbellard 388748024e4aSbellard {"psac", 4, two(0xf040, 0x0007), two(0xffc0, 0xffff), "$s", m68851 }, 388848024e4aSbellard {"psas", 4, two(0xf040, 0x0006), two(0xffc0, 0xffff), "$s", m68851 }, 388948024e4aSbellard {"psbc", 4, two(0xf040, 0x0001), two(0xffc0, 0xffff), "$s", m68851 }, 389048024e4aSbellard {"psbs", 4, two(0xf040, 0x0000), two(0xffc0, 0xffff), "$s", m68851 }, 389148024e4aSbellard {"pscc", 4, two(0xf040, 0x000f), two(0xffc0, 0xffff), "$s", m68851 }, 389248024e4aSbellard {"pscs", 4, two(0xf040, 0x000e), two(0xffc0, 0xffff), "$s", m68851 }, 389348024e4aSbellard {"psgc", 4, two(0xf040, 0x000d), two(0xffc0, 0xffff), "$s", m68851 }, 389448024e4aSbellard {"psgs", 4, two(0xf040, 0x000c), two(0xffc0, 0xffff), "$s", m68851 }, 389548024e4aSbellard {"psic", 4, two(0xf040, 0x000b), two(0xffc0, 0xffff), "$s", m68851 }, 389648024e4aSbellard {"psis", 4, two(0xf040, 0x000a), two(0xffc0, 0xffff), "$s", m68851 }, 389748024e4aSbellard {"pslc", 4, two(0xf040, 0x0003), two(0xffc0, 0xffff), "$s", m68851 }, 389848024e4aSbellard {"psls", 4, two(0xf040, 0x0002), two(0xffc0, 0xffff), "$s", m68851 }, 389948024e4aSbellard {"pssc", 4, two(0xf040, 0x0005), two(0xffc0, 0xffff), "$s", m68851 }, 390048024e4aSbellard {"psss", 4, two(0xf040, 0x0004), two(0xffc0, 0xffff), "$s", m68851 }, 390148024e4aSbellard {"pswc", 4, two(0xf040, 0x0009), two(0xffc0, 0xffff), "$s", m68851 }, 390248024e4aSbellard {"psws", 4, two(0xf040, 0x0008), two(0xffc0, 0xffff), "$s", m68851 }, 390348024e4aSbellard 390448024e4aSbellard {"ptestr", 4, two(0xf000,0x8210), two(0xffc0, 0xe3f0), "T3&st8", m68030|m68851 }, 390548024e4aSbellard {"ptestr", 4, two(0xf000,0x8310), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 }, 390648024e4aSbellard {"ptestr", 4, two(0xf000,0x8208), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 }, 390748024e4aSbellard {"ptestr", 4, two(0xf000,0x8308), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 }, 390848024e4aSbellard {"ptestr", 4, two(0xf000,0x8200), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 }, 390948024e4aSbellard {"ptestr", 4, two(0xf000,0x8300), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 }, 391048024e4aSbellard {"ptestr", 2, one(0xf568), one(0xfff8), "as", m68040 }, 391148024e4aSbellard 391248024e4aSbellard {"ptestw", 4, two(0xf000,0x8010), two(0xffc0,0xe3f0), "T3&st8", m68030|m68851 }, 391348024e4aSbellard {"ptestw", 4, two(0xf000,0x8110), two(0xffc0,0xe310), "T3&st8A9", m68030|m68851 }, 391448024e4aSbellard {"ptestw", 4, two(0xf000,0x8008), two(0xffc0,0xe3f8), "D3&st8", m68030|m68851 }, 391548024e4aSbellard {"ptestw", 4, two(0xf000,0x8108), two(0xffc0,0xe318), "D3&st8A9", m68030|m68851 }, 391648024e4aSbellard {"ptestw", 4, two(0xf000,0x8000), two(0xffc0,0xe3fe), "f3&st8", m68030|m68851 }, 391748024e4aSbellard {"ptestw", 4, two(0xf000,0x8100), two(0xffc0,0xe31e), "f3&st8A9", m68030|m68851 }, 391848024e4aSbellard {"ptestw", 2, one(0xf548), one(0xfff8), "as", m68040 }, 391948024e4aSbellard 392048024e4aSbellard {"ptrapacw", 6, two(0xf07a, 0x0007), two(0xffff, 0xffff), "#w", m68851 }, 392148024e4aSbellard {"ptrapacl", 6, two(0xf07b, 0x0007), two(0xffff, 0xffff), "#l", m68851 }, 392248024e4aSbellard {"ptrapac", 4, two(0xf07c, 0x0007), two(0xffff, 0xffff), "", m68851 }, 392348024e4aSbellard 392448024e4aSbellard {"ptrapasw", 6, two(0xf07a, 0x0006), two(0xffff, 0xffff), "#w", m68851 }, 392548024e4aSbellard {"ptrapasl", 6, two(0xf07b, 0x0006), two(0xffff, 0xffff), "#l", m68851 }, 392648024e4aSbellard {"ptrapas", 4, two(0xf07c, 0x0006), two(0xffff, 0xffff), "", m68851 }, 392748024e4aSbellard 392848024e4aSbellard {"ptrapbcw", 6, two(0xf07a, 0x0001), two(0xffff, 0xffff), "#w", m68851 }, 392948024e4aSbellard {"ptrapbcl", 6, two(0xf07b, 0x0001), two(0xffff, 0xffff), "#l", m68851 }, 393048024e4aSbellard {"ptrapbc", 4, two(0xf07c, 0x0001), two(0xffff, 0xffff), "", m68851 }, 393148024e4aSbellard 393248024e4aSbellard {"ptrapbsw", 6, two(0xf07a, 0x0000), two(0xffff, 0xffff), "#w", m68851 }, 393348024e4aSbellard {"ptrapbsl", 6, two(0xf07b, 0x0000), two(0xffff, 0xffff), "#l", m68851 }, 393448024e4aSbellard {"ptrapbs", 4, two(0xf07c, 0x0000), two(0xffff, 0xffff), "", m68851 }, 393548024e4aSbellard 393648024e4aSbellard {"ptrapccw", 6, two(0xf07a, 0x000f), two(0xffff, 0xffff), "#w", m68851 }, 393748024e4aSbellard {"ptrapccl", 6, two(0xf07b, 0x000f), two(0xffff, 0xffff), "#l", m68851 }, 393848024e4aSbellard {"ptrapcc", 4, two(0xf07c, 0x000f), two(0xffff, 0xffff), "", m68851 }, 393948024e4aSbellard 394048024e4aSbellard {"ptrapcsw", 6, two(0xf07a, 0x000e), two(0xffff, 0xffff), "#w", m68851 }, 394148024e4aSbellard {"ptrapcsl", 6, two(0xf07b, 0x000e), two(0xffff, 0xffff), "#l", m68851 }, 394248024e4aSbellard {"ptrapcs", 4, two(0xf07c, 0x000e), two(0xffff, 0xffff), "", m68851 }, 394348024e4aSbellard 394448024e4aSbellard {"ptrapgcw", 6, two(0xf07a, 0x000d), two(0xffff, 0xffff), "#w", m68851 }, 394548024e4aSbellard {"ptrapgcl", 6, two(0xf07b, 0x000d), two(0xffff, 0xffff), "#l", m68851 }, 394648024e4aSbellard {"ptrapgc", 4, two(0xf07c, 0x000d), two(0xffff, 0xffff), "", m68851 }, 394748024e4aSbellard 394848024e4aSbellard {"ptrapgsw", 6, two(0xf07a, 0x000c), two(0xffff, 0xffff), "#w", m68851 }, 394948024e4aSbellard {"ptrapgsl", 6, two(0xf07b, 0x000c), two(0xffff, 0xffff), "#l", m68851 }, 395048024e4aSbellard {"ptrapgs", 4, two(0xf07c, 0x000c), two(0xffff, 0xffff), "", m68851 }, 395148024e4aSbellard 395248024e4aSbellard {"ptrapicw", 6, two(0xf07a, 0x000b), two(0xffff, 0xffff), "#w", m68851 }, 395348024e4aSbellard {"ptrapicl", 6, two(0xf07b, 0x000b), two(0xffff, 0xffff), "#l", m68851 }, 395448024e4aSbellard {"ptrapic", 4, two(0xf07c, 0x000b), two(0xffff, 0xffff), "", m68851 }, 395548024e4aSbellard 395648024e4aSbellard {"ptrapisw", 6, two(0xf07a, 0x000a), two(0xffff, 0xffff), "#w", m68851 }, 395748024e4aSbellard {"ptrapisl", 6, two(0xf07b, 0x000a), two(0xffff, 0xffff), "#l", m68851 }, 395848024e4aSbellard {"ptrapis", 4, two(0xf07c, 0x000a), two(0xffff, 0xffff), "", m68851 }, 395948024e4aSbellard 396048024e4aSbellard {"ptraplcw", 6, two(0xf07a, 0x0003), two(0xffff, 0xffff), "#w", m68851 }, 396148024e4aSbellard {"ptraplcl", 6, two(0xf07b, 0x0003), two(0xffff, 0xffff), "#l", m68851 }, 396248024e4aSbellard {"ptraplc", 4, two(0xf07c, 0x0003), two(0xffff, 0xffff), "", m68851 }, 396348024e4aSbellard 396448024e4aSbellard {"ptraplsw", 6, two(0xf07a, 0x0002), two(0xffff, 0xffff), "#w", m68851 }, 396548024e4aSbellard {"ptraplsl", 6, two(0xf07b, 0x0002), two(0xffff, 0xffff), "#l", m68851 }, 396648024e4aSbellard {"ptrapls", 4, two(0xf07c, 0x0002), two(0xffff, 0xffff), "", m68851 }, 396748024e4aSbellard 396848024e4aSbellard {"ptrapscw", 6, two(0xf07a, 0x0005), two(0xffff, 0xffff), "#w", m68851 }, 396948024e4aSbellard {"ptrapscl", 6, two(0xf07b, 0x0005), two(0xffff, 0xffff), "#l", m68851 }, 397048024e4aSbellard {"ptrapsc", 4, two(0xf07c, 0x0005), two(0xffff, 0xffff), "", m68851 }, 397148024e4aSbellard 397248024e4aSbellard {"ptrapssw", 6, two(0xf07a, 0x0004), two(0xffff, 0xffff), "#w", m68851 }, 397348024e4aSbellard {"ptrapssl", 6, two(0xf07b, 0x0004), two(0xffff, 0xffff), "#l", m68851 }, 397448024e4aSbellard {"ptrapss", 4, two(0xf07c, 0x0004), two(0xffff, 0xffff), "", m68851 }, 397548024e4aSbellard 397648024e4aSbellard {"ptrapwcw", 6, two(0xf07a, 0x0009), two(0xffff, 0xffff), "#w", m68851 }, 397748024e4aSbellard {"ptrapwcl", 6, two(0xf07b, 0x0009), two(0xffff, 0xffff), "#l", m68851 }, 397848024e4aSbellard {"ptrapwc", 4, two(0xf07c, 0x0009), two(0xffff, 0xffff), "", m68851 }, 397948024e4aSbellard 398048024e4aSbellard {"ptrapwsw", 6, two(0xf07a, 0x0008), two(0xffff, 0xffff), "#w", m68851 }, 398148024e4aSbellard {"ptrapwsl", 6, two(0xf07b, 0x0008), two(0xffff, 0xffff), "#l", m68851 }, 398248024e4aSbellard {"ptrapws", 4, two(0xf07c, 0x0008), two(0xffff, 0xffff), "", m68851 }, 398348024e4aSbellard 398448024e4aSbellard {"pulse", 2, one(0045314), one(0177777), "", m68060 | mcfisa_a }, 398548024e4aSbellard 398648024e4aSbellard {"pvalid", 4, two(0xf000, 0x2800), two(0xffc0, 0xffff), "Vs&s", m68851 }, 398748024e4aSbellard {"pvalid", 4, two(0xf000, 0x2c00), two(0xffc0, 0xfff8), "A3&s", m68851 }, 398848024e4aSbellard 398948024e4aSbellard /* FIXME: don't allow Dw==Dx. */ 399048024e4aSbellard {"remsl", 4, two(0x4c40, 0x0800), two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv }, 399148024e4aSbellard {"remul", 4, two(0x4c40, 0x0000), two(0xffc0, 0x8ff8), "qsD3D1", mcfhwdiv }, 399248024e4aSbellard 399348024e4aSbellard {"reset", 2, one(0047160), one(0177777), "", m68000up }, 399448024e4aSbellard 399548024e4aSbellard {"rolb", 2, one(0160430), one(0170770), "QdDs", m68000up }, 399648024e4aSbellard {"rolb", 2, one(0160470), one(0170770), "DdDs", m68000up }, 399748024e4aSbellard {"rolw", 2, one(0160530), one(0170770), "QdDs", m68000up }, 399848024e4aSbellard {"rolw", 2, one(0160570), one(0170770), "DdDs", m68000up }, 399948024e4aSbellard {"rolw", 2, one(0163700), one(0177700), "~s", m68000up }, 400048024e4aSbellard {"roll", 2, one(0160630), one(0170770), "QdDs", m68000up }, 400148024e4aSbellard {"roll", 2, one(0160670), one(0170770), "DdDs", m68000up }, 400248024e4aSbellard 400348024e4aSbellard {"rorb", 2, one(0160030), one(0170770), "QdDs", m68000up }, 400448024e4aSbellard {"rorb", 2, one(0160070), one(0170770), "DdDs", m68000up }, 400548024e4aSbellard {"rorw", 2, one(0160130), one(0170770), "QdDs", m68000up }, 400648024e4aSbellard {"rorw", 2, one(0160170), one(0170770), "DdDs", m68000up }, 400748024e4aSbellard {"rorw", 2, one(0163300), one(0177700), "~s", m68000up }, 400848024e4aSbellard {"rorl", 2, one(0160230), one(0170770), "QdDs", m68000up }, 400948024e4aSbellard {"rorl", 2, one(0160270), one(0170770), "DdDs", m68000up }, 401048024e4aSbellard 401148024e4aSbellard {"roxlb", 2, one(0160420), one(0170770), "QdDs", m68000up }, 401248024e4aSbellard {"roxlb", 2, one(0160460), one(0170770), "DdDs", m68000up }, 401348024e4aSbellard {"roxlw", 2, one(0160520), one(0170770), "QdDs", m68000up }, 401448024e4aSbellard {"roxlw", 2, one(0160560), one(0170770), "DdDs", m68000up }, 401548024e4aSbellard {"roxlw", 2, one(0162700), one(0177700), "~s", m68000up }, 401648024e4aSbellard {"roxll", 2, one(0160620), one(0170770), "QdDs", m68000up }, 401748024e4aSbellard {"roxll", 2, one(0160660), one(0170770), "DdDs", m68000up }, 401848024e4aSbellard 401948024e4aSbellard {"roxrb", 2, one(0160020), one(0170770), "QdDs", m68000up }, 402048024e4aSbellard {"roxrb", 2, one(0160060), one(0170770), "DdDs", m68000up }, 402148024e4aSbellard {"roxrw", 2, one(0160120), one(0170770), "QdDs", m68000up }, 402248024e4aSbellard {"roxrw", 2, one(0160160), one(0170770), "DdDs", m68000up }, 402348024e4aSbellard {"roxrw", 2, one(0162300), one(0177700), "~s", m68000up }, 402448024e4aSbellard {"roxrl", 2, one(0160220), one(0170770), "QdDs", m68000up }, 402548024e4aSbellard {"roxrl", 2, one(0160260), one(0170770), "DdDs", m68000up }, 402648024e4aSbellard 402748024e4aSbellard {"rtd", 4, one(0047164), one(0177777), "#w", m68010up }, 402848024e4aSbellard 402948024e4aSbellard {"rte", 2, one(0047163), one(0177777), "", m68000up | mcfisa_a }, 403048024e4aSbellard 403148024e4aSbellard {"rtm", 2, one(0003300), one(0177760), "Rs", m68020 }, 403248024e4aSbellard 403348024e4aSbellard {"rtr", 2, one(0047167), one(0177777), "", m68000up }, 403448024e4aSbellard 403548024e4aSbellard {"rts", 2, one(0047165), one(0177777), "", m68000up | mcfisa_a }, 403648024e4aSbellard 403748024e4aSbellard {"satsl", 2, one(0046200), one(0177770), "Ds", mcfisa_b }, 403848024e4aSbellard 403948024e4aSbellard {"sbcd", 2, one(0100400), one(0170770), "DsDd", m68000up }, 404048024e4aSbellard {"sbcd", 2, one(0100410), one(0170770), "-s-d", m68000up }, 404148024e4aSbellard 404248024e4aSbellard {"scc", 2, one(0052300), one(0177700), "$s", m68000up }, 404348024e4aSbellard {"scc", 2, one(0052300), one(0177700), "Ds", mcfisa_a }, 404448024e4aSbellard {"scs", 2, one(0052700), one(0177700), "$s", m68000up }, 404548024e4aSbellard {"scs", 2, one(0052700), one(0177700), "Ds", mcfisa_a }, 404648024e4aSbellard {"seq", 2, one(0053700), one(0177700), "$s", m68000up }, 404748024e4aSbellard {"seq", 2, one(0053700), one(0177700), "Ds", mcfisa_a }, 404848024e4aSbellard {"sf", 2, one(0050700), one(0177700), "$s", m68000up }, 404948024e4aSbellard {"sf", 2, one(0050700), one(0177700), "Ds", mcfisa_a }, 405048024e4aSbellard {"sge", 2, one(0056300), one(0177700), "$s", m68000up }, 405148024e4aSbellard {"sge", 2, one(0056300), one(0177700), "Ds", mcfisa_a }, 405248024e4aSbellard {"sgt", 2, one(0057300), one(0177700), "$s", m68000up }, 405348024e4aSbellard {"sgt", 2, one(0057300), one(0177700), "Ds", mcfisa_a }, 405448024e4aSbellard {"shi", 2, one(0051300), one(0177700), "$s", m68000up }, 405548024e4aSbellard {"shi", 2, one(0051300), one(0177700), "Ds", mcfisa_a }, 405648024e4aSbellard {"sle", 2, one(0057700), one(0177700), "$s", m68000up }, 405748024e4aSbellard {"sle", 2, one(0057700), one(0177700), "Ds", mcfisa_a }, 405848024e4aSbellard {"sls", 2, one(0051700), one(0177700), "$s", m68000up }, 405948024e4aSbellard {"sls", 2, one(0051700), one(0177700), "Ds", mcfisa_a }, 406048024e4aSbellard {"slt", 2, one(0056700), one(0177700), "$s", m68000up }, 406148024e4aSbellard {"slt", 2, one(0056700), one(0177700), "Ds", mcfisa_a }, 406248024e4aSbellard {"smi", 2, one(0055700), one(0177700), "$s", m68000up }, 406348024e4aSbellard {"smi", 2, one(0055700), one(0177700), "Ds", mcfisa_a }, 406448024e4aSbellard {"sne", 2, one(0053300), one(0177700), "$s", m68000up }, 406548024e4aSbellard {"sne", 2, one(0053300), one(0177700), "Ds", mcfisa_a }, 406648024e4aSbellard {"spl", 2, one(0055300), one(0177700), "$s", m68000up }, 406748024e4aSbellard {"spl", 2, one(0055300), one(0177700), "Ds", mcfisa_a }, 406848024e4aSbellard {"st", 2, one(0050300), one(0177700), "$s", m68000up }, 406948024e4aSbellard {"st", 2, one(0050300), one(0177700), "Ds", mcfisa_a }, 407048024e4aSbellard {"svc", 2, one(0054300), one(0177700), "$s", m68000up }, 407148024e4aSbellard {"svc", 2, one(0054300), one(0177700), "Ds", mcfisa_a }, 407248024e4aSbellard {"svs", 2, one(0054700), one(0177700), "$s", m68000up }, 407348024e4aSbellard {"svs", 2, one(0054700), one(0177700), "Ds", mcfisa_a }, 407448024e4aSbellard 407548024e4aSbellard {"stop", 4, one(0047162), one(0177777), "#w", m68000up | mcfisa_a }, 407648024e4aSbellard 407748024e4aSbellard {"strldsr", 4, two(0040347,0043374), two(0177777,0177777), "#w", mcfisa_aa}, 407848024e4aSbellard 407948024e4aSbellard {"subal", 2, one(0110700), one(0170700), "*lAd", m68000up | mcfisa_a }, 408048024e4aSbellard {"subaw", 2, one(0110300), one(0170700), "*wAd", m68000up }, 408148024e4aSbellard 408248024e4aSbellard {"subib", 4, one(0002000), one(0177700), "#b$s", m68000up }, 408348024e4aSbellard {"subiw", 4, one(0002100), one(0177700), "#w$s", m68000up }, 408448024e4aSbellard {"subil", 6, one(0002200), one(0177700), "#l$s", m68000up }, 408548024e4aSbellard {"subil", 6, one(0002200), one(0177700), "#lDs", mcfisa_a }, 408648024e4aSbellard 408748024e4aSbellard {"subqb", 2, one(0050400), one(0170700), "Qd%s", m68000up }, 408848024e4aSbellard {"subqw", 2, one(0050500), one(0170700), "Qd%s", m68000up }, 408948024e4aSbellard {"subql", 2, one(0050600), one(0170700), "Qd%s", m68000up | mcfisa_a }, 409048024e4aSbellard 409148024e4aSbellard /* The sub opcode can generate the suba, subi, and subq instructions. */ 409248024e4aSbellard {"subb", 2, one(0050400), one(0170700), "Qd%s", m68000up }, 409348024e4aSbellard {"subb", 4, one(0002000), one(0177700), "#b$s", m68000up }, 409448024e4aSbellard {"subb", 2, one(0110000), one(0170700), ";bDd", m68000up }, 409548024e4aSbellard {"subb", 2, one(0110400), one(0170700), "Dd~s", m68000up }, 409648024e4aSbellard {"subw", 2, one(0050500), one(0170700), "Qd%s", m68000up }, 409748024e4aSbellard {"subw", 4, one(0002100), one(0177700), "#w$s", m68000up }, 409848024e4aSbellard {"subw", 2, one(0110300), one(0170700), "*wAd", m68000up }, 409948024e4aSbellard {"subw", 2, one(0110100), one(0170700), "*wDd", m68000up }, 410048024e4aSbellard {"subw", 2, one(0110500), one(0170700), "Dd~s", m68000up }, 410148024e4aSbellard {"subl", 2, one(0050600), one(0170700), "Qd%s", m68000up | mcfisa_a }, 410248024e4aSbellard {"subl", 6, one(0002200), one(0177700), "#l$s", m68000up }, 410348024e4aSbellard {"subl", 6, one(0002200), one(0177700), "#lDs", mcfisa_a }, 410448024e4aSbellard {"subl", 2, one(0110700), one(0170700), "*lAd", m68000up | mcfisa_a }, 410548024e4aSbellard {"subl", 2, one(0110200), one(0170700), "*lDd", m68000up | mcfisa_a }, 410648024e4aSbellard {"subl", 2, one(0110600), one(0170700), "Dd~s", m68000up | mcfisa_a }, 410748024e4aSbellard 410848024e4aSbellard {"subxb", 2, one(0110400), one(0170770), "DsDd", m68000up }, 410948024e4aSbellard {"subxb", 2, one(0110410), one(0170770), "-s-d", m68000up }, 411048024e4aSbellard {"subxw", 2, one(0110500), one(0170770), "DsDd", m68000up }, 411148024e4aSbellard {"subxw", 2, one(0110510), one(0170770), "-s-d", m68000up }, 411248024e4aSbellard {"subxl", 2, one(0110600), one(0170770), "DsDd", m68000up | mcfisa_a }, 411348024e4aSbellard {"subxl", 2, one(0110610), one(0170770), "-s-d", m68000up }, 411448024e4aSbellard 411548024e4aSbellard {"swap", 2, one(0044100), one(0177770), "Ds", m68000up | mcfisa_a }, 411648024e4aSbellard 411748024e4aSbellard /* swbeg and swbegl are magic constants used on sysV68. The compiler 411848024e4aSbellard generates them before a switch table. They tell the debugger and 411948024e4aSbellard disassembler that a switch table follows. The parameter is the 412048024e4aSbellard number of elements in the table. swbeg means that the entries in 412148024e4aSbellard the table are word (2 byte) sized, and swbegl means that the 412248024e4aSbellard entries in the table are longword (4 byte) sized. */ 412348024e4aSbellard {"swbeg", 4, one(0045374), one(0177777), "#w", m68000up | mcfisa_a }, 412448024e4aSbellard {"swbegl", 6, one(0045375), one(0177777), "#l", m68000up | mcfisa_a }, 412548024e4aSbellard 412648024e4aSbellard {"tas", 2, one(0045300), one(0177700), "$s", m68000up | mcfisa_b}, 412748024e4aSbellard 412848024e4aSbellard #define TBL1(name,insn_size,signed,round,size) \ 412948024e4aSbellard {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)|0000400), \ 413048024e4aSbellard two(0177700,0107777), "!sD1", cpu32 }, \ 413148024e4aSbellard {name, insn_size, two(0174000, (signed<<11)|(!round<<10)|(size<<6)), \ 413248024e4aSbellard two(0177770,0107770), "DsD3D1", cpu32 } 413348024e4aSbellard #define TBL(name1, name2, name3, s, r) \ 413448024e4aSbellard TBL1(name1, 4, s, r, 0), TBL1(name2, 4, s, r, 1), TBL1(name3, 4, s, r, 2) 413548024e4aSbellard TBL("tblsb", "tblsw", "tblsl", 2, 1), 413648024e4aSbellard TBL("tblsnb", "tblsnw", "tblsnl", 2, 0), 413748024e4aSbellard TBL("tblub", "tbluw", "tblul", 0, 1), 413848024e4aSbellard TBL("tblunb", "tblunw", "tblunl", 0, 0), 413948024e4aSbellard 414048024e4aSbellard {"trap", 2, one(0047100), one(0177760), "Ts", m68000up | mcfisa_a }, 414148024e4aSbellard 414248024e4aSbellard {"trapcc", 2, one(0052374), one(0177777), "", m68020up | cpu32 }, 414348024e4aSbellard {"trapcs", 2, one(0052774), one(0177777), "", m68020up | cpu32 }, 414448024e4aSbellard {"trapeq", 2, one(0053774), one(0177777), "", m68020up | cpu32 }, 414548024e4aSbellard {"trapf", 2, one(0050774), one(0177777), "", m68020up | cpu32 | mcfisa_a }, 414648024e4aSbellard {"trapge", 2, one(0056374), one(0177777), "", m68020up | cpu32 }, 414748024e4aSbellard {"trapgt", 2, one(0057374), one(0177777), "", m68020up | cpu32 }, 414848024e4aSbellard {"traphi", 2, one(0051374), one(0177777), "", m68020up | cpu32 }, 414948024e4aSbellard {"traple", 2, one(0057774), one(0177777), "", m68020up | cpu32 }, 415048024e4aSbellard {"trapls", 2, one(0051774), one(0177777), "", m68020up | cpu32 }, 415148024e4aSbellard {"traplt", 2, one(0056774), one(0177777), "", m68020up | cpu32 }, 415248024e4aSbellard {"trapmi", 2, one(0055774), one(0177777), "", m68020up | cpu32 }, 415348024e4aSbellard {"trapne", 2, one(0053374), one(0177777), "", m68020up | cpu32 }, 415448024e4aSbellard {"trappl", 2, one(0055374), one(0177777), "", m68020up | cpu32 }, 415548024e4aSbellard {"trapt", 2, one(0050374), one(0177777), "", m68020up | cpu32 }, 415648024e4aSbellard {"trapvc", 2, one(0054374), one(0177777), "", m68020up | cpu32 }, 415748024e4aSbellard {"trapvs", 2, one(0054774), one(0177777), "", m68020up | cpu32 }, 415848024e4aSbellard 415948024e4aSbellard {"trapccw", 4, one(0052372), one(0177777), "#w", m68020up|cpu32 }, 416048024e4aSbellard {"trapcsw", 4, one(0052772), one(0177777), "#w", m68020up|cpu32 }, 416148024e4aSbellard {"trapeqw", 4, one(0053772), one(0177777), "#w", m68020up|cpu32 }, 416248024e4aSbellard {"trapfw", 4, one(0050772), one(0177777), "#w", m68020up|cpu32|mcfisa_a}, 416348024e4aSbellard {"trapgew", 4, one(0056372), one(0177777), "#w", m68020up|cpu32 }, 416448024e4aSbellard {"trapgtw", 4, one(0057372), one(0177777), "#w", m68020up|cpu32 }, 416548024e4aSbellard {"traphiw", 4, one(0051372), one(0177777), "#w", m68020up|cpu32 }, 416648024e4aSbellard {"traplew", 4, one(0057772), one(0177777), "#w", m68020up|cpu32 }, 416748024e4aSbellard {"traplsw", 4, one(0051772), one(0177777), "#w", m68020up|cpu32 }, 416848024e4aSbellard {"trapltw", 4, one(0056772), one(0177777), "#w", m68020up|cpu32 }, 416948024e4aSbellard {"trapmiw", 4, one(0055772), one(0177777), "#w", m68020up|cpu32 }, 417048024e4aSbellard {"trapnew", 4, one(0053372), one(0177777), "#w", m68020up|cpu32 }, 417148024e4aSbellard {"trapplw", 4, one(0055372), one(0177777), "#w", m68020up|cpu32 }, 417248024e4aSbellard {"traptw", 4, one(0050372), one(0177777), "#w", m68020up|cpu32 }, 417348024e4aSbellard {"trapvcw", 4, one(0054372), one(0177777), "#w", m68020up|cpu32 }, 417448024e4aSbellard {"trapvsw", 4, one(0054772), one(0177777), "#w", m68020up|cpu32 }, 417548024e4aSbellard 417648024e4aSbellard {"trapccl", 6, one(0052373), one(0177777), "#l", m68020up|cpu32 }, 417748024e4aSbellard {"trapcsl", 6, one(0052773), one(0177777), "#l", m68020up|cpu32 }, 417848024e4aSbellard {"trapeql", 6, one(0053773), one(0177777), "#l", m68020up|cpu32 }, 417948024e4aSbellard {"trapfl", 6, one(0050773), one(0177777), "#l", m68020up|cpu32|mcfisa_a}, 418048024e4aSbellard {"trapgel", 6, one(0056373), one(0177777), "#l", m68020up|cpu32 }, 418148024e4aSbellard {"trapgtl", 6, one(0057373), one(0177777), "#l", m68020up|cpu32 }, 418248024e4aSbellard {"traphil", 6, one(0051373), one(0177777), "#l", m68020up|cpu32 }, 418348024e4aSbellard {"traplel", 6, one(0057773), one(0177777), "#l", m68020up|cpu32 }, 418448024e4aSbellard {"traplsl", 6, one(0051773), one(0177777), "#l", m68020up|cpu32 }, 418548024e4aSbellard {"trapltl", 6, one(0056773), one(0177777), "#l", m68020up|cpu32 }, 418648024e4aSbellard {"trapmil", 6, one(0055773), one(0177777), "#l", m68020up|cpu32 }, 418748024e4aSbellard {"trapnel", 6, one(0053373), one(0177777), "#l", m68020up|cpu32 }, 418848024e4aSbellard {"trappll", 6, one(0055373), one(0177777), "#l", m68020up|cpu32 }, 418948024e4aSbellard {"traptl", 6, one(0050373), one(0177777), "#l", m68020up|cpu32 }, 419048024e4aSbellard {"trapvcl", 6, one(0054373), one(0177777), "#l", m68020up|cpu32 }, 419148024e4aSbellard {"trapvsl", 6, one(0054773), one(0177777), "#l", m68020up|cpu32 }, 419248024e4aSbellard 419348024e4aSbellard {"trapv", 2, one(0047166), one(0177777), "", m68000up }, 419448024e4aSbellard 419548024e4aSbellard {"tstb", 2, one(0045000), one(0177700), ";b", m68020up|cpu32|mcfisa_a }, 419648024e4aSbellard {"tstb", 2, one(0045000), one(0177700), "$b", m68000up }, 419748024e4aSbellard {"tstw", 2, one(0045100), one(0177700), "*w", m68020up|cpu32|mcfisa_a }, 419848024e4aSbellard {"tstw", 2, one(0045100), one(0177700), "$w", m68000up }, 419948024e4aSbellard {"tstl", 2, one(0045200), one(0177700), "*l", m68020up|cpu32|mcfisa_a }, 420048024e4aSbellard {"tstl", 2, one(0045200), one(0177700), "$l", m68000up }, 420148024e4aSbellard 420248024e4aSbellard {"unlk", 2, one(0047130), one(0177770), "As", m68000up | mcfisa_a }, 420348024e4aSbellard 420448024e4aSbellard {"unpk", 4, one(0100600), one(0170770), "DsDd#w", m68020up }, 420548024e4aSbellard {"unpk", 4, one(0100610), one(0170770), "-s-d#w", m68020up }, 420648024e4aSbellard 420748024e4aSbellard {"wddatab", 2, one(0175400), one(0177700), "~s", mcfisa_a }, 420848024e4aSbellard {"wddataw", 2, one(0175500), one(0177700), "~s", mcfisa_a }, 420948024e4aSbellard {"wddatal", 2, one(0175600), one(0177700), "~s", mcfisa_a }, 421048024e4aSbellard 421148024e4aSbellard {"wdebug", 4, two(0175720, 03), two(0177770, 0xffff), "as", mcfisa_a }, 421248024e4aSbellard {"wdebug", 4, two(0175750, 03), two(0177770, 0xffff), "ds", mcfisa_a }, 421348024e4aSbellard }; 421448024e4aSbellard 421548024e4aSbellard const int m68k_numopcodes = sizeof m68k_opcodes / sizeof m68k_opcodes[0]; 421648024e4aSbellard 421748024e4aSbellard /* These aliases used to be in the above table, each one duplicating 421848024e4aSbellard all of the entries for its primary exactly. This table was 421948024e4aSbellard constructed by mechanical processing of the opcode table, with a 422048024e4aSbellard small number of tweaks done by hand. There are probably a lot more 422148024e4aSbellard aliases above that could be moved down here, except for very minor 422248024e4aSbellard differences. */ 422348024e4aSbellard 422448024e4aSbellard const struct m68k_opcode_alias m68k_opcode_aliases[] = 422548024e4aSbellard { 422648024e4aSbellard { "add", "addw", }, 422748024e4aSbellard { "adda", "addaw", }, 422848024e4aSbellard { "addi", "addiw", }, 422948024e4aSbellard { "addq", "addqw", }, 423048024e4aSbellard { "addx", "addxw", }, 423148024e4aSbellard { "asl", "aslw", }, 423248024e4aSbellard { "asr", "asrw", }, 423348024e4aSbellard { "bhi", "bhiw", }, 423448024e4aSbellard { "bls", "blsw", }, 423548024e4aSbellard { "bcc", "bccw", }, 423648024e4aSbellard { "bcs", "bcsw", }, 423748024e4aSbellard { "bne", "bnew", }, 423848024e4aSbellard { "beq", "beqw", }, 423948024e4aSbellard { "bvc", "bvcw", }, 424048024e4aSbellard { "bvs", "bvsw", }, 424148024e4aSbellard { "bpl", "bplw", }, 424248024e4aSbellard { "bmi", "bmiw", }, 424348024e4aSbellard { "bge", "bgew", }, 424448024e4aSbellard { "blt", "bltw", }, 424548024e4aSbellard { "bgt", "bgtw", }, 424648024e4aSbellard { "ble", "blew", }, 424748024e4aSbellard { "bra", "braw", }, 424848024e4aSbellard { "bsr", "bsrw", }, 424948024e4aSbellard { "bhib", "bhis", }, 425048024e4aSbellard { "blsb", "blss", }, 425148024e4aSbellard { "bccb", "bccs", }, 425248024e4aSbellard { "bcsb", "bcss", }, 425348024e4aSbellard { "bneb", "bnes", }, 425448024e4aSbellard { "beqb", "beqs", }, 425548024e4aSbellard { "bvcb", "bvcs", }, 425648024e4aSbellard { "bvsb", "bvss", }, 425748024e4aSbellard { "bplb", "bpls", }, 425848024e4aSbellard { "bmib", "bmis", }, 425948024e4aSbellard { "bgeb", "bges", }, 426048024e4aSbellard { "bltb", "blts", }, 426148024e4aSbellard { "bgtb", "bgts", }, 426248024e4aSbellard { "bleb", "bles", }, 426348024e4aSbellard { "brab", "bras", }, 426448024e4aSbellard { "bsrb", "bsrs", }, 426548024e4aSbellard { "bhs", "bccw" }, 426648024e4aSbellard { "bhss", "bccs" }, 426748024e4aSbellard { "bhsb", "bccs" }, 426848024e4aSbellard { "bhsw", "bccw" }, 426948024e4aSbellard { "bhsl", "bccl" }, 427048024e4aSbellard { "blo", "bcsw" }, 427148024e4aSbellard { "blos", "bcss" }, 427248024e4aSbellard { "blob", "bcss" }, 427348024e4aSbellard { "blow", "bcsw" }, 427448024e4aSbellard { "blol", "bcsl" }, 427548024e4aSbellard { "br", "braw", }, 427648024e4aSbellard { "brs", "bras", }, 427748024e4aSbellard { "brb", "bras", }, 427848024e4aSbellard { "brw", "braw", }, 427948024e4aSbellard { "brl", "bral", }, 428048024e4aSbellard { "jfnlt", "bcc", }, /* Apparently a sun alias. */ 428148024e4aSbellard { "jfngt", "ble", }, /* Apparently a sun alias. */ 428248024e4aSbellard { "jfeq", "beqs", }, /* Apparently a sun alias. */ 428348024e4aSbellard { "bchgb", "bchg", }, 428448024e4aSbellard { "bchgl", "bchg", }, 428548024e4aSbellard { "bclrb", "bclr", }, 428648024e4aSbellard { "bclrl", "bclr", }, 428748024e4aSbellard { "bsetb", "bset", }, 428848024e4aSbellard { "bsetl", "bset", }, 428948024e4aSbellard { "btstb", "btst", }, 429048024e4aSbellard { "btstl", "btst", }, 429148024e4aSbellard { "cas2", "cas2w", }, 429248024e4aSbellard { "cas", "casw", }, 429348024e4aSbellard { "chk2", "chk2w", }, 429448024e4aSbellard { "chk", "chkw", }, 429548024e4aSbellard { "clr", "clrw", }, 429648024e4aSbellard { "cmp2", "cmp2w", }, 429748024e4aSbellard { "cmpa", "cmpaw", }, 429848024e4aSbellard { "cmpi", "cmpiw", }, 429948024e4aSbellard { "cmpm", "cmpmw", }, 430048024e4aSbellard { "cmp", "cmpw", }, 430148024e4aSbellard { "dbccw", "dbcc", }, 430248024e4aSbellard { "dbcsw", "dbcs", }, 430348024e4aSbellard { "dbeqw", "dbeq", }, 430448024e4aSbellard { "dbfw", "dbf", }, 430548024e4aSbellard { "dbgew", "dbge", }, 430648024e4aSbellard { "dbgtw", "dbgt", }, 430748024e4aSbellard { "dbhiw", "dbhi", }, 430848024e4aSbellard { "dblew", "dble", }, 430948024e4aSbellard { "dblsw", "dbls", }, 431048024e4aSbellard { "dbltw", "dblt", }, 431148024e4aSbellard { "dbmiw", "dbmi", }, 431248024e4aSbellard { "dbnew", "dbne", }, 431348024e4aSbellard { "dbplw", "dbpl", }, 431448024e4aSbellard { "dbtw", "dbt", }, 431548024e4aSbellard { "dbvcw", "dbvc", }, 431648024e4aSbellard { "dbvsw", "dbvs", }, 431748024e4aSbellard { "dbhs", "dbcc", }, 431848024e4aSbellard { "dbhsw", "dbcc", }, 431948024e4aSbellard { "dbra", "dbf", }, 432048024e4aSbellard { "dbraw", "dbf", }, 432148024e4aSbellard { "tdivsl", "divsl", }, 432248024e4aSbellard { "divs", "divsw", }, 432348024e4aSbellard { "divu", "divuw", }, 432448024e4aSbellard { "ext", "extw", }, 432548024e4aSbellard { "extbw", "extw", }, 432648024e4aSbellard { "extwl", "extl", }, 432748024e4aSbellard { "fbneq", "fbne", }, 432848024e4aSbellard { "fbsneq", "fbsne", }, 432948024e4aSbellard { "fdbneq", "fdbne", }, 433048024e4aSbellard { "fdbsneq", "fdbsne", }, 433148024e4aSbellard { "fmovecr", "fmovecrx", }, 433248024e4aSbellard { "fmovm", "fmovem", }, 433348024e4aSbellard { "fsneq", "fsne", }, 433448024e4aSbellard { "fssneq", "fssne", }, 433548024e4aSbellard { "ftrapneq", "ftrapne", }, 433648024e4aSbellard { "ftrapsneq", "ftrapsne", }, 433748024e4aSbellard { "fjneq", "fjne", }, 433848024e4aSbellard { "fjsneq", "fjsne", }, 433948024e4aSbellard { "jmpl", "jmp", }, 434048024e4aSbellard { "jmps", "jmp", }, 434148024e4aSbellard { "jsrl", "jsr", }, 434248024e4aSbellard { "jsrs", "jsr", }, 434348024e4aSbellard { "leal", "lea", }, 434448024e4aSbellard { "lsl", "lslw", }, 434548024e4aSbellard { "lsr", "lsrw", }, 434648024e4aSbellard { "mac", "macw" }, 434748024e4aSbellard { "movea", "moveaw", }, 434848024e4aSbellard { "movem", "movemw", }, 434948024e4aSbellard { "movml", "moveml", }, 435048024e4aSbellard { "movmw", "movemw", }, 435148024e4aSbellard { "movm", "movemw", }, 435248024e4aSbellard { "movep", "movepw", }, 435348024e4aSbellard { "movpw", "movepw", }, 435448024e4aSbellard { "moves", "movesw" }, 435548024e4aSbellard { "muls", "mulsw", }, 435648024e4aSbellard { "mulu", "muluw", }, 435748024e4aSbellard { "msac", "msacw" }, 435848024e4aSbellard { "nbcdb", "nbcd" }, 435948024e4aSbellard { "neg", "negw", }, 436048024e4aSbellard { "negx", "negxw", }, 436148024e4aSbellard { "not", "notw", }, 436248024e4aSbellard { "peal", "pea", }, 436348024e4aSbellard { "rol", "rolw", }, 436448024e4aSbellard { "ror", "rorw", }, 436548024e4aSbellard { "roxl", "roxlw", }, 436648024e4aSbellard { "roxr", "roxrw", }, 436748024e4aSbellard { "sats", "satsl", }, 436848024e4aSbellard { "sbcdb", "sbcd", }, 436948024e4aSbellard { "sccb", "scc", }, 437048024e4aSbellard { "scsb", "scs", }, 437148024e4aSbellard { "seqb", "seq", }, 437248024e4aSbellard { "sfb", "sf", }, 437348024e4aSbellard { "sgeb", "sge", }, 437448024e4aSbellard { "sgtb", "sgt", }, 437548024e4aSbellard { "shib", "shi", }, 437648024e4aSbellard { "sleb", "sle", }, 437748024e4aSbellard { "slsb", "sls", }, 437848024e4aSbellard { "sltb", "slt", }, 437948024e4aSbellard { "smib", "smi", }, 438048024e4aSbellard { "sneb", "sne", }, 438148024e4aSbellard { "splb", "spl", }, 438248024e4aSbellard { "stb", "st", }, 438348024e4aSbellard { "svcb", "svc", }, 438448024e4aSbellard { "svsb", "svs", }, 438548024e4aSbellard { "sfge", "sge", }, 438648024e4aSbellard { "sfgt", "sgt", }, 438748024e4aSbellard { "sfle", "sle", }, 438848024e4aSbellard { "sflt", "slt", }, 438948024e4aSbellard { "sfneq", "sne", }, 439048024e4aSbellard { "suba", "subaw", }, 439148024e4aSbellard { "subi", "subiw", }, 439248024e4aSbellard { "subq", "subqw", }, 439348024e4aSbellard { "sub", "subw", }, 439448024e4aSbellard { "subx", "subxw", }, 439548024e4aSbellard { "swapw", "swap", }, 439648024e4aSbellard { "tasb", "tas", }, 439748024e4aSbellard { "tpcc", "trapcc", }, 439848024e4aSbellard { "tcc", "trapcc", }, 439948024e4aSbellard { "tst", "tstw", }, 440048024e4aSbellard { "jbra", "jra", }, 440148024e4aSbellard { "jbhi", "jhi", }, 440248024e4aSbellard { "jbls", "jls", }, 440348024e4aSbellard { "jbcc", "jcc", }, 440448024e4aSbellard { "jbcs", "jcs", }, 440548024e4aSbellard { "jbne", "jne", }, 440648024e4aSbellard { "jbeq", "jeq", }, 440748024e4aSbellard { "jbvc", "jvc", }, 440848024e4aSbellard { "jbvs", "jvs", }, 440948024e4aSbellard { "jbpl", "jpl", }, 441048024e4aSbellard { "jbmi", "jmi", }, 441148024e4aSbellard { "jbge", "jge", }, 441248024e4aSbellard { "jblt", "jlt", }, 441348024e4aSbellard { "jbgt", "jgt", }, 441448024e4aSbellard { "jble", "jle", }, 441548024e4aSbellard { "movql", "moveq", }, 441648024e4aSbellard { "moveql", "moveq", }, 441748024e4aSbellard { "movl", "movel", }, 441848024e4aSbellard { "movq", "moveq", }, 441948024e4aSbellard { "moval", "moveal", }, 442048024e4aSbellard { "movaw", "moveaw", }, 442148024e4aSbellard { "movb", "moveb", }, 442248024e4aSbellard { "movc", "movec", }, 442348024e4aSbellard { "movecl", "movec", }, 442448024e4aSbellard { "movpl", "movepl", }, 442548024e4aSbellard { "movw", "movew", }, 442648024e4aSbellard { "movsb", "movesb", }, 442748024e4aSbellard { "movsl", "movesl", }, 442848024e4aSbellard { "movsw", "movesw", }, 442948024e4aSbellard { "mov3q", "mov3ql", }, 443048024e4aSbellard 443148024e4aSbellard { "tdivul", "divul", }, /* For m68k-svr4. */ 443248024e4aSbellard { "fmovb", "fmoveb", }, 443348024e4aSbellard { "fsmovb", "fsmoveb", }, 443448024e4aSbellard { "fdmovb", "fdmoveb", }, 443548024e4aSbellard { "fmovd", "fmoved", }, 443648024e4aSbellard { "fsmovd", "fsmoved", }, 443748024e4aSbellard { "fmovl", "fmovel", }, 443848024e4aSbellard { "fsmovl", "fsmovel", }, 443948024e4aSbellard { "fdmovl", "fdmovel", }, 444048024e4aSbellard { "fmovp", "fmovep", }, 444148024e4aSbellard { "fsmovp", "fsmovep", }, 444248024e4aSbellard { "fdmovp", "fdmovep", }, 444348024e4aSbellard { "fmovs", "fmoves", }, 444448024e4aSbellard { "fsmovs", "fsmoves", }, 444548024e4aSbellard { "fdmovs", "fdmoves", }, 444648024e4aSbellard { "fmovw", "fmovew", }, 444748024e4aSbellard { "fsmovw", "fsmovew", }, 444848024e4aSbellard { "fdmovw", "fdmovew", }, 444948024e4aSbellard { "fmovx", "fmovex", }, 445048024e4aSbellard { "fsmovx", "fsmovex", }, 445148024e4aSbellard { "fdmovx", "fdmovex", }, 445248024e4aSbellard { "fmovcr", "fmovecr", }, 445348024e4aSbellard { "fmovcrx", "fmovecrx", }, 445448024e4aSbellard { "ftestb", "ftstb", }, 445548024e4aSbellard { "ftestd", "ftstd", }, 445648024e4aSbellard { "ftestl", "ftstl", }, 445748024e4aSbellard { "ftestp", "ftstp", }, 445848024e4aSbellard { "ftests", "ftsts", }, 445948024e4aSbellard { "ftestw", "ftstw", }, 446048024e4aSbellard { "ftestx", "ftstx", }, 446148024e4aSbellard 446248024e4aSbellard { "bitrevl", "bitrev", }, 446348024e4aSbellard { "byterevl", "byterev", }, 446448024e4aSbellard { "ff1l", "ff1", }, 446548024e4aSbellard 446648024e4aSbellard }; 446748024e4aSbellard 446848024e4aSbellard const int m68k_numaliases = 446948024e4aSbellard sizeof m68k_opcode_aliases / sizeof m68k_opcode_aliases[0]; 447048024e4aSbellard /* **** End of m68k-opc.c */ 447148024e4aSbellard /* **** floatformat.c from sourceware.org CVS 2005-08-14. */ 447248024e4aSbellard /* IEEE floating point support routines, for GDB, the GNU Debugger. 447348024e4aSbellard Copyright (C) 1991, 1994, 1999, 2000, 2003 Free Software Foundation, Inc. 447448024e4aSbellard 447548024e4aSbellard This file is part of GDB. 447648024e4aSbellard 447748024e4aSbellard This program is free software; you can redistribute it and/or modify 447848024e4aSbellard it under the terms of the GNU General Public License as published by 447948024e4aSbellard the Free Software Foundation; either version 2 of the License, or 448048024e4aSbellard (at your option) any later version. 448148024e4aSbellard 448248024e4aSbellard This program is distributed in the hope that it will be useful, 448348024e4aSbellard but WITHOUT ANY WARRANTY; without even the implied warranty of 448448024e4aSbellard MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 448548024e4aSbellard GNU General Public License for more details. 448648024e4aSbellard 448748024e4aSbellard You should have received a copy of the GNU General Public License 44888167ee88SBlue Swirl along with this program; if not, see <http://www.gnu.org/licenses/>. */ 448948024e4aSbellard 449048024e4aSbellard /* This is needed to pick up the NAN macro on some systems. */ 449148024e4aSbellard //#define _GNU_SOURCE 449248024e4aSbellard 449348024e4aSbellard #ifndef INFINITY 449448024e4aSbellard #ifdef HUGE_VAL 449548024e4aSbellard #define INFINITY HUGE_VAL 449648024e4aSbellard #else 449748024e4aSbellard #define INFINITY (1.0 / 0.0) 449848024e4aSbellard #endif 449948024e4aSbellard #endif 450048024e4aSbellard 450148024e4aSbellard #ifndef NAN 450248024e4aSbellard #define NAN (0.0 / 0.0) 450348024e4aSbellard #endif 450448024e4aSbellard 450548024e4aSbellard static unsigned long get_field (const unsigned char *, 450648024e4aSbellard enum floatformat_byteorders, 450748024e4aSbellard unsigned int, 450848024e4aSbellard unsigned int, 450948024e4aSbellard unsigned int); 451048024e4aSbellard static int floatformat_always_valid (const struct floatformat *fmt, 451148024e4aSbellard const char *from); 451248024e4aSbellard 451348024e4aSbellard static int 451448024e4aSbellard floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED, 451548024e4aSbellard const char *from ATTRIBUTE_UNUSED) 451648024e4aSbellard { 451748024e4aSbellard return 1; 451848024e4aSbellard } 451948024e4aSbellard 452048024e4aSbellard /* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not 452148024e4aSbellard going to bother with trying to muck around with whether it is defined in 452248024e4aSbellard a system header, what we do if not, etc. */ 452348024e4aSbellard #define FLOATFORMAT_CHAR_BIT 8 452448024e4aSbellard 452548024e4aSbellard /* floatformats for IEEE single and double, big and little endian. */ 452648024e4aSbellard const struct floatformat floatformat_ieee_single_big = 452748024e4aSbellard { 452848024e4aSbellard floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23, 452948024e4aSbellard floatformat_intbit_no, 453048024e4aSbellard "floatformat_ieee_single_big", 453148024e4aSbellard floatformat_always_valid 453248024e4aSbellard }; 453348024e4aSbellard const struct floatformat floatformat_ieee_single_little = 453448024e4aSbellard { 453548024e4aSbellard floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23, 453648024e4aSbellard floatformat_intbit_no, 453748024e4aSbellard "floatformat_ieee_single_little", 453848024e4aSbellard floatformat_always_valid 453948024e4aSbellard }; 454048024e4aSbellard const struct floatformat floatformat_ieee_double_big = 454148024e4aSbellard { 454248024e4aSbellard floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52, 454348024e4aSbellard floatformat_intbit_no, 454448024e4aSbellard "floatformat_ieee_double_big", 454548024e4aSbellard floatformat_always_valid 454648024e4aSbellard }; 454748024e4aSbellard const struct floatformat floatformat_ieee_double_little = 454848024e4aSbellard { 454948024e4aSbellard floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52, 455048024e4aSbellard floatformat_intbit_no, 455148024e4aSbellard "floatformat_ieee_double_little", 455248024e4aSbellard floatformat_always_valid 455348024e4aSbellard }; 455448024e4aSbellard 455548024e4aSbellard /* floatformat for IEEE double, little endian byte order, with big endian word 455648024e4aSbellard ordering, as on the ARM. */ 455748024e4aSbellard 455848024e4aSbellard const struct floatformat floatformat_ieee_double_littlebyte_bigword = 455948024e4aSbellard { 456048024e4aSbellard floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52, 456148024e4aSbellard floatformat_intbit_no, 456248024e4aSbellard "floatformat_ieee_double_littlebyte_bigword", 456348024e4aSbellard floatformat_always_valid 456448024e4aSbellard }; 456548024e4aSbellard 456648024e4aSbellard static int floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from); 456748024e4aSbellard 456848024e4aSbellard static int 456948024e4aSbellard floatformat_i387_ext_is_valid (const struct floatformat *fmt, const char *from) 457048024e4aSbellard { 457148024e4aSbellard /* In the i387 double-extended format, if the exponent is all ones, 457248024e4aSbellard then the integer bit must be set. If the exponent is neither 0 457348024e4aSbellard nor ~0, the intbit must also be set. Only if the exponent is 457448024e4aSbellard zero can it be zero, and then it must be zero. */ 457548024e4aSbellard unsigned long exponent, int_bit; 457648024e4aSbellard const unsigned char *ufrom = (const unsigned char *) from; 457748024e4aSbellard 457848024e4aSbellard exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize, 457948024e4aSbellard fmt->exp_start, fmt->exp_len); 458048024e4aSbellard int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize, 458148024e4aSbellard fmt->man_start, 1); 458248024e4aSbellard 458348024e4aSbellard if ((exponent == 0) != (int_bit == 0)) 458448024e4aSbellard return 0; 458548024e4aSbellard else 458648024e4aSbellard return 1; 458748024e4aSbellard } 458848024e4aSbellard 458948024e4aSbellard const struct floatformat floatformat_i387_ext = 459048024e4aSbellard { 459148024e4aSbellard floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64, 459248024e4aSbellard floatformat_intbit_yes, 459348024e4aSbellard "floatformat_i387_ext", 459448024e4aSbellard floatformat_i387_ext_is_valid 459548024e4aSbellard }; 459648024e4aSbellard const struct floatformat floatformat_m68881_ext = 459748024e4aSbellard { 459848024e4aSbellard /* Note that the bits from 16 to 31 are unused. */ 459948024e4aSbellard floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64, 460048024e4aSbellard floatformat_intbit_yes, 460148024e4aSbellard "floatformat_m68881_ext", 460248024e4aSbellard floatformat_always_valid 460348024e4aSbellard }; 460448024e4aSbellard const struct floatformat floatformat_i960_ext = 460548024e4aSbellard { 460648024e4aSbellard /* Note that the bits from 0 to 15 are unused. */ 460748024e4aSbellard floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64, 460848024e4aSbellard floatformat_intbit_yes, 460948024e4aSbellard "floatformat_i960_ext", 461048024e4aSbellard floatformat_always_valid 461148024e4aSbellard }; 461248024e4aSbellard const struct floatformat floatformat_m88110_ext = 461348024e4aSbellard { 461448024e4aSbellard floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64, 461548024e4aSbellard floatformat_intbit_yes, 461648024e4aSbellard "floatformat_m88110_ext", 461748024e4aSbellard floatformat_always_valid 461848024e4aSbellard }; 461948024e4aSbellard const struct floatformat floatformat_m88110_harris_ext = 462048024e4aSbellard { 462148024e4aSbellard /* Harris uses raw format 128 bytes long, but the number is just an ieee 462248024e4aSbellard double, and the last 64 bits are wasted. */ 462348024e4aSbellard floatformat_big,128, 0, 1, 11, 0x3ff, 0x7ff, 12, 52, 462448024e4aSbellard floatformat_intbit_no, 462548024e4aSbellard "floatformat_m88110_ext_harris", 462648024e4aSbellard floatformat_always_valid 462748024e4aSbellard }; 462848024e4aSbellard const struct floatformat floatformat_arm_ext_big = 462948024e4aSbellard { 463048024e4aSbellard /* Bits 1 to 16 are unused. */ 463148024e4aSbellard floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64, 463248024e4aSbellard floatformat_intbit_yes, 463348024e4aSbellard "floatformat_arm_ext_big", 463448024e4aSbellard floatformat_always_valid 463548024e4aSbellard }; 463648024e4aSbellard const struct floatformat floatformat_arm_ext_littlebyte_bigword = 463748024e4aSbellard { 463848024e4aSbellard /* Bits 1 to 16 are unused. */ 463948024e4aSbellard floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64, 464048024e4aSbellard floatformat_intbit_yes, 464148024e4aSbellard "floatformat_arm_ext_littlebyte_bigword", 464248024e4aSbellard floatformat_always_valid 464348024e4aSbellard }; 464448024e4aSbellard const struct floatformat floatformat_ia64_spill_big = 464548024e4aSbellard { 464648024e4aSbellard floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64, 464748024e4aSbellard floatformat_intbit_yes, 464848024e4aSbellard "floatformat_ia64_spill_big", 464948024e4aSbellard floatformat_always_valid 465048024e4aSbellard }; 465148024e4aSbellard const struct floatformat floatformat_ia64_spill_little = 465248024e4aSbellard { 465348024e4aSbellard floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64, 465448024e4aSbellard floatformat_intbit_yes, 465548024e4aSbellard "floatformat_ia64_spill_little", 465648024e4aSbellard floatformat_always_valid 465748024e4aSbellard }; 465848024e4aSbellard const struct floatformat floatformat_ia64_quad_big = 465948024e4aSbellard { 466048024e4aSbellard floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112, 466148024e4aSbellard floatformat_intbit_no, 466248024e4aSbellard "floatformat_ia64_quad_big", 466348024e4aSbellard floatformat_always_valid 466448024e4aSbellard }; 466548024e4aSbellard const struct floatformat floatformat_ia64_quad_little = 466648024e4aSbellard { 466748024e4aSbellard floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112, 466848024e4aSbellard floatformat_intbit_no, 466948024e4aSbellard "floatformat_ia64_quad_little", 467048024e4aSbellard floatformat_always_valid 467148024e4aSbellard }; 467248024e4aSbellard 467348024e4aSbellard /* Extract a field which starts at START and is LEN bits long. DATA and 467448024e4aSbellard TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */ 467548024e4aSbellard static unsigned long 467648024e4aSbellard get_field (const unsigned char *data, enum floatformat_byteorders order, 467748024e4aSbellard unsigned int total_len, unsigned int start, unsigned int len) 467848024e4aSbellard { 467948024e4aSbellard unsigned long result; 468048024e4aSbellard unsigned int cur_byte; 468148024e4aSbellard int cur_bitshift; 468248024e4aSbellard 468348024e4aSbellard /* Start at the least significant part of the field. */ 468448024e4aSbellard cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT; 468548024e4aSbellard if (order == floatformat_little) 468648024e4aSbellard cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1; 468748024e4aSbellard cur_bitshift = 468848024e4aSbellard ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT; 468948024e4aSbellard result = *(data + cur_byte) >> (-cur_bitshift); 469048024e4aSbellard cur_bitshift += FLOATFORMAT_CHAR_BIT; 469148024e4aSbellard if (order == floatformat_little) 469248024e4aSbellard ++cur_byte; 469348024e4aSbellard else 469448024e4aSbellard --cur_byte; 469548024e4aSbellard 469648024e4aSbellard /* Move towards the most significant part of the field. */ 469748024e4aSbellard while ((unsigned int) cur_bitshift < len) 469848024e4aSbellard { 469948024e4aSbellard if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT) 470048024e4aSbellard /* This is the last byte; zero out the bits which are not part of 470148024e4aSbellard this field. */ 470248024e4aSbellard result |= 47032e3883d0SPeter Maydell (unsigned long)(*(data + cur_byte) 47042e3883d0SPeter Maydell & ((1 << (len - cur_bitshift)) - 1)) 470548024e4aSbellard << cur_bitshift; 470648024e4aSbellard else 47072e3883d0SPeter Maydell result |= (unsigned long)*(data + cur_byte) << cur_bitshift; 470848024e4aSbellard cur_bitshift += FLOATFORMAT_CHAR_BIT; 470948024e4aSbellard if (order == floatformat_little) 471048024e4aSbellard ++cur_byte; 471148024e4aSbellard else 471248024e4aSbellard --cur_byte; 471348024e4aSbellard } 471448024e4aSbellard return result; 471548024e4aSbellard } 471648024e4aSbellard 471748024e4aSbellard /* Convert from FMT to a double. 471848024e4aSbellard FROM is the address of the extended float. 471948024e4aSbellard Store the double in *TO. */ 472048024e4aSbellard 472148024e4aSbellard void 472248024e4aSbellard floatformat_to_double (const struct floatformat *fmt, 472348024e4aSbellard const char *from, double *to) 472448024e4aSbellard { 472548024e4aSbellard const unsigned char *ufrom = (const unsigned char *)from; 472648024e4aSbellard double dto; 472748024e4aSbellard long exponent; 472848024e4aSbellard unsigned long mant; 472948024e4aSbellard unsigned int mant_bits, mant_off; 473048024e4aSbellard int mant_bits_left; 473148024e4aSbellard int special_exponent; /* It's a NaN, denorm or zero */ 473248024e4aSbellard 473348024e4aSbellard exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize, 473448024e4aSbellard fmt->exp_start, fmt->exp_len); 473548024e4aSbellard 473648024e4aSbellard /* If the exponent indicates a NaN, we don't have information to 473748024e4aSbellard decide what to do. So we handle it like IEEE, except that we 473848024e4aSbellard don't try to preserve the type of NaN. FIXME. */ 473948024e4aSbellard if ((unsigned long) exponent == fmt->exp_nan) 474048024e4aSbellard { 474148024e4aSbellard int nan; 474248024e4aSbellard 474348024e4aSbellard mant_off = fmt->man_start; 474448024e4aSbellard mant_bits_left = fmt->man_len; 474548024e4aSbellard nan = 0; 474648024e4aSbellard while (mant_bits_left > 0) 474748024e4aSbellard { 4748893dcdbfSYuval Shaia mant_bits = MIN(mant_bits_left, 32); 474948024e4aSbellard 475048024e4aSbellard if (get_field (ufrom, fmt->byteorder, fmt->totalsize, 475148024e4aSbellard mant_off, mant_bits) != 0) 475248024e4aSbellard { 475348024e4aSbellard /* This is a NaN. */ 475448024e4aSbellard nan = 1; 475548024e4aSbellard break; 475648024e4aSbellard } 475748024e4aSbellard 475848024e4aSbellard mant_off += mant_bits; 475948024e4aSbellard mant_bits_left -= mant_bits; 476048024e4aSbellard } 476148024e4aSbellard 476248024e4aSbellard /* On certain systems (such as GNU/Linux), the use of the 476348024e4aSbellard INFINITY macro below may generate a warning that can not be 476448024e4aSbellard silenced due to a bug in GCC (PR preprocessor/11931). The 476548024e4aSbellard preprocessor fails to recognise the __extension__ keyword in 476648024e4aSbellard conjunction with the GNU/C99 extension for hexadecimal 476748024e4aSbellard floating point constants and will issue a warning when 476848024e4aSbellard compiling with -pedantic. */ 476948024e4aSbellard if (nan) 477048024e4aSbellard dto = NAN; 477148024e4aSbellard else 477248024e4aSbellard dto = INFINITY; 477348024e4aSbellard 477448024e4aSbellard if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1)) 477548024e4aSbellard dto = -dto; 477648024e4aSbellard 477748024e4aSbellard *to = dto; 477848024e4aSbellard 477948024e4aSbellard return; 478048024e4aSbellard } 478148024e4aSbellard 478248024e4aSbellard mant_bits_left = fmt->man_len; 478348024e4aSbellard mant_off = fmt->man_start; 478448024e4aSbellard dto = 0.0; 478548024e4aSbellard 478648024e4aSbellard special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan; 478748024e4aSbellard 478848024e4aSbellard /* Don't bias zero's, denorms or NaNs. */ 478948024e4aSbellard if (!special_exponent) 479048024e4aSbellard exponent -= fmt->exp_bias; 479148024e4aSbellard 479248024e4aSbellard /* Build the result algebraically. Might go infinite, underflow, etc; 479348024e4aSbellard who cares. */ 479448024e4aSbellard 479548024e4aSbellard /* If this format uses a hidden bit, explicitly add it in now. Otherwise, 479648024e4aSbellard increment the exponent by one to account for the integer bit. */ 479748024e4aSbellard 479848024e4aSbellard if (!special_exponent) 479948024e4aSbellard { 480048024e4aSbellard if (fmt->intbit == floatformat_intbit_no) 480148024e4aSbellard dto = ldexp (1.0, exponent); 480248024e4aSbellard else 480348024e4aSbellard exponent++; 480448024e4aSbellard } 480548024e4aSbellard 480648024e4aSbellard while (mant_bits_left > 0) 480748024e4aSbellard { 4808893dcdbfSYuval Shaia mant_bits = MIN(mant_bits_left, 32); 480948024e4aSbellard 481048024e4aSbellard mant = get_field (ufrom, fmt->byteorder, fmt->totalsize, 481148024e4aSbellard mant_off, mant_bits); 481248024e4aSbellard 481348024e4aSbellard /* Handle denormalized numbers. FIXME: What should we do for 481448024e4aSbellard non-IEEE formats? */ 481548024e4aSbellard if (exponent == 0 && mant != 0) 481648024e4aSbellard dto += ldexp ((double)mant, 481748024e4aSbellard (- fmt->exp_bias 481848024e4aSbellard - mant_bits 481948024e4aSbellard - (mant_off - fmt->man_start) 482048024e4aSbellard + 1)); 482148024e4aSbellard else 482248024e4aSbellard dto += ldexp ((double)mant, exponent - mant_bits); 482348024e4aSbellard if (exponent != 0) 482448024e4aSbellard exponent -= mant_bits; 482548024e4aSbellard mant_off += mant_bits; 482648024e4aSbellard mant_bits_left -= mant_bits; 482748024e4aSbellard } 482848024e4aSbellard 482948024e4aSbellard /* Negate it if negative. */ 483048024e4aSbellard if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1)) 483148024e4aSbellard dto = -dto; 483248024e4aSbellard *to = dto; 483348024e4aSbellard } 483448024e4aSbellard 483548024e4aSbellard static void put_field (unsigned char *, enum floatformat_byteorders, 483648024e4aSbellard unsigned int, 483748024e4aSbellard unsigned int, 483848024e4aSbellard unsigned int, 483948024e4aSbellard unsigned long); 484048024e4aSbellard 484148024e4aSbellard /* Set a field which starts at START and is LEN bits long. DATA and 484248024e4aSbellard TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */ 484348024e4aSbellard static void 484448024e4aSbellard put_field (unsigned char *data, enum floatformat_byteorders order, 484548024e4aSbellard unsigned int total_len, unsigned int start, unsigned int len, 484648024e4aSbellard unsigned long stuff_to_put) 484748024e4aSbellard { 484848024e4aSbellard unsigned int cur_byte; 484948024e4aSbellard int cur_bitshift; 485048024e4aSbellard 485148024e4aSbellard /* Start at the least significant part of the field. */ 485248024e4aSbellard cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT; 485348024e4aSbellard if (order == floatformat_little) 485448024e4aSbellard cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1; 485548024e4aSbellard cur_bitshift = 485648024e4aSbellard ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT; 485748024e4aSbellard *(data + cur_byte) &= 485848024e4aSbellard ~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1) << (-cur_bitshift)); 485948024e4aSbellard *(data + cur_byte) |= 486048024e4aSbellard (stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift); 486148024e4aSbellard cur_bitshift += FLOATFORMAT_CHAR_BIT; 486248024e4aSbellard if (order == floatformat_little) 486348024e4aSbellard ++cur_byte; 486448024e4aSbellard else 486548024e4aSbellard --cur_byte; 486648024e4aSbellard 486748024e4aSbellard /* Move towards the most significant part of the field. */ 486848024e4aSbellard while ((unsigned int) cur_bitshift < len) 486948024e4aSbellard { 487048024e4aSbellard if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT) 487148024e4aSbellard { 487248024e4aSbellard /* This is the last byte. */ 487348024e4aSbellard *(data + cur_byte) &= 487448024e4aSbellard ~((1 << (len - cur_bitshift)) - 1); 487548024e4aSbellard *(data + cur_byte) |= (stuff_to_put >> cur_bitshift); 487648024e4aSbellard } 487748024e4aSbellard else 487848024e4aSbellard *(data + cur_byte) = ((stuff_to_put >> cur_bitshift) 487948024e4aSbellard & ((1 << FLOATFORMAT_CHAR_BIT) - 1)); 488048024e4aSbellard cur_bitshift += FLOATFORMAT_CHAR_BIT; 488148024e4aSbellard if (order == floatformat_little) 488248024e4aSbellard ++cur_byte; 488348024e4aSbellard else 488448024e4aSbellard --cur_byte; 488548024e4aSbellard } 488648024e4aSbellard } 488748024e4aSbellard 488848024e4aSbellard /* The converse: convert the double *FROM to an extended float 488948024e4aSbellard and store where TO points. Neither FROM nor TO have any alignment 489048024e4aSbellard restrictions. */ 489148024e4aSbellard 489248024e4aSbellard void 489348024e4aSbellard floatformat_from_double (const struct floatformat *fmt, 489448024e4aSbellard const double *from, char *to) 489548024e4aSbellard { 489648024e4aSbellard double dfrom; 489748024e4aSbellard int exponent; 489848024e4aSbellard double mant; 489948024e4aSbellard unsigned int mant_bits, mant_off; 490048024e4aSbellard int mant_bits_left; 490148024e4aSbellard unsigned char *uto = (unsigned char *)to; 490248024e4aSbellard 490348024e4aSbellard dfrom = *from; 490448024e4aSbellard memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT); 490548024e4aSbellard 490648024e4aSbellard /* If negative, set the sign bit. */ 490748024e4aSbellard if (dfrom < 0) 490848024e4aSbellard { 490948024e4aSbellard put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1); 491048024e4aSbellard dfrom = -dfrom; 491148024e4aSbellard } 491248024e4aSbellard 491348024e4aSbellard if (dfrom == 0) 491448024e4aSbellard { 491548024e4aSbellard /* 0.0. */ 491648024e4aSbellard return; 491748024e4aSbellard } 491848024e4aSbellard 491948024e4aSbellard if (dfrom != dfrom) 492048024e4aSbellard { 492148024e4aSbellard /* NaN. */ 492248024e4aSbellard put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, 492348024e4aSbellard fmt->exp_len, fmt->exp_nan); 492448024e4aSbellard /* Be sure it's not infinity, but NaN value is irrelevant. */ 492548024e4aSbellard put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start, 492648024e4aSbellard 32, 1); 492748024e4aSbellard return; 492848024e4aSbellard } 492948024e4aSbellard 493048024e4aSbellard if (dfrom + dfrom == dfrom) 493148024e4aSbellard { 493248024e4aSbellard /* This can only happen for an infinite value (or zero, which we 493348024e4aSbellard already handled above). */ 493448024e4aSbellard put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, 493548024e4aSbellard fmt->exp_len, fmt->exp_nan); 493648024e4aSbellard return; 493748024e4aSbellard } 493848024e4aSbellard 493948024e4aSbellard mant = frexp (dfrom, &exponent); 494048024e4aSbellard if (exponent + fmt->exp_bias - 1 > 0) 494148024e4aSbellard put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, 494248024e4aSbellard fmt->exp_len, exponent + fmt->exp_bias - 1); 494348024e4aSbellard else 494448024e4aSbellard { 494548024e4aSbellard /* Handle a denormalized number. FIXME: What should we do for 494648024e4aSbellard non-IEEE formats? */ 494748024e4aSbellard put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, 494848024e4aSbellard fmt->exp_len, 0); 494948024e4aSbellard mant = ldexp (mant, exponent + fmt->exp_bias - 1); 495048024e4aSbellard } 495148024e4aSbellard 495248024e4aSbellard mant_bits_left = fmt->man_len; 495348024e4aSbellard mant_off = fmt->man_start; 495448024e4aSbellard while (mant_bits_left > 0) 495548024e4aSbellard { 495648024e4aSbellard unsigned long mant_long; 495748024e4aSbellard mant_bits = mant_bits_left < 32 ? mant_bits_left : 32; 495848024e4aSbellard 495948024e4aSbellard mant *= 4294967296.0; 496048024e4aSbellard mant_long = (unsigned long)mant; 496148024e4aSbellard mant -= mant_long; 496248024e4aSbellard 496348024e4aSbellard /* If the integer bit is implicit, and we are not creating a 496448024e4aSbellard denormalized number, then we need to discard it. */ 496548024e4aSbellard if ((unsigned int) mant_bits_left == fmt->man_len 496648024e4aSbellard && fmt->intbit == floatformat_intbit_no 496748024e4aSbellard && exponent + fmt->exp_bias - 1 > 0) 496848024e4aSbellard { 496948024e4aSbellard mant_long &= 0x7fffffff; 497048024e4aSbellard mant_bits -= 1; 497148024e4aSbellard } 497248024e4aSbellard else if (mant_bits < 32) 497348024e4aSbellard { 497448024e4aSbellard /* The bits we want are in the most significant MANT_BITS bits of 497548024e4aSbellard mant_long. Move them to the least significant. */ 497648024e4aSbellard mant_long >>= 32 - mant_bits; 497748024e4aSbellard } 497848024e4aSbellard 497948024e4aSbellard put_field (uto, fmt->byteorder, fmt->totalsize, 498048024e4aSbellard mant_off, mant_bits, mant_long); 498148024e4aSbellard mant_off += mant_bits; 498248024e4aSbellard mant_bits_left -= mant_bits; 498348024e4aSbellard } 498448024e4aSbellard } 498548024e4aSbellard 498648024e4aSbellard /* Return non-zero iff the data at FROM is a valid number in format FMT. */ 498748024e4aSbellard 498848024e4aSbellard int 498948024e4aSbellard floatformat_is_valid (const struct floatformat *fmt, const char *from) 499048024e4aSbellard { 499148024e4aSbellard return fmt->is_valid (fmt, from); 499248024e4aSbellard } 499348024e4aSbellard 499448024e4aSbellard 499548024e4aSbellard #ifdef IEEE_DEBUG 499648024e4aSbellard 499748024e4aSbellard /* This is to be run on a host which uses IEEE floating point. */ 499848024e4aSbellard 499948024e4aSbellard void 500048024e4aSbellard ieee_test (double n) 500148024e4aSbellard { 500248024e4aSbellard double result; 500348024e4aSbellard 500448024e4aSbellard floatformat_to_double (&floatformat_ieee_double_little, (char *) &n, 500548024e4aSbellard &result); 500648024e4aSbellard if ((n != result && (! isnan (n) || ! isnan (result))) 500748024e4aSbellard || (n < 0 && result >= 0) 500848024e4aSbellard || (n >= 0 && result < 0)) 500948024e4aSbellard printf ("Differ(to): %.20g -> %.20g\n", n, result); 501048024e4aSbellard 501148024e4aSbellard floatformat_from_double (&floatformat_ieee_double_little, &n, 501248024e4aSbellard (char *) &result); 501348024e4aSbellard if ((n != result && (! isnan (n) || ! isnan (result))) 501448024e4aSbellard || (n < 0 && result >= 0) 501548024e4aSbellard || (n >= 0 && result < 0)) 501648024e4aSbellard printf ("Differ(from): %.20g -> %.20g\n", n, result); 501748024e4aSbellard 501848024e4aSbellard #if 0 501948024e4aSbellard { 502048024e4aSbellard char exten[16]; 502148024e4aSbellard 502248024e4aSbellard floatformat_from_double (&floatformat_m68881_ext, &n, exten); 502348024e4aSbellard floatformat_to_double (&floatformat_m68881_ext, exten, &result); 502448024e4aSbellard if (n != result) 502548024e4aSbellard printf ("Differ(to+from): %.20g -> %.20g\n", n, result); 502648024e4aSbellard } 502748024e4aSbellard #endif 502848024e4aSbellard 502948024e4aSbellard #if IEEE_DEBUG > 1 503048024e4aSbellard /* This is to be run on a host which uses 68881 format. */ 503148024e4aSbellard { 503248024e4aSbellard long double ex = *(long double *)exten; 503348024e4aSbellard if (ex != n) 503448024e4aSbellard printf ("Differ(from vs. extended): %.20g\n", n); 503548024e4aSbellard } 503648024e4aSbellard #endif 503748024e4aSbellard } 503848024e4aSbellard 503948024e4aSbellard int 504048024e4aSbellard main (void) 504148024e4aSbellard { 504248024e4aSbellard ieee_test (0.0); 504348024e4aSbellard ieee_test (0.5); 504448024e4aSbellard ieee_test (256.0); 504548024e4aSbellard ieee_test (0.12345); 504648024e4aSbellard ieee_test (234235.78907234); 504748024e4aSbellard ieee_test (-512.0); 504848024e4aSbellard ieee_test (-0.004321); 504948024e4aSbellard ieee_test (1.2E-70); 505048024e4aSbellard ieee_test (1.2E-316); 505148024e4aSbellard ieee_test (4.9406564584124654E-324); 505248024e4aSbellard ieee_test (- 4.9406564584124654E-324); 505348024e4aSbellard ieee_test (- 0.0); 505448024e4aSbellard ieee_test (- INFINITY); 505548024e4aSbellard ieee_test (- NAN); 505648024e4aSbellard ieee_test (INFINITY); 505748024e4aSbellard ieee_test (NAN); 505848024e4aSbellard return 0; 505948024e4aSbellard } 506048024e4aSbellard #endif 506148024e4aSbellard /* **** End of floatformat.c */ 5062