Statistics
| Branch: | Revision:

root / alpha-dis.c @ 26b14dc4

History | View | Annotate | Download (79.8 kB)

1 a993ba85 bellard
/* alpha-dis.c -- Disassemble Alpha AXP instructions
2 a993ba85 bellard
   Copyright 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
3 a993ba85 bellard
   Contributed by Richard Henderson <rth@tamu.edu>,
4 a993ba85 bellard
   patterned after the PPC opcode handling written by Ian Lance Taylor.
5 a993ba85 bellard

6 a993ba85 bellard
This file is part of GDB, GAS, and the GNU binutils.
7 a993ba85 bellard

8 a993ba85 bellard
GDB, GAS, and the GNU binutils are free software; you can redistribute
9 a993ba85 bellard
them and/or modify them under the terms of the GNU General Public
10 a993ba85 bellard
License as published by the Free Software Foundation; either version
11 a993ba85 bellard
2, or (at your option) any later version.
12 a993ba85 bellard

13 a993ba85 bellard
GDB, GAS, and the GNU binutils are distributed in the hope that they
14 a993ba85 bellard
will be useful, but WITHOUT ANY WARRANTY; without even the implied
15 a993ba85 bellard
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
16 a993ba85 bellard
the GNU General Public License for more details.
17 a993ba85 bellard

18 a993ba85 bellard
You should have received a copy of the GNU General Public License
19 8167ee88 Blue Swirl
along with this file; see the file COPYING.  If not, see
20 8167ee88 Blue Swirl
<http://www.gnu.org/licenses/>. */
21 a993ba85 bellard
22 a993ba85 bellard
#include <stdio.h>
23 a993ba85 bellard
#include "dis-asm.h"
24 a993ba85 bellard
25 a993ba85 bellard
/* The opcode table is an array of struct alpha_opcode.  */
26 a993ba85 bellard
27 a993ba85 bellard
struct alpha_opcode
28 a993ba85 bellard
{
29 a993ba85 bellard
  /* The opcode name.  */
30 a993ba85 bellard
  const char *name;
31 a993ba85 bellard
32 a993ba85 bellard
  /* The opcode itself.  Those bits which will be filled in with
33 a993ba85 bellard
     operands are zeroes.  */
34 a993ba85 bellard
  unsigned opcode;
35 a993ba85 bellard
36 a993ba85 bellard
  /* The opcode mask.  This is used by the disassembler.  This is a
37 a993ba85 bellard
     mask containing ones indicating those bits which must match the
38 a993ba85 bellard
     opcode field, and zeroes indicating those bits which need not
39 a993ba85 bellard
     match (and are presumably filled in by operands).  */
40 a993ba85 bellard
  unsigned mask;
41 a993ba85 bellard
42 a993ba85 bellard
  /* One bit flags for the opcode.  These are primarily used to
43 a993ba85 bellard
     indicate specific processors and environments support the
44 a993ba85 bellard
     instructions.  The defined values are listed below. */
45 a993ba85 bellard
  unsigned flags;
46 a993ba85 bellard
47 a993ba85 bellard
  /* An array of operand codes.  Each code is an index into the
48 a993ba85 bellard
     operand table.  They appear in the order which the operands must
49 a993ba85 bellard
     appear in assembly code, and are terminated by a zero.  */
50 a993ba85 bellard
  unsigned char operands[4];
51 a993ba85 bellard
};
52 a993ba85 bellard
53 a993ba85 bellard
/* The table itself is sorted by major opcode number, and is otherwise
54 a993ba85 bellard
   in the order in which the disassembler should consider
55 a993ba85 bellard
   instructions.  */
56 a993ba85 bellard
extern const struct alpha_opcode alpha_opcodes[];
57 a993ba85 bellard
extern const unsigned alpha_num_opcodes;
58 a993ba85 bellard
59 a993ba85 bellard
/* Values defined for the flags field of a struct alpha_opcode.  */
60 a993ba85 bellard
61 a993ba85 bellard
/* CPU Availability */
62 a993ba85 bellard
#define AXP_OPCODE_BASE  0x0001  /* Base architecture -- all cpus.  */
63 a993ba85 bellard
#define AXP_OPCODE_EV4   0x0002  /* EV4 specific PALcode insns.  */
64 a993ba85 bellard
#define AXP_OPCODE_EV5   0x0004  /* EV5 specific PALcode insns.  */
65 a993ba85 bellard
#define AXP_OPCODE_EV6   0x0008  /* EV6 specific PALcode insns.  */
66 a993ba85 bellard
#define AXP_OPCODE_BWX   0x0100  /* Byte/word extension (amask bit 0).  */
67 a993ba85 bellard
#define AXP_OPCODE_CIX   0x0200  /* "Count" extension (amask bit 1).  */
68 a993ba85 bellard
#define AXP_OPCODE_MAX   0x0400  /* Multimedia extension (amask bit 8).  */
69 a993ba85 bellard
70 a993ba85 bellard
#define AXP_OPCODE_NOPAL (~(AXP_OPCODE_EV4|AXP_OPCODE_EV5|AXP_OPCODE_EV6))
71 a993ba85 bellard
72 a993ba85 bellard
/* A macro to extract the major opcode from an instruction.  */
73 a993ba85 bellard
#define AXP_OP(i)        (((i) >> 26) & 0x3F)
74 a993ba85 bellard
75 a993ba85 bellard
/* The total number of major opcodes. */
76 a993ba85 bellard
#define AXP_NOPS        0x40
77 a993ba85 bellard
78 a993ba85 bellard
 
79 a993ba85 bellard
/* The operands table is an array of struct alpha_operand.  */
80 a993ba85 bellard
81 a993ba85 bellard
struct alpha_operand
82 a993ba85 bellard
{
83 a993ba85 bellard
  /* The number of bits in the operand.  */
84 a993ba85 bellard
  unsigned int bits : 5;
85 a993ba85 bellard
86 a993ba85 bellard
  /* How far the operand is left shifted in the instruction.  */
87 a993ba85 bellard
  unsigned int shift : 5;
88 a993ba85 bellard
89 a993ba85 bellard
  /* The default relocation type for this operand.  */
90 a993ba85 bellard
  signed int default_reloc : 16;
91 a993ba85 bellard
92 a993ba85 bellard
  /* One bit syntax flags.  */
93 a993ba85 bellard
  unsigned int flags : 16;
94 a993ba85 bellard
95 a993ba85 bellard
  /* Insertion function.  This is used by the assembler.  To insert an
96 a993ba85 bellard
     operand value into an instruction, check this field.
97 a993ba85 bellard

98 a993ba85 bellard
     If it is NULL, execute
99 a993ba85 bellard
         i |= (op & ((1 << o->bits) - 1)) << o->shift;
100 a993ba85 bellard
     (i is the instruction which we are filling in, o is a pointer to
101 a993ba85 bellard
     this structure, and op is the opcode value; this assumes twos
102 a993ba85 bellard
     complement arithmetic).
103 a993ba85 bellard

104 a993ba85 bellard
     If this field is not NULL, then simply call it with the
105 a993ba85 bellard
     instruction and the operand value.  It will return the new value
106 a993ba85 bellard
     of the instruction.  If the ERRMSG argument is not NULL, then if
107 a993ba85 bellard
     the operand value is illegal, *ERRMSG will be set to a warning
108 a993ba85 bellard
     string (the operand will be inserted in any case).  If the
109 a993ba85 bellard
     operand value is legal, *ERRMSG will be unchanged (most operands
110 a993ba85 bellard
     can accept any value).  */
111 9262f384 Juan Quintela
  unsigned (*insert) (unsigned instruction, int op,
112 9262f384 Juan Quintela
                      const char **errmsg);
113 a993ba85 bellard
114 a993ba85 bellard
  /* Extraction function.  This is used by the disassembler.  To
115 a993ba85 bellard
     extract this operand type from an instruction, check this field.
116 a993ba85 bellard

117 a993ba85 bellard
     If it is NULL, compute
118 a993ba85 bellard
         op = ((i) >> o->shift) & ((1 << o->bits) - 1);
119 a993ba85 bellard
         if ((o->flags & AXP_OPERAND_SIGNED) != 0
120 a993ba85 bellard
             && (op & (1 << (o->bits - 1))) != 0)
121 a993ba85 bellard
           op -= 1 << o->bits;
122 a993ba85 bellard
     (i is the instruction, o is a pointer to this structure, and op
123 a993ba85 bellard
     is the result; this assumes twos complement arithmetic).
124 a993ba85 bellard

125 a993ba85 bellard
     If this field is not NULL, then simply call it with the
126 a993ba85 bellard
     instruction value.  It will return the value of the operand.  If
127 a993ba85 bellard
     the INVALID argument is not NULL, *INVALID will be set to
128 a993ba85 bellard
     non-zero if this operand type can not actually be extracted from
129 a993ba85 bellard
     this operand (i.e., the instruction does not match).  If the
130 a993ba85 bellard
     operand is valid, *INVALID will not be changed.  */
131 9262f384 Juan Quintela
  int (*extract) (unsigned instruction, int *invalid);
132 a993ba85 bellard
};
133 a993ba85 bellard
134 a993ba85 bellard
/* Elements in the table are retrieved by indexing with values from
135 a993ba85 bellard
   the operands field of the alpha_opcodes table.  */
136 a993ba85 bellard
137 a993ba85 bellard
extern const struct alpha_operand alpha_operands[];
138 a993ba85 bellard
extern const unsigned alpha_num_operands;
139 a993ba85 bellard
140 a993ba85 bellard
/* Values defined for the flags field of a struct alpha_operand.  */
141 a993ba85 bellard
142 a993ba85 bellard
/* Mask for selecting the type for typecheck purposes */
143 a993ba85 bellard
#define AXP_OPERAND_TYPECHECK_MASK                                        \
144 a993ba85 bellard
  (AXP_OPERAND_PARENS | AXP_OPERAND_COMMA | AXP_OPERAND_IR |                \
145 a993ba85 bellard
   AXP_OPERAND_FPR | AXP_OPERAND_RELATIVE | AXP_OPERAND_SIGNED |         \
146 a993ba85 bellard
   AXP_OPERAND_UNSIGNED)
147 a993ba85 bellard
148 a993ba85 bellard
/* This operand does not actually exist in the assembler input.  This
149 a993ba85 bellard
   is used to support extended mnemonics, for which two operands fields
150 a993ba85 bellard
   are identical.  The assembler should call the insert function with
151 a993ba85 bellard
   any op value.  The disassembler should call the extract function,
152 a993ba85 bellard
   ignore the return value, and check the value placed in the invalid
153 a993ba85 bellard
   argument.  */
154 a993ba85 bellard
#define AXP_OPERAND_FAKE        01
155 a993ba85 bellard
156 a993ba85 bellard
/* The operand should be wrapped in parentheses rather than separated
157 a993ba85 bellard
   from the previous by a comma.  This is used for the load and store
158 a993ba85 bellard
   instructions which want their operands to look like "Ra,disp(Rb)".  */
159 a993ba85 bellard
#define AXP_OPERAND_PARENS        02
160 a993ba85 bellard
161 d89c682f Stefan Weil
/* Used in combination with PARENS, this suppresses the suppression of
162 a993ba85 bellard
   the comma.  This is used for "jmp Ra,(Rb),hint".  */
163 a993ba85 bellard
#define AXP_OPERAND_COMMA        04
164 a993ba85 bellard
165 a993ba85 bellard
/* This operand names an integer register.  */
166 a993ba85 bellard
#define AXP_OPERAND_IR                010
167 a993ba85 bellard
168 a993ba85 bellard
/* This operand names a floating point register.  */
169 a993ba85 bellard
#define AXP_OPERAND_FPR                020
170 a993ba85 bellard
171 a993ba85 bellard
/* This operand is a relative branch displacement.  The disassembler
172 a993ba85 bellard
   prints these symbolically if possible.  */
173 a993ba85 bellard
#define AXP_OPERAND_RELATIVE        040
174 a993ba85 bellard
175 a993ba85 bellard
/* This operand takes signed values.  */
176 a993ba85 bellard
#define AXP_OPERAND_SIGNED        0100
177 a993ba85 bellard
178 a993ba85 bellard
/* This operand takes unsigned values.  This exists primarily so that
179 a993ba85 bellard
   a flags value of 0 can be treated as end-of-arguments.  */
180 a993ba85 bellard
#define AXP_OPERAND_UNSIGNED        0200
181 a993ba85 bellard
182 d89c682f Stefan Weil
/* Suppress overflow detection on this field.  This is used for hints. */
183 a993ba85 bellard
#define AXP_OPERAND_NOOVERFLOW        0400
184 a993ba85 bellard
185 a993ba85 bellard
/* Mask for optional argument default value.  */
186 a993ba85 bellard
#define AXP_OPERAND_OPTIONAL_MASK 07000
187 a993ba85 bellard
188 a993ba85 bellard
/* This operand defaults to zero.  This is used for jump hints.  */
189 a993ba85 bellard
#define AXP_OPERAND_DEFAULT_ZERO 01000
190 a993ba85 bellard
191 a993ba85 bellard
/* This operand should default to the first (real) operand and is used
192 a993ba85 bellard
   in conjunction with AXP_OPERAND_OPTIONAL.  This allows
193 a993ba85 bellard
   "and $0,3,$0" to be written as "and $0,3", etc.  I don't like
194 a993ba85 bellard
   it, but it's what DEC does.  */
195 a993ba85 bellard
#define AXP_OPERAND_DEFAULT_FIRST 02000
196 a993ba85 bellard
197 a993ba85 bellard
/* Similarly, this operand should default to the second (real) operand.
198 a993ba85 bellard
   This allows "negl $0" instead of "negl $0,$0".  */
199 a993ba85 bellard
#define AXP_OPERAND_DEFAULT_SECOND 04000
200 a993ba85 bellard
201 a993ba85 bellard
 
202 a993ba85 bellard
/* Register common names */
203 a993ba85 bellard
204 a993ba85 bellard
#define AXP_REG_V0        0
205 a993ba85 bellard
#define AXP_REG_T0        1
206 a993ba85 bellard
#define AXP_REG_T1        2
207 a993ba85 bellard
#define AXP_REG_T2        3
208 a993ba85 bellard
#define AXP_REG_T3        4
209 a993ba85 bellard
#define AXP_REG_T4        5
210 a993ba85 bellard
#define AXP_REG_T5        6
211 a993ba85 bellard
#define AXP_REG_T6        7
212 a993ba85 bellard
#define AXP_REG_T7        8
213 a993ba85 bellard
#define AXP_REG_S0        9
214 a993ba85 bellard
#define AXP_REG_S1        10
215 a993ba85 bellard
#define AXP_REG_S2        11
216 a993ba85 bellard
#define AXP_REG_S3        12
217 a993ba85 bellard
#define AXP_REG_S4        13
218 a993ba85 bellard
#define AXP_REG_S5        14
219 a993ba85 bellard
#define AXP_REG_FP        15
220 a993ba85 bellard
#define AXP_REG_A0        16
221 a993ba85 bellard
#define AXP_REG_A1        17
222 a993ba85 bellard
#define AXP_REG_A2        18
223 a993ba85 bellard
#define AXP_REG_A3        19
224 a993ba85 bellard
#define AXP_REG_A4        20
225 a993ba85 bellard
#define AXP_REG_A5        21
226 a993ba85 bellard
#define AXP_REG_T8        22
227 a993ba85 bellard
#define AXP_REG_T9        23
228 a993ba85 bellard
#define AXP_REG_T10        24
229 a993ba85 bellard
#define AXP_REG_T11        25
230 a993ba85 bellard
#define AXP_REG_RA        26
231 a993ba85 bellard
#define AXP_REG_PV        27
232 a993ba85 bellard
#define AXP_REG_T12        27
233 a993ba85 bellard
#define AXP_REG_AT        28
234 a993ba85 bellard
#define AXP_REG_GP        29
235 a993ba85 bellard
#define AXP_REG_SP        30
236 a993ba85 bellard
#define AXP_REG_ZERO        31
237 a993ba85 bellard
238 a993ba85 bellard
#define bfd_mach_alpha_ev4  0x10
239 a993ba85 bellard
#define bfd_mach_alpha_ev5  0x20
240 a993ba85 bellard
#define bfd_mach_alpha_ev6  0x30
241 a993ba85 bellard
242 a993ba85 bellard
enum bfd_reloc_code_real {
243 a993ba85 bellard
    BFD_RELOC_23_PCREL_S2,
244 a993ba85 bellard
    BFD_RELOC_ALPHA_HINT
245 a993ba85 bellard
};
246 a993ba85 bellard
247 a993ba85 bellard
/* This file holds the Alpha AXP opcode table.  The opcode table includes
248 a993ba85 bellard
   almost all of the extended instruction mnemonics.  This permits the
249 a993ba85 bellard
   disassembler to use them, and simplifies the assembler logic, at the
250 a993ba85 bellard
   cost of increasing the table size.  The table is strictly constant
251 a993ba85 bellard
   data, so the compiler should be able to put it in the text segment.
252 a993ba85 bellard

253 a993ba85 bellard
   This file also holds the operand table.  All knowledge about inserting
254 a993ba85 bellard
   and extracting operands from instructions is kept in this file.
255 a993ba85 bellard

256 a993ba85 bellard
   The information for the base instruction set was compiled from the
257 a993ba85 bellard
   _Alpha Architecture Handbook_, Digital Order Number EC-QD2KB-TE,
258 a993ba85 bellard
   version 2.
259 a993ba85 bellard

260 a993ba85 bellard
   The information for the post-ev5 architecture extensions BWX, CIX and
261 a993ba85 bellard
   MAX came from version 3 of this same document, which is also available
262 a993ba85 bellard
   on-line at http://ftp.digital.com/pub/Digital/info/semiconductor
263 a993ba85 bellard
   /literature/alphahb2.pdf
264 a993ba85 bellard

265 a993ba85 bellard
   The information for the EV4 PALcode instructions was compiled from
266 a993ba85 bellard
   _DECchip 21064 and DECchip 21064A Alpha AXP Microprocessors Hardware
267 a993ba85 bellard
   Reference Manual_, Digital Order Number EC-Q9ZUA-TE, preliminary
268 a993ba85 bellard
   revision dated June 1994.
269 a993ba85 bellard

270 a993ba85 bellard
   The information for the EV5 PALcode instructions was compiled from
271 a993ba85 bellard
   _Alpha 21164 Microprocessor Hardware Reference Manual_, Digital
272 a993ba85 bellard
   Order Number EC-QAEQB-TE, preliminary revision dated April 1995.  */
273 a993ba85 bellard
 
274 a993ba85 bellard
/* Local insertion and extraction functions */
275 a993ba85 bellard
276 9262f384 Juan Quintela
static unsigned insert_rba (unsigned, int, const char **);
277 9262f384 Juan Quintela
static unsigned insert_rca (unsigned, int, const char **);
278 9262f384 Juan Quintela
static unsigned insert_za (unsigned, int, const char **);
279 9262f384 Juan Quintela
static unsigned insert_zb (unsigned, int, const char **);
280 9262f384 Juan Quintela
static unsigned insert_zc (unsigned, int, const char **);
281 9262f384 Juan Quintela
static unsigned insert_bdisp (unsigned, int, const char **);
282 9262f384 Juan Quintela
static unsigned insert_jhint (unsigned, int, const char **);
283 9262f384 Juan Quintela
static unsigned insert_ev6hwjhint (unsigned, int, const char **);
284 9262f384 Juan Quintela
285 9262f384 Juan Quintela
static int extract_rba (unsigned, int *);
286 9262f384 Juan Quintela
static int extract_rca (unsigned, int *);
287 9262f384 Juan Quintela
static int extract_za (unsigned, int *);
288 9262f384 Juan Quintela
static int extract_zb (unsigned, int *);
289 9262f384 Juan Quintela
static int extract_zc (unsigned, int *);
290 9262f384 Juan Quintela
static int extract_bdisp (unsigned, int *);
291 9262f384 Juan Quintela
static int extract_jhint (unsigned, int *);
292 9262f384 Juan Quintela
static int extract_ev6hwjhint (unsigned, int *);
293 a993ba85 bellard
294 a993ba85 bellard
 
