Statistics
| Branch: | Revision:

root / alpha-dis.c @ 5fafdf24

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

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

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

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

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

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

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

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

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

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

708 a993ba85 bellard
   The format of the opcode table is:
709 a993ba85 bellard

710 a993ba85 bellard
   NAME OPCODE MASK { OPERANDS }
711 a993ba85 bellard

712 a993ba85 bellard
   NAME                is the name of the instruction.
713 a993ba85 bellard

714 a993ba85 bellard
   OPCODE        is the instruction opcode.
715 a993ba85 bellard

716 a993ba85 bellard
   MASK                is the opcode mask; this is used to tell the disassembler
717 a993ba85 bellard
                    which bits in the actual opcode must match OPCODE.
718 a993ba85 bellard

719 a993ba85 bellard
   OPERANDS        is the list of operands.
720 a993ba85 bellard

721 a993ba85 bellard
   The preceding macros merge the text of the OPCODE and MASK fields.
722 a993ba85 bellard

723 a993ba85 bellard
   The disassembler reads the table in order and prints the first
724 a993ba85 bellard
   instruction which matches, so this table is sorted to put more
725 a993ba85 bellard
   specific instructions before more general instructions.
726 a993ba85 bellard

727 a993ba85 bellard
   Otherwise, it is sorted by major opcode and minor function code.
728 a993ba85 bellard

729 a993ba85 bellard
   There are three classes of not-really-instructions in this table:
730 a993ba85 bellard

731 a993ba85 bellard
   ALIAS        is another name for another instruction.  Some of
732 a993ba85 bellard
                these come from the Architecture Handbook, some
733 a993ba85 bellard
                come from the original gas opcode tables.  In all
734 a993ba85 bellard
                cases, the functionality of the opcode is unchanged.
735 a993ba85 bellard

736 a993ba85 bellard
   PSEUDO        a stylized code form endorsed by Chapter A.4 of the
737 a993ba85 bellard
                Architecture Handbook.
738 a993ba85 bellard

739 a993ba85 bellard
   EXTRA        a stylized code form found in the original gas tables.
740 a993ba85 bellard

741 a993ba85 bellard
   And two annotations:
742 a993ba85 bellard

743 a993ba85 bellard
   EV56 BUT        opcodes that are officially introduced as of the ev56,
744 a993ba85 bellard
                   but with defined results on previous implementations.
745 a993ba85 bellard

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