176cad711SPaolo Bonzini /* alpha-dis.c -- Disassemble Alpha AXP instructions
276cad711SPaolo Bonzini Copyright 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
376cad711SPaolo Bonzini Contributed by Richard Henderson <rth@tamu.edu>,
476cad711SPaolo Bonzini patterned after the PPC opcode handling written by Ian Lance Taylor.
576cad711SPaolo Bonzini
676cad711SPaolo Bonzini This file is part of GDB, GAS, and the GNU binutils.
776cad711SPaolo Bonzini
876cad711SPaolo Bonzini GDB, GAS, and the GNU binutils are free software; you can redistribute
976cad711SPaolo Bonzini them and/or modify them under the terms of the GNU General Public
1076cad711SPaolo Bonzini License as published by the Free Software Foundation; either version
1176cad711SPaolo Bonzini 2, or (at your option) any later version.
1276cad711SPaolo Bonzini
1376cad711SPaolo Bonzini GDB, GAS, and the GNU binutils are distributed in the hope that they
1476cad711SPaolo Bonzini will be useful, but WITHOUT ANY WARRANTY; without even the implied
1576cad711SPaolo Bonzini warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
1676cad711SPaolo Bonzini the GNU General Public License for more details.
1776cad711SPaolo Bonzini
1876cad711SPaolo Bonzini You should have received a copy of the GNU General Public License
1976cad711SPaolo Bonzini along with this file; see the file COPYING. If not, see
2076cad711SPaolo Bonzini <http://www.gnu.org/licenses/>. */
2176cad711SPaolo Bonzini
22e2e5e114SPeter Maydell #include "qemu/osdep.h"
23*3979fca4SMarkus Armbruster #include "disas/dis-asm.h"
2476cad711SPaolo Bonzini
2576cad711SPaolo Bonzini /* MAX is redefined below, so remove any previous definition. */
2676cad711SPaolo Bonzini #undef MAX
2776cad711SPaolo Bonzini
2876cad711SPaolo Bonzini /* The opcode table is an array of struct alpha_opcode. */
2976cad711SPaolo Bonzini
3076cad711SPaolo Bonzini struct alpha_opcode
3176cad711SPaolo Bonzini {
3276cad711SPaolo Bonzini /* The opcode name. */
3376cad711SPaolo Bonzini const char *name;
3476cad711SPaolo Bonzini
3576cad711SPaolo Bonzini /* The opcode itself. Those bits which will be filled in with
3676cad711SPaolo Bonzini operands are zeroes. */
3776cad711SPaolo Bonzini unsigned opcode;
3876cad711SPaolo Bonzini
3976cad711SPaolo Bonzini /* The opcode mask. This is used by the disassembler. This is a
4076cad711SPaolo Bonzini mask containing ones indicating those bits which must match the
4176cad711SPaolo Bonzini opcode field, and zeroes indicating those bits which need not
4276cad711SPaolo Bonzini match (and are presumably filled in by operands). */
4376cad711SPaolo Bonzini unsigned mask;
4476cad711SPaolo Bonzini
4576cad711SPaolo Bonzini /* One bit flags for the opcode. These are primarily used to
4676cad711SPaolo Bonzini indicate specific processors and environments support the
4776cad711SPaolo Bonzini instructions. The defined values are listed below. */
4876cad711SPaolo Bonzini unsigned flags;
4976cad711SPaolo Bonzini
5076cad711SPaolo Bonzini /* An array of operand codes. Each code is an index into the
5176cad711SPaolo Bonzini operand table. They appear in the order which the operands must
5276cad711SPaolo Bonzini appear in assembly code, and are terminated by a zero. */
5376cad711SPaolo Bonzini unsigned char operands[4];
5476cad711SPaolo Bonzini };
5576cad711SPaolo Bonzini
5676cad711SPaolo Bonzini /* The table itself is sorted by major opcode number, and is otherwise
5776cad711SPaolo Bonzini in the order in which the disassembler should consider
5876cad711SPaolo Bonzini instructions. */
5976cad711SPaolo Bonzini extern const struct alpha_opcode alpha_opcodes[];
6076cad711SPaolo Bonzini extern const unsigned alpha_num_opcodes;
6176cad711SPaolo Bonzini
6276cad711SPaolo Bonzini /* Values defined for the flags field of a struct alpha_opcode. */
6376cad711SPaolo Bonzini
6476cad711SPaolo Bonzini /* CPU Availability */
6576cad711SPaolo Bonzini #define AXP_OPCODE_BASE 0x0001 /* Base architecture -- all cpus. */
6676cad711SPaolo Bonzini #define AXP_OPCODE_EV4 0x0002 /* EV4 specific PALcode insns. */
6776cad711SPaolo Bonzini #define AXP_OPCODE_EV5 0x0004 /* EV5 specific PALcode insns. */
6876cad711SPaolo Bonzini #define AXP_OPCODE_EV6 0x0008 /* EV6 specific PALcode insns. */
6976cad711SPaolo Bonzini #define AXP_OPCODE_BWX 0x0100 /* Byte/word extension (amask bit 0). */
7076cad711SPaolo Bonzini #define AXP_OPCODE_CIX 0x0200 /* "Count" extension (amask bit 1). */
7176cad711SPaolo Bonzini #define AXP_OPCODE_MAX 0x0400 /* Multimedia extension (amask bit 8). */
7276cad711SPaolo Bonzini
7376cad711SPaolo Bonzini #define AXP_OPCODE_NOPAL (~(AXP_OPCODE_EV4|AXP_OPCODE_EV5|AXP_OPCODE_EV6))
7476cad711SPaolo Bonzini
7576cad711SPaolo Bonzini /* A macro to extract the major opcode from an instruction. */
7676cad711SPaolo Bonzini #define AXP_OP(i) (((i) >> 26) & 0x3F)
7776cad711SPaolo Bonzini
7876cad711SPaolo Bonzini /* The total number of major opcodes. */
7976cad711SPaolo Bonzini #define AXP_NOPS 0x40
8076cad711SPaolo Bonzini
8176cad711SPaolo Bonzini
8276cad711SPaolo Bonzini /* The operands table is an array of struct alpha_operand. */
8376cad711SPaolo Bonzini
8476cad711SPaolo Bonzini struct alpha_operand
8576cad711SPaolo Bonzini {
8676cad711SPaolo Bonzini /* The number of bits in the operand. */
8776cad711SPaolo Bonzini unsigned int bits : 5;
8876cad711SPaolo Bonzini
8976cad711SPaolo Bonzini /* How far the operand is left shifted in the instruction. */
9076cad711SPaolo Bonzini unsigned int shift : 5;
9176cad711SPaolo Bonzini
9276cad711SPaolo Bonzini /* The default relocation type for this operand. */
9376cad711SPaolo Bonzini signed int default_reloc : 16;
9476cad711SPaolo Bonzini
9576cad711SPaolo Bonzini /* One bit syntax flags. */
9676cad711SPaolo Bonzini unsigned int flags : 16;
9776cad711SPaolo Bonzini
9876cad711SPaolo Bonzini /* Insertion function. This is used by the assembler. To insert an
9976cad711SPaolo Bonzini operand value into an instruction, check this field.
10076cad711SPaolo Bonzini
10176cad711SPaolo Bonzini If it is NULL, execute
10276cad711SPaolo Bonzini i |= (op & ((1 << o->bits) - 1)) << o->shift;
10376cad711SPaolo Bonzini (i is the instruction which we are filling in, o is a pointer to
10476cad711SPaolo Bonzini this structure, and op is the opcode value; this assumes twos
10576cad711SPaolo Bonzini complement arithmetic).
10676cad711SPaolo Bonzini
10776cad711SPaolo Bonzini If this field is not NULL, then simply call it with the
10876cad711SPaolo Bonzini instruction and the operand value. It will return the new value
10976cad711SPaolo Bonzini of the instruction. If the ERRMSG argument is not NULL, then if
11076cad711SPaolo Bonzini the operand value is illegal, *ERRMSG will be set to a warning
11176cad711SPaolo Bonzini string (the operand will be inserted in any case). If the
11276cad711SPaolo Bonzini operand value is legal, *ERRMSG will be unchanged (most operands
11376cad711SPaolo Bonzini can accept any value). */
11476cad711SPaolo Bonzini unsigned (*insert) (unsigned instruction, int op,
11576cad711SPaolo Bonzini const char **errmsg);
11676cad711SPaolo Bonzini
11776cad711SPaolo Bonzini /* Extraction function. This is used by the disassembler. To
11876cad711SPaolo Bonzini extract this operand type from an instruction, check this field.
11976cad711SPaolo Bonzini
12076cad711SPaolo Bonzini If it is NULL, compute
12176cad711SPaolo Bonzini op = ((i) >> o->shift) & ((1 << o->bits) - 1);
12276cad711SPaolo Bonzini if ((o->flags & AXP_OPERAND_SIGNED) != 0
12376cad711SPaolo Bonzini && (op & (1 << (o->bits - 1))) != 0)
12476cad711SPaolo Bonzini op -= 1 << o->bits;
12576cad711SPaolo Bonzini (i is the instruction, o is a pointer to this structure, and op
12676cad711SPaolo Bonzini is the result; this assumes twos complement arithmetic).
12776cad711SPaolo Bonzini
12876cad711SPaolo Bonzini If this field is not NULL, then simply call it with the
12976cad711SPaolo Bonzini instruction value. It will return the value of the operand. If
13076cad711SPaolo Bonzini the INVALID argument is not NULL, *INVALID will be set to
13176cad711SPaolo Bonzini non-zero if this operand type can not actually be extracted from
13276cad711SPaolo Bonzini this operand (i.e., the instruction does not match). If the
13376cad711SPaolo Bonzini operand is valid, *INVALID will not be changed. */
13476cad711SPaolo Bonzini int (*extract) (unsigned instruction, int *invalid);
13576cad711SPaolo Bonzini };
13676cad711SPaolo Bonzini
13776cad711SPaolo Bonzini /* Elements in the table are retrieved by indexing with values from
13876cad711SPaolo Bonzini the operands field of the alpha_opcodes table. */
13976cad711SPaolo Bonzini
14076cad711SPaolo Bonzini extern const struct alpha_operand alpha_operands[];
14176cad711SPaolo Bonzini extern const unsigned alpha_num_operands;
14276cad711SPaolo Bonzini
14376cad711SPaolo Bonzini /* Values defined for the flags field of a struct alpha_operand. */
14476cad711SPaolo Bonzini
14576cad711SPaolo Bonzini /* Mask for selecting the type for typecheck purposes */
14676cad711SPaolo Bonzini #define AXP_OPERAND_TYPECHECK_MASK \
14776cad711SPaolo Bonzini (AXP_OPERAND_PARENS | AXP_OPERAND_COMMA | AXP_OPERAND_IR | \
14876cad711SPaolo Bonzini AXP_OPERAND_FPR | AXP_OPERAND_RELATIVE | AXP_OPERAND_SIGNED | \
14976cad711SPaolo Bonzini AXP_OPERAND_UNSIGNED)
15076cad711SPaolo Bonzini
15176cad711SPaolo Bonzini /* This operand does not actually exist in the assembler input. This
15276cad711SPaolo Bonzini is used to support extended mnemonics, for which two operands fields
15376cad711SPaolo Bonzini are identical. The assembler should call the insert function with
15476cad711SPaolo Bonzini any op value. The disassembler should call the extract function,
15576cad711SPaolo Bonzini ignore the return value, and check the value placed in the invalid
15676cad711SPaolo Bonzini argument. */
15776cad711SPaolo Bonzini #define AXP_OPERAND_FAKE 01
15876cad711SPaolo Bonzini
15976cad711SPaolo Bonzini /* The operand should be wrapped in parentheses rather than separated
16076cad711SPaolo Bonzini from the previous by a comma. This is used for the load and store
16176cad711SPaolo Bonzini instructions which want their operands to look like "Ra,disp(Rb)". */
16276cad711SPaolo Bonzini #define AXP_OPERAND_PARENS 02
16376cad711SPaolo Bonzini
16476cad711SPaolo Bonzini /* Used in combination with PARENS, this suppresses the suppression of
16576cad711SPaolo Bonzini the comma. This is used for "jmp Ra,(Rb),hint". */
16676cad711SPaolo Bonzini #define AXP_OPERAND_COMMA 04
16776cad711SPaolo Bonzini
16876cad711SPaolo Bonzini /* This operand names an integer register. */
16976cad711SPaolo Bonzini #define AXP_OPERAND_IR 010
17076cad711SPaolo Bonzini
17176cad711SPaolo Bonzini /* This operand names a floating point register. */
17276cad711SPaolo Bonzini #define AXP_OPERAND_FPR 020
17376cad711SPaolo Bonzini
17476cad711SPaolo Bonzini /* This operand is a relative branch displacement. The disassembler
17576cad711SPaolo Bonzini prints these symbolically if possible. */
17676cad711SPaolo Bonzini #define AXP_OPERAND_RELATIVE 040
17776cad711SPaolo Bonzini
17876cad711SPaolo Bonzini /* This operand takes signed values. */
17976cad711SPaolo Bonzini #define AXP_OPERAND_SIGNED 0100
18076cad711SPaolo Bonzini
18176cad711SPaolo Bonzini /* This operand takes unsigned values. This exists primarily so that
18276cad711SPaolo Bonzini a flags value of 0 can be treated as end-of-arguments. */
18376cad711SPaolo Bonzini #define AXP_OPERAND_UNSIGNED 0200
18476cad711SPaolo Bonzini
18576cad711SPaolo Bonzini /* Suppress overflow detection on this field. This is used for hints. */
18676cad711SPaolo Bonzini #define AXP_OPERAND_NOOVERFLOW 0400
18776cad711SPaolo Bonzini
18876cad711SPaolo Bonzini /* Mask for optional argument default value. */
18976cad711SPaolo Bonzini #define AXP_OPERAND_OPTIONAL_MASK 07000
19076cad711SPaolo Bonzini
19176cad711SPaolo Bonzini /* This operand defaults to zero. This is used for jump hints. */
19276cad711SPaolo Bonzini #define AXP_OPERAND_DEFAULT_ZERO 01000
19376cad711SPaolo Bonzini
19476cad711SPaolo Bonzini /* This operand should default to the first (real) operand and is used
19576cad711SPaolo Bonzini in conjunction with AXP_OPERAND_OPTIONAL. This allows
19676cad711SPaolo Bonzini "and $0,3,$0" to be written as "and $0,3", etc. I don't like
19776cad711SPaolo Bonzini it, but it's what DEC does. */
19876cad711SPaolo Bonzini #define AXP_OPERAND_DEFAULT_FIRST 02000
19976cad711SPaolo Bonzini
20076cad711SPaolo Bonzini /* Similarly, this operand should default to the second (real) operand.
20176cad711SPaolo Bonzini This allows "negl $0" instead of "negl $0,$0". */
20276cad711SPaolo Bonzini #define AXP_OPERAND_DEFAULT_SECOND 04000
20376cad711SPaolo Bonzini
20476cad711SPaolo Bonzini
20576cad711SPaolo Bonzini /* Register common names */
20676cad711SPaolo Bonzini
20776cad711SPaolo Bonzini #define AXP_REG_V0 0
20876cad711SPaolo Bonzini #define AXP_REG_T0 1
20976cad711SPaolo Bonzini #define AXP_REG_T1 2
21076cad711SPaolo Bonzini #define AXP_REG_T2 3
21176cad711SPaolo Bonzini #define AXP_REG_T3 4
21276cad711SPaolo Bonzini #define AXP_REG_T4 5
21376cad711SPaolo Bonzini #define AXP_REG_T5 6
21476cad711SPaolo Bonzini #define AXP_REG_T6 7
21576cad711SPaolo Bonzini #define AXP_REG_T7 8
21676cad711SPaolo Bonzini #define AXP_REG_S0 9
21776cad711SPaolo Bonzini #define AXP_REG_S1 10
21876cad711SPaolo Bonzini #define AXP_REG_S2 11
21976cad711SPaolo Bonzini #define AXP_REG_S3 12
22076cad711SPaolo Bonzini #define AXP_REG_S4 13
22176cad711SPaolo Bonzini #define AXP_REG_S5 14
22276cad711SPaolo Bonzini #define AXP_REG_FP 15
22376cad711SPaolo Bonzini #define AXP_REG_A0 16
22476cad711SPaolo Bonzini #define AXP_REG_A1 17
22576cad711SPaolo Bonzini #define AXP_REG_A2 18
22676cad711SPaolo Bonzini #define AXP_REG_A3 19
22776cad711SPaolo Bonzini #define AXP_REG_A4 20
22876cad711SPaolo Bonzini #define AXP_REG_A5 21
22976cad711SPaolo Bonzini #define AXP_REG_T8 22
23076cad711SPaolo Bonzini #define AXP_REG_T9 23
23176cad711SPaolo Bonzini #define AXP_REG_T10 24
23276cad711SPaolo Bonzini #define AXP_REG_T11 25
23376cad711SPaolo Bonzini #define AXP_REG_RA 26
23476cad711SPaolo Bonzini #define AXP_REG_PV 27
23576cad711SPaolo Bonzini #define AXP_REG_T12 27
23676cad711SPaolo Bonzini #define AXP_REG_AT 28
23776cad711SPaolo Bonzini #define AXP_REG_GP 29
23876cad711SPaolo Bonzini #define AXP_REG_SP 30
23976cad711SPaolo Bonzini #define AXP_REG_ZERO 31
24076cad711SPaolo Bonzini
24176cad711SPaolo Bonzini enum bfd_reloc_code_real {
24276cad711SPaolo Bonzini BFD_RELOC_23_PCREL_S2,
24376cad711SPaolo Bonzini BFD_RELOC_ALPHA_HINT
24476cad711SPaolo Bonzini };
24576cad711SPaolo Bonzini
24676cad711SPaolo Bonzini /* This file holds the Alpha AXP opcode table. The opcode table includes
24776cad711SPaolo Bonzini almost all of the extended instruction mnemonics. This permits the
24876cad711SPaolo Bonzini disassembler to use them, and simplifies the assembler logic, at the
24976cad711SPaolo Bonzini cost of increasing the table size. The table is strictly constant
25076cad711SPaolo Bonzini data, so the compiler should be able to put it in the text segment.
25176cad711SPaolo Bonzini
25276cad711SPaolo Bonzini This file also holds the operand table. All knowledge about inserting
25376cad711SPaolo Bonzini and extracting operands from instructions is kept in this file.
25476cad711SPaolo Bonzini
25576cad711SPaolo Bonzini The information for the base instruction set was compiled from the
25676cad711SPaolo Bonzini _Alpha Architecture Handbook_, Digital Order Number EC-QD2KB-TE,
25776cad711SPaolo Bonzini version 2.
25876cad711SPaolo Bonzini
25976cad711SPaolo Bonzini The information for the post-ev5 architecture extensions BWX, CIX and
26076cad711SPaolo Bonzini MAX came from version 3 of this same document, which is also available
26176cad711SPaolo Bonzini on-line at http://ftp.digital.com/pub/Digital/info/semiconductor
26276cad711SPaolo Bonzini /literature/alphahb2.pdf
26376cad711SPaolo Bonzini
26476cad711SPaolo Bonzini The information for the EV4 PALcode instructions was compiled from
26576cad711SPaolo Bonzini _DECchip 21064 and DECchip 21064A Alpha AXP Microprocessors Hardware
26676cad711SPaolo Bonzini Reference Manual_, Digital Order Number EC-Q9ZUA-TE, preliminary
26776cad711SPaolo Bonzini revision dated June 1994.
26876cad711SPaolo Bonzini
26976cad711SPaolo Bonzini The information for the EV5 PALcode instructions was compiled from
27076cad711SPaolo Bonzini _Alpha 21164 Microprocessor Hardware Reference Manual_, Digital
27176cad711SPaolo Bonzini Order Number EC-QAEQB-TE, preliminary revision dated April 1995. */
27276cad711SPaolo Bonzini
27376cad711SPaolo Bonzini /* Local insertion and extraction functions */
27476cad711SPaolo Bonzini
27576cad711SPaolo Bonzini static unsigned insert_rba (unsigned, int, const char **);
27676cad711SPaolo Bonzini static unsigned insert_rca (unsigned, int, const char **);
27776cad711SPaolo Bonzini static unsigned insert_za (unsigned, int, const char **);
27876cad711SPaolo Bonzini static unsigned insert_zb (unsigned, int, const char **);
27976cad711SPaolo Bonzini static unsigned insert_zc (unsigned, int, const char **);
28076cad711SPaolo Bonzini static unsigned insert_bdisp (unsigned, int, const char **);
28176cad711SPaolo Bonzini static unsigned insert_jhint (unsigned, int, const char **);
28276cad711SPaolo Bonzini static unsigned insert_ev6hwjhint (unsigned, int, const char **);
28376cad711SPaolo Bonzini
28476cad711SPaolo Bonzini static int extract_rba (unsigned, int *);
28576cad711SPaolo Bonzini static int extract_rca (unsigned, int *);
28676cad711SPaolo Bonzini static int extract_za (unsigned, int *);
28776cad711SPaolo Bonzini static int extract_zb (unsigned, int *);
28876cad711SPaolo Bonzini static int extract_zc (unsigned, int *);
28976cad711SPaolo Bonzini static int extract_bdisp (unsigned, int *);
29076cad711SPaolo Bonzini static int extract_jhint (unsigned, int *);
29176cad711SPaolo Bonzini static int extract_ev6hwjhint (unsigned, int *);
29276cad711SPaolo Bonzini
29376cad711SPaolo Bonzini
29476cad711SPaolo Bonzini /* The operands table */
29576cad711SPaolo Bonzini
29676cad711SPaolo Bonzini const struct alpha_operand alpha_operands[] =
29776cad711SPaolo Bonzini {
29876cad711SPaolo Bonzini /* The fields are bits, shift, insert, extract, flags */
29976cad711SPaolo Bonzini /* The zero index is used to indicate end-of-list */
30076cad711SPaolo Bonzini #define UNUSED 0
30176cad711SPaolo Bonzini { 0, 0, 0, 0, 0, 0 },
30276cad711SPaolo Bonzini
30376cad711SPaolo Bonzini /* The plain integer register fields */
30476cad711SPaolo Bonzini #define RA (UNUSED + 1)
30576cad711SPaolo Bonzini { 5, 21, 0, AXP_OPERAND_IR, 0, 0 },
30676cad711SPaolo Bonzini #define RB (RA + 1)
30776cad711SPaolo Bonzini { 5, 16, 0, AXP_OPERAND_IR, 0, 0 },
30876cad711SPaolo Bonzini #define RC (RB + 1)
30976cad711SPaolo Bonzini { 5, 0, 0, AXP_OPERAND_IR, 0, 0 },
31076cad711SPaolo Bonzini
31176cad711SPaolo Bonzini /* The plain fp register fields */
31276cad711SPaolo Bonzini #define FA (RC + 1)
31376cad711SPaolo Bonzini { 5, 21, 0, AXP_OPERAND_FPR, 0, 0 },
31476cad711SPaolo Bonzini #define FB (FA + 1)
31576cad711SPaolo Bonzini { 5, 16, 0, AXP_OPERAND_FPR, 0, 0 },
31676cad711SPaolo Bonzini #define FC (FB + 1)
31776cad711SPaolo Bonzini { 5, 0, 0, AXP_OPERAND_FPR, 0, 0 },
31876cad711SPaolo Bonzini
31976cad711SPaolo Bonzini /* The integer registers when they are ZERO */
32076cad711SPaolo Bonzini #define ZA (FC + 1)
32176cad711SPaolo Bonzini { 5, 21, 0, AXP_OPERAND_FAKE, insert_za, extract_za },
32276cad711SPaolo Bonzini #define ZB (ZA + 1)
32376cad711SPaolo Bonzini { 5, 16, 0, AXP_OPERAND_FAKE, insert_zb, extract_zb },
32476cad711SPaolo Bonzini #define ZC (ZB + 1)
32576cad711SPaolo Bonzini { 5, 0, 0, AXP_OPERAND_FAKE, insert_zc, extract_zc },
32676cad711SPaolo Bonzini
32776cad711SPaolo Bonzini /* The RB field when it needs parentheses */
32876cad711SPaolo Bonzini #define PRB (ZC + 1)
32976cad711SPaolo Bonzini { 5, 16, 0, AXP_OPERAND_IR|AXP_OPERAND_PARENS, 0, 0 },
33076cad711SPaolo Bonzini
33176cad711SPaolo Bonzini /* The RB field when it needs parentheses _and_ a preceding comma */
33276cad711SPaolo Bonzini #define CPRB (PRB + 1)
33376cad711SPaolo Bonzini { 5, 16, 0,
33476cad711SPaolo Bonzini AXP_OPERAND_IR|AXP_OPERAND_PARENS|AXP_OPERAND_COMMA, 0, 0 },
33576cad711SPaolo Bonzini
33676cad711SPaolo Bonzini /* The RB field when it must be the same as the RA field */
33776cad711SPaolo Bonzini #define RBA (CPRB + 1)
33876cad711SPaolo Bonzini { 5, 16, 0, AXP_OPERAND_FAKE, insert_rba, extract_rba },
33976cad711SPaolo Bonzini
34076cad711SPaolo Bonzini /* The RC field when it must be the same as the RB field */
34176cad711SPaolo Bonzini #define RCA (RBA + 1)
34276cad711SPaolo Bonzini { 5, 0, 0, AXP_OPERAND_FAKE, insert_rca, extract_rca },
34376cad711SPaolo Bonzini
34476cad711SPaolo Bonzini /* The RC field when it can *default* to RA */
34576cad711SPaolo Bonzini #define DRC1 (RCA + 1)
34676cad711SPaolo Bonzini { 5, 0, 0,
34776cad711SPaolo Bonzini AXP_OPERAND_IR|AXP_OPERAND_DEFAULT_FIRST, 0, 0 },
34876cad711SPaolo Bonzini
34976cad711SPaolo Bonzini /* The RC field when it can *default* to RB */
35076cad711SPaolo Bonzini #define DRC2 (DRC1 + 1)
35176cad711SPaolo Bonzini { 5, 0, 0,
35276cad711SPaolo Bonzini AXP_OPERAND_IR|AXP_OPERAND_DEFAULT_SECOND, 0, 0 },
35376cad711SPaolo Bonzini
35476cad711SPaolo Bonzini /* The FC field when it can *default* to RA */
35576cad711SPaolo Bonzini #define DFC1 (DRC2 + 1)
35676cad711SPaolo Bonzini { 5, 0, 0,
35776cad711SPaolo Bonzini AXP_OPERAND_FPR|AXP_OPERAND_DEFAULT_FIRST, 0, 0 },
35876cad711SPaolo Bonzini
35976cad711SPaolo Bonzini /* The FC field when it can *default* to RB */
36076cad711SPaolo Bonzini #define DFC2 (DFC1 + 1)
36176cad711SPaolo Bonzini { 5, 0, 0,
36276cad711SPaolo Bonzini AXP_OPERAND_FPR|AXP_OPERAND_DEFAULT_SECOND, 0, 0 },
36376cad711SPaolo Bonzini
36476cad711SPaolo Bonzini /* The unsigned 8-bit literal of Operate format insns */
36576cad711SPaolo Bonzini #define LIT (DFC2 + 1)
36676cad711SPaolo Bonzini { 8, 13, -LIT, AXP_OPERAND_UNSIGNED, 0, 0 },
36776cad711SPaolo Bonzini
36876cad711SPaolo Bonzini /* The signed 16-bit displacement of Memory format insns. From here
36976cad711SPaolo Bonzini we can't tell what relocation should be used, so don't use a default. */
37076cad711SPaolo Bonzini #define MDISP (LIT + 1)
37176cad711SPaolo Bonzini { 16, 0, -MDISP, AXP_OPERAND_SIGNED, 0, 0 },
37276cad711SPaolo Bonzini
37376cad711SPaolo Bonzini /* The signed "23-bit" aligned displacement of Branch format insns */
37476cad711SPaolo Bonzini #define BDISP (MDISP + 1)
37576cad711SPaolo Bonzini { 21, 0, BFD_RELOC_23_PCREL_S2,
37676cad711SPaolo Bonzini AXP_OPERAND_RELATIVE, insert_bdisp, extract_bdisp },
37776cad711SPaolo Bonzini
37876cad711SPaolo Bonzini /* The 26-bit PALcode function */
37976cad711SPaolo Bonzini #define PALFN (BDISP + 1)
38076cad711SPaolo Bonzini { 26, 0, -PALFN, AXP_OPERAND_UNSIGNED, 0, 0 },
38176cad711SPaolo Bonzini
38276cad711SPaolo Bonzini /* The optional signed "16-bit" aligned displacement of the JMP/JSR hint */
38376cad711SPaolo Bonzini #define JMPHINT (PALFN + 1)
38476cad711SPaolo Bonzini { 14, 0, BFD_RELOC_ALPHA_HINT,
38576cad711SPaolo Bonzini AXP_OPERAND_RELATIVE|AXP_OPERAND_DEFAULT_ZERO|AXP_OPERAND_NOOVERFLOW,
38676cad711SPaolo Bonzini insert_jhint, extract_jhint },
38776cad711SPaolo Bonzini
38876cad711SPaolo Bonzini /* The optional hint to RET/JSR_COROUTINE */
38976cad711SPaolo Bonzini #define RETHINT (JMPHINT + 1)
39076cad711SPaolo Bonzini { 14, 0, -RETHINT,
39176cad711SPaolo Bonzini AXP_OPERAND_UNSIGNED|AXP_OPERAND_DEFAULT_ZERO, 0, 0 },
39276cad711SPaolo Bonzini
39376cad711SPaolo Bonzini /* The 12-bit displacement for the ev[46] hw_{ld,st} (pal1b/pal1f) insns */
39476cad711SPaolo Bonzini #define EV4HWDISP (RETHINT + 1)
39576cad711SPaolo Bonzini #define EV6HWDISP (EV4HWDISP)
39676cad711SPaolo Bonzini { 12, 0, -EV4HWDISP, AXP_OPERAND_SIGNED, 0, 0 },
39776cad711SPaolo Bonzini
39876cad711SPaolo Bonzini /* The 5-bit index for the ev4 hw_m[ft]pr (pal19/pal1d) insns */
39976cad711SPaolo Bonzini #define EV4HWINDEX (EV4HWDISP + 1)
40076cad711SPaolo Bonzini { 5, 0, -EV4HWINDEX, AXP_OPERAND_UNSIGNED, 0, 0 },
40176cad711SPaolo Bonzini
40276cad711SPaolo Bonzini /* The 8-bit index for the oddly unqualified hw_m[tf]pr insns
40376cad711SPaolo Bonzini that occur in DEC PALcode. */
40476cad711SPaolo Bonzini #define EV4EXTHWINDEX (EV4HWINDEX + 1)
40576cad711SPaolo Bonzini { 8, 0, -EV4EXTHWINDEX, AXP_OPERAND_UNSIGNED, 0, 0 },
40676cad711SPaolo Bonzini
40776cad711SPaolo Bonzini /* The 10-bit displacement for the ev5 hw_{ld,st} (pal1b/pal1f) insns */
40876cad711SPaolo Bonzini #define EV5HWDISP (EV4EXTHWINDEX + 1)
40976cad711SPaolo Bonzini { 10, 0, -EV5HWDISP, AXP_OPERAND_SIGNED, 0, 0 },
41076cad711SPaolo Bonzini
41176cad711SPaolo Bonzini /* The 16-bit index for the ev5 hw_m[ft]pr (pal19/pal1d) insns */
41276cad711SPaolo Bonzini #define EV5HWINDEX (EV5HWDISP + 1)
41376cad711SPaolo Bonzini { 16, 0, -EV5HWINDEX, AXP_OPERAND_UNSIGNED, 0, 0 },
41476cad711SPaolo Bonzini
41576cad711SPaolo Bonzini /* The 16-bit combined index/scoreboard mask for the ev6
41676cad711SPaolo Bonzini hw_m[ft]pr (pal19/pal1d) insns */
41776cad711SPaolo Bonzini #define EV6HWINDEX (EV5HWINDEX + 1)
41876cad711SPaolo Bonzini { 16, 0, -EV6HWINDEX, AXP_OPERAND_UNSIGNED, 0, 0 },
41976cad711SPaolo Bonzini
42076cad711SPaolo Bonzini /* The 13-bit branch hint for the ev6 hw_jmp/jsr (pal1e) insn */
42176cad711SPaolo Bonzini #define EV6HWJMPHINT (EV6HWINDEX+ 1)
42276cad711SPaolo Bonzini { 8, 0, -EV6HWJMPHINT,
42376cad711SPaolo Bonzini AXP_OPERAND_RELATIVE|AXP_OPERAND_DEFAULT_ZERO|AXP_OPERAND_NOOVERFLOW,
42476cad711SPaolo Bonzini insert_ev6hwjhint, extract_ev6hwjhint }
42576cad711SPaolo Bonzini };
42676cad711SPaolo Bonzini
42776cad711SPaolo Bonzini const unsigned alpha_num_operands = sizeof(alpha_operands)/sizeof(*alpha_operands);
42876cad711SPaolo Bonzini
42976cad711SPaolo Bonzini /* The RB field when it is the same as the RA field in the same insn.
43076cad711SPaolo Bonzini This operand is marked fake. The insertion function just copies
43176cad711SPaolo Bonzini the RA field into the RB field, and the extraction function just
43276cad711SPaolo Bonzini checks that the fields are the same. */
43376cad711SPaolo Bonzini
43476cad711SPaolo Bonzini /*ARGSUSED*/
43576cad711SPaolo Bonzini static unsigned
insert_rba(unsigned insn,int value ATTRIBUTE_UNUSED,const char ** errmsg ATTRIBUTE_UNUSED)43676cad711SPaolo Bonzini insert_rba(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
43776cad711SPaolo Bonzini {
43876cad711SPaolo Bonzini return insn | (((insn >> 21) & 0x1f) << 16);
43976cad711SPaolo Bonzini }
44076cad711SPaolo Bonzini
44176cad711SPaolo Bonzini static int
extract_rba(unsigned insn,int * invalid)44276cad711SPaolo Bonzini extract_rba(unsigned insn, int *invalid)
44376cad711SPaolo Bonzini {
44476cad711SPaolo Bonzini if (invalid != (int *) NULL
44576cad711SPaolo Bonzini && ((insn >> 21) & 0x1f) != ((insn >> 16) & 0x1f))
44676cad711SPaolo Bonzini *invalid = 1;
44776cad711SPaolo Bonzini return 0;
44876cad711SPaolo Bonzini }
44976cad711SPaolo Bonzini
45076cad711SPaolo Bonzini
45176cad711SPaolo Bonzini /* The same for the RC field */
45276cad711SPaolo Bonzini
45376cad711SPaolo Bonzini /*ARGSUSED*/
45476cad711SPaolo Bonzini static unsigned
insert_rca(unsigned insn,int value ATTRIBUTE_UNUSED,const char ** errmsg ATTRIBUTE_UNUSED)45576cad711SPaolo Bonzini insert_rca(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
45676cad711SPaolo Bonzini {
45776cad711SPaolo Bonzini return insn | ((insn >> 21) & 0x1f);
45876cad711SPaolo Bonzini }
45976cad711SPaolo Bonzini
46076cad711SPaolo Bonzini static int
extract_rca(unsigned insn,int * invalid)46176cad711SPaolo Bonzini extract_rca(unsigned insn, int *invalid)
46276cad711SPaolo Bonzini {
46376cad711SPaolo Bonzini if (invalid != (int *) NULL
46476cad711SPaolo Bonzini && ((insn >> 21) & 0x1f) != (insn & 0x1f))
46576cad711SPaolo Bonzini *invalid = 1;
46676cad711SPaolo Bonzini return 0;
46776cad711SPaolo Bonzini }
46876cad711SPaolo Bonzini
46976cad711SPaolo Bonzini
47076cad711SPaolo Bonzini /* Fake arguments in which the registers must be set to ZERO */
47176cad711SPaolo Bonzini
47276cad711SPaolo Bonzini /*ARGSUSED*/
47376cad711SPaolo Bonzini static unsigned
insert_za(unsigned insn,int value ATTRIBUTE_UNUSED,const char ** errmsg ATTRIBUTE_UNUSED)47476cad711SPaolo Bonzini insert_za(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
47576cad711SPaolo Bonzini {
47676cad711SPaolo Bonzini return insn | (31 << 21);
47776cad711SPaolo Bonzini }
47876cad711SPaolo Bonzini
47976cad711SPaolo Bonzini static int
extract_za(unsigned insn,int * invalid)48076cad711SPaolo Bonzini extract_za(unsigned insn, int *invalid)
48176cad711SPaolo Bonzini {
48276cad711SPaolo Bonzini if (invalid != (int *) NULL && ((insn >> 21) & 0x1f) != 31)
48376cad711SPaolo Bonzini *invalid = 1;
48476cad711SPaolo Bonzini return 0;
48576cad711SPaolo Bonzini }
48676cad711SPaolo Bonzini
48776cad711SPaolo Bonzini /*ARGSUSED*/
48876cad711SPaolo Bonzini static unsigned
insert_zb(unsigned insn,int value ATTRIBUTE_UNUSED,const char ** errmsg ATTRIBUTE_UNUSED)48976cad711SPaolo Bonzini insert_zb(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
49076cad711SPaolo Bonzini {
49176cad711SPaolo Bonzini return insn | (31 << 16);
49276cad711SPaolo Bonzini }
49376cad711SPaolo Bonzini
49476cad711SPaolo Bonzini static int
extract_zb(unsigned insn,int * invalid)49576cad711SPaolo Bonzini extract_zb(unsigned insn, int *invalid)
49676cad711SPaolo Bonzini {
49776cad711SPaolo Bonzini if (invalid != (int *) NULL && ((insn >> 16) & 0x1f) != 31)
49876cad711SPaolo Bonzini *invalid = 1;
49976cad711SPaolo Bonzini return 0;
50076cad711SPaolo Bonzini }
50176cad711SPaolo Bonzini
50276cad711SPaolo Bonzini /*ARGSUSED*/
50376cad711SPaolo Bonzini static unsigned
insert_zc(unsigned insn,int value ATTRIBUTE_UNUSED,const char ** errmsg ATTRIBUTE_UNUSED)50476cad711SPaolo Bonzini insert_zc(unsigned insn, int value ATTRIBUTE_UNUSED, const char **errmsg ATTRIBUTE_UNUSED)
50576cad711SPaolo Bonzini {
50676cad711SPaolo Bonzini return insn | 31;
50776cad711SPaolo Bonzini }
50876cad711SPaolo Bonzini
50976cad711SPaolo Bonzini static int
extract_zc(unsigned insn,int * invalid)51076cad711SPaolo Bonzini extract_zc(unsigned insn, int *invalid)
51176cad711SPaolo Bonzini {
51276cad711SPaolo Bonzini if (invalid != (int *) NULL && (insn & 0x1f) != 31)
51376cad711SPaolo Bonzini *invalid = 1;
51476cad711SPaolo Bonzini return 0;
51576cad711SPaolo Bonzini }
51676cad711SPaolo Bonzini
51776cad711SPaolo Bonzini
51876cad711SPaolo Bonzini /* The displacement field of a Branch format insn. */
51976cad711SPaolo Bonzini
52076cad711SPaolo Bonzini static unsigned
insert_bdisp(unsigned insn,int value,const char ** errmsg)52176cad711SPaolo Bonzini insert_bdisp(unsigned insn, int value, const char **errmsg)
52276cad711SPaolo Bonzini {
52376cad711SPaolo Bonzini if (errmsg != (const char **)NULL && (value & 3))
524ca66f1a1SLluÃs Vilanova *errmsg = "branch operand unaligned";
52576cad711SPaolo Bonzini return insn | ((value / 4) & 0x1FFFFF);
52676cad711SPaolo Bonzini }
52776cad711SPaolo Bonzini
52876cad711SPaolo Bonzini /*ARGSUSED*/
52976cad711SPaolo Bonzini static int
extract_bdisp(unsigned insn,int * invalid ATTRIBUTE_UNUSED)53076cad711SPaolo Bonzini extract_bdisp(unsigned insn, int *invalid ATTRIBUTE_UNUSED)
53176cad711SPaolo Bonzini {
53276cad711SPaolo Bonzini return 4 * (((insn & 0x1FFFFF) ^ 0x100000) - 0x100000);
53376cad711SPaolo Bonzini }
53476cad711SPaolo Bonzini
53576cad711SPaolo Bonzini
53676cad711SPaolo Bonzini /* The hint field of a JMP/JSR insn. */
53776cad711SPaolo Bonzini
53876cad711SPaolo Bonzini static unsigned
insert_jhint(unsigned insn,int value,const char ** errmsg)53976cad711SPaolo Bonzini insert_jhint(unsigned insn, int value, const char **errmsg)
54076cad711SPaolo Bonzini {
54176cad711SPaolo Bonzini if (errmsg != (const char **)NULL && (value & 3))
542ca66f1a1SLluÃs Vilanova *errmsg = "jump hint unaligned";
54376cad711SPaolo Bonzini return insn | ((value / 4) & 0x3FFF);
54476cad711SPaolo Bonzini }
54576cad711SPaolo Bonzini
54676cad711SPaolo Bonzini /*ARGSUSED*/
54776cad711SPaolo Bonzini static int
extract_jhint(unsigned insn,int * invalid ATTRIBUTE_UNUSED)54876cad711SPaolo Bonzini extract_jhint(unsigned insn, int *invalid ATTRIBUTE_UNUSED)
54976cad711SPaolo Bonzini {
55076cad711SPaolo Bonzini return 4 * (((insn & 0x3FFF) ^ 0x2000) - 0x2000);
55176cad711SPaolo Bonzini }
55276cad711SPaolo Bonzini
55376cad711SPaolo Bonzini /* The hint field of an EV6 HW_JMP/JSR insn. */
55476cad711SPaolo Bonzini
55576cad711SPaolo Bonzini static unsigned
insert_ev6hwjhint(unsigned insn,int value,const char ** errmsg)55676cad711SPaolo Bonzini insert_ev6hwjhint(unsigned insn, int value, const char **errmsg)
55776cad711SPaolo Bonzini {
55876cad711SPaolo Bonzini if (errmsg != (const char **)NULL && (value & 3))
559ca66f1a1SLluÃs Vilanova *errmsg = "jump hint unaligned";
56076cad711SPaolo Bonzini return insn | ((value / 4) & 0x1FFF);
56176cad711SPaolo Bonzini }
56276cad711SPaolo Bonzini
56376cad711SPaolo Bonzini /*ARGSUSED*/
56476cad711SPaolo Bonzini static int
extract_ev6hwjhint(unsigned insn,int * invalid ATTRIBUTE_UNUSED)56576cad711SPaolo Bonzini extract_ev6hwjhint(unsigned insn, int *invalid ATTRIBUTE_UNUSED)
56676cad711SPaolo Bonzini {
56776cad711SPaolo Bonzini return 4 * (((insn & 0x1FFF) ^ 0x1000) - 0x1000);
56876cad711SPaolo Bonzini }
56976cad711SPaolo Bonzini
57076cad711SPaolo Bonzini
57176cad711SPaolo Bonzini /* Macros used to form opcodes */
57276cad711SPaolo Bonzini
57376cad711SPaolo Bonzini /* The main opcode */
57476cad711SPaolo Bonzini #define OP(x) (((x) & 0x3F) << 26)
57576cad711SPaolo Bonzini #define OP_MASK 0xFC000000
57676cad711SPaolo Bonzini
57776cad711SPaolo Bonzini /* Branch format instructions */
57876cad711SPaolo Bonzini #define BRA_(oo) OP(oo)
57976cad711SPaolo Bonzini #define BRA_MASK OP_MASK
58076cad711SPaolo Bonzini #define BRA(oo) BRA_(oo), BRA_MASK
58176cad711SPaolo Bonzini
58276cad711SPaolo Bonzini /* Floating point format instructions */
58376cad711SPaolo Bonzini #define FP_(oo,fff) (OP(oo) | (((fff) & 0x7FF) << 5))
58476cad711SPaolo Bonzini #define FP_MASK (OP_MASK | 0xFFE0)
58576cad711SPaolo Bonzini #define FP(oo,fff) FP_(oo,fff), FP_MASK
58676cad711SPaolo Bonzini
58776cad711SPaolo Bonzini /* Memory format instructions */
58876cad711SPaolo Bonzini #define MEM_(oo) OP(oo)
58976cad711SPaolo Bonzini #define MEM_MASK OP_MASK
59076cad711SPaolo Bonzini #define MEM(oo) MEM_(oo), MEM_MASK
59176cad711SPaolo Bonzini
59276cad711SPaolo Bonzini /* Memory/Func Code format instructions */
59376cad711SPaolo Bonzini #define MFC_(oo,ffff) (OP(oo) | ((ffff) & 0xFFFF))
59476cad711SPaolo Bonzini #define MFC_MASK (OP_MASK | 0xFFFF)
59576cad711SPaolo Bonzini #define MFC(oo,ffff) MFC_(oo,ffff), MFC_MASK
59676cad711SPaolo Bonzini
59776cad711SPaolo Bonzini /* Memory/Branch format instructions */
59876cad711SPaolo Bonzini #define MBR_(oo,h) (OP(oo) | (((h) & 3) << 14))
59976cad711SPaolo Bonzini #define MBR_MASK (OP_MASK | 0xC000)
60076cad711SPaolo Bonzini #define MBR(oo,h) MBR_(oo,h), MBR_MASK
60176cad711SPaolo Bonzini
60276cad711SPaolo Bonzini /* Operate format instructions. The OPRL variant specifies a
60376cad711SPaolo Bonzini literal second argument. */
60476cad711SPaolo Bonzini #define OPR_(oo,ff) (OP(oo) | (((ff) & 0x7F) << 5))
60576cad711SPaolo Bonzini #define OPRL_(oo,ff) (OPR_((oo),(ff)) | 0x1000)
60676cad711SPaolo Bonzini #define OPR_MASK (OP_MASK | 0x1FE0)
60776cad711SPaolo Bonzini #define OPR(oo,ff) OPR_(oo,ff), OPR_MASK
60876cad711SPaolo Bonzini #define OPRL(oo,ff) OPRL_(oo,ff), OPR_MASK
60976cad711SPaolo Bonzini
61076cad711SPaolo Bonzini /* Generic PALcode format instructions */
61176cad711SPaolo Bonzini #define PCD_(oo) OP(oo)
61276cad711SPaolo Bonzini #define PCD_MASK OP_MASK
61376cad711SPaolo Bonzini #define PCD(oo) PCD_(oo), PCD_MASK
61476cad711SPaolo Bonzini
61576cad711SPaolo Bonzini /* Specific PALcode instructions */
61676cad711SPaolo Bonzini #define SPCD_(oo,ffff) (OP(oo) | ((ffff) & 0x3FFFFFF))
61776cad711SPaolo Bonzini #define SPCD_MASK 0xFFFFFFFF
61876cad711SPaolo Bonzini #define SPCD(oo,ffff) SPCD_(oo,ffff), SPCD_MASK
61976cad711SPaolo Bonzini
62076cad711SPaolo Bonzini /* Hardware memory (hw_{ld,st}) instructions */
62176cad711SPaolo Bonzini #define EV4HWMEM_(oo,f) (OP(oo) | (((f) & 0xF) << 12))
62276cad711SPaolo Bonzini #define EV4HWMEM_MASK (OP_MASK | 0xF000)
62376cad711SPaolo Bonzini #define EV4HWMEM(oo,f) EV4HWMEM_(oo,f), EV4HWMEM_MASK
62476cad711SPaolo Bonzini
62576cad711SPaolo Bonzini #define EV5HWMEM_(oo,f) (OP(oo) | (((f) & 0x3F) << 10))
62676cad711SPaolo Bonzini #define EV5HWMEM_MASK (OP_MASK | 0xF800)
62776cad711SPaolo Bonzini #define EV5HWMEM(oo,f) EV5HWMEM_(oo,f), EV5HWMEM_MASK
62876cad711SPaolo Bonzini
62976cad711SPaolo Bonzini #define EV6HWMEM_(oo,f) (OP(oo) | (((f) & 0xF) << 12))
63076cad711SPaolo Bonzini #define EV6HWMEM_MASK (OP_MASK | 0xF000)
63176cad711SPaolo Bonzini #define EV6HWMEM(oo,f) EV6HWMEM_(oo,f), EV6HWMEM_MASK
63276cad711SPaolo Bonzini
63376cad711SPaolo Bonzini #define EV6HWMBR_(oo,h) (OP(oo) | (((h) & 7) << 13))
63476cad711SPaolo Bonzini #define EV6HWMBR_MASK (OP_MASK | 0xE000)
63576cad711SPaolo Bonzini #define EV6HWMBR(oo,h) EV6HWMBR_(oo,h), EV6HWMBR_MASK
63676cad711SPaolo Bonzini
63776cad711SPaolo Bonzini /* Abbreviations for instruction subsets. */
63876cad711SPaolo Bonzini #define BASE AXP_OPCODE_BASE
63976cad711SPaolo Bonzini #define EV4 AXP_OPCODE_EV4
64076cad711SPaolo Bonzini #define EV5 AXP_OPCODE_EV5
64176cad711SPaolo Bonzini #define EV6 AXP_OPCODE_EV6
64276cad711SPaolo Bonzini #define BWX AXP_OPCODE_BWX
64376cad711SPaolo Bonzini #define CIX AXP_OPCODE_CIX
64476cad711SPaolo Bonzini #define MAX AXP_OPCODE_MAX
64576cad711SPaolo Bonzini
64676cad711SPaolo Bonzini /* Common combinations of arguments */
64776cad711SPaolo Bonzini #define ARG_NONE { 0 }
64876cad711SPaolo Bonzini #define ARG_BRA { RA, BDISP }
64976cad711SPaolo Bonzini #define ARG_FBRA { FA, BDISP }
65076cad711SPaolo Bonzini #define ARG_FP { FA, FB, DFC1 }
65176cad711SPaolo Bonzini #define ARG_FPZ1 { ZA, FB, DFC1 }
65276cad711SPaolo Bonzini #define ARG_MEM { RA, MDISP, PRB }
65376cad711SPaolo Bonzini #define ARG_FMEM { FA, MDISP, PRB }
65476cad711SPaolo Bonzini #define ARG_OPR { RA, RB, DRC1 }
65576cad711SPaolo Bonzini #define ARG_OPRL { RA, LIT, DRC1 }
65676cad711SPaolo Bonzini #define ARG_OPRZ1 { ZA, RB, DRC1 }
65776cad711SPaolo Bonzini #define ARG_OPRLZ1 { ZA, LIT, RC }
65876cad711SPaolo Bonzini #define ARG_PCD { PALFN }
65976cad711SPaolo Bonzini #define ARG_EV4HWMEM { RA, EV4HWDISP, PRB }
66076cad711SPaolo Bonzini #define ARG_EV4HWMPR { RA, RBA, EV4HWINDEX }
66176cad711SPaolo Bonzini #define ARG_EV5HWMEM { RA, EV5HWDISP, PRB }
66276cad711SPaolo Bonzini #define ARG_EV6HWMEM { RA, EV6HWDISP, PRB }
66376cad711SPaolo Bonzini
66476cad711SPaolo Bonzini /* The opcode table.
66576cad711SPaolo Bonzini
66676cad711SPaolo Bonzini The format of the opcode table is:
66776cad711SPaolo Bonzini
66876cad711SPaolo Bonzini NAME OPCODE MASK { OPERANDS }
66976cad711SPaolo Bonzini
67076cad711SPaolo Bonzini NAME is the name of the instruction.
67176cad711SPaolo Bonzini
67276cad711SPaolo Bonzini OPCODE is the instruction opcode.
67376cad711SPaolo Bonzini
67476cad711SPaolo Bonzini MASK is the opcode mask; this is used to tell the disassembler
67576cad711SPaolo Bonzini which bits in the actual opcode must match OPCODE.
67676cad711SPaolo Bonzini
67776cad711SPaolo Bonzini OPERANDS is the list of operands.
67876cad711SPaolo Bonzini
67976cad711SPaolo Bonzini The preceding macros merge the text of the OPCODE and MASK fields.
68076cad711SPaolo Bonzini
68176cad711SPaolo Bonzini The disassembler reads the table in order and prints the first
68276cad711SPaolo Bonzini instruction which matches, so this table is sorted to put more
68376cad711SPaolo Bonzini specific instructions before more general instructions.
68476cad711SPaolo Bonzini
68576cad711SPaolo Bonzini Otherwise, it is sorted by major opcode and minor function code.
68676cad711SPaolo Bonzini
68776cad711SPaolo Bonzini There are three classes of not-really-instructions in this table:
68876cad711SPaolo Bonzini
68976cad711SPaolo Bonzini ALIAS is another name for another instruction. Some of
69076cad711SPaolo Bonzini these come from the Architecture Handbook, some
69176cad711SPaolo Bonzini come from the original gas opcode tables. In all
69276cad711SPaolo Bonzini cases, the functionality of the opcode is unchanged.
69376cad711SPaolo Bonzini
69476cad711SPaolo Bonzini PSEUDO a stylized code form endorsed by Chapter A.4 of the
69576cad711SPaolo Bonzini Architecture Handbook.
69676cad711SPaolo Bonzini
69776cad711SPaolo Bonzini EXTRA a stylized code form found in the original gas tables.
69876cad711SPaolo Bonzini
69976cad711SPaolo Bonzini And two annotations:
70076cad711SPaolo Bonzini
70176cad711SPaolo Bonzini EV56 BUT opcodes that are officially introduced as of the ev56,
70276cad711SPaolo Bonzini but with defined results on previous implementations.
70376cad711SPaolo Bonzini
70476cad711SPaolo Bonzini EV56 UNA opcodes that were introduced as of the ev56 with
70576cad711SPaolo Bonzini presumably undefined results on previous implementations
70676cad711SPaolo Bonzini that were not assigned to a particular extension.
70776cad711SPaolo Bonzini */
70876cad711SPaolo Bonzini
70976cad711SPaolo Bonzini const struct alpha_opcode alpha_opcodes[] = {
71076cad711SPaolo Bonzini { "halt", SPCD(0x00,0x0000), BASE, ARG_NONE },
71176cad711SPaolo Bonzini { "draina", SPCD(0x00,0x0002), BASE, ARG_NONE },
71276cad711SPaolo Bonzini { "bpt", SPCD(0x00,0x0080), BASE, ARG_NONE },
71376cad711SPaolo Bonzini { "bugchk", SPCD(0x00,0x0081), BASE, ARG_NONE },
71476cad711SPaolo Bonzini { "callsys", SPCD(0x00,0x0083), BASE, ARG_NONE },
71576cad711SPaolo Bonzini { "chmk", SPCD(0x00,0x0083), BASE, ARG_NONE },
71676cad711SPaolo Bonzini { "imb", SPCD(0x00,0x0086), BASE, ARG_NONE },
71776cad711SPaolo Bonzini { "rduniq", SPCD(0x00,0x009e), BASE, ARG_NONE },
71876cad711SPaolo Bonzini { "wruniq", SPCD(0x00,0x009f), BASE, ARG_NONE },
71976cad711SPaolo Bonzini { "gentrap", SPCD(0x00,0x00aa), BASE, ARG_NONE },
72076cad711SPaolo Bonzini { "call_pal", PCD(0x00), BASE, ARG_PCD },
72176cad711SPaolo Bonzini { "pal", PCD(0x00), BASE, ARG_PCD }, /* alias */
72276cad711SPaolo Bonzini
72376cad711SPaolo Bonzini { "lda", MEM(0x08), BASE, { RA, MDISP, ZB } }, /* pseudo */
72476cad711SPaolo Bonzini { "lda", MEM(0x08), BASE, ARG_MEM },
72576cad711SPaolo Bonzini { "ldah", MEM(0x09), BASE, { RA, MDISP, ZB } }, /* pseudo */
72676cad711SPaolo Bonzini { "ldah", MEM(0x09), BASE, ARG_MEM },
72776cad711SPaolo Bonzini { "ldbu", MEM(0x0A), BWX, ARG_MEM },
72876cad711SPaolo Bonzini { "unop", MEM_(0x0B) | (30 << 16),
72976cad711SPaolo Bonzini MEM_MASK, BASE, { ZA } }, /* pseudo */
73076cad711SPaolo Bonzini { "ldq_u", MEM(0x0B), BASE, ARG_MEM },
73176cad711SPaolo Bonzini { "ldwu", MEM(0x0C), BWX, ARG_MEM },
73276cad711SPaolo Bonzini { "stw", MEM(0x0D), BWX, ARG_MEM },
73376cad711SPaolo Bonzini { "stb", MEM(0x0E), BWX, ARG_MEM },
73476cad711SPaolo Bonzini { "stq_u", MEM(0x0F), BASE, ARG_MEM },
73576cad711SPaolo Bonzini
73676cad711SPaolo Bonzini { "sextl", OPR(0x10,0x00), BASE, ARG_OPRZ1 }, /* pseudo */
73776cad711SPaolo Bonzini { "sextl", OPRL(0x10,0x00), BASE, ARG_OPRLZ1 }, /* pseudo */
73876cad711SPaolo Bonzini { "addl", OPR(0x10,0x00), BASE, ARG_OPR },
73976cad711SPaolo Bonzini { "addl", OPRL(0x10,0x00), BASE, ARG_OPRL },
74076cad711SPaolo Bonzini { "s4addl", OPR(0x10,0x02), BASE, ARG_OPR },
74176cad711SPaolo Bonzini { "s4addl", OPRL(0x10,0x02), BASE, ARG_OPRL },
74276cad711SPaolo Bonzini { "negl", OPR(0x10,0x09), BASE, ARG_OPRZ1 }, /* pseudo */
74376cad711SPaolo Bonzini { "negl", OPRL(0x10,0x09), BASE, ARG_OPRLZ1 }, /* pseudo */
74476cad711SPaolo Bonzini { "subl", OPR(0x10,0x09), BASE, ARG_OPR },
74576cad711SPaolo Bonzini { "subl", OPRL(0x10,0x09), BASE, ARG_OPRL },
74676cad711SPaolo Bonzini { "s4subl", OPR(0x10,0x0B), BASE, ARG_OPR },
74776cad711SPaolo Bonzini { "s4subl", OPRL(0x10,0x0B), BASE, ARG_OPRL },
74876cad711SPaolo Bonzini { "cmpbge", OPR(0x10,0x0F), BASE, ARG_OPR },
74976cad711SPaolo Bonzini { "cmpbge", OPRL(0x10,0x0F), BASE, ARG_OPRL },
75076cad711SPaolo Bonzini { "s8addl", OPR(0x10,0x12), BASE, ARG_OPR },
75176cad711SPaolo Bonzini { "s8addl", OPRL(0x10,0x12), BASE, ARG_OPRL },
75276cad711SPaolo Bonzini { "s8subl", OPR(0x10,0x1B), BASE, ARG_OPR },
75376cad711SPaolo Bonzini { "s8subl", OPRL(0x10,0x1B), BASE, ARG_OPRL },
75476cad711SPaolo Bonzini { "cmpult", OPR(0x10,0x1D), BASE, ARG_OPR },
75576cad711SPaolo Bonzini { "cmpult", OPRL(0x10,0x1D), BASE, ARG_OPRL },
75676cad711SPaolo Bonzini { "addq", OPR(0x10,0x20), BASE, ARG_OPR },
75776cad711SPaolo Bonzini { "addq", OPRL(0x10,0x20), BASE, ARG_OPRL },
75876cad711SPaolo Bonzini { "s4addq", OPR(0x10,0x22), BASE, ARG_OPR },
75976cad711SPaolo Bonzini { "s4addq", OPRL(0x10,0x22), BASE, ARG_OPRL },
76076cad711SPaolo Bonzini { "negq", OPR(0x10,0x29), BASE, ARG_OPRZ1 }, /* pseudo */
76176cad711SPaolo Bonzini { "negq", OPRL(0x10,0x29), BASE, ARG_OPRLZ1 }, /* pseudo */
76276cad711SPaolo Bonzini { "subq", OPR(0x10,0x29), BASE, ARG_OPR },
76376cad711SPaolo Bonzini { "subq", OPRL(0x10,0x29), BASE, ARG_OPRL },
76476cad711SPaolo Bonzini { "s4subq", OPR(0x10,0x2B), BASE, ARG_OPR },
76576cad711SPaolo Bonzini { "s4subq", OPRL(0x10,0x2B), BASE, ARG_OPRL },
76676cad711SPaolo Bonzini { "cmpeq", OPR(0x10,0x2D), BASE, ARG_OPR },
76776cad711SPaolo Bonzini { "cmpeq", OPRL(0x10,0x2D), BASE, ARG_OPRL },
76876cad711SPaolo Bonzini { "s8addq", OPR(0x10,0x32), BASE, ARG_OPR },
76976cad711SPaolo Bonzini { "s8addq", OPRL(0x10,0x32), BASE, ARG_OPRL },
77076cad711SPaolo Bonzini { "s8subq", OPR(0x10,0x3B), BASE, ARG_OPR },
77176cad711SPaolo Bonzini { "s8subq", OPRL(0x10,0x3B), BASE, ARG_OPRL },
77276cad711SPaolo Bonzini { "cmpule", OPR(0x10,0x3D), BASE, ARG_OPR },
77376cad711SPaolo Bonzini { "cmpule", OPRL(0x10,0x3D), BASE, ARG_OPRL },
77476cad711SPaolo Bonzini { "addl/v", OPR(0x10,0x40), BASE, ARG_OPR },
77576cad711SPaolo Bonzini { "addl/v", OPRL(0x10,0x40), BASE, ARG_OPRL },
77676cad711SPaolo Bonzini { "negl/v", OPR(0x10,0x49), BASE, ARG_OPRZ1 }, /* pseudo */
77776cad711SPaolo Bonzini { "negl/v", OPRL(0x10,0x49), BASE, ARG_OPRLZ1 }, /* pseudo */
77876cad711SPaolo Bonzini { "subl/v", OPR(0x10,0x49), BASE, ARG_OPR },
77976cad711SPaolo Bonzini { "subl/v", OPRL(0x10,0x49), BASE, ARG_OPRL },
78076cad711SPaolo Bonzini { "cmplt", OPR(0x10,0x4D), BASE, ARG_OPR },
78176cad711SPaolo Bonzini { "cmplt", OPRL(0x10,0x4D), BASE, ARG_OPRL },
78276cad711SPaolo Bonzini { "addq/v", OPR(0x10,0x60), BASE, ARG_OPR },
78376cad711SPaolo Bonzini { "addq/v", OPRL(0x10,0x60), BASE, ARG_OPRL },
78476cad711SPaolo Bonzini { "negq/v", OPR(0x10,0x69), BASE, ARG_OPRZ1 }, /* pseudo */
78576cad711SPaolo Bonzini { "negq/v", OPRL(0x10,0x69), BASE, ARG_OPRLZ1 }, /* pseudo */
78676cad711SPaolo Bonzini { "subq/v", OPR(0x10,0x69), BASE, ARG_OPR },
78776cad711SPaolo Bonzini { "subq/v", OPRL(0x10,0x69), BASE, ARG_OPRL },
78876cad711SPaolo Bonzini { "cmple", OPR(0x10,0x6D), BASE, ARG_OPR },
78976cad711SPaolo Bonzini { "cmple", OPRL(0x10,0x6D), BASE, ARG_OPRL },
79076cad711SPaolo Bonzini
79176cad711SPaolo Bonzini { "and", OPR(0x11,0x00), BASE, ARG_OPR },
79276cad711SPaolo Bonzini { "and", OPRL(0x11,0x00), BASE, ARG_OPRL },
79376cad711SPaolo Bonzini { "andnot", OPR(0x11,0x08), BASE, ARG_OPR }, /* alias */
79476cad711SPaolo Bonzini { "andnot", OPRL(0x11,0x08), BASE, ARG_OPRL }, /* alias */
79576cad711SPaolo Bonzini { "bic", OPR(0x11,0x08), BASE, ARG_OPR },
79676cad711SPaolo Bonzini { "bic", OPRL(0x11,0x08), BASE, ARG_OPRL },
79776cad711SPaolo Bonzini { "cmovlbs", OPR(0x11,0x14), BASE, ARG_OPR },
79876cad711SPaolo Bonzini { "cmovlbs", OPRL(0x11,0x14), BASE, ARG_OPRL },
79976cad711SPaolo Bonzini { "cmovlbc", OPR(0x11,0x16), BASE, ARG_OPR },
80076cad711SPaolo Bonzini { "cmovlbc", OPRL(0x11,0x16), BASE, ARG_OPRL },
80176cad711SPaolo Bonzini { "nop", OPR(0x11,0x20), BASE, { ZA, ZB, ZC } }, /* pseudo */
80276cad711SPaolo Bonzini { "clr", OPR(0x11,0x20), BASE, { ZA, ZB, RC } }, /* pseudo */
80376cad711SPaolo Bonzini { "mov", OPR(0x11,0x20), BASE, { ZA, RB, RC } }, /* pseudo */
80476cad711SPaolo Bonzini { "mov", OPR(0x11,0x20), BASE, { RA, RBA, RC } }, /* pseudo */
80576cad711SPaolo Bonzini { "mov", OPRL(0x11,0x20), BASE, { ZA, LIT, RC } }, /* pseudo */
80676cad711SPaolo Bonzini { "or", OPR(0x11,0x20), BASE, ARG_OPR }, /* alias */
80776cad711SPaolo Bonzini { "or", OPRL(0x11,0x20), BASE, ARG_OPRL }, /* alias */
80876cad711SPaolo Bonzini { "bis", OPR(0x11,0x20), BASE, ARG_OPR },
80976cad711SPaolo Bonzini { "bis", OPRL(0x11,0x20), BASE, ARG_OPRL },
81076cad711SPaolo Bonzini { "cmoveq", OPR(0x11,0x24), BASE, ARG_OPR },
81176cad711SPaolo Bonzini { "cmoveq", OPRL(0x11,0x24), BASE, ARG_OPRL },
81276cad711SPaolo Bonzini { "cmovne", OPR(0x11,0x26), BASE, ARG_OPR },
81376cad711SPaolo Bonzini { "cmovne", OPRL(0x11,0x26), BASE, ARG_OPRL },
81476cad711SPaolo Bonzini { "not", OPR(0x11,0x28), BASE, ARG_OPRZ1 }, /* pseudo */
81576cad711SPaolo Bonzini { "not", OPRL(0x11,0x28), BASE, ARG_OPRLZ1 }, /* pseudo */
81676cad711SPaolo Bonzini { "ornot", OPR(0x11,0x28), BASE, ARG_OPR },
81776cad711SPaolo Bonzini { "ornot", OPRL(0x11,0x28), BASE, ARG_OPRL },
81876cad711SPaolo Bonzini { "xor", OPR(0x11,0x40), BASE, ARG_OPR },
81976cad711SPaolo Bonzini { "xor", OPRL(0x11,0x40), BASE, ARG_OPRL },
82076cad711SPaolo Bonzini { "cmovlt", OPR(0x11,0x44), BASE, ARG_OPR },
82176cad711SPaolo Bonzini { "cmovlt", OPRL(0x11,0x44), BASE, ARG_OPRL },
82276cad711SPaolo Bonzini { "cmovge", OPR(0x11,0x46), BASE, ARG_OPR },
82376cad711SPaolo Bonzini { "cmovge", OPRL(0x11,0x46), BASE, ARG_OPRL },
82476cad711SPaolo Bonzini { "eqv", OPR(0x11,0x48), BASE, ARG_OPR },
82576cad711SPaolo Bonzini { "eqv", OPRL(0x11,0x48), BASE, ARG_OPRL },
82676cad711SPaolo Bonzini { "xornot", OPR(0x11,0x48), BASE, ARG_OPR }, /* alias */
82776cad711SPaolo Bonzini { "xornot", OPRL(0x11,0x48), BASE, ARG_OPRL }, /* alias */
82876cad711SPaolo Bonzini { "amask", OPR(0x11,0x61), BASE, ARG_OPRZ1 }, /* ev56 but */
82976cad711SPaolo Bonzini { "amask", OPRL(0x11,0x61), BASE, ARG_OPRLZ1 }, /* ev56 but */
83076cad711SPaolo Bonzini { "cmovle", OPR(0x11,0x64), BASE, ARG_OPR },
83176cad711SPaolo Bonzini { "cmovle", OPRL(0x11,0x64), BASE, ARG_OPRL },
83276cad711SPaolo Bonzini { "cmovgt", OPR(0x11,0x66), BASE, ARG_OPR },
83376cad711SPaolo Bonzini { "cmovgt", OPRL(0x11,0x66), BASE, ARG_OPRL },
83476cad711SPaolo Bonzini { "implver", OPRL_(0x11,0x6C)|(31<<21)|(1<<13),
83576cad711SPaolo Bonzini 0xFFFFFFE0, BASE, { RC } }, /* ev56 but */
83676cad711SPaolo Bonzini
83776cad711SPaolo Bonzini { "mskbl", OPR(0x12,0x02), BASE, ARG_OPR },
83876cad711SPaolo Bonzini { "mskbl", OPRL(0x12,0x02), BASE, ARG_OPRL },
83976cad711SPaolo Bonzini { "extbl", OPR(0x12,0x06), BASE, ARG_OPR },
84076cad711SPaolo Bonzini { "extbl", OPRL(0x12,0x06), BASE, ARG_OPRL },
84176cad711SPaolo Bonzini { "insbl", OPR(0x12,0x0B), BASE, ARG_OPR },
84276cad711SPaolo Bonzini { "insbl", OPRL(0x12,0x0B), BASE, ARG_OPRL },
84376cad711SPaolo Bonzini { "mskwl", OPR(0x12,0x12), BASE, ARG_OPR },
84476cad711SPaolo Bonzini { "mskwl", OPRL(0x12,0x12), BASE, ARG_OPRL },
84576cad711SPaolo Bonzini { "extwl", OPR(0x12,0x16), BASE, ARG_OPR },
84676cad711SPaolo Bonzini { "extwl", OPRL(0x12,0x16), BASE, ARG_OPRL },
84776cad711SPaolo Bonzini { "inswl", OPR(0x12,0x1B), BASE, ARG_OPR },
84876cad711SPaolo Bonzini { "inswl", OPRL(0x12,0x1B), BASE, ARG_OPRL },
84976cad711SPaolo Bonzini { "mskll", OPR(0x12,0x22), BASE, ARG_OPR },
85076cad711SPaolo Bonzini { "mskll", OPRL(0x12,0x22), BASE, ARG_OPRL },
85176cad711SPaolo Bonzini { "extll", OPR(0x12,0x26), BASE, ARG_OPR },
85276cad711SPaolo Bonzini { "extll", OPRL(0x12,0x26), BASE, ARG_OPRL },
85376cad711SPaolo Bonzini { "insll", OPR(0x12,0x2B), BASE, ARG_OPR },
85476cad711SPaolo Bonzini { "insll", OPRL(0x12,0x2B), BASE, ARG_OPRL },
85576cad711SPaolo Bonzini { "zap", OPR(0x12,0x30), BASE, ARG_OPR },
85676cad711SPaolo Bonzini { "zap", OPRL(0x12,0x30), BASE, ARG_OPRL },
85776cad711SPaolo Bonzini { "zapnot", OPR(0x12,0x31), BASE, ARG_OPR },
85876cad711SPaolo Bonzini { "zapnot", OPRL(0x12,0x31), BASE, ARG_OPRL },
85976cad711SPaolo Bonzini { "mskql", OPR(0x12,0x32), BASE, ARG_OPR },
86076cad711SPaolo Bonzini { "mskql", OPRL(0x12,0x32), BASE, ARG_OPRL },
86176cad711SPaolo Bonzini { "srl", OPR(0x12,0x34), BASE, ARG_OPR },
86276cad711SPaolo Bonzini { "srl", OPRL(0x12,0x34), BASE, ARG_OPRL },
86376cad711SPaolo Bonzini { "extql", OPR(0x12,0x36), BASE, ARG_OPR },
86476cad711SPaolo Bonzini { "extql", OPRL(0x12,0x36), BASE, ARG_OPRL },
86576cad711SPaolo Bonzini { "sll", OPR(0x12,0x39), BASE, ARG_OPR },
86676cad711SPaolo Bonzini { "sll", OPRL(0x12,0x39), BASE, ARG_OPRL },
86776cad711SPaolo Bonzini { "insql", OPR(0x12,0x3B), BASE, ARG_OPR },
86876cad711SPaolo Bonzini { "insql", OPRL(0x12,0x3B), BASE, ARG_OPRL },
86976cad711SPaolo Bonzini { "sra", OPR(0x12,0x3C), BASE, ARG_OPR },
87076cad711SPaolo Bonzini { "sra", OPRL(0x12,0x3C), BASE, ARG_OPRL },
87176cad711SPaolo Bonzini { "mskwh", OPR(0x12,0x52), BASE, ARG_OPR },
87276cad711SPaolo Bonzini { "mskwh", OPRL(0x12,0x52), BASE, ARG_OPRL },
87376cad711SPaolo Bonzini { "inswh", OPR(0x12,0x57), BASE, ARG_OPR },
87476cad711SPaolo Bonzini { "inswh", OPRL(0x12,0x57), BASE, ARG_OPRL },
87576cad711SPaolo Bonzini { "extwh", OPR(0x12,0x5A), BASE, ARG_OPR },
87676cad711SPaolo Bonzini { "extwh", OPRL(0x12,0x5A), BASE, ARG_OPRL },
87776cad711SPaolo Bonzini { "msklh", OPR(0x12,0x62), BASE, ARG_OPR },
87876cad711SPaolo Bonzini { "msklh", OPRL(0x12,0x62), BASE, ARG_OPRL },
87976cad711SPaolo Bonzini { "inslh", OPR(0x12,0x67), BASE, ARG_OPR },
88076cad711SPaolo Bonzini { "inslh", OPRL(0x12,0x67), BASE, ARG_OPRL },
88176cad711SPaolo Bonzini { "extlh", OPR(0x12,0x6A), BASE, ARG_OPR },
88276cad711SPaolo Bonzini { "extlh", OPRL(0x12,0x6A), BASE, ARG_OPRL },
88376cad711SPaolo Bonzini { "mskqh", OPR(0x12,0x72), BASE, ARG_OPR },
88476cad711SPaolo Bonzini { "mskqh", OPRL(0x12,0x72), BASE, ARG_OPRL },
88576cad711SPaolo Bonzini { "insqh", OPR(0x12,0x77), BASE, ARG_OPR },
88676cad711SPaolo Bonzini { "insqh", OPRL(0x12,0x77), BASE, ARG_OPRL },
88776cad711SPaolo Bonzini { "extqh", OPR(0x12,0x7A), BASE, ARG_OPR },
88876cad711SPaolo Bonzini { "extqh", OPRL(0x12,0x7A), BASE, ARG_OPRL },
88976cad711SPaolo Bonzini
89076cad711SPaolo Bonzini { "mull", OPR(0x13,0x00), BASE, ARG_OPR },
89176cad711SPaolo Bonzini { "mull", OPRL(0x13,0x00), BASE, ARG_OPRL },
89276cad711SPaolo Bonzini { "mulq", OPR(0x13,0x20), BASE, ARG_OPR },
89376cad711SPaolo Bonzini { "mulq", OPRL(0x13,0x20), BASE, ARG_OPRL },
89476cad711SPaolo Bonzini { "umulh", OPR(0x13,0x30), BASE, ARG_OPR },
89576cad711SPaolo Bonzini { "umulh", OPRL(0x13,0x30), BASE, ARG_OPRL },
89676cad711SPaolo Bonzini { "mull/v", OPR(0x13,0x40), BASE, ARG_OPR },
89776cad711SPaolo Bonzini { "mull/v", OPRL(0x13,0x40), BASE, ARG_OPRL },
89876cad711SPaolo Bonzini { "mulq/v", OPR(0x13,0x60), BASE, ARG_OPR },
89976cad711SPaolo Bonzini { "mulq/v", OPRL(0x13,0x60), BASE, ARG_OPRL },
90076cad711SPaolo Bonzini
90176cad711SPaolo Bonzini { "itofs", FP(0x14,0x004), CIX, { RA, ZB, FC } },
90276cad711SPaolo Bonzini { "sqrtf/c", FP(0x14,0x00A), CIX, ARG_FPZ1 },
90376cad711SPaolo Bonzini { "sqrts/c", FP(0x14,0x00B), CIX, ARG_FPZ1 },
90476cad711SPaolo Bonzini { "itoff", FP(0x14,0x014), CIX, { RA, ZB, FC } },
90576cad711SPaolo Bonzini { "itoft", FP(0x14,0x024), CIX, { RA, ZB, FC } },
90676cad711SPaolo Bonzini { "sqrtg/c", FP(0x14,0x02A), CIX, ARG_FPZ1 },
90776cad711SPaolo Bonzini { "sqrtt/c", FP(0x14,0x02B), CIX, ARG_FPZ1 },
90876cad711SPaolo Bonzini { "sqrts/m", FP(0x14,0x04B), CIX, ARG_FPZ1 },
90976cad711SPaolo Bonzini { "sqrtt/m", FP(0x14,0x06B), CIX, ARG_FPZ1 },
91076cad711SPaolo Bonzini { "sqrtf", FP(0x14,0x08A), CIX, ARG_FPZ1 },
91176cad711SPaolo Bonzini { "sqrts", FP(0x14,0x08B), CIX, ARG_FPZ1 },
91276cad711SPaolo Bonzini { "sqrtg", FP(0x14,0x0AA), CIX, ARG_FPZ1 },
91376cad711SPaolo Bonzini { "sqrtt", FP(0x14,0x0AB), CIX, ARG_FPZ1 },
91476cad711SPaolo Bonzini { "sqrts/d", FP(0x14,0x0CB), CIX, ARG_FPZ1 },
91576cad711SPaolo Bonzini { "sqrtt/d", FP(0x14,0x0EB), CIX, ARG_FPZ1 },
91676cad711SPaolo Bonzini { "sqrtf/uc", FP(0x14,0x10A), CIX, ARG_FPZ1 },
91776cad711SPaolo Bonzini { "sqrts/uc", FP(0x14,0x10B), CIX, ARG_FPZ1 },
91876cad711SPaolo Bonzini { "sqrtg/uc", FP(0x14,0x12A), CIX, ARG_FPZ1 },
91976cad711SPaolo Bonzini { "sqrtt/uc", FP(0x14,0x12B), CIX, ARG_FPZ1 },
92076cad711SPaolo Bonzini { "sqrts/um", FP(0x14,0x14B), CIX, ARG_FPZ1 },
92176cad711SPaolo Bonzini { "sqrtt/um", FP(0x14,0x16B), CIX, ARG_FPZ1 },
92276cad711SPaolo Bonzini { "sqrtf/u", FP(0x14,0x18A), CIX, ARG_FPZ1 },
92376cad711SPaolo Bonzini { "sqrts/u", FP(0x14,0x18B), CIX, ARG_FPZ1 },
92476cad711SPaolo Bonzini { "sqrtg/u", FP(0x14,0x1AA), CIX, ARG_FPZ1 },
92576cad711SPaolo Bonzini { "sqrtt/u", FP(0x14,0x1AB), CIX, ARG_FPZ1 },
92676cad711SPaolo Bonzini { "sqrts/ud", FP(0x14,0x1CB), CIX, ARG_FPZ1 },
92776cad711SPaolo Bonzini { "sqrtt/ud", FP(0x14,0x1EB), CIX, ARG_FPZ1 },
92876cad711SPaolo Bonzini { "sqrtf/sc", FP(0x14,0x40A), CIX, ARG_FPZ1 },
92976cad711SPaolo Bonzini { "sqrtg/sc", FP(0x14,0x42A), CIX, ARG_FPZ1 },
93076cad711SPaolo Bonzini { "sqrtf/s", FP(0x14,0x48A), CIX, ARG_FPZ1 },
93176cad711SPaolo Bonzini { "sqrtg/s", FP(0x14,0x4AA), CIX, ARG_FPZ1 },
93276cad711SPaolo Bonzini { "sqrtf/suc", FP(0x14,0x50A), CIX, ARG_FPZ1 },
93376cad711SPaolo Bonzini { "sqrts/suc", FP(0x14,0x50B), CIX, ARG_FPZ1 },
93476cad711SPaolo Bonzini { "sqrtg/suc", FP(0x14,0x52A), CIX, ARG_FPZ1 },
93576cad711SPaolo Bonzini { "sqrtt/suc", FP(0x14,0x52B), CIX, ARG_FPZ1 },
93676cad711SPaolo Bonzini { "sqrts/sum", FP(0x14,0x54B), CIX, ARG_FPZ1 },
93776cad711SPaolo Bonzini { "sqrtt/sum", FP(0x14,0x56B), CIX, ARG_FPZ1 },
93876cad711SPaolo Bonzini { "sqrtf/su", FP(0x14,0x58A), CIX, ARG_FPZ1 },
93976cad711SPaolo Bonzini { "sqrts/su", FP(0x14,0x58B), CIX, ARG_FPZ1 },
94076cad711SPaolo Bonzini { "sqrtg/su", FP(0x14,0x5AA), CIX, ARG_FPZ1 },
94176cad711SPaolo Bonzini { "sqrtt/su", FP(0x14,0x5AB), CIX, ARG_FPZ1 },
94276cad711SPaolo Bonzini { "sqrts/sud", FP(0x14,0x5CB), CIX, ARG_FPZ1 },
94376cad711SPaolo Bonzini { "sqrtt/sud", FP(0x14,0x5EB), CIX, ARG_FPZ1 },
94476cad711SPaolo Bonzini { "sqrts/suic", FP(0x14,0x70B), CIX, ARG_FPZ1 },
94576cad711SPaolo Bonzini { "sqrtt/suic", FP(0x14,0x72B), CIX, ARG_FPZ1 },
94676cad711SPaolo Bonzini { "sqrts/suim", FP(0x14,0x74B), CIX, ARG_FPZ1 },
94776cad711SPaolo Bonzini { "sqrtt/suim", FP(0x14,0x76B), CIX, ARG_FPZ1 },
94876cad711SPaolo Bonzini { "sqrts/sui", FP(0x14,0x78B), CIX, ARG_FPZ1 },
94976cad711SPaolo Bonzini { "sqrtt/sui", FP(0x14,0x7AB), CIX, ARG_FPZ1 },
95076cad711SPaolo Bonzini { "sqrts/suid", FP(0x14,0x7CB), CIX, ARG_FPZ1 },
95176cad711SPaolo Bonzini { "sqrtt/suid", FP(0x14,0x7EB), CIX, ARG_FPZ1 },
95276cad711SPaolo Bonzini
95376cad711SPaolo Bonzini { "addf/c", FP(0x15,0x000), BASE, ARG_FP },
95476cad711SPaolo Bonzini { "subf/c", FP(0x15,0x001), BASE, ARG_FP },
95576cad711SPaolo Bonzini { "mulf/c", FP(0x15,0x002), BASE, ARG_FP },
95676cad711SPaolo Bonzini { "divf/c", FP(0x15,0x003), BASE, ARG_FP },
95776cad711SPaolo Bonzini { "cvtdg/c", FP(0x15,0x01E), BASE, ARG_FPZ1 },
95876cad711SPaolo Bonzini { "addg/c", FP(0x15,0x020), BASE, ARG_FP },
95976cad711SPaolo Bonzini { "subg/c", FP(0x15,0x021), BASE, ARG_FP },
96076cad711SPaolo Bonzini { "mulg/c", FP(0x15,0x022), BASE, ARG_FP },
96176cad711SPaolo Bonzini { "divg/c", FP(0x15,0x023), BASE, ARG_FP },
96276cad711SPaolo Bonzini { "cvtgf/c", FP(0x15,0x02C), BASE, ARG_FPZ1 },
96376cad711SPaolo Bonzini { "cvtgd/c", FP(0x15,0x02D), BASE, ARG_FPZ1 },
96476cad711SPaolo Bonzini { "cvtgq/c", FP(0x15,0x02F), BASE, ARG_FPZ1 },
96576cad711SPaolo Bonzini { "cvtqf/c", FP(0x15,0x03C), BASE, ARG_FPZ1 },
96676cad711SPaolo Bonzini { "cvtqg/c", FP(0x15,0x03E), BASE, ARG_FPZ1 },
96776cad711SPaolo Bonzini { "addf", FP(0x15,0x080), BASE, ARG_FP },
96876cad711SPaolo Bonzini { "negf", FP(0x15,0x081), BASE, ARG_FPZ1 }, /* pseudo */
96976cad711SPaolo Bonzini { "subf", FP(0x15,0x081), BASE, ARG_FP },
97076cad711SPaolo Bonzini { "mulf", FP(0x15,0x082), BASE, ARG_FP },
97176cad711SPaolo Bonzini { "divf", FP(0x15,0x083), BASE, ARG_FP },
97276cad711SPaolo Bonzini { "cvtdg", FP(0x15,0x09E), BASE, ARG_FPZ1 },
97376cad711SPaolo Bonzini { "addg", FP(0x15,0x0A0), BASE, ARG_FP },
97476cad711SPaolo Bonzini { "negg", FP(0x15,0x0A1), BASE, ARG_FPZ1 }, /* pseudo */
97576cad711SPaolo Bonzini { "subg", FP(0x15,0x0A1), BASE, ARG_FP },
97676cad711SPaolo Bonzini { "mulg", FP(0x15,0x0A2), BASE, ARG_FP },
97776cad711SPaolo Bonzini { "divg", FP(0x15,0x0A3), BASE, ARG_FP },
97876cad711SPaolo Bonzini { "cmpgeq", FP(0x15,0x0A5), BASE, ARG_FP },
97976cad711SPaolo Bonzini { "cmpglt", FP(0x15,0x0A6), BASE, ARG_FP },
98076cad711SPaolo Bonzini { "cmpgle", FP(0x15,0x0A7), BASE, ARG_FP },
98176cad711SPaolo Bonzini { "cvtgf", FP(0x15,0x0AC), BASE, ARG_FPZ1 },
98276cad711SPaolo Bonzini { "cvtgd", FP(0x15,0x0AD), BASE, ARG_FPZ1 },
98376cad711SPaolo Bonzini { "cvtgq", FP(0x15,0x0AF), BASE, ARG_FPZ1 },
98476cad711SPaolo Bonzini { "cvtqf", FP(0x15,0x0BC), BASE, ARG_FPZ1 },
98576cad711SPaolo Bonzini { "cvtqg", FP(0x15,0x0BE), BASE, ARG_FPZ1 },
98676cad711SPaolo Bonzini { "addf/uc", FP(0x15,0x100), BASE, ARG_FP },
98776cad711SPaolo Bonzini { "subf/uc", FP(0x15,0x101), BASE, ARG_FP },
98876cad711SPaolo Bonzini { "mulf/uc", FP(0x15,0x102), BASE, ARG_FP },
98976cad711SPaolo Bonzini { "divf/uc", FP(0x15,0x103), BASE, ARG_FP },
99076cad711SPaolo Bonzini { "cvtdg/uc", FP(0x15,0x11E), BASE, ARG_FPZ1 },
99176cad711SPaolo Bonzini { "addg/uc", FP(0x15,0x120), BASE, ARG_FP },
99276cad711SPaolo Bonzini { "subg/uc", FP(0x15,0x121), BASE, ARG_FP },
99376cad711SPaolo Bonzini { "mulg/uc", FP(0x15,0x122), BASE, ARG_FP },
99476cad711SPaolo Bonzini { "divg/uc", FP(0x15,0x123), BASE, ARG_FP },
99576cad711SPaolo Bonzini { "cvtgf/uc", FP(0x15,0x12C), BASE, ARG_FPZ1 },
99676cad711SPaolo Bonzini { "cvtgd/uc", FP(0x15,0x12D), BASE, ARG_FPZ1 },
99776cad711SPaolo Bonzini { "cvtgq/vc", FP(0x15,0x12F), BASE, ARG_FPZ1 },
99876cad711SPaolo Bonzini { "addf/u", FP(0x15,0x180), BASE, ARG_FP },
99976cad711SPaolo Bonzini { "subf/u", FP(0x15,0x181), BASE, ARG_FP },
100076cad711SPaolo Bonzini { "mulf/u", FP(0x15,0x182), BASE, ARG_FP },
100176cad711SPaolo Bonzini { "divf/u", FP(0x15,0x183), BASE, ARG_FP },
100276cad711SPaolo Bonzini { "cvtdg/u", FP(0x15,0x19E), BASE, ARG_FPZ1 },
100376cad711SPaolo Bonzini { "addg/u", FP(0x15,0x1A0), BASE, ARG_FP },
100476cad711SPaolo Bonzini { "subg/u", FP(0x15,0x1A1), BASE, ARG_FP },
100576cad711SPaolo Bonzini { "mulg/u", FP(0x15,0x1A2), BASE, ARG_FP },
100676cad711SPaolo Bonzini { "divg/u", FP(0x15,0x1A3), BASE, ARG_FP },
100776cad711SPaolo Bonzini { "cvtgf/u", FP(0x15,0x1AC), BASE, ARG_FPZ1 },
100876cad711SPaolo Bonzini { "cvtgd/u", FP(0x15,0x1AD), BASE, ARG_FPZ1 },
100976cad711SPaolo Bonzini { "cvtgq/v", FP(0x15,0x1AF), BASE, ARG_FPZ1 },
101076cad711SPaolo Bonzini { "addf/sc", FP(0x15,0x400), BASE, ARG_FP },
101176cad711SPaolo Bonzini { "subf/sc", FP(0x15,0x401), BASE, ARG_FP },
101276cad711SPaolo Bonzini { "mulf/sc", FP(0x15,0x402), BASE, ARG_FP },
101376cad711SPaolo Bonzini { "divf/sc", FP(0x15,0x403), BASE, ARG_FP },
101476cad711SPaolo Bonzini { "cvtdg/sc", FP(0x15,0x41E), BASE, ARG_FPZ1 },
101576cad711SPaolo Bonzini { "addg/sc", FP(0x15,0x420), BASE, ARG_FP },
101676cad711SPaolo Bonzini { "subg/sc", FP(0x15,0x421), BASE, ARG_FP },
101776cad711SPaolo Bonzini { "mulg/sc", FP(0x15,0x422), BASE, ARG_FP },
101876cad711SPaolo Bonzini { "divg/sc", FP(0x15,0x423), BASE, ARG_FP },
101976cad711SPaolo Bonzini { "cvtgf/sc", FP(0x15,0x42C), BASE, ARG_FPZ1 },
102076cad711SPaolo Bonzini { "cvtgd/sc", FP(0x15,0x42D), BASE, ARG_FPZ1 },
102176cad711SPaolo Bonzini { "cvtgq/sc", FP(0x15,0x42F), BASE, ARG_FPZ1 },
102276cad711SPaolo Bonzini { "addf/s", FP(0x15,0x480), BASE, ARG_FP },
102376cad711SPaolo Bonzini { "negf/s", FP(0x15,0x481), BASE, ARG_FPZ1 }, /* pseudo */
102476cad711SPaolo Bonzini { "subf/s", FP(0x15,0x481), BASE, ARG_FP },
102576cad711SPaolo Bonzini { "mulf/s", FP(0x15,0x482), BASE, ARG_FP },
102676cad711SPaolo Bonzini { "divf/s", FP(0x15,0x483), BASE, ARG_FP },
102776cad711SPaolo Bonzini { "cvtdg/s", FP(0x15,0x49E), BASE, ARG_FPZ1 },
102876cad711SPaolo Bonzini { "addg/s", FP(0x15,0x4A0), BASE, ARG_FP },
102976cad711SPaolo Bonzini { "negg/s", FP(0x15,0x4A1), BASE, ARG_FPZ1 }, /* pseudo */
103076cad711SPaolo Bonzini { "subg/s", FP(0x15,0x4A1), BASE, ARG_FP },
103176cad711SPaolo Bonzini { "mulg/s", FP(0x15,0x4A2), BASE, ARG_FP },
103276cad711SPaolo Bonzini { "divg/s", FP(0x15,0x4A3), BASE, ARG_FP },
103376cad711SPaolo Bonzini { "cmpgeq/s", FP(0x15,0x4A5), BASE, ARG_FP },
103476cad711SPaolo Bonzini { "cmpglt/s", FP(0x15,0x4A6), BASE, ARG_FP },
103576cad711SPaolo Bonzini { "cmpgle/s", FP(0x15,0x4A7), BASE, ARG_FP },
103676cad711SPaolo Bonzini { "cvtgf/s", FP(0x15,0x4AC), BASE, ARG_FPZ1 },
103776cad711SPaolo Bonzini { "cvtgd/s", FP(0x15,0x4AD), BASE, ARG_FPZ1 },
103876cad711SPaolo Bonzini { "cvtgq/s", FP(0x15,0x4AF), BASE, ARG_FPZ1 },
103976cad711SPaolo Bonzini { "addf/suc", FP(0x15,0x500), BASE, ARG_FP },
104076cad711SPaolo Bonzini { "subf/suc", FP(0x15,0x501), BASE, ARG_FP },
104176cad711SPaolo Bonzini { "mulf/suc", FP(0x15,0x502), BASE, ARG_FP },
104276cad711SPaolo Bonzini { "divf/suc", FP(0x15,0x503), BASE, ARG_FP },
104376cad711SPaolo Bonzini { "cvtdg/suc", FP(0x15,0x51E), BASE, ARG_FPZ1 },
104476cad711SPaolo Bonzini { "addg/suc", FP(0x15,0x520), BASE, ARG_FP },
104576cad711SPaolo Bonzini { "subg/suc", FP(0x15,0x521), BASE, ARG_FP },
104676cad711SPaolo Bonzini { "mulg/suc", FP(0x15,0x522), BASE, ARG_FP },
104776cad711SPaolo Bonzini { "divg/suc", FP(0x15,0x523), BASE, ARG_FP },
104876cad711SPaolo Bonzini { "cvtgf/suc", FP(0x15,0x52C), BASE, ARG_FPZ1 },
104976cad711SPaolo Bonzini { "cvtgd/suc", FP(0x15,0x52D), BASE, ARG_FPZ1 },
105076cad711SPaolo Bonzini { "cvtgq/svc", FP(0x15,0x52F), BASE, ARG_FPZ1 },
105176cad711SPaolo Bonzini { "addf/su", FP(0x15,0x580), BASE, ARG_FP },
105276cad711SPaolo Bonzini { "subf/su", FP(0x15,0x581), BASE, ARG_FP },
105376cad711SPaolo Bonzini { "mulf/su", FP(0x15,0x582), BASE, ARG_FP },
105476cad711SPaolo Bonzini { "divf/su", FP(0x15,0x583), BASE, ARG_FP },
105576cad711SPaolo Bonzini { "cvtdg/su", FP(0x15,0x59E), BASE, ARG_FPZ1 },
105676cad711SPaolo Bonzini { "addg/su", FP(0x15,0x5A0), BASE, ARG_FP },
105776cad711SPaolo Bonzini { "subg/su", FP(0x15,0x5A1), BASE, ARG_FP },
105876cad711SPaolo Bonzini { "mulg/su", FP(0x15,0x5A2), BASE, ARG_FP },
105976cad711SPaolo Bonzini { "divg/su", FP(0x15,0x5A3), BASE, ARG_FP },
106076cad711SPaolo Bonzini { "cvtgf/su", FP(0x15,0x5AC), BASE, ARG_FPZ1 },
106176cad711SPaolo Bonzini { "cvtgd/su", FP(0x15,0x5AD), BASE, ARG_FPZ1 },
106276cad711SPaolo Bonzini { "cvtgq/sv", FP(0x15,0x5AF), BASE, ARG_FPZ1 },
106376cad711SPaolo Bonzini
106476cad711SPaolo Bonzini { "adds/c", FP(0x16,0x000), BASE, ARG_FP },
106576cad711SPaolo Bonzini { "subs/c", FP(0x16,0x001), BASE, ARG_FP },
106676cad711SPaolo Bonzini { "muls/c", FP(0x16,0x002), BASE, ARG_FP },
106776cad711SPaolo Bonzini { "divs/c", FP(0x16,0x003), BASE, ARG_FP },
106876cad711SPaolo Bonzini { "addt/c", FP(0x16,0x020), BASE, ARG_FP },
106976cad711SPaolo Bonzini { "subt/c", FP(0x16,0x021), BASE, ARG_FP },
107076cad711SPaolo Bonzini { "mult/c", FP(0x16,0x022), BASE, ARG_FP },
107176cad711SPaolo Bonzini { "divt/c", FP(0x16,0x023), BASE, ARG_FP },
107276cad711SPaolo Bonzini { "cvtts/c", FP(0x16,0x02C), BASE, ARG_FPZ1 },
107376cad711SPaolo Bonzini { "cvttq/c", FP(0x16,0x02F), BASE, ARG_FPZ1 },
107476cad711SPaolo Bonzini { "cvtqs/c", FP(0x16,0x03C), BASE, ARG_FPZ1 },
107576cad711SPaolo Bonzini { "cvtqt/c", FP(0x16,0x03E), BASE, ARG_FPZ1 },
107676cad711SPaolo Bonzini { "adds/m", FP(0x16,0x040), BASE, ARG_FP },
107776cad711SPaolo Bonzini { "subs/m", FP(0x16,0x041), BASE, ARG_FP },
107876cad711SPaolo Bonzini { "muls/m", FP(0x16,0x042), BASE, ARG_FP },
107976cad711SPaolo Bonzini { "divs/m", FP(0x16,0x043), BASE, ARG_FP },
108076cad711SPaolo Bonzini { "addt/m", FP(0x16,0x060), BASE, ARG_FP },
108176cad711SPaolo Bonzini { "subt/m", FP(0x16,0x061), BASE, ARG_FP },
108276cad711SPaolo Bonzini { "mult/m", FP(0x16,0x062), BASE, ARG_FP },
108376cad711SPaolo Bonzini { "divt/m", FP(0x16,0x063), BASE, ARG_FP },
108476cad711SPaolo Bonzini { "cvtts/m", FP(0x16,0x06C), BASE, ARG_FPZ1 },
108576cad711SPaolo Bonzini { "cvttq/m", FP(0x16,0x06F), BASE, ARG_FPZ1 },
108676cad711SPaolo Bonzini { "cvtqs/m", FP(0x16,0x07C), BASE, ARG_FPZ1 },
108776cad711SPaolo Bonzini { "cvtqt/m", FP(0x16,0x07E), BASE, ARG_FPZ1 },
108876cad711SPaolo Bonzini { "adds", FP(0x16,0x080), BASE, ARG_FP },
108976cad711SPaolo Bonzini { "negs", FP(0x16,0x081), BASE, ARG_FPZ1 }, /* pseudo */
109076cad711SPaolo Bonzini { "subs", FP(0x16,0x081), BASE, ARG_FP },
109176cad711SPaolo Bonzini { "muls", FP(0x16,0x082), BASE, ARG_FP },
109276cad711SPaolo Bonzini { "divs", FP(0x16,0x083), BASE, ARG_FP },
109376cad711SPaolo Bonzini { "addt", FP(0x16,0x0A0), BASE, ARG_FP },
109476cad711SPaolo Bonzini { "negt", FP(0x16,0x0A1), BASE, ARG_FPZ1 }, /* pseudo */
109576cad711SPaolo Bonzini { "subt", FP(0x16,0x0A1), BASE, ARG_FP },
109676cad711SPaolo Bonzini { "mult", FP(0x16,0x0A2), BASE, ARG_FP },
109776cad711SPaolo Bonzini { "divt", FP(0x16,0x0A3), BASE, ARG_FP },
109876cad711SPaolo Bonzini { "cmptun", FP(0x16,0x0A4), BASE, ARG_FP },
109976cad711SPaolo Bonzini { "cmpteq", FP(0x16,0x0A5), BASE, ARG_FP },
110076cad711SPaolo Bonzini { "cmptlt", FP(0x16,0x0A6), BASE, ARG_FP },
110176cad711SPaolo Bonzini { "cmptle", FP(0x16,0x0A7), BASE, ARG_FP },
110276cad711SPaolo Bonzini { "cvtts", FP(0x16,0x0AC), BASE, ARG_FPZ1 },
110376cad711SPaolo Bonzini { "cvttq", FP(0x16,0x0AF), BASE, ARG_FPZ1 },
110476cad711SPaolo Bonzini { "cvtqs", FP(0x16,0x0BC), BASE, ARG_FPZ1 },
110576cad711SPaolo Bonzini { "cvtqt", FP(0x16,0x0BE), BASE, ARG_FPZ1 },
110676cad711SPaolo Bonzini { "adds/d", FP(0x16,0x0C0), BASE, ARG_FP },
110776cad711SPaolo Bonzini { "subs/d", FP(0x16,0x0C1), BASE, ARG_FP },
110876cad711SPaolo Bonzini { "muls/d", FP(0x16,0x0C2), BASE, ARG_FP },
110976cad711SPaolo Bonzini { "divs/d", FP(0x16,0x0C3), BASE, ARG_FP },
111076cad711SPaolo Bonzini { "addt/d", FP(0x16,0x0E0), BASE, ARG_FP },
111176cad711SPaolo Bonzini { "subt/d", FP(0x16,0x0E1), BASE, ARG_FP },
111276cad711SPaolo Bonzini { "mult/d", FP(0x16,0x0E2), BASE, ARG_FP },
111376cad711SPaolo Bonzini { "divt/d", FP(0x16,0x0E3), BASE, ARG_FP },
111476cad711SPaolo Bonzini { "cvtts/d", FP(0x16,0x0EC), BASE, ARG_FPZ1 },
111576cad711SPaolo Bonzini { "cvttq/d", FP(0x16,0x0EF), BASE, ARG_FPZ1 },
111676cad711SPaolo Bonzini { "cvtqs/d", FP(0x16,0x0FC), BASE, ARG_FPZ1 },
111776cad711SPaolo Bonzini { "cvtqt/d", FP(0x16,0x0FE), BASE, ARG_FPZ1 },
111876cad711SPaolo Bonzini { "adds/uc", FP(0x16,0x100), BASE, ARG_FP },
111976cad711SPaolo Bonzini { "subs/uc", FP(0x16,0x101), BASE, ARG_FP },
112076cad711SPaolo Bonzini { "muls/uc", FP(0x16,0x102), BASE, ARG_FP },
112176cad711SPaolo Bonzini { "divs/uc", FP(0x16,0x103), BASE, ARG_FP },
112276cad711SPaolo Bonzini { "addt/uc", FP(0x16,0x120), BASE, ARG_FP },
112376cad711SPaolo Bonzini { "subt/uc", FP(0x16,0x121), BASE, ARG_FP },
112476cad711SPaolo Bonzini { "mult/uc", FP(0x16,0x122), BASE, ARG_FP },
112576cad711SPaolo Bonzini { "divt/uc", FP(0x16,0x123), BASE, ARG_FP },
112676cad711SPaolo Bonzini { "cvtts/uc", FP(0x16,0x12C), BASE, ARG_FPZ1 },
112776cad711SPaolo Bonzini { "cvttq/vc", FP(0x16,0x12F), BASE, ARG_FPZ1 },
112876cad711SPaolo Bonzini { "adds/um", FP(0x16,0x140), BASE, ARG_FP },
112976cad711SPaolo Bonzini { "subs/um", FP(0x16,0x141), BASE, ARG_FP },
113076cad711SPaolo Bonzini { "muls/um", FP(0x16,0x142), BASE, ARG_FP },
113176cad711SPaolo Bonzini { "divs/um", FP(0x16,0x143), BASE, ARG_FP },
113276cad711SPaolo Bonzini { "addt/um", FP(0x16,0x160), BASE, ARG_FP },
113376cad711SPaolo Bonzini { "subt/um", FP(0x16,0x161), BASE, ARG_FP },
113476cad711SPaolo Bonzini { "mult/um", FP(0x16,0x162), BASE, ARG_FP },
113576cad711SPaolo Bonzini { "divt/um", FP(0x16,0x163), BASE, ARG_FP },
113676cad711SPaolo Bonzini { "cvtts/um", FP(0x16,0x16C), BASE, ARG_FPZ1 },
113776cad711SPaolo Bonzini { "cvttq/vm", FP(0x16,0x16F), BASE, ARG_FPZ1 },
113876cad711SPaolo Bonzini { "adds/u", FP(0x16,0x180), BASE, ARG_FP },
113976cad711SPaolo Bonzini { "subs/u", FP(0x16,0x181), BASE, ARG_FP },
114076cad711SPaolo Bonzini { "muls/u", FP(0x16,0x182), BASE, ARG_FP },
114176cad711SPaolo Bonzini { "divs/u", FP(0x16,0x183), BASE, ARG_FP },
114276cad711SPaolo Bonzini { "addt/u", FP(0x16,0x1A0), BASE, ARG_FP },
114376cad711SPaolo Bonzini { "subt/u", FP(0x16,0x1A1), BASE, ARG_FP },
114476cad711SPaolo Bonzini { "mult/u", FP(0x16,0x1A2), BASE, ARG_FP },
114576cad711SPaolo Bonzini { "divt/u", FP(0x16,0x1A3), BASE, ARG_FP },
114676cad711SPaolo Bonzini { "cvtts/u", FP(0x16,0x1AC), BASE, ARG_FPZ1 },
114776cad711SPaolo Bonzini { "cvttq/v", FP(0x16,0x1AF), BASE, ARG_FPZ1 },
114876cad711SPaolo Bonzini { "adds/ud", FP(0x16,0x1C0), BASE, ARG_FP },
114976cad711SPaolo Bonzini { "subs/ud", FP(0x16,0x1C1), BASE, ARG_FP },
115076cad711SPaolo Bonzini { "muls/ud", FP(0x16,0x1C2), BASE, ARG_FP },
115176cad711SPaolo Bonzini { "divs/ud", FP(0x16,0x1C3), BASE, ARG_FP },
115276cad711SPaolo Bonzini { "addt/ud", FP(0x16,0x1E0), BASE, ARG_FP },
115376cad711SPaolo Bonzini { "subt/ud", FP(0x16,0x1E1), BASE, ARG_FP },
115476cad711SPaolo Bonzini { "mult/ud", FP(0x16,0x1E2), BASE, ARG_FP },
115576cad711SPaolo Bonzini { "divt/ud", FP(0x16,0x1E3), BASE, ARG_FP },
115676cad711SPaolo Bonzini { "cvtts/ud", FP(0x16,0x1EC), BASE, ARG_FPZ1 },
115776cad711SPaolo Bonzini { "cvttq/vd", FP(0x16,0x1EF), BASE, ARG_FPZ1 },
115876cad711SPaolo Bonzini { "cvtst", FP(0x16,0x2AC), BASE, ARG_FPZ1 },
115976cad711SPaolo Bonzini { "adds/suc", FP(0x16,0x500), BASE, ARG_FP },
116076cad711SPaolo Bonzini { "subs/suc", FP(0x16,0x501), BASE, ARG_FP },
116176cad711SPaolo Bonzini { "muls/suc", FP(0x16,0x502), BASE, ARG_FP },
116276cad711SPaolo Bonzini { "divs/suc", FP(0x16,0x503), BASE, ARG_FP },
116376cad711SPaolo Bonzini { "addt/suc", FP(0x16,0x520), BASE, ARG_FP },
116476cad711SPaolo Bonzini { "subt/suc", FP(0x16,0x521), BASE, ARG_FP },
116576cad711SPaolo Bonzini { "mult/suc", FP(0x16,0x522), BASE, ARG_FP },
116676cad711SPaolo Bonzini { "divt/suc", FP(0x16,0x523), BASE, ARG_FP },
116776cad711SPaolo Bonzini { "cvtts/suc", FP(0x16,0x52C), BASE, ARG_FPZ1 },
116876cad711SPaolo Bonzini { "cvttq/svc", FP(0x16,0x52F), BASE, ARG_FPZ1 },
116976cad711SPaolo Bonzini { "adds/sum", FP(0x16,0x540), BASE, ARG_FP },
117076cad711SPaolo Bonzini { "subs/sum", FP(0x16,0x541), BASE, ARG_FP },
117176cad711SPaolo Bonzini { "muls/sum", FP(0x16,0x542), BASE, ARG_FP },
117276cad711SPaolo Bonzini { "divs/sum", FP(0x16,0x543), BASE, ARG_FP },
117376cad711SPaolo Bonzini { "addt/sum", FP(0x16,0x560), BASE, ARG_FP },
117476cad711SPaolo Bonzini { "subt/sum", FP(0x16,0x561), BASE, ARG_FP },
117576cad711SPaolo Bonzini { "mult/sum", FP(0x16,0x562), BASE, ARG_FP },
117676cad711SPaolo Bonzini { "divt/sum", FP(0x16,0x563), BASE, ARG_FP },
117776cad711SPaolo Bonzini { "cvtts/sum", FP(0x16,0x56C), BASE, ARG_FPZ1 },
117876cad711SPaolo Bonzini { "cvttq/svm", FP(0x16,0x56F), BASE, ARG_FPZ1 },
117976cad711SPaolo Bonzini { "adds/su", FP(0x16,0x580), BASE, ARG_FP },
118076cad711SPaolo Bonzini { "negs/su", FP(0x16,0x581), BASE, ARG_FPZ1 }, /* pseudo */
118176cad711SPaolo Bonzini { "subs/su", FP(0x16,0x581), BASE, ARG_FP },
118276cad711SPaolo Bonzini { "muls/su", FP(0x16,0x582), BASE, ARG_FP },
118376cad711SPaolo Bonzini { "divs/su", FP(0x16,0x583), BASE, ARG_FP },
118476cad711SPaolo Bonzini { "addt/su", FP(0x16,0x5A0), BASE, ARG_FP },
118576cad711SPaolo Bonzini { "negt/su", FP(0x16,0x5A1), BASE, ARG_FPZ1 }, /* pseudo */
118676cad711SPaolo Bonzini { "subt/su", FP(0x16,0x5A1), BASE, ARG_FP },
118776cad711SPaolo Bonzini { "mult/su", FP(0x16,0x5A2), BASE, ARG_FP },
118876cad711SPaolo Bonzini { "divt/su", FP(0x16,0x5A3), BASE, ARG_FP },
118976cad711SPaolo Bonzini { "cmptun/su", FP(0x16,0x5A4), BASE, ARG_FP },
119076cad711SPaolo Bonzini { "cmpteq/su", FP(0x16,0x5A5), BASE, ARG_FP },
119176cad711SPaolo Bonzini { "cmptlt/su", FP(0x16,0x5A6), BASE, ARG_FP },
119276cad711SPaolo Bonzini { "cmptle/su", FP(0x16,0x5A7), BASE, ARG_FP },
119376cad711SPaolo Bonzini { "cvtts/su", FP(0x16,0x5AC), BASE, ARG_FPZ1 },
119476cad711SPaolo Bonzini { "cvttq/sv", FP(0x16,0x5AF), BASE, ARG_FPZ1 },
119576cad711SPaolo Bonzini { "adds/sud", FP(0x16,0x5C0), BASE, ARG_FP },
119676cad711SPaolo Bonzini { "subs/sud", FP(0x16,0x5C1), BASE, ARG_FP },
119776cad711SPaolo Bonzini { "muls/sud", FP(0x16,0x5C2), BASE, ARG_FP },
119876cad711SPaolo Bonzini { "divs/sud", FP(0x16,0x5C3), BASE, ARG_FP },
119976cad711SPaolo Bonzini { "addt/sud", FP(0x16,0x5E0), BASE, ARG_FP },
120076cad711SPaolo Bonzini { "subt/sud", FP(0x16,0x5E1), BASE, ARG_FP },
120176cad711SPaolo Bonzini { "mult/sud", FP(0x16,0x5E2), BASE, ARG_FP },
120276cad711SPaolo Bonzini { "divt/sud", FP(0x16,0x5E3), BASE, ARG_FP },
120376cad711SPaolo Bonzini { "cvtts/sud", FP(0x16,0x5EC), BASE, ARG_FPZ1 },
120476cad711SPaolo Bonzini { "cvttq/svd", FP(0x16,0x5EF), BASE, ARG_FPZ1 },
120576cad711SPaolo Bonzini { "cvtst/s", FP(0x16,0x6AC), BASE, ARG_FPZ1 },
120676cad711SPaolo Bonzini { "adds/suic", FP(0x16,0x700), BASE, ARG_FP },
120776cad711SPaolo Bonzini { "subs/suic", FP(0x16,0x701), BASE, ARG_FP },
120876cad711SPaolo Bonzini { "muls/suic", FP(0x16,0x702), BASE, ARG_FP },
120976cad711SPaolo Bonzini { "divs/suic", FP(0x16,0x703), BASE, ARG_FP },
121076cad711SPaolo Bonzini { "addt/suic", FP(0x16,0x720), BASE, ARG_FP },
121176cad711SPaolo Bonzini { "subt/suic", FP(0x16,0x721), BASE, ARG_FP },
121276cad711SPaolo Bonzini { "mult/suic", FP(0x16,0x722), BASE, ARG_FP },
121376cad711SPaolo Bonzini { "divt/suic", FP(0x16,0x723), BASE, ARG_FP },
121476cad711SPaolo Bonzini { "cvtts/suic", FP(0x16,0x72C), BASE, ARG_FPZ1 },
121576cad711SPaolo Bonzini { "cvttq/svic", FP(0x16,0x72F), BASE, ARG_FPZ1 },
121676cad711SPaolo Bonzini { "cvtqs/suic", FP(0x16,0x73C), BASE, ARG_FPZ1 },
121776cad711SPaolo Bonzini { "cvtqt/suic", FP(0x16,0x73E), BASE, ARG_FPZ1 },
121876cad711SPaolo Bonzini { "adds/suim", FP(0x16,0x740), BASE, ARG_FP },
121976cad711SPaolo Bonzini { "subs/suim", FP(0x16,0x741), BASE, ARG_FP },
122076cad711SPaolo Bonzini { "muls/suim", FP(0x16,0x742), BASE, ARG_FP },
122176cad711SPaolo Bonzini { "divs/suim", FP(0x16,0x743), BASE, ARG_FP },
122276cad711SPaolo Bonzini { "addt/suim", FP(0x16,0x760), BASE, ARG_FP },
122376cad711SPaolo Bonzini { "subt/suim", FP(0x16,0x761), BASE, ARG_FP },
122476cad711SPaolo Bonzini { "mult/suim", FP(0x16,0x762), BASE, ARG_FP },
122576cad711SPaolo Bonzini { "divt/suim", FP(0x16,0x763), BASE, ARG_FP },
122676cad711SPaolo Bonzini { "cvtts/suim", FP(0x16,0x76C), BASE, ARG_FPZ1 },
122776cad711SPaolo Bonzini { "cvttq/svim", FP(0x16,0x76F), BASE, ARG_FPZ1 },
122876cad711SPaolo Bonzini { "cvtqs/suim", FP(0x16,0x77C), BASE, ARG_FPZ1 },
122976cad711SPaolo Bonzini { "cvtqt/suim", FP(0x16,0x77E), BASE, ARG_FPZ1 },
123076cad711SPaolo Bonzini { "adds/sui", FP(0x16,0x780), BASE, ARG_FP },
123176cad711SPaolo Bonzini { "negs/sui", FP(0x16,0x781), BASE, ARG_FPZ1 }, /* pseudo */
123276cad711SPaolo Bonzini { "subs/sui", FP(0x16,0x781), BASE, ARG_FP },
123376cad711SPaolo Bonzini { "muls/sui", FP(0x16,0x782), BASE, ARG_FP },
123476cad711SPaolo Bonzini { "divs/sui", FP(0x16,0x783), BASE, ARG_FP },
123576cad711SPaolo Bonzini { "addt/sui", FP(0x16,0x7A0), BASE, ARG_FP },
123676cad711SPaolo Bonzini { "negt/sui", FP(0x16,0x7A1), BASE, ARG_FPZ1 }, /* pseudo */
123776cad711SPaolo Bonzini { "subt/sui", FP(0x16,0x7A1), BASE, ARG_FP },
123876cad711SPaolo Bonzini { "mult/sui", FP(0x16,0x7A2), BASE, ARG_FP },
123976cad711SPaolo Bonzini { "divt/sui", FP(0x16,0x7A3), BASE, ARG_FP },
124076cad711SPaolo Bonzini { "cvtts/sui", FP(0x16,0x7AC), BASE, ARG_FPZ1 },
124176cad711SPaolo Bonzini { "cvttq/svi", FP(0x16,0x7AF), BASE, ARG_FPZ1 },
124276cad711SPaolo Bonzini { "cvtqs/sui", FP(0x16,0x7BC), BASE, ARG_FPZ1 },
124376cad711SPaolo Bonzini { "cvtqt/sui", FP(0x16,0x7BE), BASE, ARG_FPZ1 },
124476cad711SPaolo Bonzini { "adds/suid", FP(0x16,0x7C0), BASE, ARG_FP },
124576cad711SPaolo Bonzini { "subs/suid", FP(0x16,0x7C1), BASE, ARG_FP },
124676cad711SPaolo Bonzini { "muls/suid", FP(0x16,0x7C2), BASE, ARG_FP },
124776cad711SPaolo Bonzini { "divs/suid", FP(0x16,0x7C3), BASE, ARG_FP },
124876cad711SPaolo Bonzini { "addt/suid", FP(0x16,0x7E0), BASE, ARG_FP },
124976cad711SPaolo Bonzini { "subt/suid", FP(0x16,0x7E1), BASE, ARG_FP },
125076cad711SPaolo Bonzini { "mult/suid", FP(0x16,0x7E2), BASE, ARG_FP },
125176cad711SPaolo Bonzini { "divt/suid", FP(0x16,0x7E3), BASE, ARG_FP },
125276cad711SPaolo Bonzini { "cvtts/suid", FP(0x16,0x7EC), BASE, ARG_FPZ1 },
125376cad711SPaolo Bonzini { "cvttq/svid", FP(0x16,0x7EF), BASE, ARG_FPZ1 },
125476cad711SPaolo Bonzini { "cvtqs/suid", FP(0x16,0x7FC), BASE, ARG_FPZ1 },
125576cad711SPaolo Bonzini { "cvtqt/suid", FP(0x16,0x7FE), BASE, ARG_FPZ1 },
125676cad711SPaolo Bonzini
125776cad711SPaolo Bonzini { "cvtlq", FP(0x17,0x010), BASE, ARG_FPZ1 },
125876cad711SPaolo Bonzini { "fnop", FP(0x17,0x020), BASE, { ZA, ZB, ZC } }, /* pseudo */
125976cad711SPaolo Bonzini { "fclr", FP(0x17,0x020), BASE, { ZA, ZB, FC } }, /* pseudo */
126076cad711SPaolo Bonzini { "fabs", FP(0x17,0x020), BASE, ARG_FPZ1 }, /* pseudo */
126176cad711SPaolo Bonzini { "fmov", FP(0x17,0x020), BASE, { FA, RBA, FC } }, /* pseudo */
126276cad711SPaolo Bonzini { "cpys", FP(0x17,0x020), BASE, ARG_FP },
126376cad711SPaolo Bonzini { "fneg", FP(0x17,0x021), BASE, { FA, RBA, FC } }, /* pseudo */
126476cad711SPaolo Bonzini { "cpysn", FP(0x17,0x021), BASE, ARG_FP },
126576cad711SPaolo Bonzini { "cpyse", FP(0x17,0x022), BASE, ARG_FP },
126676cad711SPaolo Bonzini { "mt_fpcr", FP(0x17,0x024), BASE, { FA, RBA, RCA } },
126776cad711SPaolo Bonzini { "mf_fpcr", FP(0x17,0x025), BASE, { FA, RBA, RCA } },
126876cad711SPaolo Bonzini { "fcmoveq", FP(0x17,0x02A), BASE, ARG_FP },
126976cad711SPaolo Bonzini { "fcmovne", FP(0x17,0x02B), BASE, ARG_FP },
127076cad711SPaolo Bonzini { "fcmovlt", FP(0x17,0x02C), BASE, ARG_FP },
127176cad711SPaolo Bonzini { "fcmovge", FP(0x17,0x02D), BASE, ARG_FP },
127276cad711SPaolo Bonzini { "fcmovle", FP(0x17,0x02E), BASE, ARG_FP },
127376cad711SPaolo Bonzini { "fcmovgt", FP(0x17,0x02F), BASE, ARG_FP },
127476cad711SPaolo Bonzini { "cvtql", FP(0x17,0x030), BASE, ARG_FPZ1 },
127576cad711SPaolo Bonzini { "cvtql/v", FP(0x17,0x130), BASE, ARG_FPZ1 },
127676cad711SPaolo Bonzini { "cvtql/sv", FP(0x17,0x530), BASE, ARG_FPZ1 },
127776cad711SPaolo Bonzini
127876cad711SPaolo Bonzini { "trapb", MFC(0x18,0x0000), BASE, ARG_NONE },
127976cad711SPaolo Bonzini { "draint", MFC(0x18,0x0000), BASE, ARG_NONE }, /* alias */
128076cad711SPaolo Bonzini { "excb", MFC(0x18,0x0400), BASE, ARG_NONE },
128176cad711SPaolo Bonzini { "mb", MFC(0x18,0x4000), BASE, ARG_NONE },
128276cad711SPaolo Bonzini { "wmb", MFC(0x18,0x4400), BASE, ARG_NONE },
128376cad711SPaolo Bonzini { "fetch", MFC(0x18,0x8000), BASE, { ZA, PRB } },
128476cad711SPaolo Bonzini { "fetch_m", MFC(0x18,0xA000), BASE, { ZA, PRB } },
128576cad711SPaolo Bonzini { "rpcc", MFC(0x18,0xC000), BASE, { RA } },
128676cad711SPaolo Bonzini { "rc", MFC(0x18,0xE000), BASE, { RA } },
128776cad711SPaolo Bonzini { "ecb", MFC(0x18,0xE800), BASE, { ZA, PRB } }, /* ev56 una */
128876cad711SPaolo Bonzini { "rs", MFC(0x18,0xF000), BASE, { RA } },
128976cad711SPaolo Bonzini { "wh64", MFC(0x18,0xF800), BASE, { ZA, PRB } }, /* ev56 una */
129076cad711SPaolo Bonzini { "wh64en", MFC(0x18,0xFC00), BASE, { ZA, PRB } }, /* ev7 una */
129176cad711SPaolo Bonzini
129276cad711SPaolo Bonzini { "hw_mfpr", OPR(0x19,0x00), EV4, { RA, RBA, EV4EXTHWINDEX } },
129376cad711SPaolo Bonzini { "hw_mfpr", OP(0x19), OP_MASK, EV5, { RA, RBA, EV5HWINDEX } },
129476cad711SPaolo Bonzini { "hw_mfpr", OP(0x19), OP_MASK, EV6, { RA, ZB, EV6HWINDEX } },
129576cad711SPaolo Bonzini { "hw_mfpr/i", OPR(0x19,0x01), EV4, ARG_EV4HWMPR },
129676cad711SPaolo Bonzini { "hw_mfpr/a", OPR(0x19,0x02), EV4, ARG_EV4HWMPR },
129776cad711SPaolo Bonzini { "hw_mfpr/ai", OPR(0x19,0x03), EV4, ARG_EV4HWMPR },
129876cad711SPaolo Bonzini { "hw_mfpr/p", OPR(0x19,0x04), EV4, ARG_EV4HWMPR },
129976cad711SPaolo Bonzini { "hw_mfpr/pi", OPR(0x19,0x05), EV4, ARG_EV4HWMPR },
130076cad711SPaolo Bonzini { "hw_mfpr/pa", OPR(0x19,0x06), EV4, ARG_EV4HWMPR },
130176cad711SPaolo Bonzini { "hw_mfpr/pai", OPR(0x19,0x07), EV4, ARG_EV4HWMPR },
130276cad711SPaolo Bonzini { "pal19", PCD(0x19), BASE, ARG_PCD },
130376cad711SPaolo Bonzini
130476cad711SPaolo Bonzini { "jmp", MBR_(0x1A,0), MBR_MASK | 0x3FFF, /* pseudo */
130576cad711SPaolo Bonzini BASE, { ZA, CPRB } },
130676cad711SPaolo Bonzini { "jmp", MBR(0x1A,0), BASE, { RA, CPRB, JMPHINT } },
130776cad711SPaolo Bonzini { "jsr", MBR(0x1A,1), BASE, { RA, CPRB, JMPHINT } },
130876cad711SPaolo Bonzini { "ret", MBR_(0x1A,2) | (31 << 21) | (26 << 16) | 1,/* pseudo */
130976cad711SPaolo Bonzini 0xFFFFFFFF, BASE, { 0 } },
131076cad711SPaolo Bonzini { "ret", MBR(0x1A,2), BASE, { RA, CPRB, RETHINT } },
131176cad711SPaolo Bonzini { "jcr", MBR(0x1A,3), BASE, { RA, CPRB, RETHINT } }, /* alias */
131276cad711SPaolo Bonzini { "jsr_coroutine", MBR(0x1A,3), BASE, { RA, CPRB, RETHINT } },
131376cad711SPaolo Bonzini
131476cad711SPaolo Bonzini { "hw_ldl", EV4HWMEM(0x1B,0x0), EV4, ARG_EV4HWMEM },
131576cad711SPaolo Bonzini { "hw_ldl", EV5HWMEM(0x1B,0x00), EV5, ARG_EV5HWMEM },
131676cad711SPaolo Bonzini { "hw_ldl", EV6HWMEM(0x1B,0x8), EV6, ARG_EV6HWMEM },
131776cad711SPaolo Bonzini { "hw_ldl/a", EV4HWMEM(0x1B,0x4), EV4, ARG_EV4HWMEM },
131876cad711SPaolo Bonzini { "hw_ldl/a", EV5HWMEM(0x1B,0x10), EV5, ARG_EV5HWMEM },
131976cad711SPaolo Bonzini { "hw_ldl/a", EV6HWMEM(0x1B,0xC), EV6, ARG_EV6HWMEM },
132076cad711SPaolo Bonzini { "hw_ldl/al", EV5HWMEM(0x1B,0x11), EV5, ARG_EV5HWMEM },
132176cad711SPaolo Bonzini { "hw_ldl/ar", EV4HWMEM(0x1B,0x6), EV4, ARG_EV4HWMEM },
132276cad711SPaolo Bonzini { "hw_ldl/av", EV5HWMEM(0x1B,0x12), EV5, ARG_EV5HWMEM },
132376cad711SPaolo Bonzini { "hw_ldl/avl", EV5HWMEM(0x1B,0x13), EV5, ARG_EV5HWMEM },
132476cad711SPaolo Bonzini { "hw_ldl/aw", EV5HWMEM(0x1B,0x18), EV5, ARG_EV5HWMEM },
132576cad711SPaolo Bonzini { "hw_ldl/awl", EV5HWMEM(0x1B,0x19), EV5, ARG_EV5HWMEM },
132676cad711SPaolo Bonzini { "hw_ldl/awv", EV5HWMEM(0x1B,0x1a), EV5, ARG_EV5HWMEM },
132776cad711SPaolo Bonzini { "hw_ldl/awvl", EV5HWMEM(0x1B,0x1b), EV5, ARG_EV5HWMEM },
132876cad711SPaolo Bonzini { "hw_ldl/l", EV5HWMEM(0x1B,0x01), EV5, ARG_EV5HWMEM },
132976cad711SPaolo Bonzini { "hw_ldl/p", EV4HWMEM(0x1B,0x8), EV4, ARG_EV4HWMEM },
133076cad711SPaolo Bonzini { "hw_ldl/p", EV5HWMEM(0x1B,0x20), EV5, ARG_EV5HWMEM },
133176cad711SPaolo Bonzini { "hw_ldl/p", EV6HWMEM(0x1B,0x0), EV6, ARG_EV6HWMEM },
133276cad711SPaolo Bonzini { "hw_ldl/pa", EV4HWMEM(0x1B,0xC), EV4, ARG_EV4HWMEM },
133376cad711SPaolo Bonzini { "hw_ldl/pa", EV5HWMEM(0x1B,0x30), EV5, ARG_EV5HWMEM },
133476cad711SPaolo Bonzini { "hw_ldl/pal", EV5HWMEM(0x1B,0x31), EV5, ARG_EV5HWMEM },
133576cad711SPaolo Bonzini { "hw_ldl/par", EV4HWMEM(0x1B,0xE), EV4, ARG_EV4HWMEM },
133676cad711SPaolo Bonzini { "hw_ldl/pav", EV5HWMEM(0x1B,0x32), EV5, ARG_EV5HWMEM },
133776cad711SPaolo Bonzini { "hw_ldl/pavl", EV5HWMEM(0x1B,0x33), EV5, ARG_EV5HWMEM },
133876cad711SPaolo Bonzini { "hw_ldl/paw", EV5HWMEM(0x1B,0x38), EV5, ARG_EV5HWMEM },
133976cad711SPaolo Bonzini { "hw_ldl/pawl", EV5HWMEM(0x1B,0x39), EV5, ARG_EV5HWMEM },
134076cad711SPaolo Bonzini { "hw_ldl/pawv", EV5HWMEM(0x1B,0x3a), EV5, ARG_EV5HWMEM },
134176cad711SPaolo Bonzini { "hw_ldl/pawvl", EV5HWMEM(0x1B,0x3b), EV5, ARG_EV5HWMEM },
134276cad711SPaolo Bonzini { "hw_ldl/pl", EV5HWMEM(0x1B,0x21), EV5, ARG_EV5HWMEM },
134376cad711SPaolo Bonzini { "hw_ldl/pr", EV4HWMEM(0x1B,0xA), EV4, ARG_EV4HWMEM },
134476cad711SPaolo Bonzini { "hw_ldl/pv", EV5HWMEM(0x1B,0x22), EV5, ARG_EV5HWMEM },
134576cad711SPaolo Bonzini { "hw_ldl/pvl", EV5HWMEM(0x1B,0x23), EV5, ARG_EV5HWMEM },
134676cad711SPaolo Bonzini { "hw_ldl/pw", EV5HWMEM(0x1B,0x28), EV5, ARG_EV5HWMEM },
134776cad711SPaolo Bonzini { "hw_ldl/pwl", EV5HWMEM(0x1B,0x29), EV5, ARG_EV5HWMEM },
134876cad711SPaolo Bonzini { "hw_ldl/pwv", EV5HWMEM(0x1B,0x2a), EV5, ARG_EV5HWMEM },
134976cad711SPaolo Bonzini { "hw_ldl/pwvl", EV5HWMEM(0x1B,0x2b), EV5, ARG_EV5HWMEM },
135076cad711SPaolo Bonzini { "hw_ldl/r", EV4HWMEM(0x1B,0x2), EV4, ARG_EV4HWMEM },
135176cad711SPaolo Bonzini { "hw_ldl/v", EV5HWMEM(0x1B,0x02), EV5, ARG_EV5HWMEM },
135276cad711SPaolo Bonzini { "hw_ldl/v", EV6HWMEM(0x1B,0x4), EV6, ARG_EV6HWMEM },
135376cad711SPaolo Bonzini { "hw_ldl/vl", EV5HWMEM(0x1B,0x03), EV5, ARG_EV5HWMEM },
135476cad711SPaolo Bonzini { "hw_ldl/w", EV5HWMEM(0x1B,0x08), EV5, ARG_EV5HWMEM },
135576cad711SPaolo Bonzini { "hw_ldl/w", EV6HWMEM(0x1B,0xA), EV6, ARG_EV6HWMEM },
135676cad711SPaolo Bonzini { "hw_ldl/wa", EV6HWMEM(0x1B,0xE), EV6, ARG_EV6HWMEM },
135776cad711SPaolo Bonzini { "hw_ldl/wl", EV5HWMEM(0x1B,0x09), EV5, ARG_EV5HWMEM },
135876cad711SPaolo Bonzini { "hw_ldl/wv", EV5HWMEM(0x1B,0x0a), EV5, ARG_EV5HWMEM },
135976cad711SPaolo Bonzini { "hw_ldl/wvl", EV5HWMEM(0x1B,0x0b), EV5, ARG_EV5HWMEM },
136076cad711SPaolo Bonzini { "hw_ldl_l", EV5HWMEM(0x1B,0x01), EV5, ARG_EV5HWMEM },
136176cad711SPaolo Bonzini { "hw_ldl_l/a", EV5HWMEM(0x1B,0x11), EV5, ARG_EV5HWMEM },
136276cad711SPaolo Bonzini { "hw_ldl_l/av", EV5HWMEM(0x1B,0x13), EV5, ARG_EV5HWMEM },
136376cad711SPaolo Bonzini { "hw_ldl_l/aw", EV5HWMEM(0x1B,0x19), EV5, ARG_EV5HWMEM },
136476cad711SPaolo Bonzini { "hw_ldl_l/awv", EV5HWMEM(0x1B,0x1b), EV5, ARG_EV5HWMEM },
136576cad711SPaolo Bonzini { "hw_ldl_l/p", EV5HWMEM(0x1B,0x21), EV5, ARG_EV5HWMEM },
136676cad711SPaolo Bonzini { "hw_ldl_l/p", EV6HWMEM(0x1B,0x2), EV6, ARG_EV6HWMEM },
136776cad711SPaolo Bonzini { "hw_ldl_l/pa", EV5HWMEM(0x1B,0x31), EV5, ARG_EV5HWMEM },
136876cad711SPaolo Bonzini { "hw_ldl_l/pav", EV5HWMEM(0x1B,0x33), EV5, ARG_EV5HWMEM },
136976cad711SPaolo Bonzini { "hw_ldl_l/paw", EV5HWMEM(0x1B,0x39), EV5, ARG_EV5HWMEM },
137076cad711SPaolo Bonzini { "hw_ldl_l/pawv", EV5HWMEM(0x1B,0x3b), EV5, ARG_EV5HWMEM },
137176cad711SPaolo Bonzini { "hw_ldl_l/pv", EV5HWMEM(0x1B,0x23), EV5, ARG_EV5HWMEM },
137276cad711SPaolo Bonzini { "hw_ldl_l/pw", EV5HWMEM(0x1B,0x29), EV5, ARG_EV5HWMEM },
137376cad711SPaolo Bonzini { "hw_ldl_l/pwv", EV5HWMEM(0x1B,0x2b), EV5, ARG_EV5HWMEM },
137476cad711SPaolo Bonzini { "hw_ldl_l/v", EV5HWMEM(0x1B,0x03), EV5, ARG_EV5HWMEM },
137576cad711SPaolo Bonzini { "hw_ldl_l/w", EV5HWMEM(0x1B,0x09), EV5, ARG_EV5HWMEM },
137676cad711SPaolo Bonzini { "hw_ldl_l/wv", EV5HWMEM(0x1B,0x0b), EV5, ARG_EV5HWMEM },
137776cad711SPaolo Bonzini { "hw_ldq", EV4HWMEM(0x1B,0x1), EV4, ARG_EV4HWMEM },
137876cad711SPaolo Bonzini { "hw_ldq", EV5HWMEM(0x1B,0x04), EV5, ARG_EV5HWMEM },
137976cad711SPaolo Bonzini { "hw_ldq", EV6HWMEM(0x1B,0x9), EV6, ARG_EV6HWMEM },
138076cad711SPaolo Bonzini { "hw_ldq/a", EV4HWMEM(0x1B,0x5), EV4, ARG_EV4HWMEM },
138176cad711SPaolo Bonzini { "hw_ldq/a", EV5HWMEM(0x1B,0x14), EV5, ARG_EV5HWMEM },
138276cad711SPaolo Bonzini { "hw_ldq/a", EV6HWMEM(0x1B,0xD), EV6, ARG_EV6HWMEM },
138376cad711SPaolo Bonzini { "hw_ldq/al", EV5HWMEM(0x1B,0x15), EV5, ARG_EV5HWMEM },
138476cad711SPaolo Bonzini { "hw_ldq/ar", EV4HWMEM(0x1B,0x7), EV4, ARG_EV4HWMEM },
138576cad711SPaolo Bonzini { "hw_ldq/av", EV5HWMEM(0x1B,0x16), EV5, ARG_EV5HWMEM },
138676cad711SPaolo Bonzini { "hw_ldq/avl", EV5HWMEM(0x1B,0x17), EV5, ARG_EV5HWMEM },
138776cad711SPaolo Bonzini { "hw_ldq/aw", EV5HWMEM(0x1B,0x1c), EV5, ARG_EV5HWMEM },
138876cad711SPaolo Bonzini { "hw_ldq/awl", EV5HWMEM(0x1B,0x1d), EV5, ARG_EV5HWMEM },
138976cad711SPaolo Bonzini { "hw_ldq/awv", EV5HWMEM(0x1B,0x1e), EV5, ARG_EV5HWMEM },
139076cad711SPaolo Bonzini { "hw_ldq/awvl", EV5HWMEM(0x1B,0x1f), EV5, ARG_EV5HWMEM },
139176cad711SPaolo Bonzini { "hw_ldq/l", EV5HWMEM(0x1B,0x05), EV5, ARG_EV5HWMEM },
139276cad711SPaolo Bonzini { "hw_ldq/p", EV4HWMEM(0x1B,0x9), EV4, ARG_EV4HWMEM },
139376cad711SPaolo Bonzini { "hw_ldq/p", EV5HWMEM(0x1B,0x24), EV5, ARG_EV5HWMEM },
139476cad711SPaolo Bonzini { "hw_ldq/p", EV6HWMEM(0x1B,0x1), EV6, ARG_EV6HWMEM },
139576cad711SPaolo Bonzini { "hw_ldq/pa", EV4HWMEM(0x1B,0xD), EV4, ARG_EV4HWMEM },
139676cad711SPaolo Bonzini { "hw_ldq/pa", EV5HWMEM(0x1B,0x34), EV5, ARG_EV5HWMEM },
139776cad711SPaolo Bonzini { "hw_ldq/pal", EV5HWMEM(0x1B,0x35), EV5, ARG_EV5HWMEM },
139876cad711SPaolo Bonzini { "hw_ldq/par", EV4HWMEM(0x1B,0xF), EV4, ARG_EV4HWMEM },
139976cad711SPaolo Bonzini { "hw_ldq/pav", EV5HWMEM(0x1B,0x36), EV5, ARG_EV5HWMEM },
140076cad711SPaolo Bonzini { "hw_ldq/pavl", EV5HWMEM(0x1B,0x37), EV5, ARG_EV5HWMEM },
140176cad711SPaolo Bonzini { "hw_ldq/paw", EV5HWMEM(0x1B,0x3c), EV5, ARG_EV5HWMEM },
140276cad711SPaolo Bonzini { "hw_ldq/pawl", EV5HWMEM(0x1B,0x3d), EV5, ARG_EV5HWMEM },
140376cad711SPaolo Bonzini { "hw_ldq/pawv", EV5HWMEM(0x1B,0x3e), EV5, ARG_EV5HWMEM },
140476cad711SPaolo Bonzini { "hw_ldq/pawvl", EV5HWMEM(0x1B,0x3f), EV5, ARG_EV5HWMEM },
140576cad711SPaolo Bonzini { "hw_ldq/pl", EV5HWMEM(0x1B,0x25), EV5, ARG_EV5HWMEM },
140676cad711SPaolo Bonzini { "hw_ldq/pr", EV4HWMEM(0x1B,0xB), EV4, ARG_EV4HWMEM },
140776cad711SPaolo Bonzini { "hw_ldq/pv", EV5HWMEM(0x1B,0x26), EV5, ARG_EV5HWMEM },
140876cad711SPaolo Bonzini { "hw_ldq/pvl", EV5HWMEM(0x1B,0x27), EV5, ARG_EV5HWMEM },
140976cad711SPaolo Bonzini { "hw_ldq/pw", EV5HWMEM(0x1B,0x2c), EV5, ARG_EV5HWMEM },
141076cad711SPaolo Bonzini { "hw_ldq/pwl", EV5HWMEM(0x1B,0x2d), EV5, ARG_EV5HWMEM },
141176cad711SPaolo Bonzini { "hw_ldq/pwv", EV5HWMEM(0x1B,0x2e), EV5, ARG_EV5HWMEM },
141276cad711SPaolo Bonzini { "hw_ldq/pwvl", EV5HWMEM(0x1B,0x2f), EV5, ARG_EV5HWMEM },
141376cad711SPaolo Bonzini { "hw_ldq/r", EV4HWMEM(0x1B,0x3), EV4, ARG_EV4HWMEM },
141476cad711SPaolo Bonzini { "hw_ldq/v", EV5HWMEM(0x1B,0x06), EV5, ARG_EV5HWMEM },
141576cad711SPaolo Bonzini { "hw_ldq/v", EV6HWMEM(0x1B,0x5), EV6, ARG_EV6HWMEM },
141676cad711SPaolo Bonzini { "hw_ldq/vl", EV5HWMEM(0x1B,0x07), EV5, ARG_EV5HWMEM },
141776cad711SPaolo Bonzini { "hw_ldq/w", EV5HWMEM(0x1B,0x0c), EV5, ARG_EV5HWMEM },
141876cad711SPaolo Bonzini { "hw_ldq/w", EV6HWMEM(0x1B,0xB), EV6, ARG_EV6HWMEM },
141976cad711SPaolo Bonzini { "hw_ldq/wa", EV6HWMEM(0x1B,0xF), EV6, ARG_EV6HWMEM },
142076cad711SPaolo Bonzini { "hw_ldq/wl", EV5HWMEM(0x1B,0x0d), EV5, ARG_EV5HWMEM },
142176cad711SPaolo Bonzini { "hw_ldq/wv", EV5HWMEM(0x1B,0x0e), EV5, ARG_EV5HWMEM },
142276cad711SPaolo Bonzini { "hw_ldq/wvl", EV5HWMEM(0x1B,0x0f), EV5, ARG_EV5HWMEM },
142376cad711SPaolo Bonzini { "hw_ldq_l", EV5HWMEM(0x1B,0x05), EV5, ARG_EV5HWMEM },
142476cad711SPaolo Bonzini { "hw_ldq_l/a", EV5HWMEM(0x1B,0x15), EV5, ARG_EV5HWMEM },
142576cad711SPaolo Bonzini { "hw_ldq_l/av", EV5HWMEM(0x1B,0x17), EV5, ARG_EV5HWMEM },
142676cad711SPaolo Bonzini { "hw_ldq_l/aw", EV5HWMEM(0x1B,0x1d), EV5, ARG_EV5HWMEM },
142776cad711SPaolo Bonzini { "hw_ldq_l/awv", EV5HWMEM(0x1B,0x1f), EV5, ARG_EV5HWMEM },
142876cad711SPaolo Bonzini { "hw_ldq_l/p", EV5HWMEM(0x1B,0x25), EV5, ARG_EV5HWMEM },
142976cad711SPaolo Bonzini { "hw_ldq_l/p", EV6HWMEM(0x1B,0x3), EV6, ARG_EV6HWMEM },
143076cad711SPaolo Bonzini { "hw_ldq_l/pa", EV5HWMEM(0x1B,0x35), EV5, ARG_EV5HWMEM },
143176cad711SPaolo Bonzini { "hw_ldq_l/pav", EV5HWMEM(0x1B,0x37), EV5, ARG_EV5HWMEM },
143276cad711SPaolo Bonzini { "hw_ldq_l/paw", EV5HWMEM(0x1B,0x3d), EV5, ARG_EV5HWMEM },
143376cad711SPaolo Bonzini { "hw_ldq_l/pawv", EV5HWMEM(0x1B,0x3f), EV5, ARG_EV5HWMEM },
143476cad711SPaolo Bonzini { "hw_ldq_l/pv", EV5HWMEM(0x1B,0x27), EV5, ARG_EV5HWMEM },
143576cad711SPaolo Bonzini { "hw_ldq_l/pw", EV5HWMEM(0x1B,0x2d), EV5, ARG_EV5HWMEM },
143676cad711SPaolo Bonzini { "hw_ldq_l/pwv", EV5HWMEM(0x1B,0x2f), EV5, ARG_EV5HWMEM },
143776cad711SPaolo Bonzini { "hw_ldq_l/v", EV5HWMEM(0x1B,0x07), EV5, ARG_EV5HWMEM },
143876cad711SPaolo Bonzini { "hw_ldq_l/w", EV5HWMEM(0x1B,0x0d), EV5, ARG_EV5HWMEM },
143976cad711SPaolo Bonzini { "hw_ldq_l/wv", EV5HWMEM(0x1B,0x0f), EV5, ARG_EV5HWMEM },
144076cad711SPaolo Bonzini { "hw_ld", EV4HWMEM(0x1B,0x0), EV4, ARG_EV4HWMEM },
144176cad711SPaolo Bonzini { "hw_ld", EV5HWMEM(0x1B,0x00), EV5, ARG_EV5HWMEM },
144276cad711SPaolo Bonzini { "hw_ld/a", EV4HWMEM(0x1B,0x4), EV4, ARG_EV4HWMEM },
144376cad711SPaolo Bonzini { "hw_ld/a", EV5HWMEM(0x1B,0x10), EV5, ARG_EV5HWMEM },
144476cad711SPaolo Bonzini { "hw_ld/al", EV5HWMEM(0x1B,0x11), EV5, ARG_EV5HWMEM },
144576cad711SPaolo Bonzini { "hw_ld/aq", EV4HWMEM(0x1B,0x5), EV4, ARG_EV4HWMEM },
144676cad711SPaolo Bonzini { "hw_ld/aq", EV5HWMEM(0x1B,0x14), EV5, ARG_EV5HWMEM },
144776cad711SPaolo Bonzini { "hw_ld/aql", EV5HWMEM(0x1B,0x15), EV5, ARG_EV5HWMEM },
144876cad711SPaolo Bonzini { "hw_ld/aqv", EV5HWMEM(0x1B,0x16), EV5, ARG_EV5HWMEM },
144976cad711SPaolo Bonzini { "hw_ld/aqvl", EV5HWMEM(0x1B,0x17), EV5, ARG_EV5HWMEM },
145076cad711SPaolo Bonzini { "hw_ld/ar", EV4HWMEM(0x1B,0x6), EV4, ARG_EV4HWMEM },
145176cad711SPaolo Bonzini { "hw_ld/arq", EV4HWMEM(0x1B,0x7), EV4, ARG_EV4HWMEM },
145276cad711SPaolo Bonzini { "hw_ld/av", EV5HWMEM(0x1B,0x12), EV5, ARG_EV5HWMEM },
145376cad711SPaolo Bonzini { "hw_ld/avl", EV5HWMEM(0x1B,0x13), EV5, ARG_EV5HWMEM },
145476cad711SPaolo Bonzini { "hw_ld/aw", EV5HWMEM(0x1B,0x18), EV5, ARG_EV5HWMEM },
145576cad711SPaolo Bonzini { "hw_ld/awl", EV5HWMEM(0x1B,0x19), EV5, ARG_EV5HWMEM },
145676cad711SPaolo Bonzini { "hw_ld/awq", EV5HWMEM(0x1B,0x1c), EV5, ARG_EV5HWMEM },
145776cad711SPaolo Bonzini { "hw_ld/awql", EV5HWMEM(0x1B,0x1d), EV5, ARG_EV5HWMEM },
145876cad711SPaolo Bonzini { "hw_ld/awqv", EV5HWMEM(0x1B,0x1e), EV5, ARG_EV5HWMEM },
145976cad711SPaolo Bonzini { "hw_ld/awqvl", EV5HWMEM(0x1B,0x1f), EV5, ARG_EV5HWMEM },
146076cad711SPaolo Bonzini { "hw_ld/awv", EV5HWMEM(0x1B,0x1a), EV5, ARG_EV5HWMEM },
146176cad711SPaolo Bonzini { "hw_ld/awvl", EV5HWMEM(0x1B,0x1b), EV5, ARG_EV5HWMEM },
146276cad711SPaolo Bonzini { "hw_ld/l", EV5HWMEM(0x1B,0x01), EV5, ARG_EV5HWMEM },
146376cad711SPaolo Bonzini { "hw_ld/p", EV4HWMEM(0x1B,0x8), EV4, ARG_EV4HWMEM },
146476cad711SPaolo Bonzini { "hw_ld/p", EV5HWMEM(0x1B,0x20), EV5, ARG_EV5HWMEM },
146576cad711SPaolo Bonzini { "hw_ld/pa", EV4HWMEM(0x1B,0xC), EV4, ARG_EV4HWMEM },
146676cad711SPaolo Bonzini { "hw_ld/pa", EV5HWMEM(0x1B,0x30), EV5, ARG_EV5HWMEM },
146776cad711SPaolo Bonzini { "hw_ld/pal", EV5HWMEM(0x1B,0x31), EV5, ARG_EV5HWMEM },
146876cad711SPaolo Bonzini { "hw_ld/paq", EV4HWMEM(0x1B,0xD), EV4, ARG_EV4HWMEM },
146976cad711SPaolo Bonzini { "hw_ld/paq", EV5HWMEM(0x1B,0x34), EV5, ARG_EV5HWMEM },
147076cad711SPaolo Bonzini { "hw_ld/paql", EV5HWMEM(0x1B,0x35), EV5, ARG_EV5HWMEM },
147176cad711SPaolo Bonzini { "hw_ld/paqv", EV5HWMEM(0x1B,0x36), EV5, ARG_EV5HWMEM },
147276cad711SPaolo Bonzini { "hw_ld/paqvl", EV5HWMEM(0x1B,0x37), EV5, ARG_EV5HWMEM },
147376cad711SPaolo Bonzini { "hw_ld/par", EV4HWMEM(0x1B,0xE), EV4, ARG_EV4HWMEM },
147476cad711SPaolo Bonzini { "hw_ld/parq", EV4HWMEM(0x1B,0xF), EV4, ARG_EV4HWMEM },
147576cad711SPaolo Bonzini { "hw_ld/pav", EV5HWMEM(0x1B,0x32), EV5, ARG_EV5HWMEM },
147676cad711SPaolo Bonzini { "hw_ld/pavl", EV5HWMEM(0x1B,0x33), EV5, ARG_EV5HWMEM },
147776cad711SPaolo Bonzini { "hw_ld/paw", EV5HWMEM(0x1B,0x38), EV5, ARG_EV5HWMEM },
147876cad711SPaolo Bonzini { "hw_ld/pawl", EV5HWMEM(0x1B,0x39), EV5, ARG_EV5HWMEM },
147976cad711SPaolo Bonzini { "hw_ld/pawq", EV5HWMEM(0x1B,0x3c), EV5, ARG_EV5HWMEM },
148076cad711SPaolo Bonzini { "hw_ld/pawql", EV5HWMEM(0x1B,0x3d), EV5, ARG_EV5HWMEM },
148176cad711SPaolo Bonzini { "hw_ld/pawqv", EV5HWMEM(0x1B,0x3e), EV5, ARG_EV5HWMEM },
148276cad711SPaolo Bonzini { "hw_ld/pawqvl", EV5HWMEM(0x1B,0x3f), EV5, ARG_EV5HWMEM },
148376cad711SPaolo Bonzini { "hw_ld/pawv", EV5HWMEM(0x1B,0x3a), EV5, ARG_EV5HWMEM },
148476cad711SPaolo Bonzini { "hw_ld/pawvl", EV5HWMEM(0x1B,0x3b), EV5, ARG_EV5HWMEM },
148576cad711SPaolo Bonzini { "hw_ld/pl", EV5HWMEM(0x1B,0x21), EV5, ARG_EV5HWMEM },
148676cad711SPaolo Bonzini { "hw_ld/pq", EV4HWMEM(0x1B,0x9), EV4, ARG_EV4HWMEM },
148776cad711SPaolo Bonzini { "hw_ld/pq", EV5HWMEM(0x1B,0x24), EV5, ARG_EV5HWMEM },
148876cad711SPaolo Bonzini { "hw_ld/pql", EV5HWMEM(0x1B,0x25), EV5, ARG_EV5HWMEM },
148976cad711SPaolo Bonzini { "hw_ld/pqv", EV5HWMEM(0x1B,0x26), EV5, ARG_EV5HWMEM },
149076cad711SPaolo Bonzini { "hw_ld/pqvl", EV5HWMEM(0x1B,0x27), EV5, ARG_EV5HWMEM },
149176cad711SPaolo Bonzini { "hw_ld/pr", EV4HWMEM(0x1B,0xA), EV4, ARG_EV4HWMEM },
149276cad711SPaolo Bonzini { "hw_ld/prq", EV4HWMEM(0x1B,0xB), EV4, ARG_EV4HWMEM },
149376cad711SPaolo Bonzini { "hw_ld/pv", EV5HWMEM(0x1B,0x22), EV5, ARG_EV5HWMEM },
149476cad711SPaolo Bonzini { "hw_ld/pvl", EV5HWMEM(0x1B,0x23), EV5, ARG_EV5HWMEM },
149576cad711SPaolo Bonzini { "hw_ld/pw", EV5HWMEM(0x1B,0x28), EV5, ARG_EV5HWMEM },
149676cad711SPaolo Bonzini { "hw_ld/pwl", EV5HWMEM(0x1B,0x29), EV5, ARG_EV5HWMEM },
149776cad711SPaolo Bonzini { "hw_ld/pwq", EV5HWMEM(0x1B,0x2c), EV5, ARG_EV5HWMEM },
149876cad711SPaolo Bonzini { "hw_ld/pwql", EV5HWMEM(0x1B,0x2d), EV5, ARG_EV5HWMEM },
149976cad711SPaolo Bonzini { "hw_ld/pwqv", EV5HWMEM(0x1B,0x2e), EV5, ARG_EV5HWMEM },
150076cad711SPaolo Bonzini { "hw_ld/pwqvl", EV5HWMEM(0x1B,0x2f), EV5, ARG_EV5HWMEM },
150176cad711SPaolo Bonzini { "hw_ld/pwv", EV5HWMEM(0x1B,0x2a), EV5, ARG_EV5HWMEM },
150276cad711SPaolo Bonzini { "hw_ld/pwvl", EV5HWMEM(0x1B,0x2b), EV5, ARG_EV5HWMEM },
150376cad711SPaolo Bonzini { "hw_ld/q", EV4HWMEM(0x1B,0x1), EV4, ARG_EV4HWMEM },
150476cad711SPaolo Bonzini { "hw_ld/q", EV5HWMEM(0x1B,0x04), EV5, ARG_EV5HWMEM },
150576cad711SPaolo Bonzini { "hw_ld/ql", EV5HWMEM(0x1B,0x05), EV5, ARG_EV5HWMEM },
150676cad711SPaolo Bonzini { "hw_ld/qv", EV5HWMEM(0x1B,0x06), EV5, ARG_EV5HWMEM },
150776cad711SPaolo Bonzini { "hw_ld/qvl", EV5HWMEM(0x1B,0x07), EV5, ARG_EV5HWMEM },
150876cad711SPaolo Bonzini { "hw_ld/r", EV4HWMEM(0x1B,0x2), EV4, ARG_EV4HWMEM },
150976cad711SPaolo Bonzini { "hw_ld/rq", EV4HWMEM(0x1B,0x3), EV4, ARG_EV4HWMEM },
151076cad711SPaolo Bonzini { "hw_ld/v", EV5HWMEM(0x1B,0x02), EV5, ARG_EV5HWMEM },
151176cad711SPaolo Bonzini { "hw_ld/vl", EV5HWMEM(0x1B,0x03), EV5, ARG_EV5HWMEM },
151276cad711SPaolo Bonzini { "hw_ld/w", EV5HWMEM(0x1B,0x08), EV5, ARG_EV5HWMEM },
151376cad711SPaolo Bonzini { "hw_ld/wl", EV5HWMEM(0x1B,0x09), EV5, ARG_EV5HWMEM },
151476cad711SPaolo Bonzini { "hw_ld/wq", EV5HWMEM(0x1B,0x0c), EV5, ARG_EV5HWMEM },
151576cad711SPaolo Bonzini { "hw_ld/wql", EV5HWMEM(0x1B,0x0d), EV5, ARG_EV5HWMEM },
151676cad711SPaolo Bonzini { "hw_ld/wqv", EV5HWMEM(0x1B,0x0e), EV5, ARG_EV5HWMEM },
151776cad711SPaolo Bonzini { "hw_ld/wqvl", EV5HWMEM(0x1B,0x0f), EV5, ARG_EV5HWMEM },
151876cad711SPaolo Bonzini { "hw_ld/wv", EV5HWMEM(0x1B,0x0a), EV5, ARG_EV5HWMEM },
151976cad711SPaolo Bonzini { "hw_ld/wvl", EV5HWMEM(0x1B,0x0b), EV5, ARG_EV5HWMEM },
152076cad711SPaolo Bonzini { "pal1b", PCD(0x1B), BASE, ARG_PCD },
152176cad711SPaolo Bonzini
152276cad711SPaolo Bonzini { "sextb", OPR(0x1C, 0x00), BWX, ARG_OPRZ1 },
152376cad711SPaolo Bonzini { "sextw", OPR(0x1C, 0x01), BWX, ARG_OPRZ1 },
152476cad711SPaolo Bonzini { "ctpop", OPR(0x1C, 0x30), CIX, ARG_OPRZ1 },
152576cad711SPaolo Bonzini { "perr", OPR(0x1C, 0x31), MAX, ARG_OPR },
152676cad711SPaolo Bonzini { "ctlz", OPR(0x1C, 0x32), CIX, ARG_OPRZ1 },
152776cad711SPaolo Bonzini { "cttz", OPR(0x1C, 0x33), CIX, ARG_OPRZ1 },
152876cad711SPaolo Bonzini { "unpkbw", OPR(0x1C, 0x34), MAX, ARG_OPRZ1 },
152976cad711SPaolo Bonzini { "unpkbl", OPR(0x1C, 0x35), MAX, ARG_OPRZ1 },
153076cad711SPaolo Bonzini { "pkwb", OPR(0x1C, 0x36), MAX, ARG_OPRZ1 },
153176cad711SPaolo Bonzini { "pklb", OPR(0x1C, 0x37), MAX, ARG_OPRZ1 },
153276cad711SPaolo Bonzini { "minsb8", OPR(0x1C, 0x38), MAX, ARG_OPR },
153376cad711SPaolo Bonzini { "minsb8", OPRL(0x1C, 0x38), MAX, ARG_OPRL },
153476cad711SPaolo Bonzini { "minsw4", OPR(0x1C, 0x39), MAX, ARG_OPR },
153576cad711SPaolo Bonzini { "minsw4", OPRL(0x1C, 0x39), MAX, ARG_OPRL },
153676cad711SPaolo Bonzini { "minub8", OPR(0x1C, 0x3A), MAX, ARG_OPR },
153776cad711SPaolo Bonzini { "minub8", OPRL(0x1C, 0x3A), MAX, ARG_OPRL },
153876cad711SPaolo Bonzini { "minuw4", OPR(0x1C, 0x3B), MAX, ARG_OPR },
153976cad711SPaolo Bonzini { "minuw4", OPRL(0x1C, 0x3B), MAX, ARG_OPRL },
154076cad711SPaolo Bonzini { "maxub8", OPR(0x1C, 0x3C), MAX, ARG_OPR },
154176cad711SPaolo Bonzini { "maxub8", OPRL(0x1C, 0x3C), MAX, ARG_OPRL },
154276cad711SPaolo Bonzini { "maxuw4", OPR(0x1C, 0x3D), MAX, ARG_OPR },
154376cad711SPaolo Bonzini { "maxuw4", OPRL(0x1C, 0x3D), MAX, ARG_OPRL },
154476cad711SPaolo Bonzini { "maxsb8", OPR(0x1C, 0x3E), MAX, ARG_OPR },
154576cad711SPaolo Bonzini { "maxsb8", OPRL(0x1C, 0x3E), MAX, ARG_OPRL },
154676cad711SPaolo Bonzini { "maxsw4", OPR(0x1C, 0x3F), MAX, ARG_OPR },
154776cad711SPaolo Bonzini { "maxsw4", OPRL(0x1C, 0x3F), MAX, ARG_OPRL },
154876cad711SPaolo Bonzini { "ftoit", FP(0x1C, 0x70), CIX, { FA, ZB, RC } },
154976cad711SPaolo Bonzini { "ftois", FP(0x1C, 0x78), CIX, { FA, ZB, RC } },
155076cad711SPaolo Bonzini
155176cad711SPaolo Bonzini { "hw_mtpr", OPR(0x1D,0x00), EV4, { RA, RBA, EV4EXTHWINDEX } },
155276cad711SPaolo Bonzini { "hw_mtpr", OP(0x1D), OP_MASK, EV5, { RA, RBA, EV5HWINDEX } },
155376cad711SPaolo Bonzini { "hw_mtpr", OP(0x1D), OP_MASK, EV6, { ZA, RB, EV6HWINDEX } },
155476cad711SPaolo Bonzini { "hw_mtpr/i", OPR(0x1D,0x01), EV4, ARG_EV4HWMPR },
155576cad711SPaolo Bonzini { "hw_mtpr/a", OPR(0x1D,0x02), EV4, ARG_EV4HWMPR },
155676cad711SPaolo Bonzini { "hw_mtpr/ai", OPR(0x1D,0x03), EV4, ARG_EV4HWMPR },
155776cad711SPaolo Bonzini { "hw_mtpr/p", OPR(0x1D,0x04), EV4, ARG_EV4HWMPR },
155876cad711SPaolo Bonzini { "hw_mtpr/pi", OPR(0x1D,0x05), EV4, ARG_EV4HWMPR },
155976cad711SPaolo Bonzini { "hw_mtpr/pa", OPR(0x1D,0x06), EV4, ARG_EV4HWMPR },
156076cad711SPaolo Bonzini { "hw_mtpr/pai", OPR(0x1D,0x07), EV4, ARG_EV4HWMPR },
156176cad711SPaolo Bonzini { "pal1d", PCD(0x1D), BASE, ARG_PCD },
156276cad711SPaolo Bonzini
156376cad711SPaolo Bonzini { "hw_rei", SPCD(0x1E,0x3FF8000), EV4|EV5, ARG_NONE },
156476cad711SPaolo Bonzini { "hw_rei_stall", SPCD(0x1E,0x3FFC000), EV5, ARG_NONE },
156576cad711SPaolo Bonzini { "hw_jmp", EV6HWMBR(0x1E,0x0), EV6, { ZA, PRB, EV6HWJMPHINT } },
156676cad711SPaolo Bonzini { "hw_jsr", EV6HWMBR(0x1E,0x2), EV6, { ZA, PRB, EV6HWJMPHINT } },
156776cad711SPaolo Bonzini { "hw_ret", EV6HWMBR(0x1E,0x4), EV6, { ZA, PRB } },
156876cad711SPaolo Bonzini { "hw_jcr", EV6HWMBR(0x1E,0x6), EV6, { ZA, PRB } },
156976cad711SPaolo Bonzini { "hw_coroutine", EV6HWMBR(0x1E,0x6), EV6, { ZA, PRB } }, /* alias */
157076cad711SPaolo Bonzini { "hw_jmp/stall", EV6HWMBR(0x1E,0x1), EV6, { ZA, PRB, EV6HWJMPHINT } },
157176cad711SPaolo Bonzini { "hw_jsr/stall", EV6HWMBR(0x1E,0x3), EV6, { ZA, PRB, EV6HWJMPHINT } },
157276cad711SPaolo Bonzini { "hw_ret/stall", EV6HWMBR(0x1E,0x5), EV6, { ZA, PRB } },
157376cad711SPaolo Bonzini { "hw_jcr/stall", EV6HWMBR(0x1E,0x7), EV6, { ZA, PRB } },
157476cad711SPaolo Bonzini { "hw_coroutine/stall", EV6HWMBR(0x1E,0x7), EV6, { ZA, PRB } }, /* alias */
157576cad711SPaolo Bonzini { "pal1e", PCD(0x1E), BASE, ARG_PCD },
157676cad711SPaolo Bonzini
157776cad711SPaolo Bonzini { "hw_stl", EV4HWMEM(0x1F,0x0), EV4, ARG_EV4HWMEM },
157876cad711SPaolo Bonzini { "hw_stl", EV5HWMEM(0x1F,0x00), EV5, ARG_EV5HWMEM },
157976cad711SPaolo Bonzini { "hw_stl", EV6HWMEM(0x1F,0x4), EV6, ARG_EV6HWMEM }, /* ??? 8 */
158076cad711SPaolo Bonzini { "hw_stl/a", EV4HWMEM(0x1F,0x4), EV4, ARG_EV4HWMEM },
158176cad711SPaolo Bonzini { "hw_stl/a", EV5HWMEM(0x1F,0x10), EV5, ARG_EV5HWMEM },
158276cad711SPaolo Bonzini { "hw_stl/a", EV6HWMEM(0x1F,0xC), EV6, ARG_EV6HWMEM },
158376cad711SPaolo Bonzini { "hw_stl/ac", EV5HWMEM(0x1F,0x11), EV5, ARG_EV5HWMEM },
158476cad711SPaolo Bonzini { "hw_stl/ar", EV4HWMEM(0x1F,0x6), EV4, ARG_EV4HWMEM },
158576cad711SPaolo Bonzini { "hw_stl/av", EV5HWMEM(0x1F,0x12), EV5, ARG_EV5HWMEM },
158676cad711SPaolo Bonzini { "hw_stl/avc", EV5HWMEM(0x1F,0x13), EV5, ARG_EV5HWMEM },
158776cad711SPaolo Bonzini { "hw_stl/c", EV5HWMEM(0x1F,0x01), EV5, ARG_EV5HWMEM },
158876cad711SPaolo Bonzini { "hw_stl/p", EV4HWMEM(0x1F,0x8), EV4, ARG_EV4HWMEM },
158976cad711SPaolo Bonzini { "hw_stl/p", EV5HWMEM(0x1F,0x20), EV5, ARG_EV5HWMEM },
159076cad711SPaolo Bonzini { "hw_stl/p", EV6HWMEM(0x1F,0x0), EV6, ARG_EV6HWMEM },
159176cad711SPaolo Bonzini { "hw_stl/pa", EV4HWMEM(0x1F,0xC), EV4, ARG_EV4HWMEM },
159276cad711SPaolo Bonzini { "hw_stl/pa", EV5HWMEM(0x1F,0x30), EV5, ARG_EV5HWMEM },
159376cad711SPaolo Bonzini { "hw_stl/pac", EV5HWMEM(0x1F,0x31), EV5, ARG_EV5HWMEM },
159476cad711SPaolo Bonzini { "hw_stl/pav", EV5HWMEM(0x1F,0x32), EV5, ARG_EV5HWMEM },
159576cad711SPaolo Bonzini { "hw_stl/pavc", EV5HWMEM(0x1F,0x33), EV5, ARG_EV5HWMEM },
159676cad711SPaolo Bonzini { "hw_stl/pc", EV5HWMEM(0x1F,0x21), EV5, ARG_EV5HWMEM },
159776cad711SPaolo Bonzini { "hw_stl/pr", EV4HWMEM(0x1F,0xA), EV4, ARG_EV4HWMEM },
159876cad711SPaolo Bonzini { "hw_stl/pv", EV5HWMEM(0x1F,0x22), EV5, ARG_EV5HWMEM },
159976cad711SPaolo Bonzini { "hw_stl/pvc", EV5HWMEM(0x1F,0x23), EV5, ARG_EV5HWMEM },
160076cad711SPaolo Bonzini { "hw_stl/r", EV4HWMEM(0x1F,0x2), EV4, ARG_EV4HWMEM },
160176cad711SPaolo Bonzini { "hw_stl/v", EV5HWMEM(0x1F,0x02), EV5, ARG_EV5HWMEM },
160276cad711SPaolo Bonzini { "hw_stl/vc", EV5HWMEM(0x1F,0x03), EV5, ARG_EV5HWMEM },
160376cad711SPaolo Bonzini { "hw_stl_c", EV5HWMEM(0x1F,0x01), EV5, ARG_EV5HWMEM },
160476cad711SPaolo Bonzini { "hw_stl_c/a", EV5HWMEM(0x1F,0x11), EV5, ARG_EV5HWMEM },
160576cad711SPaolo Bonzini { "hw_stl_c/av", EV5HWMEM(0x1F,0x13), EV5, ARG_EV5HWMEM },
160676cad711SPaolo Bonzini { "hw_stl_c/p", EV5HWMEM(0x1F,0x21), EV5, ARG_EV5HWMEM },
160776cad711SPaolo Bonzini { "hw_stl_c/p", EV6HWMEM(0x1F,0x2), EV6, ARG_EV6HWMEM },
160876cad711SPaolo Bonzini { "hw_stl_c/pa", EV5HWMEM(0x1F,0x31), EV5, ARG_EV5HWMEM },
160976cad711SPaolo Bonzini { "hw_stl_c/pav", EV5HWMEM(0x1F,0x33), EV5, ARG_EV5HWMEM },
161076cad711SPaolo Bonzini { "hw_stl_c/pv", EV5HWMEM(0x1F,0x23), EV5, ARG_EV5HWMEM },
161176cad711SPaolo Bonzini { "hw_stl_c/v", EV5HWMEM(0x1F,0x03), EV5, ARG_EV5HWMEM },
161276cad711SPaolo Bonzini { "hw_stq", EV4HWMEM(0x1F,0x1), EV4, ARG_EV4HWMEM },
161376cad711SPaolo Bonzini { "hw_stq", EV5HWMEM(0x1F,0x04), EV5, ARG_EV5HWMEM },
161476cad711SPaolo Bonzini { "hw_stq", EV6HWMEM(0x1F,0x5), EV6, ARG_EV6HWMEM }, /* ??? 9 */
161576cad711SPaolo Bonzini { "hw_stq/a", EV4HWMEM(0x1F,0x5), EV4, ARG_EV4HWMEM },
161676cad711SPaolo Bonzini { "hw_stq/a", EV5HWMEM(0x1F,0x14), EV5, ARG_EV5HWMEM },
161776cad711SPaolo Bonzini { "hw_stq/a", EV6HWMEM(0x1F,0xD), EV6, ARG_EV6HWMEM },
161876cad711SPaolo Bonzini { "hw_stq/ac", EV5HWMEM(0x1F,0x15), EV5, ARG_EV5HWMEM },
161976cad711SPaolo Bonzini { "hw_stq/ar", EV4HWMEM(0x1F,0x7), EV4, ARG_EV4HWMEM },
162076cad711SPaolo Bonzini { "hw_stq/av", EV5HWMEM(0x1F,0x16), EV5, ARG_EV5HWMEM },
162176cad711SPaolo Bonzini { "hw_stq/avc", EV5HWMEM(0x1F,0x17), EV5, ARG_EV5HWMEM },
162276cad711SPaolo Bonzini { "hw_stq/c", EV5HWMEM(0x1F,0x05), EV5, ARG_EV5HWMEM },
162376cad711SPaolo Bonzini { "hw_stq/p", EV4HWMEM(0x1F,0x9), EV4, ARG_EV4HWMEM },
162476cad711SPaolo Bonzini { "hw_stq/p", EV5HWMEM(0x1F,0x24), EV5, ARG_EV5HWMEM },
162576cad711SPaolo Bonzini { "hw_stq/p", EV6HWMEM(0x1F,0x1), EV6, ARG_EV6HWMEM },
162676cad711SPaolo Bonzini { "hw_stq/pa", EV4HWMEM(0x1F,0xD), EV4, ARG_EV4HWMEM },
162776cad711SPaolo Bonzini { "hw_stq/pa", EV5HWMEM(0x1F,0x34), EV5, ARG_EV5HWMEM },
162876cad711SPaolo Bonzini { "hw_stq/pac", EV5HWMEM(0x1F,0x35), EV5, ARG_EV5HWMEM },
162976cad711SPaolo Bonzini { "hw_stq/par", EV4HWMEM(0x1F,0xE), EV4, ARG_EV4HWMEM },
163076cad711SPaolo Bonzini { "hw_stq/par", EV4HWMEM(0x1F,0xF), EV4, ARG_EV4HWMEM },
163176cad711SPaolo Bonzini { "hw_stq/pav", EV5HWMEM(0x1F,0x36), EV5, ARG_EV5HWMEM },
163276cad711SPaolo Bonzini { "hw_stq/pavc", EV5HWMEM(0x1F,0x37), EV5, ARG_EV5HWMEM },
163376cad711SPaolo Bonzini { "hw_stq/pc", EV5HWMEM(0x1F,0x25), EV5, ARG_EV5HWMEM },
163476cad711SPaolo Bonzini { "hw_stq/pr", EV4HWMEM(0x1F,0xB), EV4, ARG_EV4HWMEM },
163576cad711SPaolo Bonzini { "hw_stq/pv", EV5HWMEM(0x1F,0x26), EV5, ARG_EV5HWMEM },
163676cad711SPaolo Bonzini { "hw_stq/pvc", EV5HWMEM(0x1F,0x27), EV5, ARG_EV5HWMEM },
163776cad711SPaolo Bonzini { "hw_stq/r", EV4HWMEM(0x1F,0x3), EV4, ARG_EV4HWMEM },
163876cad711SPaolo Bonzini { "hw_stq/v", EV5HWMEM(0x1F,0x06), EV5, ARG_EV5HWMEM },
163976cad711SPaolo Bonzini { "hw_stq/vc", EV5HWMEM(0x1F,0x07), EV5, ARG_EV5HWMEM },
164076cad711SPaolo Bonzini { "hw_stq_c", EV5HWMEM(0x1F,0x05), EV5, ARG_EV5HWMEM },
164176cad711SPaolo Bonzini { "hw_stq_c/a", EV5HWMEM(0x1F,0x15), EV5, ARG_EV5HWMEM },
164276cad711SPaolo Bonzini { "hw_stq_c/av", EV5HWMEM(0x1F,0x17), EV5, ARG_EV5HWMEM },
164376cad711SPaolo Bonzini { "hw_stq_c/p", EV5HWMEM(0x1F,0x25), EV5, ARG_EV5HWMEM },
164476cad711SPaolo Bonzini { "hw_stq_c/p", EV6HWMEM(0x1F,0x3), EV6, ARG_EV6HWMEM },
164576cad711SPaolo Bonzini { "hw_stq_c/pa", EV5HWMEM(0x1F,0x35), EV5, ARG_EV5HWMEM },
164676cad711SPaolo Bonzini { "hw_stq_c/pav", EV5HWMEM(0x1F,0x37), EV5, ARG_EV5HWMEM },
164776cad711SPaolo Bonzini { "hw_stq_c/pv", EV5HWMEM(0x1F,0x27), EV5, ARG_EV5HWMEM },
164876cad711SPaolo Bonzini { "hw_stq_c/v", EV5HWMEM(0x1F,0x07), EV5, ARG_EV5HWMEM },
164976cad711SPaolo Bonzini { "hw_st", EV4HWMEM(0x1F,0x0), EV4, ARG_EV4HWMEM },
165076cad711SPaolo Bonzini { "hw_st", EV5HWMEM(0x1F,0x00), EV5, ARG_EV5HWMEM },
165176cad711SPaolo Bonzini { "hw_st/a", EV4HWMEM(0x1F,0x4), EV4, ARG_EV4HWMEM },
165276cad711SPaolo Bonzini { "hw_st/a", EV5HWMEM(0x1F,0x10), EV5, ARG_EV5HWMEM },
165376cad711SPaolo Bonzini { "hw_st/ac", EV5HWMEM(0x1F,0x11), EV5, ARG_EV5HWMEM },
165476cad711SPaolo Bonzini { "hw_st/aq", EV4HWMEM(0x1F,0x5), EV4, ARG_EV4HWMEM },
165576cad711SPaolo Bonzini { "hw_st/aq", EV5HWMEM(0x1F,0x14), EV5, ARG_EV5HWMEM },
165676cad711SPaolo Bonzini { "hw_st/aqc", EV5HWMEM(0x1F,0x15), EV5, ARG_EV5HWMEM },
165776cad711SPaolo Bonzini { "hw_st/aqv", EV5HWMEM(0x1F,0x16), EV5, ARG_EV5HWMEM },
165876cad711SPaolo Bonzini { "hw_st/aqvc", EV5HWMEM(0x1F,0x17), EV5, ARG_EV5HWMEM },
165976cad711SPaolo Bonzini { "hw_st/ar", EV4HWMEM(0x1F,0x6), EV4, ARG_EV4HWMEM },
166076cad711SPaolo Bonzini { "hw_st/arq", EV4HWMEM(0x1F,0x7), EV4, ARG_EV4HWMEM },
166176cad711SPaolo Bonzini { "hw_st/av", EV5HWMEM(0x1F,0x12), EV5, ARG_EV5HWMEM },
166276cad711SPaolo Bonzini { "hw_st/avc", EV5HWMEM(0x1F,0x13), EV5, ARG_EV5HWMEM },
166376cad711SPaolo Bonzini { "hw_st/c", EV5HWMEM(0x1F,0x01), EV5, ARG_EV5HWMEM },
166476cad711SPaolo Bonzini { "hw_st/p", EV4HWMEM(0x1F,0x8), EV4, ARG_EV4HWMEM },
166576cad711SPaolo Bonzini { "hw_st/p", EV5HWMEM(0x1F,0x20), EV5, ARG_EV5HWMEM },
166676cad711SPaolo Bonzini { "hw_st/pa", EV4HWMEM(0x1F,0xC), EV4, ARG_EV4HWMEM },
166776cad711SPaolo Bonzini { "hw_st/pa", EV5HWMEM(0x1F,0x30), EV5, ARG_EV5HWMEM },
166876cad711SPaolo Bonzini { "hw_st/pac", EV5HWMEM(0x1F,0x31), EV5, ARG_EV5HWMEM },
166976cad711SPaolo Bonzini { "hw_st/paq", EV4HWMEM(0x1F,0xD), EV4, ARG_EV4HWMEM },
167076cad711SPaolo Bonzini { "hw_st/paq", EV5HWMEM(0x1F,0x34), EV5, ARG_EV5HWMEM },
167176cad711SPaolo Bonzini { "hw_st/paqc", EV5HWMEM(0x1F,0x35), EV5, ARG_EV5HWMEM },
167276cad711SPaolo Bonzini { "hw_st/paqv", EV5HWMEM(0x1F,0x36), EV5, ARG_EV5HWMEM },
167376cad711SPaolo Bonzini { "hw_st/paqvc", EV5HWMEM(0x1F,0x37), EV5, ARG_EV5HWMEM },
167476cad711SPaolo Bonzini { "hw_st/par", EV4HWMEM(0x1F,0xE), EV4, ARG_EV4HWMEM },
167576cad711SPaolo Bonzini { "hw_st/parq", EV4HWMEM(0x1F,0xF), EV4, ARG_EV4HWMEM },
167676cad711SPaolo Bonzini { "hw_st/pav", EV5HWMEM(0x1F,0x32), EV5, ARG_EV5HWMEM },
167776cad711SPaolo Bonzini { "hw_st/pavc", EV5HWMEM(0x1F,0x33), EV5, ARG_EV5HWMEM },
167876cad711SPaolo Bonzini { "hw_st/pc", EV5HWMEM(0x1F,0x21), EV5, ARG_EV5HWMEM },
167976cad711SPaolo Bonzini { "hw_st/pq", EV4HWMEM(0x1F,0x9), EV4, ARG_EV4HWMEM },
168076cad711SPaolo Bonzini { "hw_st/pq", EV5HWMEM(0x1F,0x24), EV5, ARG_EV5HWMEM },
168176cad711SPaolo Bonzini { "hw_st/pqc", EV5HWMEM(0x1F,0x25), EV5, ARG_EV5HWMEM },
168276cad711SPaolo Bonzini { "hw_st/pqv", EV5HWMEM(0x1F,0x26), EV5, ARG_EV5HWMEM },
168376cad711SPaolo Bonzini { "hw_st/pqvc", EV5HWMEM(0x1F,0x27), EV5, ARG_EV5HWMEM },
168476cad711SPaolo Bonzini { "hw_st/pr", EV4HWMEM(0x1F,0xA), EV4, ARG_EV4HWMEM },
168576cad711SPaolo Bonzini { "hw_st/prq", EV4HWMEM(0x1F,0xB), EV4, ARG_EV4HWMEM },
168676cad711SPaolo Bonzini { "hw_st/pv", EV5HWMEM(0x1F,0x22), EV5, ARG_EV5HWMEM },
168776cad711SPaolo Bonzini { "hw_st/pvc", EV5HWMEM(0x1F,0x23), EV5, ARG_EV5HWMEM },
168876cad711SPaolo Bonzini { "hw_st/q", EV4HWMEM(0x1F,0x1), EV4, ARG_EV4HWMEM },
168976cad711SPaolo Bonzini { "hw_st/q", EV5HWMEM(0x1F,0x04), EV5, ARG_EV5HWMEM },
169076cad711SPaolo Bonzini { "hw_st/qc", EV5HWMEM(0x1F,0x05), EV5, ARG_EV5HWMEM },
169176cad711SPaolo Bonzini { "hw_st/qv", EV5HWMEM(0x1F,0x06), EV5, ARG_EV5HWMEM },
169276cad711SPaolo Bonzini { "hw_st/qvc", EV5HWMEM(0x1F,0x07), EV5, ARG_EV5HWMEM },
169376cad711SPaolo Bonzini { "hw_st/r", EV4HWMEM(0x1F,0x2), EV4, ARG_EV4HWMEM },
169476cad711SPaolo Bonzini { "hw_st/v", EV5HWMEM(0x1F,0x02), EV5, ARG_EV5HWMEM },
169576cad711SPaolo Bonzini { "hw_st/vc", EV5HWMEM(0x1F,0x03), EV5, ARG_EV5HWMEM },
169676cad711SPaolo Bonzini { "pal1f", PCD(0x1F), BASE, ARG_PCD },
169776cad711SPaolo Bonzini
169876cad711SPaolo Bonzini { "ldf", MEM(0x20), BASE, ARG_FMEM },
169976cad711SPaolo Bonzini { "ldg", MEM(0x21), BASE, ARG_FMEM },
170076cad711SPaolo Bonzini { "lds", MEM(0x22), BASE, ARG_FMEM },
170176cad711SPaolo Bonzini { "ldt", MEM(0x23), BASE, ARG_FMEM },
170276cad711SPaolo Bonzini { "stf", MEM(0x24), BASE, ARG_FMEM },
170376cad711SPaolo Bonzini { "stg", MEM(0x25), BASE, ARG_FMEM },
170476cad711SPaolo Bonzini { "sts", MEM(0x26), BASE, ARG_FMEM },
170576cad711SPaolo Bonzini { "stt", MEM(0x27), BASE, ARG_FMEM },
170676cad711SPaolo Bonzini
170776cad711SPaolo Bonzini { "ldl", MEM(0x28), BASE, ARG_MEM },
170876cad711SPaolo Bonzini { "ldq", MEM(0x29), BASE, ARG_MEM },
170976cad711SPaolo Bonzini { "ldl_l", MEM(0x2A), BASE, ARG_MEM },
171076cad711SPaolo Bonzini { "ldq_l", MEM(0x2B), BASE, ARG_MEM },
171176cad711SPaolo Bonzini { "stl", MEM(0x2C), BASE, ARG_MEM },
171276cad711SPaolo Bonzini { "stq", MEM(0x2D), BASE, ARG_MEM },
171376cad711SPaolo Bonzini { "stl_c", MEM(0x2E), BASE, ARG_MEM },
171476cad711SPaolo Bonzini { "stq_c", MEM(0x2F), BASE, ARG_MEM },
171576cad711SPaolo Bonzini
171676cad711SPaolo Bonzini { "br", BRA(0x30), BASE, { ZA, BDISP } }, /* pseudo */
171776cad711SPaolo Bonzini { "br", BRA(0x30), BASE, ARG_BRA },
171876cad711SPaolo Bonzini { "fbeq", BRA(0x31), BASE, ARG_FBRA },
171976cad711SPaolo Bonzini { "fblt", BRA(0x32), BASE, ARG_FBRA },
172076cad711SPaolo Bonzini { "fble", BRA(0x33), BASE, ARG_FBRA },
172176cad711SPaolo Bonzini { "bsr", BRA(0x34), BASE, ARG_BRA },
172276cad711SPaolo Bonzini { "fbne", BRA(0x35), BASE, ARG_FBRA },
172376cad711SPaolo Bonzini { "fbge", BRA(0x36), BASE, ARG_FBRA },
172476cad711SPaolo Bonzini { "fbgt", BRA(0x37), BASE, ARG_FBRA },
172576cad711SPaolo Bonzini { "blbc", BRA(0x38), BASE, ARG_BRA },
172676cad711SPaolo Bonzini { "beq", BRA(0x39), BASE, ARG_BRA },
172776cad711SPaolo Bonzini { "blt", BRA(0x3A), BASE, ARG_BRA },
172876cad711SPaolo Bonzini { "ble", BRA(0x3B), BASE, ARG_BRA },
172976cad711SPaolo Bonzini { "blbs", BRA(0x3C), BASE, ARG_BRA },
173076cad711SPaolo Bonzini { "bne", BRA(0x3D), BASE, ARG_BRA },
173176cad711SPaolo Bonzini { "bge", BRA(0x3E), BASE, ARG_BRA },
173276cad711SPaolo Bonzini { "bgt", BRA(0x3F), BASE, ARG_BRA },
173376cad711SPaolo Bonzini };
173476cad711SPaolo Bonzini
173576cad711SPaolo Bonzini const unsigned alpha_num_opcodes = sizeof(alpha_opcodes)/sizeof(*alpha_opcodes);
173676cad711SPaolo Bonzini
173776cad711SPaolo Bonzini /* OSF register names. */
173876cad711SPaolo Bonzini
173976cad711SPaolo Bonzini static const char * const osf_regnames[64] = {
174076cad711SPaolo Bonzini "v0", "t0", "t1", "t2", "t3", "t4", "t5", "t6",
174176cad711SPaolo Bonzini "t7", "s0", "s1", "s2", "s3", "s4", "s5", "fp",
174276cad711SPaolo Bonzini "a0", "a1", "a2", "a3", "a4", "a5", "t8", "t9",
174376cad711SPaolo Bonzini "t10", "t11", "ra", "t12", "at", "gp", "sp", "zero",
174476cad711SPaolo Bonzini "$f0", "$f1", "$f2", "$f3", "$f4", "$f5", "$f6", "$f7",
174576cad711SPaolo Bonzini "$f8", "$f9", "$f10", "$f11", "$f12", "$f13", "$f14", "$f15",
174676cad711SPaolo Bonzini "$f16", "$f17", "$f18", "$f19", "$f20", "$f21", "$f22", "$f23",
174776cad711SPaolo Bonzini "$f24", "$f25", "$f26", "$f27", "$f28", "$f29", "$f30", "$f31"
174876cad711SPaolo Bonzini };
174976cad711SPaolo Bonzini
175076cad711SPaolo Bonzini /* VMS register names. */
175176cad711SPaolo Bonzini
175276cad711SPaolo Bonzini static const char * const vms_regnames[64] = {
175376cad711SPaolo Bonzini "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",
175476cad711SPaolo Bonzini "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15",
175576cad711SPaolo Bonzini "R16", "R17", "R18", "R19", "R20", "R21", "R22", "R23",
175676cad711SPaolo Bonzini "R24", "AI", "RA", "PV", "AT", "FP", "SP", "RZ",
175776cad711SPaolo Bonzini "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7",
175876cad711SPaolo Bonzini "F8", "F9", "F10", "F11", "F12", "F13", "F14", "F15",
175976cad711SPaolo Bonzini "F16", "F17", "F18", "F19", "F20", "F21", "F22", "F23",
176076cad711SPaolo Bonzini "F24", "F25", "F26", "F27", "F28", "F29", "F30", "FZ"
176176cad711SPaolo Bonzini };
176276cad711SPaolo Bonzini
176376cad711SPaolo Bonzini /* Disassemble Alpha instructions. */
176476cad711SPaolo Bonzini
176576cad711SPaolo Bonzini int
print_insn_alpha(bfd_vma memaddr,struct disassemble_info * info)176676cad711SPaolo Bonzini print_insn_alpha (bfd_vma memaddr, struct disassemble_info *info)
176776cad711SPaolo Bonzini {
176876cad711SPaolo Bonzini static const struct alpha_opcode *opcode_index[AXP_NOPS+1];
176976cad711SPaolo Bonzini const char * const * regnames;
177076cad711SPaolo Bonzini const struct alpha_opcode *opcode, *opcode_end;
177176cad711SPaolo Bonzini const unsigned char *opindex;
177276cad711SPaolo Bonzini unsigned insn, op, isa_mask;
177376cad711SPaolo Bonzini int need_comma;
177476cad711SPaolo Bonzini
177576cad711SPaolo Bonzini /* Initialize the majorop table the first time through */
177676cad711SPaolo Bonzini if (!opcode_index[0])
177776cad711SPaolo Bonzini {
177876cad711SPaolo Bonzini opcode = alpha_opcodes;
177976cad711SPaolo Bonzini opcode_end = opcode + alpha_num_opcodes;
178076cad711SPaolo Bonzini
178176cad711SPaolo Bonzini for (op = 0; op < AXP_NOPS; ++op)
178276cad711SPaolo Bonzini {
178376cad711SPaolo Bonzini opcode_index[op] = opcode;
178476cad711SPaolo Bonzini while (opcode < opcode_end && op == AXP_OP (opcode->opcode))
178576cad711SPaolo Bonzini ++opcode;
178676cad711SPaolo Bonzini }
178776cad711SPaolo Bonzini opcode_index[op] = opcode;
178876cad711SPaolo Bonzini }
178976cad711SPaolo Bonzini
179076cad711SPaolo Bonzini if (info->flavour == bfd_target_evax_flavour)
179176cad711SPaolo Bonzini regnames = vms_regnames;
179276cad711SPaolo Bonzini else
179376cad711SPaolo Bonzini regnames = osf_regnames;
179476cad711SPaolo Bonzini
179576cad711SPaolo Bonzini isa_mask = AXP_OPCODE_NOPAL;
179676cad711SPaolo Bonzini switch (info->mach)
179776cad711SPaolo Bonzini {
179876cad711SPaolo Bonzini case bfd_mach_alpha_ev4:
179976cad711SPaolo Bonzini isa_mask |= AXP_OPCODE_EV4;
180076cad711SPaolo Bonzini break;
180176cad711SPaolo Bonzini case bfd_mach_alpha_ev5:
180276cad711SPaolo Bonzini isa_mask |= AXP_OPCODE_EV5;
180376cad711SPaolo Bonzini break;
180476cad711SPaolo Bonzini case bfd_mach_alpha_ev6:
180576cad711SPaolo Bonzini isa_mask |= AXP_OPCODE_EV6;
180676cad711SPaolo Bonzini break;
180776cad711SPaolo Bonzini }
180876cad711SPaolo Bonzini
180976cad711SPaolo Bonzini /* Read the insn into a host word */
181076cad711SPaolo Bonzini {
181176cad711SPaolo Bonzini bfd_byte buffer[4];
181276cad711SPaolo Bonzini int status = (*info->read_memory_func) (memaddr, buffer, 4, info);
181376cad711SPaolo Bonzini if (status != 0)
181476cad711SPaolo Bonzini {
181576cad711SPaolo Bonzini (*info->memory_error_func) (status, memaddr, info);
181676cad711SPaolo Bonzini return -1;
181776cad711SPaolo Bonzini }
181876cad711SPaolo Bonzini insn = bfd_getl32 (buffer);
181976cad711SPaolo Bonzini }
182076cad711SPaolo Bonzini
182176cad711SPaolo Bonzini /* Get the major opcode of the instruction. */
182276cad711SPaolo Bonzini op = AXP_OP (insn);
182376cad711SPaolo Bonzini
182476cad711SPaolo Bonzini /* Find the first match in the opcode table. */
182576cad711SPaolo Bonzini opcode_end = opcode_index[op + 1];
182676cad711SPaolo Bonzini for (opcode = opcode_index[op]; opcode < opcode_end; ++opcode)
182776cad711SPaolo Bonzini {
182876cad711SPaolo Bonzini if ((insn ^ opcode->opcode) & opcode->mask)
182976cad711SPaolo Bonzini continue;
183076cad711SPaolo Bonzini
183176cad711SPaolo Bonzini if (!(opcode->flags & isa_mask))
183276cad711SPaolo Bonzini continue;
183376cad711SPaolo Bonzini
183476cad711SPaolo Bonzini /* Make two passes over the operands. First see if any of them
183576cad711SPaolo Bonzini have extraction functions, and, if they do, make sure the
183676cad711SPaolo Bonzini instruction is valid. */
183776cad711SPaolo Bonzini {
183876cad711SPaolo Bonzini int invalid = 0;
183976cad711SPaolo Bonzini for (opindex = opcode->operands; *opindex != 0; opindex++)
184076cad711SPaolo Bonzini {
184176cad711SPaolo Bonzini const struct alpha_operand *operand = alpha_operands + *opindex;
184276cad711SPaolo Bonzini if (operand->extract)
184376cad711SPaolo Bonzini (*operand->extract) (insn, &invalid);
184476cad711SPaolo Bonzini }
184576cad711SPaolo Bonzini if (invalid)
184676cad711SPaolo Bonzini continue;
184776cad711SPaolo Bonzini }
184876cad711SPaolo Bonzini
184976cad711SPaolo Bonzini /* The instruction is valid. */
185076cad711SPaolo Bonzini goto found;
185176cad711SPaolo Bonzini }
185276cad711SPaolo Bonzini
185376cad711SPaolo Bonzini /* No instruction found */
185476cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, ".long %#08x", insn);
185576cad711SPaolo Bonzini
185676cad711SPaolo Bonzini return 4;
185776cad711SPaolo Bonzini
185876cad711SPaolo Bonzini found:
185976cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", opcode->name);
186076cad711SPaolo Bonzini if (opcode->operands[0] != 0)
186176cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "\t");
186276cad711SPaolo Bonzini
186376cad711SPaolo Bonzini /* Now extract and print the operands. */
186476cad711SPaolo Bonzini need_comma = 0;
186576cad711SPaolo Bonzini for (opindex = opcode->operands; *opindex != 0; opindex++)
186676cad711SPaolo Bonzini {
186776cad711SPaolo Bonzini const struct alpha_operand *operand = alpha_operands + *opindex;
186876cad711SPaolo Bonzini int value;
186976cad711SPaolo Bonzini
187076cad711SPaolo Bonzini /* Operands that are marked FAKE are simply ignored. We
187176cad711SPaolo Bonzini already made sure that the extract function considered
187276cad711SPaolo Bonzini the instruction to be valid. */
187376cad711SPaolo Bonzini if ((operand->flags & AXP_OPERAND_FAKE) != 0)
187476cad711SPaolo Bonzini continue;
187576cad711SPaolo Bonzini
187676cad711SPaolo Bonzini /* Extract the value from the instruction. */
187776cad711SPaolo Bonzini if (operand->extract)
187876cad711SPaolo Bonzini value = (*operand->extract) (insn, (int *) NULL);
187976cad711SPaolo Bonzini else
188076cad711SPaolo Bonzini {
188176cad711SPaolo Bonzini value = (insn >> operand->shift) & ((1 << operand->bits) - 1);
188276cad711SPaolo Bonzini if (operand->flags & AXP_OPERAND_SIGNED)
188376cad711SPaolo Bonzini {
188476cad711SPaolo Bonzini int signbit = 1 << (operand->bits - 1);
188576cad711SPaolo Bonzini value = (value ^ signbit) - signbit;
188676cad711SPaolo Bonzini }
188776cad711SPaolo Bonzini }
188876cad711SPaolo Bonzini
188976cad711SPaolo Bonzini if (need_comma &&
189076cad711SPaolo Bonzini ((operand->flags & (AXP_OPERAND_PARENS | AXP_OPERAND_COMMA))
189176cad711SPaolo Bonzini != AXP_OPERAND_PARENS))
189276cad711SPaolo Bonzini {
189376cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, ",");
189476cad711SPaolo Bonzini }
189576cad711SPaolo Bonzini if (operand->flags & AXP_OPERAND_PARENS)
189676cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "(");
189776cad711SPaolo Bonzini
189876cad711SPaolo Bonzini /* Print the operand as directed by the flags. */
189976cad711SPaolo Bonzini if (operand->flags & AXP_OPERAND_IR)
190076cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", regnames[value]);
190176cad711SPaolo Bonzini else if (operand->flags & AXP_OPERAND_FPR)
190276cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%s", regnames[value + 32]);
190376cad711SPaolo Bonzini else if (operand->flags & AXP_OPERAND_RELATIVE)
190476cad711SPaolo Bonzini (*info->print_address_func) (memaddr + 4 + value, info);
190576cad711SPaolo Bonzini else if (operand->flags & AXP_OPERAND_SIGNED)
190676cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%d", value);
190776cad711SPaolo Bonzini else
190876cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, "%#x", value);
190976cad711SPaolo Bonzini
191076cad711SPaolo Bonzini if (operand->flags & AXP_OPERAND_PARENS)
191176cad711SPaolo Bonzini (*info->fprintf_func) (info->stream, ")");
191276cad711SPaolo Bonzini need_comma = 1;
191376cad711SPaolo Bonzini }
191476cad711SPaolo Bonzini
191576cad711SPaolo Bonzini return 4;
191676cad711SPaolo Bonzini }
1917