295 a993ba85 bellard
/* The operands table  */
296 a993ba85 bellard
297 a993ba85 bellard
const struct alpha_operand alpha_operands[] =
298 a993ba85 bellard
{
299 a993ba85 bellard
  /* The fields are bits, shift, insert, extract, flags */
300 a993ba85 bellard
  /* The zero index is used to indicate end-of-list */
301 a993ba85 bellard
#define UNUSED                0
302 a993ba85 bellard
  { 0, 0, 0, 0, 0, 0 },
303 a993ba85 bellard
304 a993ba85 bellard
  /* The plain integer register fields */
305 a993ba85 bellard
#define RA                (UNUSED + 1)
306 a993ba85 bellard
  { 5, 21, 0, AXP_OPERAND_IR, 0, 0 },
307 a993ba85 bellard
#define RB                (RA + 1)
308 a993ba85 bellard
  { 5, 16, 0, AXP_OPERAND_IR, 0, 0 },
309 a993ba85 bellard
#define RC                (RB + 1)
310 a993ba85 bellard
  { 5, 0, 0, AXP_OPERAND_IR, 0, 0 },
311 a993ba85 bellard
312 a993ba85 bellard
  /* The plain fp register fields */
313 a993ba85 bellard
#define FA                (RC + 1)
314 a993ba85 bellard
  { 5, 21, 0, AXP_OPERAND_FPR, 0, 0 },
315 a993ba85 bellard
#define FB                (FA + 1)
316 a993ba85 bellard
  { 5, 16, 0, AXP_OPERAND_FPR, 0, 0 },
317 a993ba85 bellard
#define FC                (FB + 1)
318 a993ba85 bellard
  { 5, 0, 0, AXP_OPERAND_FPR, 0, 0 },
319 a993ba85 bellard
320 a993ba85 bellard
  /* The integer registers when they are ZERO */
321 a993ba85 bellard
#define ZA                (FC + 1)
322 a993ba85 bellard
  { 5, 21, 0, AXP_OPERAND_FAKE, insert_za, extract_za },
323 a993ba85 bellard
#define ZB                (ZA + 1)
324 a993ba85 bellard
  { 5, 16, 0, AXP_OPERAND_FAKE, insert_zb, extract_zb },
325 a993ba85 bellard
#define ZC                (ZB + 1)
326 a993ba85 bellard
  { 5, 0, 0, AXP_OPERAND_FAKE, insert_zc, extract_zc },
327 a993ba85 bellard
328 a993ba85 bellard
  /* The RB field when it needs parentheses */
329 a993ba85 bellard
#define PRB                (ZC + 1)
330 a993ba85 bellard
  { 5, 16, 0, AXP_OPERAND_IR|AXP_OPERAND_PARENS, 0, 0 },
331 a993ba85 bellard
332 a993ba85 bellard
  /* The RB field when it needs parentheses _and_ a preceding comma */
333 a993ba85 bellard
#define CPRB                (PRB + 1)
334 a993ba85 bellard
  { 5, 16, 0,
335 a993ba85 bellard
    AXP_OPERAND_IR|AXP_OPERAND_PARENS|AXP_OPERAND_COMMA, 0, 0 },
336 a993ba85 bellard
337 a993ba85 bellard
  /* The RB field when it must be the same as the RA field */
338 a993ba85 bellard
#define RBA                (CPRB + 1)
339 a993ba85 bellard
  { 5, 16, 0, AXP_OPERAND_FAKE, insert_rba, extract_rba },
340 a993ba85 bellard
341 a993ba85 bellard
  /* The RC field when it must be the same as the RB field */
342 a993ba85 bellard
#define RCA                (RBA + 1)
343 a993ba85 bellard
  { 5, 0, 0, AXP_OPERAND_FAKE, insert_rca, extract_rca },
344 a993ba85 bellard
345 a993ba85 bellard
  /* The RC field when it can *default* to RA */
346 a993ba85 bellard
#define DRC1                (RCA + 1)
347 a993ba85 bellard
  { 5, 0, 0,
348 a993ba85 bellard
    AXP_OPERAND_IR|AXP_OPERAND_DEFAULT_FIRST, 0, 0 },
349 a993ba85 bellard
350 a993ba85 bellard
  /* The RC field when it can *default* to RB */
351 a993ba85 bellard
#define DRC2                (DRC1 + 1)
352 a993ba85 bellard
  { 5, 0, 0,
353 a993ba85 bellard
    AXP_OPERAND_IR|AXP_OPERAND_DEFAULT_SECOND, 0, 0 },
354 a993ba85 bellard
355 a993ba85 bellard
  /* The FC field when it can *default* to RA */
356 a993ba85 bellard
#define DFC1                (DRC2 + 1)
357 a993ba85 bellard
  { 5, 0, 0,
358 a993ba85 bellard
    AXP_OPERAND_FPR|AXP_OPERAND_DEFAULT_FIRST, 0, 0 },
359 a993ba85 bellard
360 a993ba85 bellard
  /* The FC field when it can *default* to RB */
361 a993ba85 bellard
#define DFC2                (DFC1 + 1)
362 a993ba85 bellard
  { 5, 0, 0,
363 a993ba85 bellard
    AXP_OPERAND_FPR|AXP_OPERAND_DEFAULT_SECOND, 0, 0 },
364 a993ba85 bellard
365 a993ba85 bellard
  /* The unsigned 8-bit literal of Operate format insns */
366 a993ba85 bellard
#define LIT                (DFC2 + 1)
367 a993ba85 bellard
  { 8, 13, -LIT, AXP_OPERAND_UNSIGNED, 0, 0 },
368 a993ba85 bellard
369 a993ba85 bellard
  /* The signed 16-bit displacement of Memory format insns.  From here
370 a993ba85 bellard
     we can't tell what relocation should be used, so don't use a default. */
371 a993ba85 bellard
#define MDISP                (LIT + 1)
372 a993ba85 bellard
  { 16, 0, -MDISP, AXP_OPERAND_SIGNED, 0, 0 },
373 a993ba85 bellard
374 a993ba85 bellard
  /* The signed "23-bit" aligned displacement of Branch format insns */
375 a993ba85 bellard
#define BDISP                (MDISP + 1)
376 5fafdf24 ths
  { 21, 0, BFD_RELOC_23_PCREL_S2,
377 a993ba85 bellard
    AXP_OPERAND_RELATIVE, insert_bdisp, extract_bdisp },
378 a993ba85 bellard
379 a993ba85 bellard
  /* The 26-bit PALcode function */
380 a993ba85 bellard
#define PALFN                (BDISP + 1)
381 a993ba85 bellard
  { 26, 0, -PALFN, AXP_OPERAND_UNSIGNED, 0, 0 },
382 a993ba85 bellard
383 a993ba85 bellard
  /* The optional signed "16-bit" aligned displacement of the JMP/JSR hint */
384 a993ba85 bellard
#define JMPHINT                (PALFN + 1)
385 a993ba85 bellard
  { 14, 0, BFD_RELOC_ALPHA_HINT,
386 a993ba85 bellard
    AXP_OPERAND_RELATIVE|AXP_OPERAND_DEFAULT_ZERO|AXP_OPERAND_NOOVERFLOW,
387 a993ba85 bellard
    insert_jhint, extract_jhint },
388 a993ba85 bellard
389 a993ba85 bellard
  /* The optional hint to RET/JSR_COROUTINE */
390 a993ba85 bellard
#define RETHINT                (JMPHINT + 1)
391 a993ba85 bellard
  { 14, 0, -RETHINT,
392 a993ba85 bellard
    AXP_OPERAND_UNSIGNED|AXP_OPERAND_DEFAULT_ZERO, 0, 0 },
393 a993ba85 bellard
394 a993ba85 bellard
  /* The 12-bit displacement for the ev[46] hw_{ld,st} (pal1b/pal1f) insns */
395 a993ba85 bellard
#define EV4HWDISP        (RETHINT + 1)
396 a993ba85 bellard
#define EV6HWDISP        (EV4HWDISP)
397 a993ba85 bellard
  { 12, 0, -EV4HWDISP, AXP_OPERAND_SIGNED, 0, 0 },
398 a993ba85 bellard
399 a993ba85 bellard
  /* The 5-bit index for the ev4 hw_m[ft]pr (pal19/pal1d) insns */
400 a993ba85 bellard
#define EV4HWINDEX        (EV4HWDISP + 1)
401 a993ba85 bellard
  { 5, 0, -EV4HWINDEX, AXP_OPERAND_UNSIGNED, 0, 0 },
402 a993ba85 bellard
403 a993ba85 bellard
  /* The 8-bit index for the oddly unqualified hw_m[tf]pr insns
404 a993ba85 bellard
     that occur in DEC PALcode.  */
405 a993ba85 bellard
#define EV4EXTHWINDEX        (EV4HWINDEX + 1)
406 a993ba85 bellard
  { 8, 0, -EV4EXTHWINDEX, AXP_OPERAND_UNSIGNED, 0, 0 },
407 a993ba85 bellard
408 a993ba85 bellard
  /* The 10-bit displacement for the ev5 hw_{ld,st} (pal1b/pal1f) insns */
409 a993ba85 bellard
#define EV5HWDISP        (EV4EXTHWINDEX + 1)
410 a993ba85 bellard
  { 10, 0, -EV5HWDISP, AXP_OPERAND_SIGNED, 0, 0 },
411 a993ba85 bellard
412 a993ba85 bellard
  /* The 16-bit index for the ev5 hw_m[ft]pr (pal19/pal1d) insns */
413 a993ba85 bellard
#define EV5HWINDEX        (EV5HWDISP + 1)
414 a993ba85 bellard
  { 16, 0, -EV5HWINDEX, AXP_OPERAND_UNSIGNED, 0, 0 },
415 a993ba85 bellard
416 a993ba85 bellard
  /* The 16-bit combined index/scoreboard mask for the ev6
417 a993ba85 bellard
     hw_m[ft]pr (pal19/pal1d) insns */
418 a993ba85 bellard
#define EV6HWINDEX        (EV5HWINDEX + 1)
419 a993ba85 bellard
  { 16, 0, -EV6HWINDEX, AXP_OPERAND_UNSIGNED, 0, 0 },
420 a993ba85 bellard
421 a993ba85 bellard
  /* The 13-bit branch hint for the ev6 hw_jmp/jsr (pal1e) insn */
422 a993ba85 bellard
#define EV6HWJMPHINT        (EV6HWINDEX+ 1)
423 a993ba85 bellard
  { 8, 0, -EV6HWJMPHINT,
424 a993ba85 bellard
    AXP_OPERAND_RELATIVE|AXP_OPERAND_DEFAULT_ZERO|AXP_OPERAND_NOOVERFLOW,
425 a993ba85 bellard
    insert_ev6hwjhint, extract_ev6hwjhint }
426 a993ba85 bellard
};
427 a993ba85 bellard
428 a993ba85 bellard
const unsigned alpha_num_operands = sizeof(alpha_operands)/sizeof(*alpha_operands);
429 a993ba85 bellard
430 a993ba85 bellard
/* The RB field when it is the same as the RA field in the same insn.
431 a993ba85 bellard
   This operand is marked fake.  The insertion function just copies
432 a993ba85 bellard
   the RA field into the RB field, and the extraction function just
433 a993ba85 bellard
   checks that the fields are the same. */
