Statistics
| Branch: | Revision:

root / alpha-dis.c @ b5f1aa64

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

699 a993ba85 bellard
   And two annotations:
700 a993ba85 bellard

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

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