434 a993ba85 bellard
435 a993ba85 bellard
/*ARGSUSED*/
436 a993ba85 bellard
static unsigned
437 668a38fc Juan Quintela
insert_rba(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
438 a993ba85 bellard
{
439 a993ba85 bellard
  return insn | (((insn >> 21) & 0x1f) << 16);
440 a993ba85 bellard
}
441 a993ba85 bellard
442 a993ba85 bellard
static int
443 668a38fc Juan Quintela
extract_rba(unsigned insn, int *invalid)
444 a993ba85 bellard
{
445 a993ba85 bellard
  if (invalid != (int *) NULL
446 a993ba85 bellard
      && ((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f))
447 a993ba85 bellard
    *invalid = 1;
448 a993ba85 bellard
  return 0;
449 a993ba85 bellard
}
450 a993ba85 bellard
451 a993ba85 bellard
452 a993ba85 bellard
/* The same for the RC field */
453 a993ba85 bellard
454 a993ba85 bellard
/*ARGSUSED*/
455 a993ba85 bellard
static unsigned
456 668a38fc Juan Quintela
insert_rca(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
457 a993ba85 bellard
{
458 a993ba85 bellard
  return insn | ((insn >> 21) & 0x1f);
459 a993ba85 bellard
}
460 a993ba85 bellard
461 a993ba85 bellard
static int
462 668a38fc Juan Quintela
extract_rca(unsigned insn, int *invalid)
463 a993ba85 bellard
{
464 a993ba85 bellard
  if (invalid != (int *) NULL
465 a993ba85 bellard
      && ((insn >> 21) & 0x1f) != (insn & 0x1f))
466 a993ba85 bellard
    *invalid = 1;
467 a993ba85 bellard
  return 0;
468 a993ba85 bellard
}
469 a993ba85 bellard
470 a993ba85 bellard
471 a993ba85 bellard
/* Fake arguments in which the registers must be set to ZERO */
472 a993ba85 bellard
473 a993ba85 bellard
/*ARGSUSED*/
474 a993ba85 bellard
static unsigned
475 668a38fc Juan Quintela
insert_za(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
476 a993ba85 bellard
{
477 a993ba85 bellard
  return insn | (31 << 21);
478 a993ba85 bellard
}
479 a993ba85 bellard
480 a993ba85 bellard
static int
481 668a38fc Juan Quintela
extract_za(unsigned insn, int *invalid)
482 a993ba85 bellard
{
483 a993ba85 bellard
  if (invalid != (int *) NULL && ((insn >> 21) & 0x1f) != 31)
484 a993ba85 bellard
    *invalid = 1;
485 a993ba85 bellard
  return 0;
486 a993ba85 bellard
}
487 a993ba85 bellard
488 a993ba85 bellard
/*ARGSUSED*/
489 a993ba85 bellard
static unsigned
490 668a38fc Juan Quintela
insert_zb(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
491 a993ba85 bellard
{
492 a993ba85 bellard
  return insn | (31 << 16);
493 a993ba85 bellard
}
494 a993ba85 bellard
495 a993ba85 bellard
static int
496 668a38fc Juan Quintela
extract_zb(unsigned insn, int *invalid)
497 a993ba85 bellard
{
498 a993ba85 bellard
  if (invalid != (int *) NULL && ((insn >> 16) & 0x1f) != 31)
499 a993ba85 bellard
    *invalid = 1;
500 a993ba85 bellard
  return 0;
501 a993ba85 bellard
}
502 a993ba85 bellard
503 a993ba85 bellard
/*ARGSUSED*/
504 a993ba85 bellard
static unsigned
505 668a38fc Juan Quintela
insert_zc(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
506 a993ba85 bellard
{
507 a993ba85 bellard
  return insn | 31;
508 a993ba85 bellard
}
509 a993ba85 bellard
510 a993ba85 bellard
static int
511 668a38fc Juan Quintela
extract_zc(unsigned insn, int *invalid)
512 a993ba85 bellard
{
513 a993ba85 bellard
  if (invalid != (int *) NULL && (insn & 0x1f) != 31)
514 a993ba85 bellard
    *invalid = 1;
515 a993ba85 bellard
  return 0;
516 a993ba85 bellard
}
517 a993ba85 bellard
518 a993ba85 bellard
519 a993ba85 bellard
/* The displacement field of a Branch format insn.  */
520 a993ba85 bellard
521 a993ba85 bellard
static unsigned
522 668a38fc Juan Quintela
insert_bdisp(unsigned insn, int value, const char **errmsg)
523 a993ba85 bellard
{
524 a993ba85 bellard
  if (errmsg != (const char **)NULL && (value & 3))
525 a993ba85 bellard
    *errmsg = _("branch operand unaligned");
526 a993ba85 bellard
  return insn | ((value / 4) & 0x1FFFFF);
527 a993ba85 bellard
}
528 a993ba85 bellard
529 a993ba85 bellard
/*ARGSUSED*/
530 a993ba85 bellard
static int
531 668a38fc Juan Quintela
extract_bdisp(unsigned insn, int *invalid ATTRIBUTE_UNUSED)
532 a993ba85 bellard
{
533 a993ba85 bellard
  return 4 * (((insn & 0x1FFFFF) ^ 0x100000) - 0x100000);
534 a993ba85 bellard
}
535 a993ba85 bellard
536 a993ba85 bellard
537 a993ba85 bellard
/* The hint field of a JMP/JSR insn.  */
538 a993ba85 bellard
539 a993ba85 bellard
static unsigned
540 668a38fc Juan Quintela
insert_jhint(unsigned insn, int value, const char **errmsg)
541 a993ba85 bellard
{
542 a993ba85 bellard
  if (errmsg != (const char **)NULL && (value & 3))
543 a993ba85 bellard
    *errmsg = _("jump hint unaligned");
544 a993ba85 bellard
  return insn | ((value / 4) & 0x3FFF);
545 a993ba85 bellard
}
546 a993ba85 bellard
547 a993ba85 bellard
/*ARGSUSED*/
548 a993ba85 bellard
static int
549 668a38fc Juan Quintela
extract_jhint(unsigned insn, int *invalid ATTRIBUTE_UNUSED)
550 a993ba85 bellard
{
551 a993ba85 bellard
  return 4 * (((insn & 0x3FFF) ^ 0x2000) - 0x2000);
552 a993ba85 bellard
}
553 a993ba85 bellard
554 a993ba85 bellard
/* The hint field of an EV6 HW_JMP/JSR insn.  */
555 a993ba85 bellard
556 a993ba85 bellard
static unsigned
557 668a38fc Juan Quintela
insert_ev6hwjhint(unsigned insn, int value, const char **errmsg)
558 a993ba85 bellard
{
559 a993ba85 bellard
  if (errmsg != (const char **)NULL && (value & 3))
560 a993ba85 bellard
    *errmsg = _("jump hint unaligned");
561 a993ba85 bellard
  return insn | ((value / 4) & 0x1FFF);
562 a993ba85 bellard
}
563 a993ba85 bellard
564 a993ba85 bellard
/*ARGSUSED*/
565 a993ba85 bellard
static int
566 668a38fc Juan Quintela
extract_ev6hwjhint(unsigned insn, int *invalid ATTRIBUTE_UNUSED)
567 a993ba85 bellard
{
568 a993ba85 bellard
  return 4 * (((insn & 0x1FFF) ^ 0x1000) - 0x1000);
569 a993ba85 bellard
}
570 a993ba85 bellard
571 a993ba85 bellard
 
572 a993ba85 bellard
/* Macros used to form opcodes */
573 a993ba85 bellard
574 a993ba85 bellard
/* The main opcode */
575 a993ba85 bellard
#define OP(x)                (((x) & 0x3F) << 26)
576 a993ba85 bellard
#define OP_MASK                0xFC000000
577 a993ba85 bellard
578 a993ba85 bellard
/* Branch format instructions */
579 a993ba85 bellard
#define BRA_(oo)        OP(oo)
580 a993ba85 bellard
#define BRA_MASK        OP_MASK
581 a993ba85 bellard
#define BRA(oo)                BRA_(oo), BRA_MASK
582 a993ba85 bellard
583 a993ba85 bellard
/* Floating point format instructions */
584 a993ba85 bellard
#define FP_(oo,fff)        (OP(oo) | (((fff) & 0x7FF) << 5))
585 a993ba85 bellard
#define FP_MASK                (OP_MASK | 0xFFE0)
586 a993ba85 bellard
#define FP(oo,fff)        FP_(oo,fff), FP_MASK
587 a993ba85 bellard
588 a993ba85 bellard
/* Memory format instructions */
589 a993ba85 bellard
#define MEM_(oo)        OP(oo)
590 a993ba85 bellard
#define MEM_MASK        OP_MASK
591 a993ba85 bellard
#define MEM(oo)                MEM_(oo), MEM_MASK
592 a993ba85 bellard
593 a993ba85 bellard
/* Memory/Func Code format instructions */
594 a993ba85 bellard
#define MFC_(oo,ffff)        (OP(oo) | ((ffff) & 0xFFFF))
595 a993ba85 bellard
#define MFC_MASK        (OP_MASK | 0xFFFF)
596 a993ba85 bellard
#define MFC(oo,ffff)        MFC_(oo,ffff), MFC_MASK
597 a993ba85 bellard
598 a993ba85 bellard
/* Memory/Branch format instructions */
599 a993ba85 bellard
#define MBR_(oo,h)        (OP(oo) | (((h) & 3) << 14))
600 a993ba85 bellard
#define MBR_MASK        (OP_MASK | 0xC000)
601 a993ba85 bellard
#define MBR(oo,h)        MBR_(oo,h), MBR_MASK
602 a993ba85 bellard
603 a993ba85 bellard
/* Operate format instructions.  The OPRL variant specifies a
604 a993ba85 bellard
   literal second argument. */
605 a993ba85 bellard
#define OPR_(oo,ff)        (OP(oo) | (((ff) & 0x7F) << 5))
606 a993ba85 bellard
#define OPRL_(oo,ff)        (OPR_((oo),(ff)) | 0x1000)
607 a993ba85 bellard
#define OPR_MASK        (OP_MASK | 0x1FE0)
608 a993ba85 bellard
#define OPR(oo,ff)        OPR_(oo,ff), OPR_MASK
609 a993ba85 bellard
#define OPRL(oo,ff)        OPRL_(oo,ff), OPR_MASK
610 a993ba85 bellard
611 a993ba85 bellard
/* Generic PALcode format instructions */
612 a993ba85 bellard
#define PCD_(oo)        OP(oo)
613 a993ba85 bellard
#define PCD_MASK        OP_MASK
614 a993ba85 bellard
#define PCD(oo)                PCD_(oo), PCD_MASK
615 a993ba85 bellard
616 a993ba85 bellard
/* Specific PALcode instructions */
617 a993ba85 bellard
#define SPCD_(oo,ffff)        (OP(oo) | ((ffff) & 0x3FFFFFF))
618 a993ba85 bellard
#define SPCD_MASK        0xFFFFFFFF
619 a993ba85 bellard
#define SPCD(oo,ffff)        SPCD_(oo,ffff), SPCD_MASK
620 a993ba85 bellard
621 a993ba85 bellard
/* Hardware memory (hw_{ld,st}) instructions */
622 a993ba85 bellard
#define EV4HWMEM_(oo,f)        (OP(oo) | (((f) & 0xF) << 12))
623 a993ba85 bellard
#define EV4HWMEM_MASK        (OP_MASK | 0xF000)
624 a993ba85 bellard
#define EV4HWMEM(oo,f)        EV4HWMEM_(oo,f), EV4HWMEM_MASK
625 a993ba85 bellard
626 a993ba85 bellard
#define EV5HWMEM_(oo,f)        (OP(oo) | (((f) & 0x3F) << 10))
627 a993ba85 bellard
#define EV5HWMEM_MASK        (OP_MASK | 0xF800)
628 a993ba85 bellard
#define EV5HWMEM(oo,f)        EV5HWMEM_(oo,f), EV5HWMEM_MASK
629 a993ba85 bellard
630 a993ba85 bellard
#define EV6HWMEM_(oo,f)        (OP(oo) | (((f) & 0xF) << 12))
631 a993ba85 bellard
#define EV6HWMEM_MASK        (OP_MASK | 0xF000)
632 a993ba85 bellard
#define EV6HWMEM(oo,f)        EV6HWMEM_(oo,f), EV6HWMEM_MASK
633 a993ba85 bellard
634 a993ba85 bellard
#define EV6HWMBR_(oo,h)        (OP(oo) | (((h) & 7) << 13))
635 a993ba85 bellard
#define EV6HWMBR_MASK        (OP_MASK | 0xE000)
636 a993ba85 bellard
#define EV6HWMBR(oo,h)        EV6HWMBR_(oo,h), EV6HWMBR_MASK
637 a993ba85 bellard
638 a993ba85 bellard
/* Abbreviations for instruction subsets.  */
639 a993ba85 bellard
#define BASE                        AXP_OPCODE_BASE
640 a993ba85 bellard
#define EV4                        AXP_OPCODE_EV4
641 a993ba85 bellard
#define EV5                        AXP_OPCODE_EV5
642 a993ba85 bellard
#define EV6                        AXP_OPCODE_EV6
643 a993ba85 bellard
#define BWX                        AXP_OPCODE_BWX
644 a993ba85 bellard
#define CIX                        AXP_OPCODE_CIX
645 a993ba85 bellard
#define MAX                        AXP_OPCODE_MAX
646 a993ba85 bellard
647 a993ba85 bellard
/* Common combinations of arguments */
648 a993ba85 bellard
#define ARG_NONE                { 0 }
649 a993ba85 bellard
#define ARG_BRA                        { RA, BDISP }
650 a993ba85 bellard
#define ARG_FBRA                { FA, BDISP }
651 a993ba85 bellard
#define ARG_FP                        { FA, FB, DFC1 }
652 a993ba85 bellard
#define ARG_FPZ1                { ZA, FB, DFC1 }
653 a993ba85 bellard
#define ARG_MEM                        { RA, MDISP, PRB }
654 a993ba85 bellard
#define ARG_FMEM                { FA, MDISP, PRB }
655 a993ba85 bellard
#define ARG_OPR                        { RA, RB, DRC1 }
656 a993ba85 bellard
#define ARG_OPRL                { RA, LIT, DRC1 }
657 a993ba85 bellard
#define ARG_OPRZ1                { ZA, RB, DRC1 }
658 a993ba85 bellard
#define ARG_OPRLZ1                { ZA, LIT, RC }
659 a993ba85 bellard
#define ARG_PCD                        { PALFN }
660 a993ba85 bellard
#define ARG_EV4HWMEM                { RA, EV4HWDISP, PRB }
661 a993ba85 bellard
#define ARG_EV4HWMPR                { RA, RBA, EV4HWINDEX }
662 a993ba85 bellard
#define ARG_EV5HWMEM                { RA, EV5HWDISP, PRB }
663 a993ba85 bellard
#define ARG_EV6HWMEM                { RA, EV6HWDISP, PRB }
664 a993ba85 bellard
 
665 a993ba85 bellard
/* The opcode table.
666 a993ba85 bellard

667 a993ba85 bellard
   The format of the opcode table is:
668 a993ba85 bellard

669 a993ba85 bellard
   NAME OPCODE MASK { OPERANDS }
670 a993ba85 bellard

671 a993ba85 bellard
   NAME                is the name of the instruction.
672 a993ba85 bellard

673 a993ba85 bellard
   OPCODE        is the instruction opcode.
674 a993ba85 bellard

675 a993ba85 bellard
   MASK                is the opcode mask; this is used to tell the disassembler
676 a993ba85 bellard
                    which bits in the actual opcode must match OPCODE.
677 a993ba85 bellard

678 a993ba85 bellard
   OPERANDS        is the list of operands.
679 a993ba85 bellard

680 a993ba85 bellard
   The preceding macros merge the text of the OPCODE and MASK fields.
681 a993ba85 bellard

682 a993ba85 bellard
   The disassembler reads the table in order and prints the first
683 a993ba85 bellard
   instruction which matches, so this table is sorted to put more
684 a993ba85 bellard
   specific instructions before more general instructions.
685 a993ba85 bellard

686 a993ba85 bellard
   Otherwise, it is sorted by major opcode and minor function code.
687 a993ba85 bellard

688 a993ba85 bellard
   There are three classes of not-really-instructions in this table:
689 a993ba85 bellard

690 a993ba85 bellard
   ALIAS        is another name for another instruction.  Some of
691 a993ba85 bellard
                these come from the Architecture Handbook, some
692 a993ba85 bellard
                come from the original gas opcode tables.  In all
693 a993ba85 bellard
                cases, the functionality of the opcode is unchanged.
694 a993ba85 bellard

695 a993ba85 bellard
   PSEUDO        a stylized code form endorsed by Chapter A.4 of the
696 a993ba85 bellard
                Architecture Handbook.
697 a993ba85 bellard

698 a993ba85 bellard
   EXTRA        a stylized code form found in the original gas tables.
699 a993ba85 bellard

700 a993ba85 bellard
   And two annotations:
701 a993ba85 bellard

702 a993ba85 bellard
   EV56 BUT        opcodes that are officially introduced as of the ev56,
703 a993ba85 bellard
                   but with defined results on previous implementations.
704 a993ba85 bellard

705 a993ba85 bellard
   EV56 UNA        opcodes that were introduced as of the ev56 with
706 a993ba85 bellard
                   presumably undefined results on previous implementations
707 a993ba85 bellard
                that were not assigned to a particular extension.
708 a993ba85 bellard
*/
709 a993ba85 bellard
710 a993ba85 bellard
const struct alpha_opcode alpha_opcodes[] = {
711 a993ba85 bellard
  { "halt",                SPCD(0x00,0x0000), BASE, ARG_NONE },
712 a993ba85 bellard
  { "draina",                SPCD(0x00,0x0002), BASE, ARG_NONE },
713 a993ba85 bellard
  { "bpt",                SPCD(0x00,0x0080), BASE, ARG_NONE },
714 a993ba85 bellard
  { "bugchk",                SPCD(0x00,0x0081), BASE, ARG_NONE },
715 a993ba85 bellard
  { "callsys",                SPCD(0x00,0x0083), BASE, ARG_NONE },
716 a993ba85 bellard
  { "chmk",                 SPCD(0x00,0x0083), BASE, ARG_NONE },
717 a993ba85 bellard
  { "imb",                SPCD(0x00,0x0086), BASE, ARG_NONE },
718 a993ba85 bellard
  { "rduniq",                SPCD(0x00,0x009e), BASE, ARG_NONE },
719 a993ba85 bellard
  { "wruniq",                SPCD(0x00,0x009f), BASE, ARG_NONE },
720 a993ba85 bellard
  { "gentrap",                SPCD(0x00,0x00aa), BASE, ARG_NONE },
721 a993ba85 bellard
  { "call_pal",                PCD(0x00), BASE, ARG_PCD },
722 a993ba85 bellard
  { "pal",                PCD(0x00), BASE, ARG_PCD },                /* alias */
723 a993ba85 bellard
724 a993ba85 bellard
  { "lda",                MEM(0x08), BASE, { RA, MDISP, ZB } },        /* pseudo */
725 a993ba85 bellard
  { "lda",                MEM(0x08), BASE, ARG_MEM },
726 a993ba85 bellard
  { "ldah",                MEM(0x09), BASE, { RA, MDISP, ZB } },        /* pseudo */
727 a993ba85 bellard
  { "ldah",                MEM(0x09), BASE, ARG_MEM },
728 a993ba85 bellard
  { "ldbu",                MEM(0x0A), BWX, ARG_MEM },
729 a993ba85 bellard
  { "unop",                MEM_(0x0B) | (30 << 16),
730 a993ba85 bellard
                        MEM_MASK, BASE, { ZA } },                /* pseudo */
731 a993ba85 bellard
  { "ldq_u",                MEM(0x0B), BASE, ARG_MEM },
732 a993ba85 bellard
  { "ldwu",                MEM(0x0C), BWX, ARG_MEM },
733 a993ba85 bellard
  { "stw",                MEM(0x0D), BWX, ARG_MEM },
734 a993ba85 bellard
  { "stb",                MEM(0x0E), BWX, ARG_MEM },
735 a993ba85 bellard
  { "stq_u",                MEM(0x0F), BASE, ARG_MEM },
736 a993ba85 bellard
737 a993ba85 bellard
  { "sextl",                OPR(0x10,0x00), BASE, ARG_OPRZ1 },        /* pseudo */
738 a993ba85 bellard
  { "sextl",                OPRL(0x10,0x00), BASE, ARG_OPRLZ1 },        /* pseudo */
739 a993ba85 bellard
  { "addl",                OPR(0x10,0x00), BASE, ARG_OPR },
740 a993ba85 bellard
  { "addl",                OPRL(0x10,0x00), BASE, ARG_OPRL },
741 a993ba85 bellard
  { "s4addl",                OPR(0x10,0x02), BASE, ARG_OPR },
742 a993ba85 bellard
  { "s4addl",                OPRL(0x10,0x02), BASE, ARG_OPRL },
743 a993ba85 bellard
  { "negl",                OPR(0x10,0x09), BASE, ARG_OPRZ1 },        /* pseudo */
744 a993ba85 bellard
  { "negl",                OPRL(0x10,0x09), BASE, ARG_OPRLZ1 },        /* pseudo */
745 a993ba85 bellard
  { "subl",                OPR(0x10,0x09), BASE, ARG_OPR },
746 a993ba85 bellard
  { "subl",                OPRL(0x10,0x09), BASE, ARG_OPRL },
747 a993ba85 bellard
  { "s4subl",                OPR(0x10,0x0B), BASE, ARG_OPR },
748 a993ba85 bellard
  { "s4subl",                OPRL(0x10,0x0B), BASE, ARG_OPRL },
749 a993ba85 bellard
  { "cmpbge",                OPR(0x10,0x0F), BASE, ARG_OPR },
750 a993ba85 bellard
  { "cmpbge",                OPRL(0x10,0x0F), BASE, ARG_OPRL },
751 a993ba85 bellard
  { "s8addl",                OPR(0x10,0x12), BASE, ARG_OPR },
752 a993ba85 bellard
  { "s8addl",                OPRL(0x10,0x12), BASE, ARG_OPRL },
753 a993ba85 bellard
  { "s8subl",                OPR(0x10,0x1B), BASE, ARG_OPR },
754 a993ba85 bellard
  { "s8subl",                OPRL(0x10,0x1B), BASE, ARG_OPRL },
755 a993ba85 bellard
  { "cmpult",                OPR(0x10,0x1D), BASE, ARG_OPR },
756 a993ba85 bellard
  { "cmpult",                OPRL(0x10,0x1D), BASE, ARG_OPRL },
757 a993ba85 bellard
  { "addq",                OPR(0x10,0x20), BASE, ARG_OPR },
758 a993ba85 bellard
  { "addq",                OPRL(0x10,0x20), BASE, ARG_OPRL },
759 a993ba85 bellard
  { "s4addq",                OPR(0x10,0x22), BASE, ARG_OPR },
760 a993ba85 bellard
  { "s4addq",                OPRL(0x10,0x22), BASE, ARG_OPRL },
761 a993ba85 bellard
  { "negq",                 OPR(0x10,0x29), BASE, ARG_OPRZ1 },        /* pseudo */
762 a993ba85 bellard
  { "negq",                 OPRL(0x10,0x29), BASE, ARG_OPRLZ1 },        /* pseudo */
763 a993ba85 bellard
  { "subq",                OPR(0x10,0x29), BASE, ARG_OPR },
764 a993ba85 bellard
  { "subq",                OPRL(0x10,0x29), BASE, ARG_OPRL },
765 a993ba85 bellard
  { "s4subq",                OPR(0x10,0x2B), BASE, ARG_OPR },
766 a993ba85 bellard
  { "s4subq",                OPRL(0x10,0x2B), BASE, ARG_OPRL },
767 a993ba85 bellard
  { "cmpeq",                OPR(0x10,0x2D), BASE, ARG_OPR },
768 a993ba85 bellard
  { "cmpeq",                OPRL(0x10,0x2D), BASE, ARG_OPRL },
769 a993ba85 bellard
  { "s8addq",                OPR(0x10,0x32), BASE, ARG_OPR },
770 a993ba85 bellard
  { "s8addq",                OPRL(0x10,0x32), BASE, ARG_OPRL },
771 a993ba85 bellard
  { "s8subq",                OPR(0x10,0x3B), BASE, ARG_OPR },
772 a993ba85 bellard
  { "s8subq",                OPRL(0x10,0x3B), BASE, ARG_OPRL },
773 a993ba85 bellard
  { "cmpule",                OPR(0x10,0x3D), BASE, ARG_OPR },
774 a993ba85 bellard
  { "cmpule",                OPRL(0x10,0x3D), BASE, ARG_OPRL },
775 a993ba85 bellard
  { "addl/v",                OPR(0x10,0x40), BASE, ARG_OPR },
776 a993ba85 bellard
  { "addl/v",                OPRL(0x10,0x40), BASE, ARG_OPRL },
777 a993ba85 bellard
  { "negl/v",                OPR(0x10,0x49), BASE, ARG_OPRZ1 },        /* pseudo */
778 a993ba85 bellard
  { "negl/v",                OPRL(0x10,0x49), BASE, ARG_OPRLZ1 },        /* pseudo */
779 a993ba85 bellard
  { "subl/v",                OPR(0x10,0x49), BASE, ARG_OPR },
780 a993ba85 bellard
  { "subl/v",                OPRL(0x10,0x49), BASE, ARG_OPRL },
781 a993ba85 bellard
  { "cmplt",                OPR(0x10,0x4D), BASE, ARG_OPR },
782 a993ba85 bellard
  { "cmplt",                OPRL(0x10,0x4D), BASE, ARG_OPRL },
783 a993ba85 bellard
  { "addq/v",                OPR(0x10,0x60), BASE, ARG_OPR },
784 a993ba85 bellard
  { "addq/v",                OPRL(0x10,0x60), BASE, ARG_OPRL },
785 a993ba85 bellard
  { "negq/v",                OPR(0x10,0x69), BASE, ARG_OPRZ1 },        /* pseudo */
786 a993ba85 bellard
  { "negq/v",                OPRL(0x10,0x69), BASE, ARG_OPRLZ1 },        /* pseudo */
787 a993ba85 bellard
  { "subq/v",                OPR(0x10,0x69), BASE, ARG_OPR },
788 a993ba85 bellard
  { "subq/v",                OPRL(0x10,0x69), BASE, ARG_OPRL },
789 a993ba85 bellard
  { "cmple",                OPR(0x10,0x6D), BASE, ARG_OPR },
790 a993ba85 bellard
  { "cmple",                OPRL(0x10,0x6D), BASE, ARG_OPRL },
791 a993ba85 bellard
792 a993ba85 bellard
  { "and",                OPR(0x11,0x00), BASE, ARG_OPR },
793 a993ba85 bellard
  { "and",                OPRL(0x11,0x00), BASE, ARG_OPRL },
794 a993ba85 bellard
  { "andnot",                OPR(0x11,0x08), BASE, ARG_OPR },        /* alias */
795 a993ba85 bellard
  { "andnot",                OPRL(0x11,0x08), BASE, ARG_OPRL },        /* alias */
796 a993ba85 bellard
  { "bic",                OPR(0x11,0x08), BASE, ARG_OPR },
797 a993ba85 bellard
  { "bic",                OPRL(0x11,0x08), BASE, ARG_OPRL },
798 a993ba85 bellard
  { "cmovlbs",                OPR(0x11,0x14), BASE, ARG_OPR },
799 a993ba85 bellard
  { "cmovlbs",                OPRL(0x11,0x14), BASE, ARG_OPRL },
800 a993ba85 bellard
  { "cmovlbc",                OPR(0x11,0x16), BASE, ARG_OPR },
801 a993ba85 bellard
  { "cmovlbc",                OPRL(0x11,0x16), BASE, ARG_OPRL },
802 a993ba85 bellard
  { "nop",                OPR(0x11,0x20), BASE, { ZA, ZB, ZC } }, /* pseudo */
803 a993ba85 bellard
  { "clr",                OPR(0x11,0x20), BASE, { ZA, ZB, RC } }, /* pseudo */
804 a993ba85 bellard
  { "mov",                OPR(0x11,0x20), BASE, { ZA, RB, RC } }, /* pseudo */
805 a993ba85 bellard
  { "mov",                OPR(0x11,0x20), BASE, { RA, RBA, RC } }, /* pseudo */
806 a993ba85 bellard
  { "mov",                OPRL(0x11,0x20), BASE, { ZA, LIT, RC } }, /* pseudo */
807 a993ba85 bellard
  { "or",                OPR(0x11,0x20), BASE, ARG_OPR },        /* alias */
808 a993ba85 bellard
  { "or",                OPRL(0x11,0x20), BASE, ARG_OPRL },        /* alias */
809 a993ba85 bellard
  { "bis",                OPR(0x11,0x20), BASE, ARG_OPR },
810 a993ba85 bellard
  { "bis",                OPRL(0x11,0x20), BASE, ARG_OPRL },
811 a993ba85 bellard
  { "cmoveq",                OPR(0x11,0x24), BASE, ARG_OPR },
812 a993ba85 bellard
  { "cmoveq",                OPRL(0x11,0x24), BASE, ARG_OPRL },
813 a993ba85 bellard
  { "cmovne",                OPR(0x11,0x26), BASE, ARG_OPR },
814 a993ba85 bellard
  { "cmovne",                OPRL(0x11,0x26), BASE, ARG_OPRL },
815 a993ba85 bellard
  { "not",                OPR(0x11,0x28), BASE, ARG_OPRZ1 },        /* pseudo */
816 a993ba85 bellard
  { "not",                OPRL(0x11,0x28), BASE, ARG_OPRLZ1 },        /* pseudo */
817 a993ba85 bellard
  { "ornot",                OPR(0x11,0x28), BASE, ARG_OPR },
818 a993ba85 bellard
  { "ornot",                OPRL(0x11,0x28), BASE, ARG_OPRL },
819 a993ba85 bellard
  { "xor",                OPR(0x11,0x40), BASE, ARG_OPR },
820 a993ba85 bellard
  { "xor",                OPRL(0x11,0x40), BASE, ARG_OPRL },
821 a993ba85 bellard
  { "cmovlt",                OPR(0x11,0x44), BASE, ARG_OPR },
822 a993ba85 bellard
  { "cmovlt",                OPRL(0x11,0x44), BASE, ARG_OPRL },
823 a993ba85 bellard
  { "cmovge",                OPR(0x11,0x46), BASE, ARG_OPR },
824 a993ba85 bellard
  { "cmovge",                OPRL(0x11,0x46), BASE, ARG_OPRL },
825 a993ba85 bellard
  { "eqv",                OPR(0x11,0x48), BASE, ARG_OPR },
826 a993ba85 bellard
  { "eqv",                OPRL(0x11,0x48), BASE, ARG_OPRL },
827 a993ba85 bellard
  { "xornot",                OPR(0x11,0x48), BASE, ARG_OPR },        /* alias */
828 a993ba85 bellard
  { "xornot",                OPRL(0x11,0x48), BASE, ARG_OPRL },        /* alias */
829 a993ba85 bellard
  { "amask",                OPR(0x11,0x61), BASE, ARG_OPRZ1 },        /* ev56 but */
830 a993ba85 bellard
  { "amask",                OPRL(0x11,0x61), BASE, ARG_OPRLZ1 },        /* ev56 but */
831 a993ba85 bellard
  { "cmovle",                OPR(0x11,0x64), BASE, ARG_OPR },
832 a993ba85 bellard
  { "cmovle",                OPRL(0x11,0x64), BASE, ARG_OPRL },
833 a993ba85 bellard
  { "cmovgt",                OPR(0x11,0x66), BASE, ARG_OPR },
834 a993ba85 bellard
  { "cmovgt",                OPRL(0x11,0x66), BASE, ARG_OPRL },
835 a993ba85 bellard
  { "implver",                OPRL_(0x11,0x6C)|(31<<21)|(1<<13),
836 a993ba85 bellard
                            0xFFFFFFE0, BASE, { RC } },                /* ev56 but */
837 a993ba85 bellard
838 a993ba85 bellard
  { "mskbl",                OPR(0x12,0x02), BASE, ARG_OPR },
839 a993ba85 bellard
  { "mskbl",                OPRL(0x12,0x02), BASE, ARG_OPRL },
840 a993ba85 bellard
  { "extbl",                OPR(0x12,0x06), BASE, ARG_OPR },
841 a993ba85 bellard
  { "extbl",                OPRL(0x12,0x06), BASE, ARG_OPRL },
842 a993ba85 bellard
  { "insbl",                OPR(0x12,0x0B), BASE, ARG_OPR },
843 a993ba85 bellard
  { "insbl",                OPRL(0x12,0x0B), BASE, ARG_OPRL },
844 a993ba85 bellard
  { "mskwl",                OPR(0x12,0x12), BASE, ARG_OPR },
845 a993ba85 bellard
  { "mskwl",                OPRL(0x12,0x12), BASE, ARG_OPRL },
846 a993ba85 bellard
  { "extwl",                OPR(0x12,0x16), BASE, ARG_OPR },
847 a993ba85 bellard
  { "extwl",                OPRL(0x12,0x16), BASE, ARG_OPRL },
848 a993ba85 bellard
  { "inswl",                OPR(0x12,0x1B), BASE, ARG_OPR },
849 a993ba85 bellard
  { "inswl",                OPRL(0x12,0x1B), BASE, ARG_OPRL },
850 a993ba85 bellard
  { "mskll",                OPR(0x12,0x22), BASE, ARG_OPR },
851 a993ba85 bellard
  { "mskll",                OPRL(0x12,0x22), BASE, ARG_OPRL },
852 a993ba85 bellard
  { "extll",                OPR(0x12,0x26), BASE, ARG_OPR },
853 a993ba85 bellard
  { "extll",                OPRL(0x12,0x26), BASE, ARG_OPRL },
854 a993ba85 bellard
  { "insll",                OPR(0x12,0x2B), BASE, ARG_OPR },
855 a993ba85 bellard
  { "insll",                OPRL(0x12,0x2B), BASE, ARG_OPRL },
856 a993ba85 bellard
  { "zap",                OPR(0x12,0x30), BASE, ARG_OPR },
857 a993ba85 bellard
  { "zap",                OPRL(0x12,0x30), BASE, ARG_OPRL },
858 a993ba85 bellard
  { "zapnot",                OPR(0x12,0x31), BASE, ARG_OPR },
859 a993ba85 bellard
  { "zapnot",                OPRL(0x12,0x31), BASE, ARG_OPRL },
860 a993ba85 bellard
  { "mskql",                OPR(0x12,0x32), BASE, ARG_OPR },
861 a993ba85 bellard
  { "mskql",                OPRL(0x12,0x32), BASE, ARG_OPRL },
862 a993ba85 bellard
  { "srl",                OPR(0x12,0x34), BASE, ARG_OPR },
863 a993ba85 bellard
  { "srl",                OPRL(0x12,0x34), BASE, ARG_OPRL },
864 a993ba85 bellard
  { "extql",                OPR(0x12,0x36), BASE, ARG_OPR },
865 a993ba85 bellard
  { "extql",                OPRL(0x12,0x36), BASE, ARG_OPRL },
866 a993ba85 bellard
  { "sll",                OPR(0x12,0x39), BASE, ARG_OPR },
867 a993ba85 bellard
  { "sll",                OPRL(0x12,0x39), BASE, ARG_OPRL },
868 a993ba85 bellard
  { "insql",                OPR(0x12,0x3B), BASE, ARG_OPR },
869 a993ba85 bellard
  { "insql",                OPRL(0x12,0x3B), BASE, ARG_OPRL },
870 a993ba85 bellard
  { "sra",                OPR(0x12,0x3C), BASE, ARG_OPR },
871 a993ba85 bellard
  { "sra",                OPRL(0x12,0x3C), BASE, ARG_OPRL },
872 a993ba85 bellard
  { "mskwh",                OPR(0x12,0x52), BASE, ARG_OPR },
873 a993ba85 bellard
  { "mskwh",                OPRL(0x12,0x52), BASE, ARG_OPRL },
874 a993ba85 bellard
  { "inswh",                OPR(0x12,0x57), BASE, ARG_OPR },
875 a993ba85 bellard
  { "inswh",                OPRL(0x12,0x57), BASE, ARG_OPRL },
876 a993ba85 bellard
  { "extwh",                OPR(0x12,0x5A), BASE, ARG_OPR },
877 a993ba85 bellard
  { "extwh",                OPRL(0x12,0x5A), BASE, ARG_OPRL },
878 a993ba85 bellard
  { "msklh",                OPR(0x12,0x62), BASE, ARG_OPR },
879 a993ba85 bellard
  { "msklh",                OPRL(0x12,0x62), BASE, ARG_OPRL },
880 a993ba85 bellard
  { "inslh",                OPR(0x12,0x67), BASE, ARG_OPR },
881 a993ba85 bellard
  { "inslh",                OPRL(0x12,0x67), BASE, ARG_OPRL },
882 a993ba85 bellard
  { "extlh",                OPR(0x12,0x6A), BASE, ARG_OPR },
883 a993ba85 bellard
  { "extlh",                OPRL(0x12,0x6A), BASE, ARG_OPRL },
884 a993ba85 bellard
  { "mskqh",                OPR(0x12,0x72), BASE, ARG_OPR },
885 a993ba85 bellard
  { "mskqh",                OPRL(0x12,0x72), BASE, ARG_OPRL },
886 a993ba85 bellard
  { "insqh",                OPR(0x12,0x77), BASE, ARG_OPR },
887 a993ba85 bellard
  { "insqh",                OPRL(0x12,0x77), BASE, ARG_OPRL },
888 a993ba85 bellard
  { "extqh",                OPR(0x12,0x7A), BASE, ARG_OPR },
889 a993ba85 bellard
  { "extqh",                OPRL(0x12,0x7A), BASE, ARG_OPRL },
890 a993ba85 bellard
891 a993ba85 bellard
  { "mull",                OPR(0x13,0x00), BASE, ARG_OPR },
892 a993ba85 bellard
  { "mull",                OPRL(0x13,0x00), BASE, ARG_OPRL },
893 a993ba85 bellard
  { "mulq",                OPR(0x13,0x20), BASE, ARG_OPR },
894 a993ba85 bellard
  { "mulq",                OPRL(0x13,0x20), BASE, ARG_OPRL },
895 a993ba85 bellard
  { "umulh",                OPR(0x13,0x30), BASE, ARG_OPR },
896 a993ba85 bellard
  { "umulh",                OPRL(0x13,0x30), BASE, ARG_OPRL },
897 a993ba85 bellard
  { "mull/v",                OPR(0x13,0x40), BASE, ARG_OPR },
898 a993ba85 bellard
  { "mull/v",                OPRL(0x13,0x40), BASE, ARG_OPRL },
899 a993ba85 bellard
  { "mulq/v",                OPR(0x13,0x60), BASE, ARG_OPR },
900 a993ba85 bellard
  { "mulq/v",                OPRL(0x13,0x60), BASE, ARG_OPRL },
901 a993ba85 bellard
902 a993ba85 bellard
  { "itofs",                FP(0x14,0x004), CIX, { RA, ZB, FC } },
903 a993ba85 bellard
  { "sqrtf/c",                FP(0x14,0x00A), CIX, ARG_FPZ1 },
904 a993ba85 bellard
  { "sqrts/c",                FP(0x14,0x00B), CIX, ARG_FPZ1 },
905 a993ba85 bellard
  { "itoff",                FP(0x14,0x014), CIX, { RA, ZB, FC } },
906 a993ba85 bellard
  { "itoft",                FP(0x14,0x024), CIX, { RA, ZB, FC } },
907 a993ba85 bellard
  { "sqrtg/c",                FP(0x14,0x02A), CIX, ARG_FPZ1 },
908 a993ba85 bellard
  { "sqrtt/c",                FP(0x14,0x02B), CIX, ARG_FPZ1 },
909 a993ba85 bellard
  { "sqrts/m",                FP(0x14,0x04B), CIX, ARG_FPZ1 },
910 a993ba85 bellard
  { "sqrtt/m",                FP(0x14,0x06B), CIX, ARG_FPZ1 },
911 a993ba85 bellard
  { "sqrtf",                FP(0x14,0x08A), CIX, ARG_FPZ1 },
912 a993ba85 bellard
  { "sqrts",                FP(0x14,0x08B), CIX, ARG_FPZ1 },
913 a993ba85 bellard
  { "sqrtg",                FP(0x14,0x0AA), CIX, ARG_FPZ1 },
914 a993ba85 bellard
  { "sqrtt",                FP(0x14,0x0AB), CIX, ARG_FPZ1 },
915 a993ba85 bellard
  { "sqrts/d",                FP(0x14,0x0CB), CIX, ARG_FPZ1 },
916 a993ba85 bellard
  { "sqrtt/d",                FP(0x14,0x0EB), CIX, ARG_FPZ1 },
917 a993ba85 bellard
  { "sqrtf/uc",                FP(0x14,0x10A), CIX, ARG_FPZ1 },
918 a993ba85 bellard
  { "sqrts/uc",                FP(0x14,0x10B), CIX, ARG_FPZ1 },
919 a993ba85 bellard
  { "sqrtg/uc",                FP(0x14,0x12A), CIX, ARG_FPZ1 },
920 a993ba85 bellard
  { "sqrtt/uc",                FP(0x14,0x12B), CIX, ARG_FPZ1 },
921 a993ba85 bellard
  { "sqrts/um",                FP(0x14,0x14B), CIX, ARG_FPZ1 },
922 a993ba85 bellard
  { "sqrtt/um",                FP(0x14,0x16B), CIX, ARG_FPZ1 },
923 a993ba85 bellard
  { "sqrtf/u",                FP(0x14,0x18A), CIX, ARG_FPZ1 },
924 a993ba85 bellard
  { "sqrts/u",                FP(0x14,0x18B), CIX, ARG_FPZ1 },
925 a993ba85 bellard
  { "sqrtg/u",                FP(0x14,0x1AA), CIX, ARG_FPZ1 },
926 a993ba85 bellard
  { "sqrtt/u",                FP(0x14,0x1AB), CIX, ARG_FPZ1 },
927 a993ba85 bellard
  { "sqrts/ud",                FP(0x14,0x1CB), CIX, ARG_FPZ1 },
928 a993ba85 bellard
  { "sqrtt/ud",                FP(0x14,0x1EB), CIX, ARG_FPZ1 },
929 a993ba85 bellard
  { "sqrtf/sc",                FP(0x14,0x40A), CIX, ARG_FPZ1 },
930 a993ba85 bellard
  { "sqrtg/sc",                FP(0x14,0x42A), CIX, ARG_FPZ1 },
931 a993ba85 bellard
  { "sqrtf/s",                FP(0x14,0x48A), CIX, ARG_FPZ1 },
932 a993ba85 bellard
  { "sqrtg/s",                FP(0x14,0x4AA), CIX, ARG_FPZ1 },
933 a993ba85 bellard
  { "sqrtf/suc",        FP(0x14,0x50A), CIX, ARG_FPZ1 },
934 a993ba85 bellard
  { "sqrts/suc",        FP(0x14,0x50B), CIX, ARG_FPZ1 },
935 a993ba85 bellard
  { "sqrtg/suc",        FP(0x14,0x52A), CIX, ARG_FPZ1 },
936 a993ba85 bellard
  { "sqrtt/suc",        FP(0x14,0x52B), CIX, ARG_FPZ1 },
937 a993ba85 bellard
  { "sqrts/sum",        FP(0x14,0x54B), CIX, ARG_FPZ1 },
938 a993ba85 bellard
  { "sqrtt/sum",        FP(0x14,0x56B), CIX, ARG_FPZ1 },
939 a993ba85 bellard
  { "sqrtf/su",                FP(0x14,0x58A), CIX, ARG_FPZ1 },
940 a993ba85 bellard
  { "sqrts/su",                FP(0x14,0x58B), CIX, ARG_FPZ1 },
941 a993ba85 bellard
  { "sqrtg/su",                FP(0x14,0x5AA), CIX, ARG_FPZ1 },
942 a993ba85 bellard
  { "sqrtt/su",                FP(0x14,0x5AB), CIX, ARG_FPZ1 },
943 a993ba85 bellard
  { "sqrts/sud",        FP(0x14,0x5CB), CIX, ARG_FPZ1 },
944 a993ba85 bellard
  { "sqrtt/sud",        FP(0x14,0x5EB), CIX, ARG_FPZ1 },
945 a993ba85 bellard
  { "sqrts/suic",        FP(0x14,0x70B), CIX, ARG_FPZ1 },
946 a993ba85 bellard
  { "sqrtt/suic",        FP(0x14,0x72B), CIX, ARG_FPZ1 },
947 a993ba85 bellard
  { "sqrts/suim",        FP(0x14,0x74B), CIX, ARG_FPZ1 },
948 a993ba85 bellard
  { "sqrtt/suim",        FP(0x14,0x76B), CIX, ARG_FPZ1 },
949 a993ba85 bellard
  { "sqrts/sui",        FP(0x14,0x78B), CIX, ARG_FPZ1 },
950 a993ba85 bellard
  { "sqrtt/sui",        FP(0x14,0x7AB), CIX, ARG_FPZ1 },
951 a993ba85 bellard
  { "sqrts/suid",        FP(0x14,0x7CB), CIX, ARG_FPZ1 },
952 a993ba85 bellard
  { "sqrtt/suid",        FP(0x14,0x7EB), CIX, ARG_FPZ1 },
953 a993ba85 bellard
954 a993ba85 bellard
  { "addf/c",                FP(0x15,0x000), BASE, ARG_FP },
955 a993ba85 bellard
  { "subf/c",                FP(0x15,0x001), BASE, ARG_FP },
956 a993ba85 bellard
  { "mulf/c",                FP(0x15,0x002), BASE, ARG_FP },
957 a993ba85 bellard
  { "divf/c",                FP(0x15,0x003), BASE, ARG_FP },
958 a993ba85 bellard
  { "cvtdg/c",                FP(0x15,0x01E), BASE, ARG_FPZ1 },
959 a993ba85 bellard
  { "addg/c",                FP(0x15,0x020), BASE, ARG_FP },
960 a993ba85 bellard
  { "subg/c",                FP(0x15,0x021), BASE, ARG_FP },
961 a993ba85 bellard
  { "mulg/c",                FP(0x15,0x022), BASE, ARG_FP },
962 a993ba85 bellard
  { "divg/c",                FP(0x15,0x023), BASE, ARG_FP },
963 a993ba85 bellard
  { "cvtgf/c",                FP(0x15,0x02C), BASE, ARG_FPZ1 },
964 a993ba85 bellard
  { "cvtgd/c",                FP(0x15,0x02D), BASE, ARG_FPZ1 },
965 a993ba85 bellard
  { "cvtgq/c",                FP(0x15,0x02F), BASE, ARG_FPZ1 },
966 a993ba85 bellard
  { "cvtqf/c",                FP(0x15,0x03C), BASE, ARG_FPZ1 },
967 a993ba85 bellard
  { "cvtqg/c",                FP(0x15,0x03E), BASE, ARG_FPZ1 },
968 a993ba85 bellard
  { "addf",                FP(0x15,0x080), BASE, ARG_FP },
969 a993ba85 bellard
  { "negf",                FP(0x15,0x081), BASE, ARG_FPZ1 },        /* pseudo */
970 a993ba85 bellard
  { "subf",                FP(0x15,0x081), BASE, ARG_FP },
971 a993ba85 bellard
  { "mulf",                FP(0x15,0x082), BASE, ARG_FP },
972 a993ba85 bellard
  { "divf",                FP(0x15,0x083), BASE, ARG_FP },
973 a993ba85 bellard
  { "cvtdg",                FP(0x15,0x09E), BASE, ARG_FPZ1 },
974 a993ba85 bellard
  { "addg",                FP(0x15,0x0A0), BASE, ARG_FP },
975 a993ba85 bellard
  { "negg",                FP(0x15,0x0A1), BASE, ARG_FPZ1 },        /* pseudo */
976 a993ba85 bellard
  { "subg",                FP(0x15,0x0A1), BASE, ARG_FP },
977 a993ba85 bellard
  { "mulg",                FP(0x15,0x0A2), BASE, ARG_FP },
978 a993ba85 bellard
  { "divg",                FP(0x15,0x0A3), BASE, ARG_FP },
979 a993ba85 bellard
  { "cmpgeq",                FP(0x15,0x0A5), BASE, ARG_FP },
980 a993ba85 bellard
  { "cmpglt",                FP(0x15,0x0A6), BASE, ARG_FP },
981 a993ba85 bellard
  { "cmpgle",                FP(0x15,0x0A7), BASE, ARG_FP },
982 a993ba85 bellard
  { "cvtgf",                FP(0x15,0x0AC), BASE, ARG_FPZ1 },
983 a993ba85 bellard
  { "cvtgd",                FP(0x15,0x0AD), BASE, ARG_FPZ1 },
984 a993ba85 bellard
  { "cvtgq",                FP(0x15,0x0AF), BASE, ARG_FPZ1 },
985 a993ba85 bellard
  { "cvtqf",                FP(0x15,0x0BC), BASE, ARG_FPZ1 },
986 a993ba85 bellard
  { "cvtqg",                FP(0x15,0x0BE), BASE, ARG_FPZ1 },
987 a993ba85 bellard
  { "addf/uc",                FP(0x15,0x100), BASE, ARG_FP },
988 a993ba85 bellard
  { "subf/uc",                FP(0x15,0x101), BASE, ARG_FP },
989 a993ba85 bellard
  { "mulf/uc",                FP(0x15,0x102), BASE, ARG_FP },
990 a993ba85 bellard
  { "divf/uc",                FP(0x15,0x103), BASE, ARG_FP },
991 a993ba85 bellard
  { "cvtdg/uc",                FP(0x15,0x11E), BASE, ARG_FPZ1 },
992 a993ba85 bellard
  { "addg/uc",                FP(0x15,0x120), BASE, ARG_FP },
993 a993ba85 bellard
  { "subg/uc",                FP(0x15,0x121), BASE, ARG_FP },
994 a993ba85 bellard
  { "mulg/uc",                FP(0x15,0x122), BASE, ARG_FP },
995 a993ba85 bellard
  { "divg/uc",                FP(0x15,0x123), BASE, ARG_FP },
996 a993ba85 bellard
  { "cvtgf/uc",                FP(0x15,0x12C), BASE, ARG_FPZ1 },
997 a993ba85 bellard
  { "cvtgd/uc",                FP(0x15,0x12D), BASE, ARG_FPZ1 },
998 a993ba85 bellard
  { "cvtgq/vc",                FP(0x15,0x12F), BASE, ARG_FPZ1 },
999 a993ba85 bellard
  { "addf/u",                FP(0x15,0x180), BASE, ARG_FP },
1000 a993ba85 bellard
  { "subf/u",                FP(0x15,0x181), BASE, ARG_FP },
1001 a993ba85 bellard
  { "mulf/u",                FP(0x15,0x182), BASE, ARG_FP },
1002 a993ba85 bellard
  { "divf/u",                FP(0x15,0x183), BASE, ARG_FP },
1003 a993ba85 bellard
  { "cvtdg/u",                FP(0x15,0x19E), BASE, ARG_FPZ1 },
1004 a993ba85 bellard
  { "addg/u",                FP(0x15,0x1A0), BASE, ARG_FP },
1005 a993ba85 bellard
  { "subg/u",                FP(0x15,0x1A1), BASE, ARG_FP },
1006 a993ba85 bellard
  { "mulg/u",                FP(0x15,0x1A2), BASE, ARG_FP },
1007 a993ba85 bellard
  { "divg/u",                FP(0x15,0x1A3), BASE, ARG_FP },
1008 a993ba85 bellard
  { "cvtgf/u",                FP(0x15,0x1AC), BASE, ARG_FPZ1 },
1009 a993ba85 bellard
  { "cvtgd/u",                FP(0x15,0x1AD), BASE, ARG_FPZ1 },
1010 a993ba85 bellard
  { "cvtgq/v",                FP(0x15,0x1AF), BASE, ARG_FPZ1 },
1011 a993ba85 bellard
  { "addf/sc",                FP(0x15,0x400), BASE, ARG_FP },
1012 a993ba85 bellard
  { "subf/sc",                FP(0x15,0x401), BASE, ARG_FP },
1013 a993ba85 bellard
  { "mulf/sc",                FP(0x15,0x402), BASE, ARG_FP },
1014 a993ba85 bellard
  { "divf/sc",                FP(0x15,0x403), BASE, ARG_FP },
1015 a993ba85 bellard
  { "cvtdg/sc",                FP(0x15,0x41E), BASE, ARG_FPZ1 },
1016 a993ba85 bellard
  { "addg/sc",                FP(0x15,0x420), BASE, ARG_FP },
1017 a993ba85 bellard
  { "subg/sc",                FP(0x15,0x421), BASE, ARG_FP },
1018 a993ba85 bellard
  { "mulg/sc",                FP(0x15,0x422), BASE, ARG_FP },
1019 a993ba85 bellard
  { "divg/sc",                FP(0x15,0x423), BASE, ARG_FP },
1020 a993ba85 bellard
  { "cvtgf/sc",                FP(0x15,0x42C), BASE, ARG_FPZ1 },
1021 a993ba85 bellard
  { "cvtgd/sc",                FP(0x15,0x42D), BASE, ARG_FPZ1 },
1022 a993ba85 bellard
  { "cvtgq/sc",                FP(0x15,0x42F), BASE, ARG_FPZ1 },
1023 a993ba85 bellard
  { "addf/s",                FP(0x15,0x480), BASE, ARG_FP },
1024 a993ba85 bellard
  { "negf/s",                FP(0x15,0x481), BASE, ARG_FPZ1 },        /* pseudo */
1025 a993ba85 bellard
  { "subf/s",                FP(0x15,0x481), BASE, ARG_FP },
1026 a993ba85 bellard
  { "mulf/s",                FP(0x15,0x482), BASE, ARG_FP },
1027 a993ba85 bellard
  { "divf/s",                FP(0x15,0x483), BASE, ARG_FP },
1028 a993ba85 bellard
  { "cvtdg/s",                FP(0x15,0x49E), BASE, ARG_FPZ1 },
1029 a993ba85 bellard
  { "addg/s",                FP(0x15,0x4A0), BASE, ARG_FP },
1030 a993ba85 bellard
  { "negg/s",                FP(0x15,0x4A1), BASE, ARG_FPZ1 },        /* pseudo */
1031 a993ba85 bellard
  { "subg/s",                FP(0x15,0x4A1), BASE, ARG_FP },
1032 a993ba85 bellard
  { "mulg/s",                FP(0x15,0x4A2), BASE, ARG_FP },
1033 a993ba85 bellard
  { "divg/s",                FP(0x15,0x4A3), BASE, ARG_FP },
1034 a993ba85 bellard
  { "cmpgeq/s",                FP(0x15,0x4A5), BASE, ARG_FP },
1035 a993ba85 bellard
  { "cmpglt/s",                FP(0x15,0x4A6), BASE, ARG_FP },
1036 a993ba85 bellard
  { "cmpgle/s",                FP(0x15,0x4A7), BASE, ARG_FP },
1037 a993ba85 bellard
  { "cvtgf/s",                FP(0x15,0x4AC), BASE, ARG_FPZ1 },
1038 a993ba85 bellard
  { "cvtgd/s",                FP(0x15,0x4AD), BASE, ARG_FPZ1 },
1039 a993ba85 bellard
  { "cvtgq/s",                FP(0x15,0x4AF), BASE, ARG_FPZ1 },
1040 a993ba85 bellard
  { "addf/suc",                FP(0x15,0x500), BASE, ARG_FP },
1041 a993ba85 bellard
  { "subf/suc",                FP(0x15,0x501), BASE, ARG_FP },
1042 a993ba85 bellard
  { "mulf/suc",                FP(0x15,0x502), BASE, ARG_FP },
1043 a993ba85 bellard
  { "divf/suc",                FP(0x15,0x503), BASE, ARG_FP },
1044 a993ba85 bellard
  { "cvtdg/suc",        FP(0x15,0x51E), BASE, ARG_FPZ1 },
1045 a993ba85 bellard
  { "addg/suc",                FP(0x15,0x520), BASE, ARG_FP },
1046 a993ba85 bellard
  { "subg/suc",                FP(0x15,0x521), BASE, ARG_FP },
1047 a993ba85 bellard
  { "mulg/suc",                FP(0x15,0x522), BASE, ARG_FP },
1048 a993ba85 bellard
  { "divg/suc",                FP(0x15,0x523), BASE, ARG_FP },
1049 a993ba85 bellard
  { "cvtgf/suc",        FP(0x15,0x52C), BASE, ARG_FPZ1 },
1050 a993ba85 bellard
  { "cvtgd/suc",        FP(0x15,0x52D), BASE, ARG_FPZ1 },
1051 a993ba85 bellard
  { "cvtgq/svc",        FP(0x15,0x52F), BASE, ARG_FPZ1 },
1052 a993ba85 bellard
  { "addf/su",                FP(0x15,0x580), BASE, ARG_FP },
1053 a993ba85 bellard
  { "subf/su",                FP(0x15,0x581), BASE, ARG_FP },
1054 a993ba85 bellard
  { "mulf/su",                FP(0x15,0x582), BASE, ARG_FP },
1055 a993ba85 bellard
  { "divf/su",                FP(0x15,0x583), BASE, ARG_FP },
1056 a993ba85 bellard
  { "cvtdg/su",                FP(0x15,0x59E), BASE, ARG_FPZ1 },
1057 a993ba85 bellard
  { "addg/su",                FP(0x15,0x5A0), BASE, ARG_FP },
1058 a993ba85 bellard
  { "subg/su",                FP(0x15,0x5A1), BASE, ARG_FP },
1059 a993ba85 bellard
  { "mulg/su",                FP(0x15,0x5A2), BASE, ARG_FP },
1060 a993ba85 bellard
  { "divg/su",                FP(0x15,0x5A3), BASE, ARG_FP },
1061 a993ba85 bellard
  { "cvtgf/su",                FP(0x15,0x5AC), BASE, ARG_FPZ1 },
1062 a993ba85 bellard
  { "cvtgd/su",                FP(0x15,0x5AD), BASE, ARG_FPZ1 },
1063 a993ba85 bellard
  { "cvtgq/sv",                FP(0x15,0x5AF), BASE, ARG_FPZ1 },
1064 a993ba85 bellard
1065 a993ba85 bellard
  { "adds/c",                FP(0x16,0x000), BASE, ARG_FP },
1066 a993ba85 bellard
  { "subs/c",                FP(0x16,0x001), BASE, ARG_FP },
1067 a993ba85 bellard
  { "muls/c",                FP(0x16,0x002), BASE, ARG_FP },
1068 a993ba85 bellard
  { "divs/c",                FP(0x16,0x003), BASE, ARG_FP },
1069 a993ba85 bellard
  { "addt/c",                FP(0x16,0x020), BASE, ARG_FP },
1070 a993ba85 bellard
  { "subt/c",                FP(0x16,0x021), BASE, ARG_FP },
1071 a993ba85 bellard
  { "mult/c",                FP(0x16,0x022), BASE, ARG_FP },
1072 a993ba85 bellard
  { "divt/c",                FP(0x16,0x023), BASE, ARG_FP },
1073 a993ba85 bellard
  { "cvtts/c",                FP(0x16,0x02C), BASE, ARG_FPZ1 },
1074 a993ba85 bellard
  { "cvttq/c",                FP(0x16,0x02F), BASE, ARG_FPZ1 },
1075 a993ba85 bellard
  { "cvtqs/c",                FP(0x16,0x03C), BASE, ARG_FPZ1 },
1076 a993ba85 bellard
  { "cvtqt/c",                FP(0x16,0x03E), BASE, ARG_FPZ1 },
1077 a993ba85 bellard
  { "adds/m",                FP(0x16,0x040), BASE, ARG_FP },
1078 a993ba85 bellard
  { "subs/m",                FP(0x16,0x041), BASE, ARG_FP },
1079 a993ba85 bellard
  { "muls/m",                FP(0x16,0x042), BASE, ARG_FP },
1080 a993ba85 bellard
  { "divs/m",                FP(0x16,0x043), BASE, ARG_FP },
1081 a993ba85 bellard
  { "addt/m",                FP(0x16,0x060), BASE, ARG_FP },
1082 a993ba85 bellard
  { "subt/m",                FP(0x16,0x061), BASE, ARG_FP },
1083 a993ba85 bellard
  { "mult/m",                FP(0x16,0x062), BASE, ARG_FP },
1084 a993ba85 bellard
  { "divt/m",                FP(0x16,0x063), BASE, ARG_FP },
1085 a993ba85 bellard
  { "cvtts/m",                FP(0x16,0x06C), BASE, ARG_FPZ1 },
1086 a993ba85 bellard
  { "cvttq/m",                FP(0x16,0x06F), BASE, ARG_FPZ1 },
1087 a993ba85 bellard
  { "cvtqs/m",                FP(0x16,0x07C), BASE, ARG_FPZ1 },
1088 a993ba85 bellard
  { "cvtqt/m",                FP(0x16,0x07E), BASE, ARG_FPZ1 },
1089 a993ba85 bellard
  { "adds",                FP(0x16,0x080), BASE, ARG_FP },
1090 a993ba85 bellard
  { "negs",                 FP(0x16,0x081), BASE, ARG_FPZ1 },        /* pseudo */
1091 a993ba85 bellard
  { "subs",                FP(0x16,0x081), BASE, ARG_FP },
1092 a993ba85 bellard
  { "muls",                FP(0x16,0x082), BASE, ARG_FP },
1093 a993ba85 bellard
  { "divs",                FP(0x16,0x083), BASE, ARG_FP },
1094 a993ba85 bellard
  { "addt",                FP(0x16,0x0A0), BASE, ARG_FP },
1095 a993ba85 bellard
  { "negt",                 FP(0x16,0x0A1), BASE, ARG_FPZ1 },        /* pseudo */
1096 a993ba85 bellard
  { "subt",                FP(0x16,0x0A1), BASE, ARG_FP },
1097 a993ba85 bellard
  { "mult",                FP(0x16,0x0A2), BASE, ARG_FP },
1098 a993ba85 bellard
  { "divt",                FP(0x16,0x0A3), BASE, ARG_FP },
1099 a993ba85 bellard
  { "cmptun",                FP(0x16,0x0A4), BASE, ARG_FP },
1100 a993ba85 bellard
  { "cmpteq",                FP(0x16,0x0A5), BASE, ARG_FP },
1101 a993ba85 bellard
  { "cmptlt",                FP(0x16,0x0A6), BASE, ARG_FP },
1102 a993ba85 bellard
  { "cmptle",                FP(0x16,0x0A7), BASE, ARG_FP },
1103 a993ba85 bellard
  { "cvtts",                FP(0x16,0x0AC), BASE, ARG_FPZ1 },
1104 a993ba85 bellard
  { "cvttq",                FP(0x16,0x0AF), BASE, ARG_FPZ1 },
1105 a993ba85 bellard
  { "cvtqs",                FP(0x16,0x0BC), BASE, ARG_FPZ1 },
1106 a993ba85 bellard
  { "cvtqt",                FP(0x16,0x0BE), BASE, ARG_FPZ1 },
1107 a993ba85 bellard
  { "adds/d",                FP(0x16,0x0C0), BASE, ARG_FP },
1108 a993ba85 bellard
  { "subs/d",                FP(0x16,0x0C1), BASE, ARG_FP },
1109 a993ba85 bellard
  { "muls/d",                FP(0x16,0x0C2), BASE, ARG_FP },
1110 a993ba85 bellard
  { "divs/d",                FP(0x16,0x0C3), BASE, ARG_FP },
1111 a993ba85 bellard
  { "addt/d",                FP(0x16,0x0E0), BASE, ARG_FP },
1112 a993ba85 bellard
  { "subt/d",                FP(0x16,0x0E1), BASE, ARG_FP },
1113 a993ba85 bellard
  { "mult/d",                FP(0x16,0x0E2), BASE, ARG_FP },
1114 a993ba85 bellard
  { "divt/d",                FP(0x16,0x0E3), BASE, ARG_FP },
1115 a993ba85 bellard
  { "cvtts/d",                FP(0x16,0x0EC), BASE, ARG_FPZ1 },
1116 a993ba85 bellard
  { "cvttq/d",                FP(0x16,0x0EF), BASE, ARG_FPZ1 },
1117 a993ba85 bellard
  { "cvtqs/d",                FP(0x16,0x0FC), BASE, ARG_FPZ1 },
1118 a993ba85 bellard
  { "cvtqt/d",                FP(0x16,0x0FE), BASE, ARG_FPZ1 },
1119 a993ba85 bellard
  { "adds/uc",                FP(0x16,0x100), BASE, ARG_FP },
1120 a993ba85 bellard
  { "subs/uc",                FP(0x16,0x101), BASE, ARG_FP },
1121 a993ba85 bellard
  { "muls/uc",                FP(0x16,0x102), BASE, ARG_FP },
1122 a993ba85 bellard
  { "divs/uc",                FP(0x16,0x103), BASE, ARG_FP },
1123 a993ba85 bellard
  { "addt/uc",                FP(0x16,0x120), BASE, ARG_FP },
1124 a993ba85 bellard
  { "subt/uc",                FP(0x16,0x121), BASE, ARG_FP },
1125 a993ba85 bellard
  { "mult/uc",                FP(0x16,0x122), BASE, ARG_FP },
1126 a993ba85 bellard
  { "divt/uc",                FP(0x16,0x123), BASE, ARG_FP },
1127 a993ba85 bellard
  { "cvtts/uc",                FP(0x16,0x12C), BASE, ARG_FPZ1 },
1128 a993ba85 bellard
  { "cvttq/vc",                FP(0x16,0x12F), BASE, ARG_FPZ1 },
1129 a993ba85 bellard
  { "adds/um",                FP(0x16,0x140), BASE, ARG_FP },
1130 a993ba85 bellard
  { "subs/um",                FP(0x16,0x141), BASE, ARG_FP },
1131 a993ba85 bellard
  { "muls/um",                FP(0x16,0x142), BASE, ARG_FP },
1132 a993ba85 bellard
  { "divs/um",                FP(0x16,0x143), BASE, ARG_FP },
1133 a993ba85 bellard
  { "addt/um",                FP(0x16,0x160), BASE, ARG_FP },
1134 a993ba85 bellard
  { "subt/um",                FP(0x16,0x161), BASE, ARG_FP },
1135 a993ba85 bellard
  { "mult/um",                FP(0x16,0x162), BASE, ARG_FP },
1136 a993ba85 bellard
  { "divt/um",                FP(0x16,0x163), BASE, ARG_FP },
1137 a993ba85 bellard
  { "cvtts/um",                FP(0x16,0x16C), BASE, ARG_FPZ1 },
1138 a993ba85 bellard
  { "cvttq/vm",                FP(0x16,0x16F), BASE, ARG_FPZ1 },
1139 a993ba85 bellard
  { "adds/u",                FP(0x16,0x180), BASE, ARG_FP },
1140 a993ba85 bellard
  { "subs/u",                FP(0x16,0x181), BASE, ARG_FP },
1141 a993ba85 bellard
  { "muls/u",                FP(0x16,0x182), BASE, ARG_FP },
1142 a993ba85 bellard
  { "divs/u",                FP(0x16,0x183), BASE, ARG_FP },
1143 a993ba85 bellard
  { "addt/u",                FP(0x16,0x1A0), BASE, ARG_FP },
1144 a993ba85 bellard
  { "subt/u",                FP(0x16,0x1A1), BASE, ARG_FP },
1145 a993ba85 bellard
  { "mult/u",                FP(0x16,0x1A2), BASE, ARG_FP },
1146 a993ba85 bellard
  { "divt/u",                FP(0x16,0x1A3), BASE, ARG_FP },
1147 a993ba85 bellard
  { "cvtts/u",                FP(0x16,0x1AC), BASE, ARG_FPZ1 },
1148 a993ba85 bellard
  { "cvttq/v",                FP(0x16,0x1AF), BASE, ARG_FPZ1 },
1149 a993ba85 bellard
  { "adds/ud",                FP(0x16,0x1C0), BASE, ARG_FP },
1150 a993ba85 bellard
  { "subs/ud",                FP(0x16,0x1C1), BASE, ARG_FP },
1151 a993ba85 bellard
  { "muls/ud",                FP(0x16,0x1C2), BASE, ARG_FP },
1152 a993ba85 bellard
  { "divs/ud",                FP(0x16,0x1C3), BASE, ARG_FP },
1153 a993ba85 bellard
  { "addt/ud",                FP(0x16,0x1E0), BASE, ARG_FP },
1154 a993ba85 bellard
  { "subt/ud",                FP(0x16,0x1E1), BASE, ARG_FP },
1155 a993ba85 bellard
  { "mult/ud",                FP(0x16,0x1E2), BASE, ARG_FP },
1156 a993ba85 bellard
  { "divt/ud",                FP(0x16,0x1E3), BASE, ARG_FP },
1157 a993ba85 bellard
  { "cvtts/ud",                FP(0x16,0x1EC), BASE, ARG_FPZ1 },
1158 a993ba85 bellard
  { "cvttq/vd",                FP(0x16,0x1EF), BASE, ARG_FPZ1 },
1159 a993ba85 bellard
  { "cvtst",                FP(0x16,0x2AC), BASE, ARG_FPZ1 },
1160 a993ba85 bellard
  { "adds/suc",                FP(0x16,0x500), BASE, ARG_FP },
1161 a993ba85 bellard
  { "subs/suc",                FP(0x16,0x501), BASE, ARG_FP },
1162 a993ba85 bellard
  { "muls/suc",                FP(0x16,0x502), BASE, ARG_FP },
1163 a993ba85 bellard
  { "divs/suc",                FP(0x16,0x503), BASE, ARG_FP },
1164 a993ba85 bellard
  { "addt/suc",                FP(0x16,0x520), BASE, ARG_FP },
1165 a993ba85 bellard
  { "subt/suc",                FP(0x16,0x521), BASE, ARG_FP },
1166 a993ba85 bellard
  { "mult/suc",                FP(0x16,0x522), BASE, ARG_FP },
1167 a993ba85 bellard
  { "divt/suc",                FP(0x16,0x523), BASE, ARG_FP },
1168 a993ba85 bellard
  { "cvtts/suc",        FP(0x16,0x52C), BASE, ARG_FPZ1 },
1169 a993ba85 bellard
  { "cvttq/svc",        FP(0x16,0x52F), BASE, ARG_FPZ1 },
1170 a993ba85 bellard
  { "adds/sum",                FP(0x16,0x540), BASE, ARG_FP },
1171 a993ba85 bellard
  { "subs/sum",                FP(0x16,0x541), BASE, ARG_FP },
1172 a993ba85 bellard
  { "muls/sum",                FP(0x16,0x542), BASE, ARG_FP },
1173 a993ba85 bellard
  { "divs/sum",                FP(0x16,0x543), BASE, ARG_FP },
1174 a993ba85 bellard
  { "addt/sum",                FP(0x16,0x560), BASE, ARG_FP },
1175 a993ba85 bellard
  { "subt/sum",                FP(0x16,0x561), BASE, ARG_FP },
1176 a993ba85 bellard
  { "mult/sum",                FP(0x16,0x562), BASE, ARG_FP },
1177 a993ba85 bellard
  { "divt/sum",                FP(0x16,0x563), BASE, ARG_FP },
1178 a993ba85 bellard
  { "cvtts/sum",        FP(0x16,0x56C), BASE, ARG_FPZ1 },
1179 a993ba85 bellard
  { "cvttq/svm",        FP(0x16,0x56F), BASE, ARG_FPZ1 },
1180 a993ba85 bellard
  { "adds/su",                FP(0x16,0x580), BASE, ARG_FP },
1181 a993ba85 bellard
  { "negs/su",                FP(0x16,0x581), BASE, ARG_FPZ1 },        /* pseudo */
1182 a993ba85 bellard
  { "subs/su",                FP(0x16,0x581), BASE, ARG_FP },
1183 a993ba85 bellard
  { "muls/su",                FP(0x16,0x582), BASE, ARG_FP },
1184 a993ba85 bellard
  { "divs/su",                FP(0x16,0x583), BASE, ARG_FP },
1185 a993ba85 bellard
  { "addt/su",                FP(0x16,0x5A0), BASE, ARG_FP },
1186 a993ba85 bellard
  { "negt/su",                FP(0x16,0x5A1), BASE, ARG_FPZ1 },        /* pseudo */
1187 a993ba85 bellard
  { "subt/su",                FP(0x16,0x5A1), BASE, ARG_FP },
1188 a993ba85 bellard
  { "mult/su",                FP(0x16,0x5A2), BASE, ARG_FP },
1189 a993ba85 bellard
  { "divt/su",                FP(0x16,0x5A3), BASE, ARG_FP },
1190 a993ba85 bellard
  { "cmptun/su",        FP(0x16,0x5A4), BASE, ARG_FP },
1191 a993ba85 bellard
  { "cmpteq/su",        FP(0x16,0x5A5), BASE, ARG_FP },
1192 a993ba85 bellard
  { "cmptlt/su",        FP(0x16,0x5A6), BASE, ARG_FP },
1193 a993ba85 bellard
  { "cmptle/su",        FP(0x16,0x5A7), BASE, ARG_FP },
1194 a993ba85 bellard
  { "cvtts/su",                FP(0x16,0x5AC), BASE, ARG_FPZ1 },
1195 a993ba85 bellard
  { "cvttq/sv",                FP(0x16,0x5AF), BASE, ARG_FPZ1 },
1196 a993ba85 bellard
  { "adds/sud",                FP(0x16,0x5C0), BASE, ARG_FP },
1197 a993ba85 bellard
  { "subs/sud",                FP(0x16,0x5C1), BASE, ARG_FP },
1198 a993ba85 bellard
  { "muls/sud",                FP(0x16,0x5C2), BASE, ARG_FP },
1199 a993ba85 bellard
  { "divs/sud",                FP(0x16,0x5C3), BASE, ARG_FP },
1200 a993ba85 bellard
  { "addt/sud",                FP(0x16,0x5E0), BASE, ARG_FP },
1201 a993ba85 bellard
  { "subt/sud",                FP(0x16,0x5E1), BASE, ARG_FP },
1202 a993ba85 bellard
  { "mult/sud",                FP(0x16,0x5E2), BASE, ARG_FP },
1203 a993ba85 bellard
  { "divt/sud",                FP(0x16,0x5E3), BASE, ARG_FP },
1204 a993ba85 bellard
  { "cvtts/sud",        FP(0x16,0x5EC), BASE, ARG_FPZ1 },
1205 a993ba85 bellard
  { "cvttq/svd",        FP(0x16,0x5EF), BASE, ARG_FPZ1 },
1206 a993ba85 bellard
  { "cvtst/s",                FP(0x16,0x6AC), BASE, ARG_FPZ1 },
1207 a993ba85 bellard
  { "adds/suic",        FP(0x16,0x700), BASE, ARG_FP },
1208 a993ba85 bellard
  { "subs/suic",        FP(0x16,0x701), BASE, ARG_FP },
1209 a993ba85 bellard
  { "muls/suic",        FP(0x16,0x702), BASE, ARG_FP },
1210 a993ba85 bellard
  { "divs/suic",        FP(0x16,0x703), BASE, ARG_FP },
1211 a993ba85 bellard
  { "addt/suic",        FP(0x16,0x720), BASE, ARG_FP },
1212 a993ba85 bellard
  { "subt/suic",        FP(0x16,0x721), BASE, ARG_FP },
1213 a993ba85 bellard
  { "mult/suic",        FP(0x16,0x722), BASE, ARG_FP },
1214 a993ba85 bellard
  { "divt/suic",        FP(0x16,0x723), BASE, ARG_FP },
1215 a993ba85 bellard
  { "cvtts/suic",        FP(0x16,0x72C), BASE, ARG_FPZ1 },
1216 a993ba85 bellard
  { "cvttq/svic",        FP(0x16,0x72F), BASE, ARG_FPZ1 },
1217 a993ba85 bellard
  { "cvtqs/suic",        FP(0x16,0x73C), BASE, ARG_FPZ1 },
1218 a993ba85 bellard
  { "cvtqt/suic",        FP(0x16,0x73E), BASE, ARG_FPZ1 },
1219 a993ba85 bellard
  { "adds/suim",        FP(0x16,0x740), BASE, ARG_FP },
1220 a993ba85 bellard
  { "subs/suim",        FP(0x16,0x741), BASE, ARG_FP },
1221 a993ba85 bellard
  { "muls/suim",        FP(0x16,0x742), BASE, ARG_FP },
1222 a993ba85 bellard
  { "divs/suim",        FP(0x16,0x743), BASE, ARG_FP },
1223 a993ba85 bellard
  { "addt/suim",        FP(0x16,0x760), BASE, ARG_FP },
1224 a993ba85 bellard
  { "subt/suim",        FP(0x16,0x761), BASE, ARG_FP },
1225 a993ba85 bellard
  { "mult/suim",        FP(0x16,0x762), BASE, ARG_FP },
1226 a993ba85 bellard
  { "divt/suim",        FP(0x16,0x763), BASE, ARG_FP },
1227 a993ba85 bellard
  { "cvtts/suim",        FP(0x16,0x76C), BASE, ARG_FPZ1 },
1228 a993ba85 bellard
  { "cvttq/svim",        FP(0x16,0x76F), BASE, ARG_FPZ1 },
1229 a993ba85 bellard
  { "cvtqs/suim",        FP(0x16,0x77C), BASE, ARG_FPZ1 },
1230 a993ba85 bellard
  { "cvtqt/suim",        FP(0x16,0x77E), BASE, ARG_FPZ1 },
1231 a993ba85 bellard
  { "adds/sui",                FP(0x16,0x780), BASE, ARG_FP },
1232 a993ba85 bellard
  { "negs/sui",         FP(0x16,0x781), BASE, ARG_FPZ1 },        /* pseudo */
1233 a993ba85 bellard
  { "subs/sui",                FP(0x16,0x781), BASE, ARG_FP },
1234 a993ba85 bellard
  { "muls/sui",                FP(0x16,0x782), BASE, ARG_FP },
1235 a993ba85 bellard
  { "divs/sui",                FP(0x16,0x783), BASE, ARG_FP },
1236 a993ba85 bellard
  { "addt/sui",                FP(0x16,0x7A0), BASE, ARG_FP },
1237 a993ba85 bellard
  { "negt/sui",         FP(0x16,0x7A1), BASE, ARG_FPZ1 },        /* pseudo */
1238 a993ba85 bellard
  { "subt/sui",                FP(0x16,0x7A1), BASE, ARG_FP },
1239 a993ba85 bellard
  { "mult/sui",                FP(0x16,0x7A2), BASE, ARG_FP },
1240 a993ba85 bellard
  { "divt/sui",                FP(0x16,0x7A3), BASE, ARG_FP },
1241 a993ba85 bellard
  { "cvtts/sui",        FP(0x16,0x7AC), BASE, ARG_FPZ1 },
1242 a993ba85 bellard
  { "cvttq/svi",        FP(0x16,0x7AF), BASE, ARG_FPZ1 },
1243 a993ba85 bellard
  { "cvtqs/sui",        FP(0x16,0x7BC), BASE, ARG_FPZ1 },
1244 a993ba85 bellard
  { "cvtqt/sui",        FP(0x16,0x7BE), BASE, ARG_FPZ1 },
1245 a993ba85 bellard
  { "adds/suid",        FP(0x16,0x7C0), BASE, ARG_FP },
1246 a993ba85 bellard
  { "subs/suid",        FP(0x16,0x7C1), BASE, ARG_FP },
1247 a993ba85 bellard
  { "muls/suid",        FP(0x16,0x7C2), BASE, ARG_FP },
1248 a993ba85 bellard
  { "divs/suid",        FP(0x16,0x7C3), BASE, ARG_FP },
1249 a993ba85 bellard
  { "addt/suid",        FP(0x16,0x7E0), BASE, ARG_FP },
1250 a993ba85 bellard
  { "subt/suid",        FP(0x16,0x7E1), BASE, ARG_FP },
1251 a993ba85 bellard
  { "mult/suid",        FP(0x16,0x7E2), BASE, ARG_FP },
1252 a993ba85 bellard
  { "divt/suid",        FP(0x16,0x7E3), BASE, ARG_FP },
1253 a993ba85 bellard
  { "cvtts/suid",        FP(0x16,0x7EC), BASE, ARG_FPZ1 },
1254 a993ba85 bellard
  { "cvttq/svid",        FP(0x16,0x7EF), BASE, ARG_FPZ1 },
1255 a993ba85 bellard
  { "cvtqs/suid",        FP(0x16,0x7FC), BASE, ARG_FPZ1 },
1256 a993ba85 bellard
  { "cvtqt/suid",        FP(0x16,0x7FE), BASE, ARG_FPZ1 },
1257 a993ba85 bellard
1258 a993ba85 bellard
  { "cvtlq",                FP(0x17,0x010), BASE, ARG_FPZ1 },
1259 a993ba85 bellard
  { "fnop",                FP(0x17,0x020), BASE, { ZA, ZB, ZC } },        /* pseudo */
1260 a993ba85 bellard
  { "fclr",                FP(0x17,0x020), BASE, { ZA, ZB, FC } },        /* pseudo */
1261 a993ba85 bellard
  { "fabs",                FP(0x17,0x020), BASE, ARG_FPZ1 },        /* pseudo */
1262 a993ba85 bellard
  { "fmov",                FP(0x17,0x020), BASE, { FA, RBA, FC } }, /* pseudo */
1263 a993ba85 bellard
  { "cpys",                FP(0x17,0x020), BASE, ARG_FP },
1264 a993ba85 bellard
  { "fneg",                FP(0x17,0x021), BASE, { FA, RBA, FC } }, /* pseudo */
1265 a993ba85 bellard
  { "cpysn",                FP(0x17,0x021), BASE, ARG_FP },
1266 a993ba85 bellard
  { "cpyse",                FP(0x17,0x022), BASE, ARG_FP },
1267 a993ba85 bellard
  { "mt_fpcr",                FP(0x17,0x024), BASE, { FA, RBA, RCA } },
1268 a993ba85 bellard
  { "mf_fpcr",                FP(0x17,0x025), BASE, { FA, RBA, RCA } },
1269 a993ba85 bellard
  { "fcmoveq",                FP(0x17,0x02A), BASE, ARG_FP },
1270 a993ba85 bellard
  { "fcmovne",                FP(0x17,0x02B), BASE, ARG_FP },
1271 a993ba85 bellard
  { "fcmovlt",                FP(0x17,0x02C), BASE, ARG_FP },
1272 a993ba85 bellard
  { "fcmovge",                FP(0x17,0x02D), BASE, ARG_FP },
1273 a993ba85 bellard
  { "fcmovle",                FP(0x17,0x02E), BASE, ARG_FP },
1274 a993ba85 bellard
  { "fcmovgt",                FP(0x17,0x02F), BASE, ARG_FP },
1275 a993ba85 bellard
  { "cvtql",                FP(0x17,0x030), BASE, ARG_FPZ1 },
1276 a993ba85 bellard
  { "cvtql/v",                FP(0x17,0x130), BASE, ARG_FPZ1 },
1277 a993ba85 bellard
  { "cvtql/sv",                FP(0x17,0x530), BASE, ARG_FPZ1 },
1278 a993ba85 bellard
1279 a993ba85 bellard
  { "trapb",                MFC(0x18,0x0000), BASE, ARG_NONE },
1280 a993ba85 bellard
  { "draint",                MFC(0x18,0x0000), BASE, ARG_NONE },        /* alias */
1281 a993ba85 bellard
  { "excb",                MFC(0x18,0x0400), BASE, ARG_NONE },
1282 a993ba85 bellard
  { "mb",                MFC(0x18,0x4000), BASE, ARG_NONE },
1283 a993ba85 bellard
  { "wmb",                MFC(0x18,0x4400), BASE, ARG_NONE },
1284 a993ba85 bellard
  { "fetch",                MFC(0x18,0x8000), BASE, { ZA, PRB } },
1285 a993ba85 bellard
  { "fetch_m",                MFC(0x18,0xA000), BASE, { ZA, PRB } },
1286 a993ba85 bellard
  { "rpcc",                MFC(0x18,0xC000), BASE, { RA } },
1287 a993ba85 bellard
  { "rc",                MFC(0x18,0xE000), BASE, { RA } },
1288 a993ba85 bellard
  { "ecb",                MFC(0x18,0xE800), BASE, { ZA, PRB } },        /* ev56 una */
1289 a993ba85 bellard
  { "rs",                MFC(0x18,0xF000), BASE, { RA } },
1290 a993ba85 bellard
  { "wh64",                MFC(0x18,0xF800), BASE, { ZA, PRB } },        /* ev56 una */
1291 a993ba85 bellard
  { "wh64en",                MFC(0x18,0xFC00), BASE, { ZA, PRB } },        /* ev7 una */
1292 a993ba85 bellard
1293 a993ba85 bellard
  { "hw_mfpr",                OPR(0x19,0x00), EV4, { RA, RBA, EV4EXTHWINDEX } },
1294 a993ba85 bellard
  { "hw_mfpr",                OP(0x19), OP_MASK, EV5, { RA, RBA, EV5HWINDEX } },
1295 a993ba85 bellard
  { "hw_mfpr",                OP(0x19), OP_MASK, EV6, { RA, ZB, EV6HWINDEX } },
1296 a993ba85 bellard
  { "hw_mfpr/i",        OPR(0x19,0x01), EV4, ARG_EV4HWMPR },
1297 a993ba85 bellard
  { "hw_mfpr/a",        OPR(0x19,0x02), EV4, ARG_EV4HWMPR },
1298 a993ba85 bellard
  { "hw_mfpr/ai",        OPR(0x19,0x03), EV4, ARG_EV4HWMPR },
1299 a993ba85 bellard
  { "hw_mfpr/p",        OPR(0x19,0x04), EV4, ARG_EV4HWMPR },
1300 a993ba85 bellard
  { "hw_mfpr/pi",        OPR(0x19,0x05), EV4, ARG_EV4HWMPR },
1301 a993ba85 bellard
  { "hw_mfpr/pa",        OPR(0x19,0x06), EV4, ARG_EV4HWMPR },
1302 a993ba85 bellard
  { "hw_mfpr/pai",        OPR(0x19,0x07), EV4, ARG_EV4HWMPR },
1303 a993ba85 bellard
  { "pal19",                PCD(0x19), BASE, ARG_PCD },
1304 a993ba85 bellard
1305 a993ba85 bellard
  { "jmp",                MBR_(0x1A,0), MBR_MASK | 0x3FFF,        /* pseudo */
1306 a993ba85 bellard
                        BASE, { ZA, CPRB } },
1307 a993ba85 bellard
  { "jmp",                MBR(0x1A,0), BASE, { RA, CPRB, JMPHINT } },
1308 a993ba85 bellard
  { "jsr",                MBR(0x1A,1), BASE, { RA, CPRB, JMPHINT } },
1309 a993ba85 bellard
  { "ret",                MBR_(0x1A,2) | (31 << 21) | (26 << 16) | 1,/* pseudo */
1310 a993ba85 bellard
                        0xFFFFFFFF, BASE, { 0 } },
1311 a993ba85 bellard
  { "ret",                MBR(0x1A,2), BASE, { RA, CPRB, RETHINT } },
1312 a993ba85 bellard
  { "jcr",                MBR(0x1A,3), BASE, { RA, CPRB, RETHINT } }, /* alias */
1313 a993ba85 bellard
  { "jsr_coroutine",        MBR(0x1A,3), BASE, { RA, CPRB, RETHINT } },
1314 a993ba85 bellard
1315 a993ba85 bellard
  { "hw_ldl",                EV4HWMEM(0x1B,0x0), EV4, ARG_EV4HWMEM },
1316 a993ba85 bellard
  { "hw_ldl",                EV5HWMEM(0x1B,0x00), EV5, ARG_EV5HWMEM },
1317 a993ba85 bellard
  { "hw_ldl",                EV6HWMEM(0x1B,0x8), EV6, ARG_EV6HWMEM },
1318 a993ba85 bellard
  { "hw_ldl/a",                EV4HWMEM(0x1B,0x4), EV4, ARG_EV4HWMEM },
1319 a993ba85 bellard
  { "hw_ldl/a",                EV5HWMEM(0x1B,0x10), EV5, ARG_EV5HWMEM },
1320 a993ba85 bellard
  { "hw_ldl/a",                EV6HWMEM(0x1B,0xC), EV6, ARG_EV6HWMEM },
1321 a993ba85 bellard
  { "hw_ldl/al",        EV5HWMEM(0x1B,0x11), EV5, ARG_EV5HWMEM },
1322 a993ba85 bellard
  { "hw_ldl/ar",        EV4HWMEM(0x1B,0x6), EV4, ARG_EV4HWMEM },
1323 a993ba85 bellard
  { "hw_ldl/av",        EV5HWMEM(0x1B,0x12), EV5, ARG_EV5HWMEM },
1324 a993ba85 bellard
  { "hw_ldl/avl",        EV5HWMEM(0x1B,0x13), EV5, ARG_EV5HWMEM },
1325 a993ba85 bellard
  { "hw_ldl/aw",        EV5HWMEM(0x1B,0x18), EV5, ARG_EV5HWMEM },
1326 a993ba85 bellard
  { "hw_ldl/awl",        EV5HWMEM(0x1B,0x19), EV5, ARG_EV5HWMEM },
1327 a993ba85 bellard
  { "hw_ldl/awv",        EV5HWMEM(0x1B,0x1a), EV5, ARG_EV5HWMEM },
1328 a993ba85 bellard
  { "hw_ldl/awvl",        EV5HWMEM(0x1B,0x1b), EV5, ARG_EV5HWMEM },
1329 a993ba85 bellard
  { "hw_ldl/l",                EV5HWMEM(0x1B,0x01), EV5, ARG_EV5HWMEM },
1330 a993ba85 bellard
  { "hw_ldl/p",                EV4HWMEM(0x1B,0x8), EV4, ARG_EV4HWMEM },
1331 a993ba85 bellard
  { "hw_ldl/p",                EV5HWMEM(0x1B,0x20), EV5, ARG_EV5HWMEM },
1332 a993ba85 bellard
  { "hw_ldl/p",                EV6HWMEM(0x1B,0x0), EV6, ARG_EV6HWMEM },
1333 a993ba85 bellard
  { "hw_ldl/pa",        EV4HWMEM(0x1B,0xC), EV4, ARG_EV4HWMEM },
1334 a993ba85 bellard
  { "hw_ldl/pa",        EV5HWMEM(0x1B,0x30), EV5, ARG_EV5HWMEM },
1335 a993ba85 bellard
  { "hw_ldl/pal",        EV5HWMEM(0x1B,0x31), EV5, ARG_EV5HWMEM },
1336 a993ba85 bellard
  { "hw_ldl/par",        EV4HWMEM(0x1B,0xE), EV4, ARG_EV4HWMEM },
1337 a993ba85 bellard
  { "hw_ldl/pav",        EV5HWMEM(0x1B,0x32), EV5, ARG_EV5HWMEM },
1338 a993ba85 bellard
  { "hw_ldl/pavl",        EV5HWMEM(0x1B,0x33), EV5, ARG_EV5HWMEM },
1339 a993ba85 bellard
  { "hw_ldl/paw",        EV5HWMEM(0x1B,0x38), EV5, ARG_EV5HWMEM },
1340 a993ba85 bellard
  { "hw_ldl/pawl",        EV5HWMEM(0x1B,0x39), EV5, ARG_EV5HWMEM },
1341 a993ba85 bellard
  { "hw_ldl/pawv",        EV5HWMEM(0x1B,0x3a), EV5, ARG_EV5HWMEM },
1342 a993ba85 bellard
  { "hw_ldl/pawvl",        EV5HWMEM(0x1B,0x3b), EV5, ARG_EV5HWMEM },
1343 a993ba85 bellard
  { "hw_ldl/pl",        EV5HWMEM(0x1B,0x21), EV5, ARG_EV5HWMEM },
1344 a993ba85 bellard
  { "hw_ldl/pr",        EV4HWMEM(0x1B,0xA), EV4, ARG_EV4HWMEM },
1345 a993ba85 bellard
  { "hw_ldl/pv",        EV5HWMEM(0x1B,0x22), EV5, ARG_EV5HWMEM },
1346 a993ba85 bellard
  { "hw_ldl/pvl",        EV5HWMEM(0x1B,0x23), EV5, ARG_EV5HWMEM },
1347 a993ba85 bellard
  { "hw_ldl/pw",        EV5HWMEM(0x1B,0x28), EV5, ARG_EV5HWMEM },
1348 a993ba85 bellard
  { "hw_ldl/pwl",        EV5HWMEM(0x1B,0x29), EV5, ARG_EV5HWMEM },
1349 a993ba85 bellard
  { "hw_ldl/pwv",        EV5HWMEM(0x1B,0x2a), EV5, ARG_EV5HWMEM },
1350 a993ba85 bellard
  { "hw_ldl/pwvl",        EV5HWMEM(0x1B,0x2b), EV5, ARG_EV5HWMEM },
1351 a993ba85 bellard
  { "hw_ldl/r",                EV4HWMEM(0x1B,0x2), EV4, ARG_EV4HWMEM },
1352 a993ba85 bellard
  { "hw_ldl/v",                EV5HWMEM(0x1B,0x02), EV5, ARG_EV5HWMEM },
1353 a993ba85 bellard
  { "hw_ldl/v",                EV6HWMEM(0x1B,0x4), EV6, ARG_EV6HWMEM },
1354 a993ba85 bellard
  { "hw_ldl/vl",        EV5HWMEM(0x1B,0x03), EV5, ARG_EV5HWMEM },
1355 a993ba85 bellard
  { "hw_ldl/w",                EV5HWMEM(0x1B,0x08), EV5, ARG_EV5HWMEM },
1356 a993ba85 bellard
  { "hw_ldl/w",                EV6HWMEM(0x1B,0xA), EV6, ARG_EV6HWMEM },
1357 a993ba85 bellard
  { "hw_ldl/wa",        EV6HWMEM(0x1B,0xE), EV6, ARG_EV6HWMEM },
1358 a993ba85 bellard
  { "hw_ldl/wl",        EV5HWMEM(0x1B,0x09), EV5, ARG_EV5HWMEM },
1359 a993ba85 bellard
  { "hw_ldl/wv",        EV5HWMEM(0x1B,0x0a), EV5, ARG_EV5HWMEM },
1360 a993ba85 bellard
  { "hw_ldl/wvl",        EV5HWMEM(0x1B,0x0b), EV5, ARG_EV5HWMEM },
1361 a993ba85 bellard
  { "hw_ldl_l",                EV5HWMEM(0x1B,0x01), EV5, ARG_EV5HWMEM },
1362 a993ba85 bellard
  { "hw_ldl_l/a",        EV5HWMEM(0x1B,0x11), EV5, ARG_EV5HWMEM },
1363 a993ba85 bellard
  { "hw_ldl_l/av",        EV5HWMEM(0x1B,0x13), EV5, ARG_EV5HWMEM },
1364 a993ba85 bellard
  { "hw_ldl_l/aw",        EV5HWMEM(0x1B,0x19), EV5, ARG_EV5HWMEM },
1365 a993ba85 bellard
  { "hw_ldl_l/awv",        EV5HWMEM(0x1B,0x1b), EV5, ARG_EV5HWMEM },
1366 a993ba85 bellard
  { "hw_ldl_l/p",        EV5HWMEM(0x1B,0x21), EV5, ARG_EV5HWMEM },
1367 a993ba85 bellard
  { "hw_ldl_l/p",        EV6HWMEM(0x1B,0x2), EV6, ARG_EV6HWMEM },
1368 a993ba85 bellard
  { "hw_ldl_l/pa",        EV5HWMEM(0x1B,0x31), EV5, ARG_EV5HWMEM },
1369 a993ba85 bellard
  { "hw_ldl_l/pav",        EV5HWMEM(0x1B,0x33), EV5, ARG_EV5HWMEM },
1370 a993ba85 bellard
  { "hw_ldl_l/paw",        EV5HWMEM(0x1B,0x39), EV5, ARG_EV5HWMEM },
1371 a993ba85 bellard
  { "hw_ldl_l/pawv",        EV5HWMEM(0x1B,0x3b), EV5, ARG_EV5HWMEM },
1372 a993ba85 bellard
  { "hw_ldl_l/pv",        EV5HWMEM(0x1B,0x23), EV5, ARG_EV5HWMEM },
1373 a993ba85 bellard
  { "hw_ldl_l/pw",        EV5HWMEM(0x1B,0x29), EV5, ARG_EV5HWMEM },
1374 a993ba85 bellard
  { "hw_ldl_l/pwv",        EV5HWMEM(0x1B,0x2b), EV5, ARG_EV5HWMEM },
1375 a993ba85 bellard
  { "hw_ldl_l/v",        EV5HWMEM(0x1B,0x03), EV5, ARG_EV5HWMEM },
1376 a993ba85 bellard
  { "hw_ldl_l/w",        EV5HWMEM(0x1B,0x09), EV5, ARG_EV5HWMEM },
1377 a993ba85 bellard
  { "hw_ldl_l/wv",        EV5HWMEM(0x1B,0x0b), EV5, ARG_EV5HWMEM },
1378 a993ba85 bellard
  { "hw_ldq",                EV4HWMEM(0x1B,0x1), EV4, ARG_EV4HWMEM },
1379 a993ba85 bellard
  { "hw_ldq",                EV5HWMEM(0x1B,0x04), EV5, ARG_EV5HWMEM },
1380 a993ba85 bellard
  { "hw_ldq",                EV6HWMEM(0x1B,0x9), EV6, ARG_EV6HWMEM },
1381 a993ba85 bellard
  { "hw_ldq/a",                EV4HWMEM(0x1B,0x5), EV4, ARG_EV4HWMEM },
1382 a993ba85 bellard
  { "hw_ldq/a",                EV5HWMEM(0x1B,0x14), EV5, ARG_EV5HWMEM },
1383 a993ba85 bellard
  { "hw_ldq/a",                EV6HWMEM(0x1B,0xD), EV6, ARG_EV6HWMEM },
1384 a993ba85 bellard
  { "hw_ldq/al",        EV5HWMEM(0x1B,0x15), EV5, ARG_EV5HWMEM },
1385 a993ba85 bellard
  { "hw_ldq/ar",        EV4HWMEM(0x1B,0x7), EV4, ARG_EV4HWMEM },
1386 a993ba85 bellard
  { "hw_ldq/av",        EV5HWMEM(0x1B,0x16), EV5, ARG_EV5HWMEM },
1387 a993ba85 bellard
  { "hw_ldq/avl",        EV5HWMEM(0x1B,0x17), EV5, ARG_EV5HWMEM },
1388 a993ba85 bellard
  { "hw_ldq/aw",        EV5HWMEM(0x1B,0x1c), EV5, ARG_EV5HWMEM },
1389 a993ba85 bellard
  { "hw_ldq/awl",        EV5HWMEM(0x1B,0x1d), EV5, ARG_EV5HWMEM },
1390 a993ba85 bellard
  { "hw_ldq/awv",        EV5HWMEM(0x1B,0x1e), EV5, ARG_EV5HWMEM },
1391 a993ba85 bellard
  { "hw_ldq/awvl",        EV5HWMEM(0x1B,0x1f), EV5, ARG_EV5HWMEM },
1392 a993ba85 bellard
  { "hw_ldq/l",                EV5HWMEM(0x1B,0x05), EV5, ARG_EV5HWMEM },
1393 a993ba85 bellard
  { "hw_ldq/p",                EV4HWMEM(0x1B,0x9), EV4, ARG_EV4HWMEM },
1394 a993ba85 bellard
  { "hw_ldq/p",                EV5HWMEM(0x1B,0x24), EV5, ARG_EV5HWMEM },
1395 a993ba85 bellard
  { "hw_ldq/p",                EV6HWMEM(0x1B,0x1), EV6, ARG_EV6HWMEM },
1396 a993ba85 bellard
  { "hw_ldq/pa",        EV4HWMEM(0x1B,0xD), EV4, ARG_EV4HWMEM },
1397 a993ba85 bellard
  { "hw_ldq/pa",        EV5HWMEM(0x1B,0x34), EV5, ARG_EV5HWMEM },
1398 a993ba85 bellard
  { "hw_ldq/pal",        EV5HWMEM(0x1B,0x35), EV5, ARG_EV5HWMEM },
1399 a993ba85 bellard
  { "hw_ldq/par",        EV4HWMEM(0x1B,0xF), EV4, ARG_EV4HWMEM },
1400 a993ba85 bellard
  { "hw_ldq/pav",        EV5HWMEM(0x1B,0x36), EV5, ARG_EV5HWMEM },
1401 a993ba85 bellard
  { "hw_ldq/pavl",        EV5HWMEM(0x1B,0x37), EV5, ARG_EV5HWMEM },
1402 a993ba85 bellard
  { "hw_ldq/paw",        EV5HWMEM(0x1B,0x3c), EV5, ARG_EV5HWMEM },
1403 a993ba85 bellard
  { "hw_ldq/pawl",        EV5HWMEM(0x1B,0x3d), EV5, ARG_EV5HWMEM },
1404 a993ba85 bellard
  { "hw_ldq/pawv",        EV5HWMEM(0x1B,0x3e), EV5, ARG_EV5HWMEM },
1405 a993ba85 bellard
  { "hw_ldq/pawvl",        EV5HWMEM(0x1B,0x3f), EV5, ARG_EV5HWMEM },
1406 a993ba85 bellard
  { "hw_ldq/pl",        EV5HWMEM(0x1B,0x25), EV5, ARG_EV5HWMEM },
1407 a993ba85 bellard
  { "hw_ldq/pr",        EV4HWMEM(0x1B,0xB), EV4, ARG_EV4HWMEM },
1408 a993ba85 bellard
  { "hw_ldq/pv",        EV5HWMEM(0x1B,0x26), EV5, ARG_EV5HWMEM },
1409 a993ba85 bellard
  { "hw_ldq/pvl",        EV5HWMEM(0x1B,0x27), EV5, ARG_EV5HWMEM },
1410 a993ba85 bellard
  { "hw_ldq/pw",        EV5HWMEM(0x1B,0x2c), EV5, ARG_EV5HWMEM },
1411 a993ba85 bellard
  { "hw_ldq/pwl",        EV5HWMEM(0x1B,0x2d), EV5, ARG_EV5HWMEM },
1412 a993ba85 bellard
  { "hw_ldq/pwv",        EV5HWMEM(0x1B,0x2e), EV5, ARG_EV5HWMEM },
1413 a993ba85 bellard
  { "hw_ldq/pwvl",        EV5HWMEM(0x1B,0x2f), EV5, ARG_EV5HWMEM },
1414 a993ba85 bellard
  { "hw_ldq/r",                EV4HWMEM(0x1B,0x3), EV4, ARG_EV4HWMEM },
1415 a993ba85 bellard
  { "hw_ldq/v",                EV5HWMEM(0x1B,0x06), EV5, ARG_EV5HWMEM },
1416 a993ba85 bellard
  { "hw_ldq/v",                EV6HWMEM(0x1B,0x5), EV6, ARG_EV6HWMEM },
1417 a993ba85 bellard
  { "hw_ldq/vl",        EV5HWMEM(0x1B,0x07), EV5, ARG_EV5HWMEM },
1418 a993ba85 bellard
  { "hw_ldq/w",                EV5HWMEM(0x1B,0x0c), EV5, ARG_EV5HWMEM },
1419 a993ba85 bellard
  { "hw_ldq/w",                EV6HWMEM(0x1B,0xB), EV6, ARG_EV6HWMEM },
1420 a993ba85 bellard
  { "hw_ldq/wa",        EV6HWMEM(0x1B,0xF), EV6, ARG_EV6HWMEM },
1421 a993ba85 bellard
  { "hw_ldq/wl",        EV5HWMEM(0x1B,0x0d), EV5, ARG_EV5HWMEM },
1422 a993ba85 bellard
  { "hw_ldq/wv",        EV5HWMEM(0x1B,0x0e), EV5, ARG_EV5HWMEM },
1423 a993ba85 bellard
  { "hw_ldq/wvl",        EV5HWMEM(0x1B,0x0f), EV5, ARG_EV5HWMEM },
1424 a993ba85 bellard
  { "hw_ldq_l",                EV5HWMEM(0x1B,0x05), EV5, ARG_EV5HWMEM },
1425 a993ba85 bellard
  { "hw_ldq_l/a",        EV5HWMEM(0x1B,0x15), EV5, ARG_EV5HWMEM },
1426 a993ba85 bellard
  { "hw_ldq_l/av",        EV5HWMEM(0x1B,0x17), EV5, ARG_EV5HWMEM },
1427 a993ba85 bellard
  { "hw_ldq_l/aw",        EV5HWMEM(0x1B,0x1d), EV5, ARG_EV5HWMEM },
1428 a993ba85 bellard
  { "hw_ldq_l/awv",        EV5HWMEM(0x1B,0x1f), EV5, ARG_EV5HWMEM },
1429 a993ba85 bellard
  { "hw_ldq_l/p",        EV5HWMEM(0x1B,0x25), EV5, ARG_EV5HWMEM },
1430 a993ba85 bellard
  { "hw_ldq_l/p",        EV6HWMEM(0x1B,0x3), EV6, ARG_EV6HWMEM },
1431 a993ba85 bellard
  { "hw_ldq_l/pa",        EV5HWMEM(0x1B,0x35), EV5, ARG_EV5HWMEM },
1432 a993ba85 bellard
  { "hw_ldq_l/pav",        EV5HWMEM(0x1B,0x37), EV5, ARG_EV5HWMEM },
1433 a993ba85 bellard
  { "hw_ldq_l/paw",        EV5HWMEM(0x1B,0x3d), EV5, ARG_EV5HWMEM },
1434 a993ba85 bellard
  { "hw_ldq_l/pawv",        EV5HWMEM(0x1B,0x3f), EV5, ARG_EV5HWMEM },
1435 a993ba85 bellard
  { "hw_ldq_l/pv",        EV5HWMEM(0x1B,0x27), EV5, ARG_EV5HWMEM },
1436 a993ba85 bellard
  { "hw_ldq_l/pw",        EV5HWMEM(0x1B,0x2d), EV5, ARG_EV5HWMEM },
1437 a993ba85 bellard
  { "hw_ldq_l/pwv",        EV5HWMEM(0x1B,0x2f), EV5, ARG_EV5HWMEM },
1438 a993ba85 bellard
  { "hw_ldq_l/v",        EV5HWMEM(0x1B,0x07), EV5, ARG_EV5HWMEM },
1439 a993ba85 bellard
  { "hw_ldq_l/w",        EV5HWMEM(0x1B,0x0d), EV5, ARG_EV5HWMEM },
1440 a993ba85 bellard
  { "hw_ldq_l/wv",        EV5HWMEM(0x1B,0x0f), EV5, ARG_EV5HWMEM },
1441 a993ba85 bellard
  { "hw_ld",                EV4HWMEM(0x1B,0x0), EV4, ARG_EV4HWMEM },
1442 a993ba85 bellard
  { "hw_ld",                EV5HWMEM(0x1B,0x00), EV5, ARG_EV5HWMEM },
1443 a993ba85 bellard
  { "hw_ld/a",                EV4HWMEM(0x1B,0x4), EV4, ARG_EV4HWMEM },
1444 a993ba85 bellard
  { "hw_ld/a",                EV5HWMEM(0x1B,0x10), EV5, ARG_EV5HWMEM },
1445 a993ba85 bellard
  { "hw_ld/al",                EV5HWMEM(0x1B,0x11), EV5, ARG_EV5HWMEM },
1446 a993ba85 bellard
  { "hw_ld/aq",                EV4HWMEM(0x1B,0x5), EV4, ARG_EV4HWMEM },
1447 a993ba85 bellard
  { "hw_ld/aq",                EV5HWMEM(0x1B,0x14), EV5, ARG_EV5HWMEM },
1448 a993ba85 bellard
  { "hw_ld/aql",        EV5HWMEM(0x1B,0x15), EV5, ARG_EV5HWMEM },
1449 a993ba85 bellard
  { "hw_ld/aqv",        EV5HWMEM(0x1B,0x16), EV5, ARG_EV5HWMEM },
1450 a993ba85 bellard
  { "hw_ld/aqvl",        EV5HWMEM(0x1B,0x17), EV5, ARG_EV5HWMEM },
1451 a993ba85 bellard
  { "hw_ld/ar",                EV4HWMEM(0x1B,0x6), EV4, ARG_EV4HWMEM },
1452 a993ba85 bellard
  { "hw_ld/arq",        EV4HWMEM(0x1B,0x7), EV4, ARG_EV4HWMEM },
1453 a993ba85 bellard
  { "hw_ld/av",                EV5HWMEM(0x1B,0x12), EV5, ARG_EV5HWMEM },
1454 a993ba85 bellard
  { "hw_ld/avl",        EV5HWMEM(0x1B,0x13), EV5, ARG_EV5HWMEM },
1455 a993ba85 bellard
  { "hw_ld/aw",                EV5HWMEM(0x1B,0x18), EV5, ARG_EV5HWMEM },
1456 a993ba85 bellard
  { "hw_ld/awl",        EV5HWMEM(0x1B,0x19), EV5, ARG_EV5HWMEM },
1457 a993ba85 bellard
  { "hw_ld/awq",        EV5HWMEM(0x1B,0x1c), EV5, ARG_EV5HWMEM },
1458 a993ba85 bellard
  { "hw_ld/awql",        EV5HWMEM(0x1B,0x1d), EV5, ARG_EV5HWMEM },
1459 a993ba85 bellard
  { "hw_ld/awqv",        EV5HWMEM(0x1B,0x1e), EV5, ARG_EV5HWMEM },
1460 a993ba85 bellard
  { "hw_ld/awqvl",        EV5HWMEM(0x1B,0x1f), EV5, ARG_EV5HWMEM },
1461 a993ba85 bellard
  { "hw_ld/awv",        EV5HWMEM(0x1B,0x1a), EV5, ARG_EV5HWMEM },
1462 a993ba85 bellard
  { "hw_ld/awvl",        EV5HWMEM(0x1B,0x1b), EV5, ARG_EV5HWMEM },
1463 a993ba85 bellard
  { "hw_ld/l",                EV5HWMEM(0x1B,0x01), EV5, ARG_EV5HWMEM },
1464 a993ba85 bellard
  { "hw_ld/p",                EV4HWMEM(0x1B,0x8), EV4, ARG_EV4HWMEM },
1465 a993ba85 bellard
  { "hw_ld/p",                EV5HWMEM(0x1B,0x20), EV5, ARG_EV5HWMEM },
1466 a993ba85 bellard
  { "hw_ld/pa",                EV4HWMEM(0x1B,0xC), EV4, ARG_EV4HWMEM },
1467 a993ba85 bellard
  { "hw_ld/pa",                EV5HWMEM(0x1B,0x30), EV5, ARG_EV5HWMEM },
1468 a993ba85 bellard
  { "hw_ld/pal",        EV5HWMEM(0x1B,0x31), EV5, ARG_EV5HWMEM },
1469 a993ba85 bellard
  { "hw_ld/paq",        EV4HWMEM(0x1B,0xD), EV4, ARG_EV4HWMEM },
1470 a993ba85 bellard
  { "hw_ld/paq",        EV5HWMEM(0x1B,0x34), EV5, ARG_EV5HWMEM },
1471 a993ba85 bellard
  { "hw_ld/paql",        EV5HWMEM(0x1B,0x35), EV5, ARG_EV5HWMEM },
1472 a993ba85 bellard
  { "hw_ld/paqv",        EV5HWMEM(0x1B,0x36), EV5, ARG_EV5HWMEM },
1473 a993ba85 bellard
  { "hw_ld/paqvl",        EV5HWMEM(0x1B,0x37), EV5, ARG_EV5HWMEM },
1474 a993ba85 bellard
  { "hw_ld/par",        EV4HWMEM(0x1B,0xE), EV4, ARG_EV4HWMEM },
1475 a993ba85 bellard
  { "hw_ld/parq",        EV4HWMEM(0x1B,0xF), EV4, ARG_EV4HWMEM },
1476 a993ba85 bellard
  { "hw_ld/pav",        EV5HWMEM(0x1B,0x32), EV5, ARG_EV5HWMEM },
1477 a993ba85 bellard
  { "hw_ld/pavl",        EV5HWMEM(0x1B,0x33), EV5, ARG_EV5HWMEM },
1478 a993ba85 bellard
  { "hw_ld/paw",        EV5HWMEM(0x1B,0x38), EV5, ARG_EV5HWMEM },
1479 a993ba85 bellard
  { "hw_ld/pawl",        EV5HWMEM(0x1B,0x39), EV5, ARG_EV5HWMEM },
1480 a993ba85 bellard
  { "hw_ld/pawq",        EV5HWMEM(0x1B,0x3c), EV5, ARG_EV5HWMEM },
1481 a993ba85 bellard
  { "hw_ld/pawql",        EV5HWMEM(0x1B,0x3d), EV5, ARG_EV5HWMEM },
1482 a993ba85 bellard
  { "hw_ld/pawqv",        EV5HWMEM(0x1B,0x3e), EV5, ARG_EV5HWMEM },
1483 a993ba85 bellard
  { "hw_ld/pawqvl",        EV5HWMEM(0x1B,0x3f), EV5, ARG_EV5HWMEM },
1484 a993ba85 bellard
  { "hw_ld/pawv",        EV5HWMEM(0x1B,0x3a), EV5, ARG_EV5HWMEM },
1485 a993ba85 bellard
  { "hw_ld/pawvl",        EV5HWMEM(0x1B,0x3b), EV5, ARG_EV5HWMEM },
1486 a993ba85 bellard
  { "hw_ld/pl",                EV5HWMEM(0x1B,0x21), EV5, ARG_EV5HWMEM },
1487 a993ba85 bellard
  { "hw_ld/pq",                EV4HWMEM(0x1B,0x9), EV4, ARG_EV4HWMEM },
1488 a993ba85 bellard
  { "hw_ld/pq",                EV5HWMEM(0x1B,0x24), EV5, ARG_EV5HWMEM },
1489 a993ba85 bellard
  { "hw_ld/pql",        EV5HWMEM(0x1B,0x25), EV5, ARG_EV5HWMEM },
1490 a993ba85 bellard
  { "hw_ld/pqv",        EV5HWMEM(0x1B,0x26), EV5, ARG_EV5HWMEM },
1491 a993ba85 bellard
  { "hw_ld/pqvl",        EV5HWMEM(0x1B,0x27), EV5, ARG_EV5HWMEM },
1492 a993ba85 bellard
  { "hw_ld/pr",                EV4HWMEM(0x1B,0xA), EV4, ARG_EV4HWMEM },
1493 a993ba85 bellard
  { "hw_ld/prq",        EV4HWMEM(0x1B,0xB), EV4, ARG_EV4HWMEM },
1494 a993ba85 bellard
  { "hw_ld/pv",                EV5HWMEM(0x1B,0x22), EV5, ARG_EV5HWMEM },
1495 a993ba85 bellard
  { "hw_ld/pvl",        EV5HWMEM(0x1B,0x23), EV5, ARG_EV5HWMEM },
1496 a993ba85 bellard
  { "hw_ld/pw",                EV5HWMEM(0x1B,0x28), EV5, ARG_EV5HWMEM },
1497 a993ba85 bellard
  { "hw_ld/pwl",        EV5HWMEM(0x1B,0x29), EV5, ARG_EV5HWMEM },
1498 a993ba85 bellard
  { "hw_ld/pwq",        EV5HWMEM(0x1B,0x2c), EV5, ARG_EV5HWMEM },
1499 a993ba85 bellard
  { "hw_ld/pwql",        EV5HWMEM(0x1B,0x2d), EV5, ARG_EV5HWMEM },
1500 a993ba85 bellard
  { "hw_ld/pwqv",        EV5HWMEM(0x1B,0x2e), EV5, ARG_EV5HWMEM },
1501 a993ba85 bellard
  { "hw_ld/pwqvl",        EV5HWMEM(0x1B,0x2f), EV5, ARG_EV5HWMEM },
1502 a993ba85 bellard
  { "hw_ld/pwv",        EV5HWMEM(0x1B,0x2a), EV5, ARG_EV5HWMEM },
1503 a993ba85 bellard
  { "hw_ld/pwvl",        EV5HWMEM(0x1B,0x2b), EV5, ARG_EV5HWMEM },
1504 a993ba85 bellard
  { "hw_ld/q",                EV4HWMEM(0x1B,0x1), EV4, ARG_EV4HWMEM },
1505 a993ba85 bellard
  { "hw_ld/q",                EV5HWMEM(0x1B,0x04), EV5, ARG_EV5HWMEM },
1506 a993ba85 bellard
  { "hw_ld/ql",                EV5HWMEM(0x1B,0x05), EV5, ARG_EV5HWMEM },
1507 a993ba85 bellard
  { "hw_ld/qv",                EV5HWMEM(0x1B,0x06), EV5, ARG_EV5HWMEM },
1508 a993ba85 bellard
  { "hw_ld/qvl",        EV5HWMEM(0x1B,0x07), EV5, ARG_EV5HWMEM },
1509 a993ba85 bellard
  { "hw_ld/r",                EV4HWMEM(0x1B,0x2), EV4, ARG_EV4HWMEM },
1510 a993ba85 bellard
  { "hw_ld/rq",                EV4HWMEM(0x1B,0x3), EV4, ARG_EV4HWMEM },
1511 a993ba85 bellard
  { "hw_ld/v",                EV5HWMEM(0x1B,0x02), EV5, ARG_EV5HWMEM },
1512 a993ba85 bellard
  { "hw_ld/vl",                EV5HWMEM(0x1B,0x03), EV5, ARG_EV5HWMEM },
1513 a993ba85 bellard
  { "hw_ld/w",                EV5HWMEM(0x1B,0x08), EV5, ARG_EV5HWMEM },
1514 a993ba85 bellard
  { "hw_ld/wl",                EV5HWMEM(0x1B,0x09), EV5, ARG_EV5HWMEM },
1515 a993ba85 bellard
  { "hw_ld/wq",                EV5HWMEM(0x1B,0x0c), EV5, ARG_EV5HWMEM },
1516 a993ba85 bellard
  { "hw_ld/wql",        EV5HWMEM(0x1B,0x0d), EV5, ARG_EV5HWMEM },
1517 a993ba85 bellard
  { "hw_ld/wqv",        EV5HWMEM(0x1B,0x0e), EV5, ARG_EV5HWMEM },
1518 a993ba85 bellard
  { "hw_ld/wqvl",        EV5HWMEM(0x1B,0x0f), EV5, ARG_EV5HWMEM },
1519 a993ba85 bellard
  { "hw_ld/wv",                EV5HWMEM(0x1B,0x0a), EV5, ARG_EV5HWMEM },
1520 a993ba85 bellard
  { "hw_ld/wvl",        EV5HWMEM(0x1B,0x0b), EV5, ARG_EV5HWMEM },
1521 a993ba85 bellard
  { "pal1b",                PCD(0x1B), BASE, ARG_PCD },
1522 a993ba85 bellard
1523 a993ba85 bellard
  { "sextb",                OPR(0x1C, 0x00), BWX, ARG_OPRZ1 },
1524 a993ba85 bellard
  { "sextw",                OPR(0x1C, 0x01), BWX, ARG_OPRZ1 },
1525 a993ba85 bellard
  { "ctpop",                OPR(0x1C, 0x30), CIX, ARG_OPRZ1 },
1526 a993ba85 bellard
  { "perr",                OPR(0x1C, 0x31), MAX, ARG_OPR },
1527 a993ba85 bellard
  { "ctlz",                OPR(0x1C, 0x32), CIX, ARG_OPRZ1 },
1528 a993ba85 bellard
  { "cttz",                OPR(0x1C, 0x33), CIX, ARG_OPRZ1 },
1529 a993ba85 bellard
  { "unpkbw",                OPR(0x1C, 0x34), MAX, ARG_OPRZ1 },
1530 a993ba85 bellard
  { "unpkbl",                OPR(0x1C, 0x35), MAX, ARG_OPRZ1 },
1531 a993ba85 bellard
  { "pkwb",                OPR(0x1C, 0x36), MAX, ARG_OPRZ1 },
1532 a993ba85 bellard
  { "pklb",                OPR(0x1C, 0x37), MAX, ARG_OPRZ1 },
1533 a993ba85 bellard
  { "minsb8",                 OPR(0x1C, 0x38), MAX, ARG_OPR },
1534 a993ba85 bellard
  { "minsb8",                 OPRL(0x1C, 0x38), MAX, ARG_OPRL },
1535 a993ba85 bellard
  { "minsw4",                 OPR(0x1C, 0x39), MAX, ARG_OPR },
1536 a993ba85 bellard
  { "minsw4",                 OPRL(0x1C, 0x39), MAX, ARG_OPRL },
1537 a993ba85 bellard
  { "minub8",                 OPR(0x1C, 0x3A), MAX, ARG_OPR },
1538 a993ba85 bellard
  { "minub8",                 OPRL(0x1C, 0x3A), MAX, ARG_OPRL },
1539 a993ba85 bellard
  { "minuw4",                 OPR(0x1C, 0x3B), MAX, ARG_OPR },
1540 a993ba85 bellard
  { "minuw4",                 OPRL(0x1C, 0x3B), MAX, ARG_OPRL },
1541 a993ba85 bellard
  { "maxub8",                OPR(0x1C, 0x3C), MAX, ARG_OPR },
1542 a993ba85 bellard
  { "maxub8",                OPRL(0x1C, 0x3C), MAX, ARG_OPRL },
1543 a993ba85 bellard
  { "maxuw4",                OPR(0x1C, 0x3D), MAX, ARG_OPR },
1544 a993ba85 bellard
  { "maxuw4",                OPRL(0x1C, 0x3D), MAX, ARG_OPRL },
1545 a993ba85 bellard
  { "maxsb8",                OPR(0x1C, 0x3E), MAX, ARG_OPR },
1546 a993ba85 bellard
  { "maxsb8",                OPRL(0x1C, 0x3E), MAX, ARG_OPRL },
1547 a993ba85 bellard
  { "maxsw4",                OPR(0x1C, 0x3F), MAX, ARG_OPR },
1548 a993ba85 bellard
  { "maxsw4",                OPRL(0x1C, 0x3F), MAX, ARG_OPRL },
1549 a993ba85 bellard
  { "ftoit",                FP(0x1C, 0x70), CIX, { FA, ZB, RC } },
1550 a993ba85 bellard
  { "ftois",                FP(0x1C, 0x78), CIX, { FA, ZB, RC } },
1551 a993ba85 bellard
1552 a993ba85 bellard
  { "hw_mtpr",                OPR(0x1D,0x00), EV4, { RA, RBA, EV4EXTHWINDEX } },
1553 a993ba85 bellard
  { "hw_mtpr",                OP(0x1D), OP_MASK, EV5, { RA, RBA, EV5HWINDEX } },
1554 a993ba85 bellard
  { "hw_mtpr",                OP(0x1D), OP_MASK, EV6, { ZA, RB, EV6HWINDEX } },
1555 a993ba85 bellard
  { "hw_mtpr/i",         OPR(0x1D,0x01), EV4, ARG_EV4HWMPR },
1556 a993ba85 bellard
  { "hw_mtpr/a",         OPR(0x1D,0x02), EV4, ARG_EV4HWMPR },
1557 a993ba85 bellard
  { "hw_mtpr/ai",        OPR(0x1D,0x03), EV4, ARG_EV4HWMPR },
1558 a993ba85 bellard
  { "hw_mtpr/p",         OPR(0x1D,0x04), EV4, ARG_EV4HWMPR },
1559 a993ba85 bellard
  { "hw_mtpr/pi",        OPR(0x1D,0x05), EV4, ARG_EV4HWMPR },
1560 a993ba85 bellard
  { "hw_mtpr/pa",        OPR(0x1D,0x06), EV4, ARG_EV4HWMPR },
1561 a993ba85 bellard
  { "hw_mtpr/pai",        OPR(0x1D,0x07), EV4, ARG_EV4HWMPR },
1562 a993ba85 bellard
  { "pal1d",                PCD(0x1D), BASE, ARG_PCD },
1563 a993ba85 bellard
1564 a993ba85 bellard
  { "hw_rei",                SPCD(0x1E,0x3FF8000), EV4|EV5, ARG_NONE },
1565 a993ba85 bellard
  { "hw_rei_stall",        SPCD(0x1E,0x3FFC000), EV5, ARG_NONE },
1566 a993ba85 bellard
  { "hw_jmp",                 EV6HWMBR(0x1E,0x0), EV6, { ZA, PRB, EV6HWJMPHINT } },
1567 a993ba85 bellard
  { "hw_jsr",                 EV6HWMBR(0x1E,0x2), EV6, { ZA, PRB, EV6HWJMPHINT } },
1568 a993ba85 bellard
  { "hw_ret",                 EV6HWMBR(0x1E,0x4), EV6, { ZA, PRB } },
1569 a993ba85 bellard
  { "hw_jcr",                 EV6HWMBR(0x1E,0x6), EV6, { ZA, PRB } },
1570 a993ba85 bellard
  { "hw_coroutine",        EV6HWMBR(0x1E,0x6), EV6, { ZA, PRB } }, /* alias */
1571 a993ba85 bellard
  { "hw_jmp/stall",        EV6HWMBR(0x1E,0x1), EV6, { ZA, PRB, EV6HWJMPHINT } },
1572 a993ba85 bellard
  { "hw_jsr/stall",         EV6HWMBR(0x1E,0x3), EV6, { ZA, PRB, EV6HWJMPHINT } },
1573 a993ba85 bellard
  { "hw_ret/stall",        EV6HWMBR(0x1E,0x5), EV6, { ZA, PRB } },
1574 a993ba85 bellard
  { "hw_jcr/stall",         EV6HWMBR(0x1E,0x7), EV6, { ZA, PRB } },
1575 a993ba85 bellard
  { "hw_coroutine/stall", EV6HWMBR(0x1E,0x7), EV6, { ZA, PRB } }, /* alias */
1576 a993ba85 bellard
  { "pal1e",                PCD(0x1E), BASE, ARG_PCD },
1577 a993ba85 bellard
1578 a993ba85 bellard
  { "hw_stl",                EV4HWMEM(0x1F,0x0), EV4, ARG_EV4HWMEM },
1579 a993ba85 bellard
  { "hw_stl",                EV5HWMEM(0x1F,0x00), EV5, ARG_EV5HWMEM },
1580 a993ba85 bellard
  { "hw_stl",                EV6HWMEM(0x1F,0x4), EV6, ARG_EV6HWMEM }, /* ??? 8 */
1581 a993ba85 bellard
  { "hw_stl/a",                EV4HWMEM(0x1F,0x4), EV4, ARG_EV4HWMEM },
1582 a993ba85 bellard
  { "hw_stl/a",                EV5HWMEM(0x1F,0x10), EV5, ARG_EV5HWMEM },
1583 a993ba85 bellard
  { "hw_stl/a",                EV6HWMEM(0x1F,0xC), EV6, ARG_EV6HWMEM },
1584 a993ba85 bellard
  { "hw_stl/ac",        EV5HWMEM(0x1F,0x11), EV5, ARG_EV5HWMEM },
1585 a993ba85 bellard
  { "hw_stl/ar",        EV4HWMEM(0x1F,0x6), EV4, ARG_EV4HWMEM },
1586 a993ba85 bellard
  { "hw_stl/av",        EV5HWMEM(0x1F,0x12), EV5, ARG_EV5HWMEM },
1587 a993ba85 bellard
  { "hw_stl/avc",        EV5HWMEM(0x1F,0x13), EV5, ARG_EV5HWMEM },
1588 a993ba85 bellard
  { "hw_stl/c",                EV5HWMEM(0x1F,0x01), EV5, ARG_EV5HWMEM },
1589 a993ba85 bellard
  { "hw_stl/p",                EV4HWMEM(0x1F,0x8), EV4, ARG_EV4HWMEM },
1590 a993ba85 bellard
  { "hw_stl/p",                EV5HWMEM(0x1F,0x20), EV5, ARG_EV5HWMEM },
1591 a993ba85 bellard
  { "hw_stl/p",                EV6HWMEM(0x1F,0x0), EV6, ARG_EV6HWMEM },
1592 a993ba85 bellard
  { "hw_stl/pa",        EV4HWMEM(0x1F,0xC), EV4, ARG_EV4HWMEM },
1593 a993ba85 bellard
  { "hw_stl/pa",        EV5HWMEM(0x1F,0x30), EV5, ARG_EV5HWMEM },
1594 a993ba85 bellard
  { "hw_stl/pac",        EV5HWMEM(0x1F,0x31), EV5, ARG_EV5HWMEM },
1595 a993ba85 bellard
  { "hw_stl/pav",        EV5HWMEM(0x1F,0x32), EV5, ARG_EV5HWMEM },
1596 a993ba85 bellard
  { "hw_stl/pavc",        EV5HWMEM(0x1F,0x33), EV5, ARG_EV5HWMEM },
1597 a993ba85 bellard
  { "hw_stl/pc",        EV5HWMEM(0x1F,0x21), EV5, ARG_EV5HWMEM },
1598 a993ba85 bellard
  { "hw_stl/pr",        EV4HWMEM(0x1F,0xA), EV4, ARG_EV4HWMEM },
1599 a993ba85 bellard
  { "hw_stl/pv",        EV5HWMEM(0x1F,0x22), EV5, ARG_EV5HWMEM },
1600 a993ba85 bellard
  { "hw_stl/pvc",        EV5HWMEM(0x1F,0x23), EV5, ARG_EV5HWMEM },
1601 a993ba85 bellard
  { "hw_stl/r",                EV4HWMEM(0x1F,0x2), EV4, ARG_EV4HWMEM },
1602 a993ba85 bellard
  { "hw_stl/v",                EV5HWMEM(0x1F,0x02), EV5, ARG_EV5HWMEM },
1603 a993ba85 bellard
  { "hw_stl/vc",        EV5HWMEM(0x1F,0x03), EV5, ARG_EV5HWMEM },
1604 a993ba85 bellard
  { "hw_stl_c",                EV5HWMEM(0x1F,0x01), EV5, ARG_EV5HWMEM },
1605 a993ba85 bellard
  { "hw_stl_c/a",        EV5HWMEM(0x1F,0x11), EV5, ARG_EV5HWMEM },
1606 a993ba85 bellard
  { "hw_stl_c/av",        EV5HWMEM(0x1F,0x13), EV5, ARG_EV5HWMEM },
1607 a993ba85 bellard
  { "hw_stl_c/p",        EV5HWMEM(0x1F,0x21), EV5, ARG_EV5HWMEM },
1608 a993ba85 bellard
  { "hw_stl_c/p",        EV6HWMEM(0x1F,0x2), EV6, ARG_EV6HWMEM },
1609 a993ba85 bellard
  { "hw_stl_c/pa",        EV5HWMEM(0x1F,0x31), EV5, ARG_EV5HWMEM },
1610 a993ba85 bellard
  { "hw_stl_c/pav",        EV5HWMEM(0x1F,0x33), EV5, ARG_EV5HWMEM },
1611 a993ba85 bellard
  { "hw_stl_c/pv",        EV5HWMEM(0x1F,0x23), EV5, ARG_EV5HWMEM },
1612 a993ba85 bellard
  { "hw_stl_c/v",        EV5HWMEM(0x1F,0x03), EV5, ARG_EV5HWMEM },
1613 a993ba85 bellard
  { "hw_stq",                EV4HWMEM(0x1F,0x1), EV4, ARG_EV4HWMEM },
1614 a993ba85 bellard
  { "hw_stq",                EV5HWMEM(0x1F,0x04), EV5, ARG_EV5HWMEM },
1615 a993ba85 bellard
  { "hw_stq",                EV6HWMEM(0x1F,0x5), EV6, ARG_EV6HWMEM }, /* ??? 9 */
1616 a993ba85 bellard
  { "hw_stq/a",                EV4HWMEM(0x1F,0x5), EV4, ARG_EV4HWMEM },
1617 a993ba85 bellard
  { "hw_stq/a",                EV5HWMEM(0x1F,0x14), EV5, ARG_EV5HWMEM },
1618 a993ba85 bellard
  { "hw_stq/a",                EV6HWMEM(0x1F,0xD), EV6, ARG_EV6HWMEM },
1619 a993ba85 bellard
  { "hw_stq/ac",        EV5HWMEM(0x1F,0x15), EV5, ARG_EV5HWMEM },
1620 a993ba85 bellard
  { "hw_stq/ar",        EV4HWMEM(0x1F,0x7), EV4, ARG_EV4HWMEM },
1621 a993ba85 bellard
  { "hw_stq/av",        EV5HWMEM(0x1F,0x16), EV5, ARG_EV5HWMEM },
1622 a993ba85 bellard
  { "hw_stq/avc",        EV5HWMEM(0x1F,0x17), EV5, ARG_EV5HWMEM },
1623 a993ba85 bellard
  { "hw_stq/c",                EV5HWMEM(0x1F,0x05), EV5, ARG_EV5HWMEM },
1624 a993ba85 bellard
  { "hw_stq/p",                EV4HWMEM(0x1F,0x9), EV4, ARG_EV4HWMEM },
1625 a993ba85 bellard
  { "hw_stq/p",                EV5HWMEM(0x1F,0x24), EV5, ARG_EV5HWMEM },
1626 a993ba85 bellard
  { "hw_stq/p",                EV6HWMEM(0x1F,0x1), EV6, ARG_EV6HWMEM },
1627 a993ba85 bellard
  { "hw_stq/pa",        EV4HWMEM(0x1F,0xD), EV4, ARG_EV4HWMEM },
1628 a993ba85 bellard
  { "hw_stq/pa",        EV5HWMEM(0x1F,0x34), EV5, ARG_EV5HWMEM },
1629 a993ba85 bellard
  { "hw_stq/pac",        EV5HWMEM(0x1F,0x35), EV5, ARG_EV5HWMEM },
1630 a993ba85 bellard
  { "hw_stq/par",        EV4HWMEM(0x1F,0xE), EV4, ARG_EV4HWMEM },
1631 a993ba85 bellard
  { "hw_stq/par",        EV4HWMEM(0x1F,0xF), EV4, ARG_EV4HWMEM },
1632 a993ba85 bellard
  { "hw_stq/pav",        EV5HWMEM(0x1F,0x36), EV5, ARG_EV5HWMEM },
1633 a993ba85 bellard
  { "hw_stq/pavc",        EV5HWMEM(0x1F,0x37), EV5, ARG_EV5HWMEM },
1634 a993ba85 bellard
  { "hw_stq/pc",        EV5HWMEM(0x1F,0x25), EV5, ARG_EV5HWMEM },
1635 a993ba85 bellard
  { "hw_stq/pr",        EV4HWMEM(0x1F,0xB), EV4, ARG_EV4HWMEM },
1636 a993ba85 bellard
  { "hw_stq/pv",        EV5HWMEM(0x1F,0x26), EV5, ARG_EV5HWMEM },
1637 a993ba85 bellard
  { "hw_stq/pvc",        EV5HWMEM(0x1F,0x27), EV5, ARG_EV5HWMEM },
1638 a993ba85 bellard
  { "hw_stq/r",                EV4HWMEM(0x1F,0x3), EV4, ARG_EV4HWMEM },
1639 a993ba85 bellard
  { "hw_stq/v",                EV5HWMEM(0x1F,0x06), EV5, ARG_EV5HWMEM },
1640 a993ba85 bellard
  { "hw_stq/vc",        EV5HWMEM(0x1F,0x07), EV5, ARG_EV5HWMEM },
1641 a993ba85 bellard
  { "hw_stq_c",                EV5HWMEM(0x1F,0x05), EV5, ARG_EV5HWMEM },
1642 a993ba85 bellard
  { "hw_stq_c/a",        EV5HWMEM(0x1F,0x15), EV5, ARG_EV5HWMEM },
1643 a993ba85 bellard
  { "hw_stq_c/av",        EV5HWMEM(0x1F,0x17), EV5, ARG_EV5HWMEM },
1644 a993ba85 bellard
  { "hw_stq_c/p",        EV5HWMEM(0x1F,0x25), EV5, ARG_EV5HWMEM },
1645 a993ba85 bellard
  { "hw_stq_c/p",        EV6HWMEM(0x1F,0x3), EV6, ARG_EV6HWMEM },
1646 a993ba85 bellard
  { "hw_stq_c/pa",        EV5HWMEM(0x1F,0x35), EV5, ARG_EV5HWMEM },
1647 a993ba85 bellard
  { "hw_stq_c/pav",        EV5HWMEM(0x1F,0x37), EV5, ARG_EV5HWMEM },
1648 a993ba85 bellard
  { "hw_stq_c/pv",        EV5HWMEM(0x1F,0x27), EV5, ARG_EV5HWMEM },
1649 a993ba85 bellard
  { "hw_stq_c/v",        EV5HWMEM(0x1F,0x07), EV5, ARG_EV5HWMEM },
1650 a993ba85 bellard
  { "hw_st",                EV4HWMEM(0x1F,0x0), EV4, ARG_EV4HWMEM },
1651 a993ba85 bellard
  { "hw_st",                EV5HWMEM(0x1F,0x00), EV5, ARG_EV5HWMEM },
1652 a993ba85 bellard
  { "hw_st/a",                EV4HWMEM(0x1F,0x4), EV4, ARG_EV4HWMEM },
1653 a993ba85 bellard
  { "hw_st/a",                EV5HWMEM(0x1F,0x10), EV5, ARG_EV5HWMEM },
1654 a993ba85 bellard
  { "hw_st/ac",                EV5HWMEM(0x1F,0x11), EV5, ARG_EV5HWMEM },
1655 a993ba85 bellard
  { "hw_st/aq",                EV4HWMEM(0x1F,0x5), EV4, ARG_EV4HWMEM },
1656 a993ba85 bellard
  { "hw_st/aq",                EV5HWMEM(0x1F,0x14), EV5, ARG_EV5HWMEM },
1657 a993ba85 bellard
  { "hw_st/aqc",        EV5HWMEM(0x1F,0x15), EV5, ARG_EV5HWMEM },
1658 a993ba85 bellard
  { "hw_st/aqv",        EV5HWMEM(0x1F,0x16), EV5, ARG_EV5HWMEM },
1659 a993ba85 bellard
  { "hw_st/aqvc",        EV5HWMEM(0x1F,0x17), EV5, ARG_EV5HWMEM },
1660 a993ba85 bellard
  { "hw_st/ar",                EV4HWMEM(0x1F,0x6), EV4, ARG_EV4HWMEM },
1661 a993ba85 bellard
  { "hw_st/arq",        EV4HWMEM(0x1F,0x7), EV4, ARG_EV4HWMEM },
1662 a993ba85 bellard
  { "hw_st/av",                EV5HWMEM(0x1F,0x12), EV5, ARG_EV5HWMEM },
1663 a993ba85 bellard
  { "hw_st/avc",        EV5HWMEM(0x1F,0x13), EV5, ARG_EV5HWMEM },
1664 a993ba85 bellard
  { "hw_st/c",                EV5HWMEM(0x1F,0x01), EV5, ARG_EV5HWMEM },
1665 a993ba85 bellard
  { "hw_st/p",                EV4HWMEM(0x1F,0x8), EV4, ARG_EV4HWMEM },
1666 a993ba85 bellard
  { "hw_st/p",                EV5HWMEM(0x1F,0x20), EV5, ARG_EV5HWMEM },
1667 a993ba85 bellard
  { "hw_st/pa",                EV4HWMEM(0x1F,0xC), EV4, ARG_EV4HWMEM },
1668 a993ba85 bellard
  { "hw_st/pa",                EV5HWMEM(0x1F,0x30), EV5, ARG_EV5HWMEM },
1669 a993ba85 bellard
  { "hw_st/pac",        EV5HWMEM(0x1F,0x31), EV5, ARG_EV5HWMEM },
1670 a993ba85 bellard
  { "hw_st/paq",        EV4HWMEM(0x1F,0xD), EV4, ARG_EV4HWMEM },
1671 a993ba85 bellard
  { "hw_st/paq",        EV5HWMEM(0x1F,0x34), EV5, ARG_EV5HWMEM },
1672 a993ba85 bellard
  { "hw_st/paqc",        EV5HWMEM(0x1F,0x35), EV5, ARG_EV5HWMEM },
1673 a993ba85 bellard
  { "hw_st/paqv",        EV5HWMEM(0x1F,0x36), EV5, ARG_EV5HWMEM },
1674 a993ba85 bellard
  { "hw_st/paqvc",        EV5HWMEM(0x1F,0x37), EV5, ARG_EV5HWMEM },
1675 a993ba85 bellard
  { "hw_st/par",        EV4HWMEM(0x1F,0xE), EV4, ARG_EV4HWMEM },
1676 a993ba85 bellard
  { "hw_st/parq",        EV4HWMEM(0x1F,0xF), EV4, ARG_EV4HWMEM },
1677 a993ba85 bellard
  { "hw_st/pav",        EV5HWMEM(0x1F,0x32), EV5, ARG_EV5HWMEM },
1678 a993ba85 bellard
  { "hw_st/pavc",        EV5HWMEM(0x1F,0x33), EV5, ARG_EV5HWMEM },
1679 a993ba85 bellard
  { "hw_st/pc",                EV5HWMEM(0x1F,0x21), EV5, ARG_EV5HWMEM },
1680 a993ba85 bellard
  { "hw_st/pq",                EV4HWMEM(0x1F,0x9), EV4, ARG_EV4HWMEM },
1681 a993ba85 bellard
  { "hw_st/pq",                EV5HWMEM(0x1F,0x24), EV5, ARG_EV5HWMEM },
1682 a993ba85 bellard
  { "hw_st/pqc",        EV5HWMEM(0x1F,0x25), EV5, ARG_EV5HWMEM },
1683 a993ba85 bellard
  { "hw_st/pqv",        EV5HWMEM(0x1F,0x26), EV5, ARG_EV5HWMEM },
1684 a993ba85 bellard
  { "hw_st/pqvc",        EV5HWMEM(0x1F,0x27), EV5, ARG_EV5HWMEM },
1685 a993ba85 bellard
  { "hw_st/pr",                EV4HWMEM(0x1F,0xA), EV4, ARG_EV4HWMEM },
1686 a993ba85 bellard
  { "hw_st/prq",        EV4HWMEM(0x1F,0xB), EV4, ARG_EV4HWMEM },
1687 a993ba85 bellard
  { "hw_st/pv",                EV5HWMEM(0x1F,0x22), EV5, ARG_EV5HWMEM },
1688 a993ba85 bellard
  { "hw_st/pvc",        EV5HWMEM(0x1F,0x23), EV5, ARG_EV5HWMEM },
1689 a993ba85 bellard
  { "hw_st/q",                EV4HWMEM(0x1F,0x1), EV4, ARG_EV4HWMEM },
1690 a993ba85 bellard
  { "hw_st/q",                EV5HWMEM(0x1F,0x04), EV5, ARG_EV5HWMEM },
1691 a993ba85 bellard
  { "hw_st/qc",                EV5HWMEM(0x1F,0x05), EV5, ARG_EV5HWMEM },
1692 a993ba85 bellard
  { "hw_st/qv",                EV5HWMEM(0x1F,0x06), EV5, ARG_EV5HWMEM },
1693 a993ba85 bellard
  { "hw_st/qvc",        EV5HWMEM(0x1F,0x07), EV5, ARG_EV5HWMEM },
1694 a993ba85 bellard
  { "hw_st/r",                EV4HWMEM(0x1F,0x2), EV4, ARG_EV4HWMEM },
1695 a993ba85 bellard
  { "hw_st/v",                EV5HWMEM(0x1F,0x02), EV5, ARG_EV5HWMEM },
1696 a993ba85 bellard
  { "hw_st/vc",                EV5HWMEM(0x1F,0x03), EV5, ARG_EV5HWMEM },
1697 a993ba85 bellard
  { "pal1f",                PCD(0x1F), BASE, ARG_PCD },
1698 a993ba85 bellard
1699 a993ba85 bellard
  { "ldf",                MEM(0x20), BASE, ARG_FMEM },
1700 a993ba85 bellard
  { "ldg",                MEM(0x21), BASE, ARG_FMEM },
1701 a993ba85 bellard
  { "lds",                MEM(0x22), BASE, ARG_FMEM },
1702 a993ba85 bellard
  { "ldt",                MEM(0x23), BASE, ARG_FMEM },
1703 a993ba85 bellard
  { "stf",                MEM(0x24), BASE, ARG_FMEM },
1704 a993ba85 bellard
  { "stg",                MEM(0x25), BASE, ARG_FMEM },
1705 a993ba85 bellard
  { "sts",                MEM(0x26), BASE, ARG_FMEM },
1706 a993ba85 bellard
  { "stt",                MEM(0x27), BASE, ARG_FMEM },
1707 a993ba85 bellard
1708 a993ba85 bellard
  { "ldl",                MEM(0x28), BASE, ARG_MEM },
1709 a993ba85 bellard
  { "ldq",                MEM(0x29), BASE, ARG_MEM },
1710 a993ba85 bellard
  { "ldl_l",                MEM(0x2A), BASE, ARG_MEM },
1711 a993ba85 bellard
  { "ldq_l",                MEM(0x2B), BASE, ARG_MEM },
1712 a993ba85 bellard
  { "stl",                MEM(0x2C), BASE, ARG_MEM },
1713 a993ba85 bellard
  { "stq",                MEM(0x2D), BASE, ARG_MEM },
1714 a993ba85 bellard
  { "stl_c",                MEM(0x2E), BASE, ARG_MEM },
1715 a993ba85 bellard
  { "stq_c",                MEM(0x2F), BASE, ARG_MEM },
1716 a993ba85 bellard
1717 a993ba85 bellard
  { "br",                BRA(0x30), BASE, { ZA, BDISP } },        /* pseudo */
1718 a993ba85 bellard
  { "br",                BRA(0x30), BASE, ARG_BRA },
1719 a993ba85 bellard
  { "fbeq",                BRA(0x31), BASE, ARG_FBRA },
1720 a993ba85 bellard
  { "fblt",                BRA(0x32), BASE, ARG_FBRA },
1721 a993ba85 bellard
  { "fble",                BRA(0x33), BASE, ARG_FBRA },
1722 a993ba85 bellard
  { "bsr",                BRA(0x34), BASE, ARG_BRA },
1723 a993ba85 bellard
  { "fbne",                BRA(0x35), BASE, ARG_FBRA },
1724 a993ba85 bellard
  { "fbge",                BRA(0x36), BASE, ARG_FBRA },
1725 a993ba85 bellard
  { "fbgt",                BRA(0x37), BASE, ARG_FBRA },
1726 a993ba85 bellard
  { "blbc",                BRA(0x38), BASE, ARG_BRA },
1727 a993ba85 bellard
  { "beq",                BRA(0x39), BASE, ARG_BRA },
1728 a993ba85 bellard
  { "blt",                BRA(0x3A), BASE, ARG_BRA },
1729 a993ba85 bellard
  { "ble",                BRA(0x3B), BASE, ARG_BRA },
1730 a993ba85 bellard
  { "blbs",                BRA(0x3C), BASE, ARG_BRA },
1731 a993ba85 bellard
  { "bne",                BRA(0x3D), BASE, ARG_BRA },
1732 a993ba85 bellard
  { "bge",                BRA(0x3E), BASE, ARG_BRA },
1733 a993ba85 bellard
  { "bgt",                BRA(0x3F), BASE, ARG_BRA },
1734 a993ba85 bellard
};
1735 a993ba85 bellard
1736 a993ba85 bellard
const unsigned alpha_num_opcodes = sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);
1737 a993ba85 bellard
1738 a993ba85 bellard
/* OSF register names.  */
1739 a993ba85 bellard
1740 a993ba85 bellard
static const char * const osf_regnames[64] = {
1741 a993ba85 bellard
  "v0", "t0", "t1", "t2", "t3", "t4", "t5", "t6",
1742 a993ba85 bellard
  "t7", "s0", "s1", "s2", "s3", "s4", "s5", "fp",
1743 a993ba85 bellard
  "a0", "a1", "a2", "a3", "a4", "a5", "t8", "t9",
1744 a993ba85 bellard
  "t10", "t11", "ra", "t12", "at", "gp", "sp", "zero",
1745 a993ba85 bellard
  "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7",
1746 a993ba85 bellard
  "$f8", "$f9", "$f10", "$f11", "$f12", "$f13", "$f14", "$f15",
1747 a993ba85 bellard
  "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",
1748 a993ba85 bellard
  "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "$f31"
1749 a993ba85 bellard
};
1750 a993ba85 bellard
1751 a993ba85 bellard
/* VMS register names.  */
1752 a993ba85 bellard
1753 a993ba85 bellard
static const char * const vms_regnames[64] = {
1754 a993ba85 bellard
  "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",
1755 a993ba85 bellard
  "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15",
1756 a993ba85 bellard
  "R16", "R17", "R18", "R19", "R20", "R21", "R22", "R23",
1757 a993ba85 bellard
  "R24", "AI", "RA", "PV", "AT", "FP", "SP", "RZ",
1758 a993ba85 bellard
  "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7",
1759 a993ba85 bellard
  "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15",
1760 a993ba85 bellard
  "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23",
1761 a993ba85 bellard
  "F24", "F25", "F26", "F27", "F28", "F29", "F30", "FZ"
1762 a993ba85 bellard
};
1763 a993ba85 bellard
1764 a993ba85 bellard
/* Disassemble Alpha instructions.  */
1765 a993ba85 bellard
1766 a993ba85 bellard
int
1767 668a38fc Juan Quintela
print_insn_alpha (bfd_vma memaddr, struct disassemble_info *info)
1768 a993ba85 bellard
{
1769 a993ba85 bellard
  static const struct alpha_opcode *opcode_index[AXP_NOPS+1];
1770 a993ba85 bellard
  const char * const * regnames;
1771 a993ba85 bellard
  const struct alpha_opcode *opcode, *opcode_end;
1772 a993ba85 bellard
  const unsigned char *opindex;
1773 a993ba85 bellard
  unsigned insn, op, isa_mask;
1774 a993ba85 bellard
  int need_comma;
1775 a993ba85 bellard
1776 a993ba85 bellard
  /* Initialize the majorop table the first time through */
1777 a993ba85 bellard
  if (!opcode_index[0])
1778 a993ba85 bellard
    {
1779 a993ba85 bellard
      opcode = alpha_opcodes;
1780 a993ba85 bellard
      opcode_end = opcode + alpha_num_opcodes;
1781 a993ba85 bellard
1782 a993ba85 bellard
      for (op = 0; op < AXP_NOPS; ++op)
1783 a993ba85 bellard
        {
1784 a993ba85 bellard
          opcode_index[op] = opcode;
1785 a993ba85 bellard
          while (opcode < opcode_end && op == AXP_OP (opcode->opcode))
1786 a993ba85 bellard
            ++opcode;
1787 a993ba85 bellard
        }
1788 a993ba85 bellard
      opcode_index[op] = opcode;
1789 a993ba85 bellard
    }
1790 a993ba85 bellard
1791 a993ba85 bellard
  if (info->flavour == bfd_target_evax_flavour)
1792 a993ba85 bellard
    regnames = vms_regnames;
1793 a993ba85 bellard
  else
1794 a993ba85 bellard
    regnames = osf_regnames;
1795 a993ba85 bellard
1796 a993ba85 bellard
  isa_mask = AXP_OPCODE_NOPAL;
1797 a993ba85 bellard
  switch (info->mach)
1798 a993ba85 bellard
    {
1799 a993ba85 bellard
    case bfd_mach_alpha_ev4:
1800 a993ba85 bellard
      isa_mask |= AXP_OPCODE_EV4;
1801 a993ba85 bellard
      break;
1802 a993ba85 bellard
    case bfd_mach_alpha_ev5:
1803 a993ba85 bellard
      isa_mask |= AXP_OPCODE_EV5;
1804 a993ba85 bellard
      break;
1805 a993ba85 bellard
    case bfd_mach_alpha_ev6:
1806 a993ba85 bellard
      isa_mask |= AXP_OPCODE_EV6;
1807 a993ba85 bellard
      break;
1808 a993ba85 bellard
    }
1809 a993ba85 bellard
1810 a993ba85 bellard
  /* Read the insn into a host word */
1811 a993ba85 bellard
  {
1812 a993ba85 bellard
    bfd_byte buffer[4];
1813 a993ba85 bellard
    int status = (*info->read_memory_func) (memaddr, buffer, 4, info);
1814 a993ba85 bellard
    if (status != 0)
1815 a993ba85 bellard
      {
1816 a993ba85 bellard
        (*info->memory_error_func) (status, memaddr, info);
1817 a993ba85 bellard
        return -1;
1818 a993ba85 bellard
      }
1819 a993ba85 bellard
    insn = bfd_getl32 (buffer);
1820 a993ba85 bellard
  }
1821 a993ba85 bellard
1822 a993ba85 bellard
  /* Get the major opcode of the instruction.  */
1823 a993ba85 bellard
  op = AXP_OP (insn);
1824 a993ba85 bellard
1825 a993ba85 bellard
  /* Find the first match in the opcode table.  */
1826 a993ba85 bellard
  opcode_end = opcode_index[op + 1];
1827 a993ba85 bellard
  for (opcode = opcode_index[op]; opcode < opcode_end; ++opcode)
1828 a993ba85 bellard
    {
1829 a993ba85 bellard
      if ((insn ^ opcode->opcode) & opcode->mask)
1830 a993ba85 bellard
        continue;
1831 a993ba85 bellard
1832 a993ba85 bellard
      if (!(opcode->flags & isa_mask))
1833 a993ba85 bellard
        continue;
1834 a993ba85 bellard
1835 a993ba85 bellard
      /* Make two passes over the operands.  First see if any of them
1836 a993ba85 bellard
         have extraction functions, and, if they do, make sure the
1837 a993ba85 bellard
         instruction is valid.  */
1838 a993ba85 bellard
      {
1839 a993ba85 bellard
        int invalid = 0;
1840 a993ba85 bellard
        for (opindex = opcode->operands; *opindex != 0; opindex++)
1841 a993ba85 bellard
          {
1842 a993ba85 bellard
            const struct alpha_operand *operand = alpha_operands + *opindex;
1843 a993ba85 bellard
            if (operand->extract)
1844 a993ba85 bellard
              (*operand->extract) (insn, &invalid);
1845 a993ba85 bellard
          }
1846 a993ba85 bellard
        if (invalid)
1847 a993ba85 bellard
          continue;
1848 a993ba85 bellard
      }
1849 a993ba85 bellard
1850 a993ba85 bellard
      /* The instruction is valid.  */
1851 a993ba85 bellard
      goto found;
1852 a993ba85 bellard
    }
1853 a993ba85 bellard
1854 a993ba85 bellard
  /* No instruction found */
1855 a993ba85 bellard
  (*info->fprintf_func) (info->stream, ".long %#08x", insn);
1856 a993ba85 bellard
1857 a993ba85 bellard
  return 4;
1858 a993ba85 bellard
1859 a993ba85 bellard
found:
1860 a993ba85 bellard
  (*info->fprintf_func) (info->stream, "%s", opcode->name);
1861 a993ba85 bellard
  if (opcode->operands[0] != 0)
1862 a993ba85 bellard
    (*info->fprintf_func) (info->stream, "\t");
1863 a993ba85 bellard
1864 a993ba85 bellard
  /* Now extract and print the operands.  */
1865 a993ba85 bellard
  need_comma = 0;
1866 a993ba85 bellard
  for (opindex = opcode->operands; *opindex != 0; opindex++)
1867 a993ba85 bellard
    {
1868 a993ba85 bellard
      const struct alpha_operand *operand = alpha_operands + *opindex;
1869 a993ba85 bellard
      int value;
1870 a993ba85 bellard
1871 a993ba85 bellard
      /* Operands that are marked FAKE are simply ignored.  We
1872 a993ba85 bellard
         already made sure that the extract function considered
1873 a993ba85 bellard
         the instruction to be valid.  */
1874 a993ba85 bellard
      if ((operand->flags & AXP_OPERAND_FAKE) != 0)
1875 a993ba85 bellard
        continue;
1876 a993ba85 bellard
1877 a993ba85 bellard
      /* Extract the value from the instruction.  */
1878 a993ba85 bellard
      if (operand->extract)
1879 a993ba85 bellard
        value = (*operand->extract) (insn, (int *) NULL);
1880 a993ba85 bellard
      else
1881 a993ba85 bellard
        {
1882 a993ba85 bellard
          value = (insn >> operand->shift) & ((1 << operand->bits) - 1);
1883 a993ba85 bellard
          if (operand->flags & AXP_OPERAND_SIGNED)
1884 a993ba85 bellard
            {
1885 a993ba85 bellard
              int signbit = 1 << (operand->bits - 1);
1886 a993ba85 bellard
              value = (value ^ signbit) - signbit;
1887 a993ba85 bellard
            }
1888 a993ba85 bellard
        }
1889 a993ba85 bellard
1890 a993ba85 bellard
      if (need_comma &&
1891 a993ba85 bellard
          ((operand->flags & (AXP_OPERAND_PARENS | AXP_OPERAND_COMMA))
1892 a993ba85 bellard
           != AXP_OPERAND_PARENS))
1893 a993ba85 bellard
        {
1894 a993ba85 bellard
          (*info->fprintf_func) (info->stream, ",");
1895 a993ba85 bellard
        }
1896 a993ba85 bellard
      if (operand->flags & AXP_OPERAND_PARENS)
1897 a993ba85 bellard
        (*info->fprintf_func) (info->stream, "(");
1898 a993ba85 bellard
1899 a993ba85 bellard
      /* Print the operand as directed by the flags.  */
1900 a993ba85 bellard
      if (operand->flags & AXP_OPERAND_IR)
1901 a993ba85 bellard
        (*info->fprintf_func) (info->stream, "%s", regnames[value]);
1902 a993ba85 bellard
      else if (operand->flags & AXP_OPERAND_FPR)
1903 a993ba85 bellard
        (*info->fprintf_func) (info->stream, "%s", regnames[value + 32]);
1904 a993ba85 bellard
      else if (operand->flags & AXP_OPERAND_RELATIVE)
1905 a993ba85 bellard
        (*info->print_address_func) (memaddr + 4 + value, info);
1906 a993ba85 bellard
      else if (operand->flags & AXP_OPERAND_SIGNED)
1907 a993ba85 bellard
        (*info->fprintf_func) (info->stream, "%d", value);
1908 a993ba85 bellard
      else
1909 a993ba85 bellard
        (*info->fprintf_func) (info->stream, "%#x", value);
1910 a993ba85 bellard
1911 a993ba85 bellard
      if (operand->flags & AXP_OPERAND_PARENS)
1912 a993ba85 bellard
        (*info->fprintf_func) (info->stream, ")");
1913 a993ba85 bellard
      need_comma = 1;
1914 a993ba85 bellard
    }
1915 a993ba85 bellard
1916 a993ba85 bellard
  return 4;
1917 a993ba85 bellard
}