12159047fSniklas /* Table of opcodes for the sparc.
2b55d4692Sfgsch Copyright 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3*007c2a45Smiod 2000, 2002, 2004
4b305b0f1Sespie Free Software Foundation, Inc.
52159047fSniklas
62159047fSniklas This file is part of the BFD library.
72159047fSniklas
82159047fSniklas BFD is free software; you can redistribute it and/or modify it under
92159047fSniklas the terms of the GNU General Public License as published by the Free
102159047fSniklas Software Foundation; either version 2, or (at your option) any later
112159047fSniklas version.
122159047fSniklas
132159047fSniklas BFD is distributed in the hope that it will be useful, but WITHOUT ANY
142159047fSniklas WARRANTY; without even the implied warranty of MERCHANTABILITY or
152159047fSniklas FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
162159047fSniklas for more details.
172159047fSniklas
182159047fSniklas You should have received a copy of the GNU General Public License
192159047fSniklas along with this software; see the file COPYING. If not, write to
202159047fSniklas the Free Software Foundation, 59 Temple Place - Suite 330,
212159047fSniklas Boston, MA 02111-1307, USA. */
222159047fSniklas
232159047fSniklas /* FIXME-someday: perhaps the ,a's and such should be embedded in the
242159047fSniklas instruction's name rather than the args. This would make gas faster, pinsn
252159047fSniklas slower, but would mess up some macros a bit. xoxorich. */
262159047fSniklas
272159047fSniklas #include <stdio.h>
28b305b0f1Sespie #include "sysdep.h"
292159047fSniklas #include "opcode/sparc.h"
302159047fSniklas
31c88b1d6cSniklas /* Some defines to make life easy. */
32c88b1d6cSniklas #define MASK_V6 SPARC_OPCODE_ARCH_MASK (SPARC_OPCODE_ARCH_V6)
33c88b1d6cSniklas #define MASK_V7 SPARC_OPCODE_ARCH_MASK (SPARC_OPCODE_ARCH_V7)
34c88b1d6cSniklas #define MASK_V8 SPARC_OPCODE_ARCH_MASK (SPARC_OPCODE_ARCH_V8)
35c88b1d6cSniklas #define MASK_SPARCLET SPARC_OPCODE_ARCH_MASK (SPARC_OPCODE_ARCH_SPARCLET)
36c88b1d6cSniklas #define MASK_SPARCLITE SPARC_OPCODE_ARCH_MASK (SPARC_OPCODE_ARCH_SPARCLITE)
37c88b1d6cSniklas #define MASK_V9 SPARC_OPCODE_ARCH_MASK (SPARC_OPCODE_ARCH_V9)
38c88b1d6cSniklas #define MASK_V9A SPARC_OPCODE_ARCH_MASK (SPARC_OPCODE_ARCH_V9A)
39b55d4692Sfgsch #define MASK_V9B SPARC_OPCODE_ARCH_MASK (SPARC_OPCODE_ARCH_V9B)
40c88b1d6cSniklas
41c88b1d6cSniklas /* Bit masks of architectures supporting the insn. */
42c88b1d6cSniklas
43c88b1d6cSniklas #define v6 (MASK_V6 | MASK_V7 | MASK_V8 | MASK_SPARCLET \
44b55d4692Sfgsch | MASK_SPARCLITE | MASK_V9 | MASK_V9A | MASK_V9B)
45c88b1d6cSniklas /* v6 insns not supported on the sparclet */
46c88b1d6cSniklas #define v6notlet (MASK_V6 | MASK_V7 | MASK_V8 \
47b55d4692Sfgsch | MASK_SPARCLITE | MASK_V9 | MASK_V9A | MASK_V9B)
48c88b1d6cSniklas #define v7 (MASK_V7 | MASK_V8 | MASK_SPARCLET \
49b55d4692Sfgsch | MASK_SPARCLITE | MASK_V9 | MASK_V9A | MASK_V9B)
50c88b1d6cSniklas /* Although not all insns are implemented in hardware, sparclite is defined
51c88b1d6cSniklas to be a superset of v8. Unimplemented insns trap and are then theoretically
52c88b1d6cSniklas implemented in software.
53c88b1d6cSniklas It's not clear that the same is true for sparclet, although the docs
54c88b1d6cSniklas suggest it is. Rather than complicating things, the sparclet assembler
55c88b1d6cSniklas recognizes all v8 insns. */
56b55d4692Sfgsch #define v8 (MASK_V8 | MASK_SPARCLET | MASK_SPARCLITE \
57b55d4692Sfgsch | MASK_V9 | MASK_V9A | MASK_V9B)
58c88b1d6cSniklas #define sparclet (MASK_SPARCLET)
59c88b1d6cSniklas #define sparclite (MASK_SPARCLITE)
60b55d4692Sfgsch #define v9 (MASK_V9 | MASK_V9A | MASK_V9B)
61b55d4692Sfgsch #define v9a (MASK_V9A | MASK_V9B)
62b55d4692Sfgsch #define v9b (MASK_V9B)
63c88b1d6cSniklas /* v6 insns not supported by v9 */
64c88b1d6cSniklas #define v6notv9 (MASK_V6 | MASK_V7 | MASK_V8 \
65c88b1d6cSniklas | MASK_SPARCLET | MASK_SPARCLITE)
66b305b0f1Sespie /* v9a instructions which would appear to be aliases to v9's impdep's
67b305b0f1Sespie otherwise */
68b305b0f1Sespie #define v9notv9a (MASK_V9)
69c88b1d6cSniklas
70c88b1d6cSniklas /* Table of opcode architectures.
71b305b0f1Sespie The order is defined in opcode/sparc.h. */
72b305b0f1Sespie
73c88b1d6cSniklas const struct sparc_opcode_arch sparc_opcode_archs[] = {
74c88b1d6cSniklas { "v6", MASK_V6 },
75c88b1d6cSniklas { "v7", MASK_V6 | MASK_V7 },
76c88b1d6cSniklas { "v8", MASK_V6 | MASK_V7 | MASK_V8 },
77c88b1d6cSniklas { "sparclet", MASK_V6 | MASK_V7 | MASK_V8 | MASK_SPARCLET },
78c88b1d6cSniklas { "sparclite", MASK_V6 | MASK_V7 | MASK_V8 | MASK_SPARCLITE },
79c88b1d6cSniklas /* ??? Don't some v8 priviledged insns conflict with v9? */
80c88b1d6cSniklas { "v9", MASK_V6 | MASK_V7 | MASK_V8 | MASK_V9 },
81c88b1d6cSniklas /* v9 with ultrasparc additions */
82c88b1d6cSniklas { "v9a", MASK_V6 | MASK_V7 | MASK_V8 | MASK_V9 | MASK_V9A },
83b55d4692Sfgsch /* v9 with cheetah additions */
84b55d4692Sfgsch { "v9b", MASK_V6 | MASK_V7 | MASK_V8 | MASK_V9 | MASK_V9A | MASK_V9B },
85c88b1d6cSniklas { NULL, 0 }
862159047fSniklas };
872159047fSniklas
88c88b1d6cSniklas /* Given NAME, return it's architecture entry. */
89c88b1d6cSniklas
90c88b1d6cSniklas enum sparc_opcode_arch_val
sparc_opcode_lookup_arch(name)91c88b1d6cSniklas sparc_opcode_lookup_arch (name)
92c88b1d6cSniklas const char *name;
93c88b1d6cSniklas {
94c88b1d6cSniklas const struct sparc_opcode_arch *p;
95c88b1d6cSniklas
96c88b1d6cSniklas for (p = &sparc_opcode_archs[0]; p->name; ++p)
97c88b1d6cSniklas {
98c88b1d6cSniklas if (strcmp (name, p->name) == 0)
99c88b1d6cSniklas return (enum sparc_opcode_arch_val) (p - &sparc_opcode_archs[0]);
100c88b1d6cSniklas }
101c88b1d6cSniklas
102c88b1d6cSniklas return SPARC_OPCODE_ARCH_BAD;
103c88b1d6cSniklas }
104c88b1d6cSniklas
1052159047fSniklas /* Branch condition field. */
1062159047fSniklas #define COND(x) (((x)&0xf)<<25)
1072159047fSniklas
1082159047fSniklas /* v9: Move (MOVcc and FMOVcc) condition field. */
1092159047fSniklas #define MCOND(x,i_or_f) ((((i_or_f)&1)<<18)|(((x)>>11)&(0xf<<14))) /* v9 */
1102159047fSniklas
1112159047fSniklas /* v9: Move register (MOVRcc and FMOVRcc) condition field. */
1122159047fSniklas #define RCOND(x) (((x)&0x7)<<10) /* v9 */
1132159047fSniklas
1142159047fSniklas #define CONDA (COND(0x8))
1152159047fSniklas #define CONDCC (COND(0xd))
1162159047fSniklas #define CONDCS (COND(0x5))
1172159047fSniklas #define CONDE (COND(0x1))
1182159047fSniklas #define CONDG (COND(0xa))
1192159047fSniklas #define CONDGE (COND(0xb))
1202159047fSniklas #define CONDGU (COND(0xc))
1212159047fSniklas #define CONDL (COND(0x3))
1222159047fSniklas #define CONDLE (COND(0x2))
1232159047fSniklas #define CONDLEU (COND(0x4))
1242159047fSniklas #define CONDN (COND(0x0))
1252159047fSniklas #define CONDNE (COND(0x9))
1262159047fSniklas #define CONDNEG (COND(0x6))
1272159047fSniklas #define CONDPOS (COND(0xe))
1282159047fSniklas #define CONDVC (COND(0xf))
1292159047fSniklas #define CONDVS (COND(0x7))
1302159047fSniklas
1312159047fSniklas #define CONDNZ CONDNE
1322159047fSniklas #define CONDZ CONDE
1332159047fSniklas #define CONDGEU CONDCC
1342159047fSniklas #define CONDLU CONDCS
1352159047fSniklas
1362159047fSniklas #define FCONDA (COND(0x8))
1372159047fSniklas #define FCONDE (COND(0x9))
1382159047fSniklas #define FCONDG (COND(0x6))
1392159047fSniklas #define FCONDGE (COND(0xb))
1402159047fSniklas #define FCONDL (COND(0x4))
1412159047fSniklas #define FCONDLE (COND(0xd))
1422159047fSniklas #define FCONDLG (COND(0x2))
1432159047fSniklas #define FCONDN (COND(0x0))
1442159047fSniklas #define FCONDNE (COND(0x1))
1452159047fSniklas #define FCONDO (COND(0xf))
1462159047fSniklas #define FCONDU (COND(0x7))
1472159047fSniklas #define FCONDUE (COND(0xa))
1482159047fSniklas #define FCONDUG (COND(0x5))
1492159047fSniklas #define FCONDUGE (COND(0xc))
1502159047fSniklas #define FCONDUL (COND(0x3))
1512159047fSniklas #define FCONDULE (COND(0xe))
1522159047fSniklas
1532159047fSniklas #define FCONDNZ FCONDNE
1542159047fSniklas #define FCONDZ FCONDE
1552159047fSniklas
1562159047fSniklas #define ICC (0) /* v9 */
1572159047fSniklas #define XCC (1<<12) /* v9 */
1582159047fSniklas #define FCC(x) (((x)&0x3)<<11) /* v9 */
1592159047fSniklas #define FBFCC(x) (((x)&0x3)<<20) /* v9 */
160c88b1d6cSniklas
1612159047fSniklas /* The order of the opcodes in the table is significant:
1622159047fSniklas
1632159047fSniklas * The assembler requires that all instances of the same mnemonic must
1642159047fSniklas be consecutive. If they aren't, the assembler will bomb at runtime.
1652159047fSniklas
1662159047fSniklas * The disassembler should not care about the order of the opcodes.
1672159047fSniklas
1682159047fSniklas */
1692159047fSniklas
170c88b1d6cSniklas /* Entries for commutative arithmetic operations. */
171c88b1d6cSniklas /* ??? More entries can make use of this. */
172c88b1d6cSniklas #define COMMUTEOP(opcode, op3, arch_mask) \
173c88b1d6cSniklas { opcode, F3(2, op3, 0), F3(~2, ~op3, ~0)|ASI(~0), "1,2,d", 0, arch_mask }, \
174c88b1d6cSniklas { opcode, F3(2, op3, 1), F3(~2, ~op3, ~1), "1,i,d", 0, arch_mask }, \
175c88b1d6cSniklas { opcode, F3(2, op3, 1), F3(~2, ~op3, ~1), "i,1,d", 0, arch_mask }
176c88b1d6cSniklas
177b305b0f1Sespie const struct sparc_opcode sparc_opcodes[] = {
1782159047fSniklas
1792159047fSniklas { "ld", F3(3, 0x00, 0), F3(~3, ~0x00, ~0), "[1+2],d", 0, v6 },
1802159047fSniklas { "ld", F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0, "[1],d", 0, v6 }, /* ld [rs1+%g0],d */
1812159047fSniklas { "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[1+i],d", 0, v6 },
1822159047fSniklas { "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[i+1],d", 0, v6 },
1832159047fSniklas { "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0, "[i],d", 0, v6 },
1842159047fSniklas { "ld", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ld [rs1+0],d */
1852159047fSniklas { "ld", F3(3, 0x20, 0), F3(~3, ~0x20, ~0), "[1+2],g", 0, v6 },
1862159047fSniklas { "ld", F3(3, 0x20, 0), F3(~3, ~0x20, ~0)|RS2_G0, "[1],g", 0, v6 }, /* ld [rs1+%g0],d */
1872159047fSniklas { "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1), "[1+i],g", 0, v6 },
1882159047fSniklas { "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1), "[i+1],g", 0, v6 },
1892159047fSniklas { "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|RS1_G0, "[i],g", 0, v6 },
1902159047fSniklas { "ld", F3(3, 0x20, 1), F3(~3, ~0x20, ~1)|SIMM13(~0), "[1],g", 0, v6 }, /* ld [rs1+0],d */
1912159047fSniklas
1922159047fSniklas { "ld", F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RD(~0), "[1+2],F", 0, v6 },
1932159047fSniklas { "ld", F3(3, 0x21, 0), F3(~3, ~0x21, ~0)|RS2_G0|RD(~0),"[1],F", 0, v6 }, /* ld [rs1+%g0],d */
1942159047fSniklas { "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0), "[1+i],F", 0, v6 },
1952159047fSniklas { "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RD(~0), "[i+1],F", 0, v6 },
1962159047fSniklas { "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~0),"[i],F", 0, v6 },
1972159047fSniklas { "ld", F3(3, 0x21, 1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~0),"[1],F", 0, v6 }, /* ld [rs1+0],d */
1982159047fSniklas
199c88b1d6cSniklas { "ld", F3(3, 0x30, 0), F3(~3, ~0x30, ~0), "[1+2],D", 0, v6notv9 },
200c88b1d6cSniklas { "ld", F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0, "[1],D", 0, v6notv9 }, /* ld [rs1+%g0],d */
201c88b1d6cSniklas { "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[1+i],D", 0, v6notv9 },
202c88b1d6cSniklas { "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[i+1],D", 0, v6notv9 },
203c88b1d6cSniklas { "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0, "[i],D", 0, v6notv9 },
204c88b1d6cSniklas { "ld", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0), "[1],D", 0, v6notv9 }, /* ld [rs1+0],d */
205c88b1d6cSniklas { "ld", F3(3, 0x31, 0), F3(~3, ~0x31, ~0), "[1+2],C", 0, v6notv9 },
206c88b1d6cSniklas { "ld", F3(3, 0x31, 0), F3(~3, ~0x31, ~0)|RS2_G0, "[1],C", 0, v6notv9 }, /* ld [rs1+%g0],d */
207c88b1d6cSniklas { "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1), "[1+i],C", 0, v6notv9 },
208c88b1d6cSniklas { "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1), "[i+1],C", 0, v6notv9 },
209c88b1d6cSniklas { "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|RS1_G0, "[i],C", 0, v6notv9 },
210c88b1d6cSniklas { "ld", F3(3, 0x31, 1), F3(~3, ~0x31, ~1)|SIMM13(~0), "[1],C", 0, v6notv9 }, /* ld [rs1+0],d */
2112159047fSniklas
2122159047fSniklas /* The v9 LDUW is the same as the old 'ld' opcode, it is not the same as the
2132159047fSniklas 'ld' pseudo-op in v9. */
2142159047fSniklas { "lduw", F3(3, 0x00, 0), F3(~3, ~0x00, ~0), "[1+2],d", F_ALIAS, v9 },
2152159047fSniklas { "lduw", F3(3, 0x00, 0), F3(~3, ~0x00, ~0)|RS2_G0, "[1],d", F_ALIAS, v9 }, /* ld [rs1+%g0],d */
2162159047fSniklas { "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[1+i],d", F_ALIAS, v9 },
2172159047fSniklas { "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1), "[i+1],d", F_ALIAS, v9 },
2182159047fSniklas { "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|RS1_G0, "[i],d", F_ALIAS, v9 },
2192159047fSniklas { "lduw", F3(3, 0x00, 1), F3(~3, ~0x00, ~1)|SIMM13(~0), "[1],d", F_ALIAS, v9 }, /* ld [rs1+0],d */
2202159047fSniklas
2212159047fSniklas { "ldd", F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI(~0), "[1+2],d", 0, v6 },
2222159047fSniklas { "ldd", F3(3, 0x03, 0), F3(~3, ~0x03, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldd [rs1+%g0],d */
2232159047fSniklas { "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1), "[1+i],d", 0, v6 },
2242159047fSniklas { "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1), "[i+1],d", 0, v6 },
2252159047fSniklas { "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|RS1_G0, "[i],d", 0, v6 },
2262159047fSniklas { "ldd", F3(3, 0x03, 1), F3(~3, ~0x03, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldd [rs1+0],d */
2272159047fSniklas { "ldd", F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI(~0), "[1+2],H", 0, v6 },
2282159047fSniklas { "ldd", F3(3, 0x23, 0), F3(~3, ~0x23, ~0)|ASI_RS2(~0), "[1],H", 0, v6 }, /* ldd [rs1+%g0],d */
2292159047fSniklas { "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1), "[1+i],H", 0, v6 },
2302159047fSniklas { "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1), "[i+1],H", 0, v6 },
2312159047fSniklas { "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|RS1_G0, "[i],H", 0, v6 },
2322159047fSniklas { "ldd", F3(3, 0x23, 1), F3(~3, ~0x23, ~1)|SIMM13(~0), "[1],H", 0, v6 }, /* ldd [rs1+0],d */
2332159047fSniklas
234c88b1d6cSniklas { "ldd", F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI(~0), "[1+2],D", 0, v6notv9 },
235c88b1d6cSniklas { "ldd", F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|ASI_RS2(~0), "[1],D", 0, v6notv9 }, /* ldd [rs1+%g0],d */
236c88b1d6cSniklas { "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[1+i],D", 0, v6notv9 },
237c88b1d6cSniklas { "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[i+1],D", 0, v6notv9 },
238c88b1d6cSniklas { "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0, "[i],D", 0, v6notv9 },
239c88b1d6cSniklas { "ldd", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0), "[1],D", 0, v6notv9 }, /* ldd [rs1+0],d */
2402159047fSniklas
2412159047fSniklas { "ldq", F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI(~0), "[1+2],J", 0, v9 },
2422159047fSniklas { "ldq", F3(3, 0x22, 0), F3(~3, ~0x22, ~0)|ASI_RS2(~0), "[1],J", 0, v9 }, /* ldd [rs1+%g0],d */
2432159047fSniklas { "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1), "[1+i],J", 0, v9 },
2442159047fSniklas { "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1), "[i+1],J", 0, v9 },
2452159047fSniklas { "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|RS1_G0, "[i],J", 0, v9 },
2462159047fSniklas { "ldq", F3(3, 0x22, 1), F3(~3, ~0x22, ~1)|SIMM13(~0), "[1],J", 0, v9 }, /* ldd [rs1+0],d */
2472159047fSniklas
2482159047fSniklas { "ldsb", F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI(~0), "[1+2],d", 0, v6 },
2492159047fSniklas { "ldsb", F3(3, 0x09, 0), F3(~3, ~0x09, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldsb [rs1+%g0],d */
2502159047fSniklas { "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1), "[1+i],d", 0, v6 },
2512159047fSniklas { "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1), "[i+1],d", 0, v6 },
2522159047fSniklas { "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|RS1_G0, "[i],d", 0, v6 },
2532159047fSniklas { "ldsb", F3(3, 0x09, 1), F3(~3, ~0x09, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldsb [rs1+0],d */
2542159047fSniklas
2552159047fSniklas { "ldsh", F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldsh [rs1+%g0],d */
2562159047fSniklas { "ldsh", F3(3, 0x0a, 0), F3(~3, ~0x0a, ~0)|ASI(~0), "[1+2],d", 0, v6 },
2572159047fSniklas { "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1), "[1+i],d", 0, v6 },
2582159047fSniklas { "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1), "[i+1],d", 0, v6 },
2592159047fSniklas { "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|RS1_G0, "[i],d", 0, v6 },
2602159047fSniklas { "ldsh", F3(3, 0x0a, 1), F3(~3, ~0x0a, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldsh [rs1+0],d */
2612159047fSniklas
2622159047fSniklas { "ldstub", F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI(~0), "[1+2],d", 0, v6 },
2632159047fSniklas { "ldstub", F3(3, 0x0d, 0), F3(~3, ~0x0d, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldstub [rs1+%g0],d */
2642159047fSniklas { "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1), "[1+i],d", 0, v6 },
2652159047fSniklas { "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1), "[i+1],d", 0, v6 },
2662159047fSniklas { "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|RS1_G0, "[i],d", 0, v6 },
2672159047fSniklas { "ldstub", F3(3, 0x0d, 1), F3(~3, ~0x0d, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldstub [rs1+0],d */
2682159047fSniklas
2692159047fSniklas { "ldsw", F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI(~0), "[1+2],d", 0, v9 },
2702159047fSniklas { "ldsw", F3(3, 0x08, 0), F3(~3, ~0x08, ~0)|ASI_RS2(~0), "[1],d", 0, v9 }, /* ldsw [rs1+%g0],d */
2712159047fSniklas { "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1), "[1+i],d", 0, v9 },
2722159047fSniklas { "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1), "[i+1],d", 0, v9 },
2732159047fSniklas { "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|RS1_G0, "[i],d", 0, v9 },
2742159047fSniklas { "ldsw", F3(3, 0x08, 1), F3(~3, ~0x08, ~1)|SIMM13(~0), "[1],d", 0, v9 }, /* ldsw [rs1+0],d */
2752159047fSniklas
2762159047fSniklas { "ldub", F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI(~0), "[1+2],d", 0, v6 },
2772159047fSniklas { "ldub", F3(3, 0x01, 0), F3(~3, ~0x01, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* ldub [rs1+%g0],d */
2782159047fSniklas { "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1), "[1+i],d", 0, v6 },
2792159047fSniklas { "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1), "[i+1],d", 0, v6 },
2802159047fSniklas { "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|RS1_G0, "[i],d", 0, v6 },
2812159047fSniklas { "ldub", F3(3, 0x01, 1), F3(~3, ~0x01, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* ldub [rs1+0],d */
2822159047fSniklas
2832159047fSniklas { "lduh", F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI(~0), "[1+2],d", 0, v6 },
2842159047fSniklas { "lduh", F3(3, 0x02, 0), F3(~3, ~0x02, ~0)|ASI_RS2(~0), "[1],d", 0, v6 }, /* lduh [rs1+%g0],d */
2852159047fSniklas { "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1), "[1+i],d", 0, v6 },
2862159047fSniklas { "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1), "[i+1],d", 0, v6 },
2872159047fSniklas { "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|RS1_G0, "[i],d", 0, v6 },
2882159047fSniklas { "lduh", F3(3, 0x02, 1), F3(~3, ~0x02, ~1)|SIMM13(~0), "[1],d", 0, v6 }, /* lduh [rs1+0],d */
2892159047fSniklas
2902159047fSniklas { "ldx", F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI(~0), "[1+2],d", 0, v9 },
2912159047fSniklas { "ldx", F3(3, 0x0b, 0), F3(~3, ~0x0b, ~0)|ASI_RS2(~0), "[1],d", 0, v9 }, /* ldx [rs1+%g0],d */
2922159047fSniklas { "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1), "[1+i],d", 0, v9 },
2932159047fSniklas { "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1), "[i+1],d", 0, v9 },
2942159047fSniklas { "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|RS1_G0, "[i],d", 0, v9 },
2952159047fSniklas { "ldx", F3(3, 0x0b, 1), F3(~3, ~0x0b, ~1)|SIMM13(~0), "[1],d", 0, v9 }, /* ldx [rs1+0],d */
2962159047fSniklas
2972159047fSniklas { "ldx", F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RD(~1), "[1+2],F", 0, v9 },
2982159047fSniklas { "ldx", F3(3, 0x21, 0)|RD(1), F3(~3, ~0x21, ~0)|RS2_G0|RD(~1), "[1],F", 0, v9 }, /* ld [rs1+%g0],d */
2992159047fSniklas { "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1), "[1+i],F", 0, v9 },
3002159047fSniklas { "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RD(~1), "[i+1],F", 0, v9 },
3012159047fSniklas { "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|RS1_G0|RD(~1), "[i],F", 0, v9 },
3022159047fSniklas { "ldx", F3(3, 0x21, 1)|RD(1), F3(~3, ~0x21, ~1)|SIMM13(~0)|RD(~1),"[1],F", 0, v9 }, /* ld [rs1+0],d */
3032159047fSniklas
3042159047fSniklas { "lda", F3(3, 0x10, 0), F3(~3, ~0x10, ~0), "[1+2]A,d", 0, v6 },
3052159047fSniklas { "lda", F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* lda [rs1+%g0],d */
3062159047fSniklas { "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[1+i]o,d", 0, v9 },
3072159047fSniklas { "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[i+1]o,d", 0, v9 },
3082159047fSniklas { "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0, "[i]o,d", 0, v9 },
3092159047fSniklas { "lda", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
3102159047fSniklas { "lda", F3(3, 0x30, 0), F3(~3, ~0x30, ~0), "[1+2]A,g", 0, v9 },
3112159047fSniklas { "lda", F3(3, 0x30, 0), F3(~3, ~0x30, ~0)|RS2_G0, "[1]A,g", 0, v9 }, /* lda [rs1+%g0],d */
3122159047fSniklas { "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[1+i]o,g", 0, v9 },
3132159047fSniklas { "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1), "[i+1]o,g", 0, v9 },
3142159047fSniklas { "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|RS1_G0, "[i]o,g", 0, v9 },
3152159047fSniklas { "lda", F3(3, 0x30, 1), F3(~3, ~0x30, ~1)|SIMM13(~0), "[1]o,g", 0, v9 }, /* ld [rs1+0],d */
3162159047fSniklas
3172159047fSniklas { "ldda", F3(3, 0x13, 0), F3(~3, ~0x13, ~0), "[1+2]A,d", 0, v6 },
3182159047fSniklas { "ldda", F3(3, 0x13, 0), F3(~3, ~0x13, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldda [rs1+%g0],d */
3192159047fSniklas { "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1), "[1+i]o,d", 0, v9 },
3202159047fSniklas { "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1), "[i+1]o,d", 0, v9 },
3212159047fSniklas { "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|RS1_G0, "[i]o,d", 0, v9 },
3222159047fSniklas { "ldda", F3(3, 0x13, 1), F3(~3, ~0x13, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
3232159047fSniklas
3242159047fSniklas { "ldda", F3(3, 0x33, 0), F3(~3, ~0x33, ~0), "[1+2]A,H", 0, v9 },
3252159047fSniklas { "ldda", F3(3, 0x33, 0), F3(~3, ~0x33, ~0)|RS2_G0, "[1]A,H", 0, v9 }, /* ldda [rs1+%g0],d */
3262159047fSniklas { "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[1+i]o,H", 0, v9 },
3272159047fSniklas { "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1), "[i+1]o,H", 0, v9 },
3282159047fSniklas { "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|RS1_G0, "[i]o,H", 0, v9 },
3292159047fSniklas { "ldda", F3(3, 0x33, 1), F3(~3, ~0x33, ~1)|SIMM13(~0), "[1]o,H", 0, v9 }, /* ld [rs1+0],d */
3302159047fSniklas
3312159047fSniklas { "ldqa", F3(3, 0x32, 0), F3(~3, ~0x32, ~0), "[1+2]A,J", 0, v9 },
3322159047fSniklas { "ldqa", F3(3, 0x32, 0), F3(~3, ~0x32, ~0)|RS2_G0, "[1]A,J", 0, v9 }, /* ldd [rs1+%g0],d */
3332159047fSniklas { "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1), "[1+i]o,J", 0, v9 },
3342159047fSniklas { "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1), "[i+1]o,J", 0, v9 },
3352159047fSniklas { "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|RS1_G0, "[i]o,J", 0, v9 },
3362159047fSniklas { "ldqa", F3(3, 0x32, 1), F3(~3, ~0x32, ~1)|SIMM13(~0), "[1]o,J", 0, v9 }, /* ldd [rs1+0],d */
3372159047fSniklas
3382159047fSniklas { "ldsba", F3(3, 0x19, 0), F3(~3, ~0x19, ~0), "[1+2]A,d", 0, v6 },
3392159047fSniklas { "ldsba", F3(3, 0x19, 0), F3(~3, ~0x19, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldsba [rs1+%g0],d */
3402159047fSniklas { "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1), "[1+i]o,d", 0, v9 },
3412159047fSniklas { "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1), "[i+1]o,d", 0, v9 },
3422159047fSniklas { "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|RS1_G0, "[i]o,d", 0, v9 },
3432159047fSniklas { "ldsba", F3(3, 0x19, 1), F3(~3, ~0x19, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
3442159047fSniklas
3452159047fSniklas { "ldsha", F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0), "[1+2]A,d", 0, v6 },
3462159047fSniklas { "ldsha", F3(3, 0x1a, 0), F3(~3, ~0x1a, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldsha [rs1+%g0],d */
3472159047fSniklas { "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1), "[1+i]o,d", 0, v9 },
3482159047fSniklas { "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1), "[i+1]o,d", 0, v9 },
3492159047fSniklas { "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|RS1_G0, "[i]o,d", 0, v9 },
3502159047fSniklas { "ldsha", F3(3, 0x1a, 1), F3(~3, ~0x1a, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
3512159047fSniklas
3522159047fSniklas { "ldstuba", F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0), "[1+2]A,d", 0, v6 },
3532159047fSniklas { "ldstuba", F3(3, 0x1d, 0), F3(~3, ~0x1d, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* ldstuba [rs1+%g0],d */
3542159047fSniklas { "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1), "[1+i]o,d", 0, v9 },
3552159047fSniklas { "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1), "[i+1]o,d", 0, v9 },
3562159047fSniklas { "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|RS1_G0, "[i]o,d", 0, v9 },
3572159047fSniklas { "ldstuba", F3(3, 0x1d, 1), F3(~3, ~0x1d, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
3582159047fSniklas
3592159047fSniklas { "ldswa", F3(3, 0x18, 0), F3(~3, ~0x18, ~0), "[1+2]A,d", 0, v9 },
3602159047fSniklas { "ldswa", F3(3, 0x18, 0), F3(~3, ~0x18, ~0)|RS2_G0, "[1]A,d", 0, v9 }, /* lda [rs1+%g0],d */
3612159047fSniklas { "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1), "[1+i]o,d", 0, v9 },
3622159047fSniklas { "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1), "[i+1]o,d", 0, v9 },
3632159047fSniklas { "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|RS1_G0, "[i]o,d", 0, v9 },
3642159047fSniklas { "ldswa", F3(3, 0x18, 1), F3(~3, ~0x18, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
3652159047fSniklas
3662159047fSniklas { "lduba", F3(3, 0x11, 0), F3(~3, ~0x11, ~0), "[1+2]A,d", 0, v6 },
3672159047fSniklas { "lduba", F3(3, 0x11, 0), F3(~3, ~0x11, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* lduba [rs1+%g0],d */
3682159047fSniklas { "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1), "[1+i]o,d", 0, v9 },
3692159047fSniklas { "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1), "[i+1]o,d", 0, v9 },
3702159047fSniklas { "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|RS1_G0, "[i]o,d", 0, v9 },
3712159047fSniklas { "lduba", F3(3, 0x11, 1), F3(~3, ~0x11, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
3722159047fSniklas
3732159047fSniklas { "lduha", F3(3, 0x12, 0), F3(~3, ~0x12, ~0), "[1+2]A,d", 0, v6 },
3742159047fSniklas { "lduha", F3(3, 0x12, 0), F3(~3, ~0x12, ~0)|RS2_G0, "[1]A,d", 0, v6 }, /* lduha [rs1+%g0],d */
3752159047fSniklas { "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1), "[1+i]o,d", 0, v9 },
3762159047fSniklas { "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1), "[i+1]o,d", 0, v9 },
3772159047fSniklas { "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|RS1_G0, "[i]o,d", 0, v9 },
3782159047fSniklas { "lduha", F3(3, 0x12, 1), F3(~3, ~0x12, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
3792159047fSniklas
3802159047fSniklas { "lduwa", F3(3, 0x10, 0), F3(~3, ~0x10, ~0), "[1+2]A,d", F_ALIAS, v9 }, /* lduwa === lda */
3812159047fSniklas { "lduwa", F3(3, 0x10, 0), F3(~3, ~0x10, ~0)|RS2_G0, "[1]A,d", F_ALIAS, v9 }, /* lda [rs1+%g0],d */
3822159047fSniklas { "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[1+i]o,d", F_ALIAS, v9 },
3832159047fSniklas { "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1), "[i+1]o,d", F_ALIAS, v9 },
3842159047fSniklas { "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|RS1_G0, "[i]o,d", F_ALIAS, v9 },
3852159047fSniklas { "lduwa", F3(3, 0x10, 1), F3(~3, ~0x10, ~1)|SIMM13(~0), "[1]o,d", F_ALIAS, v9 }, /* ld [rs1+0],d */
3862159047fSniklas
387b305b0f1Sespie { "ldxa", F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0), "[1+2]A,d", 0, v9 },
3882159047fSniklas { "ldxa", F3(3, 0x1b, 0), F3(~3, ~0x1b, ~0)|RS2_G0, "[1]A,d", 0, v9 }, /* lda [rs1+%g0],d */
3892159047fSniklas { "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1), "[1+i]o,d", 0, v9 },
3902159047fSniklas { "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1), "[i+1]o,d", 0, v9 },
3912159047fSniklas { "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|RS1_G0, "[i]o,d", 0, v9 },
3922159047fSniklas { "ldxa", F3(3, 0x1b, 1), F3(~3, ~0x1b, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* ld [rs1+0],d */
3932159047fSniklas
3942159047fSniklas { "st", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
3952159047fSniklas { "st", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* st d,[rs1+%g0] */
3962159047fSniklas { "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[1+i]", 0, v6 },
3972159047fSniklas { "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[i+1]", 0, v6 },
3982159047fSniklas { "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0, "d,[i]", 0, v6 },
3992159047fSniklas { "st", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* st d,[rs1+0] */
4002159047fSniklas { "st", F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI(~0), "g,[1+2]", 0, v6 },
4012159047fSniklas { "st", F3(3, 0x24, 0), F3(~3, ~0x24, ~0)|ASI_RS2(~0), "g,[1]", 0, v6 }, /* st d[rs1+%g0] */
4022159047fSniklas { "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1), "g,[1+i]", 0, v6 },
4032159047fSniklas { "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1), "g,[i+1]", 0, v6 },
4042159047fSniklas { "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|RS1_G0, "g,[i]", 0, v6 },
4052159047fSniklas { "st", F3(3, 0x24, 1), F3(~3, ~0x24, ~1)|SIMM13(~0), "g,[1]", 0, v6 }, /* st d,[rs1+0] */
4062159047fSniklas
407c88b1d6cSniklas { "st", F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI(~0), "D,[1+2]", 0, v6notv9 },
408c88b1d6cSniklas { "st", F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|ASI_RS2(~0), "D,[1]", 0, v6notv9 }, /* st d,[rs1+%g0] */
409c88b1d6cSniklas { "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "D,[1+i]", 0, v6notv9 },
410c88b1d6cSniklas { "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "D,[i+1]", 0, v6notv9 },
411c88b1d6cSniklas { "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0, "D,[i]", 0, v6notv9 },
412c88b1d6cSniklas { "st", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0), "D,[1]", 0, v6notv9 }, /* st d,[rs1+0] */
413c88b1d6cSniklas { "st", F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI(~0), "C,[1+2]", 0, v6notv9 },
414c88b1d6cSniklas { "st", F3(3, 0x35, 0), F3(~3, ~0x35, ~0)|ASI_RS2(~0), "C,[1]", 0, v6notv9 }, /* st d,[rs1+%g0] */
415c88b1d6cSniklas { "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1), "C,[1+i]", 0, v6notv9 },
416c88b1d6cSniklas { "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1), "C,[i+1]", 0, v6notv9 },
417c88b1d6cSniklas { "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|RS1_G0, "C,[i]", 0, v6notv9 },
418c88b1d6cSniklas { "st", F3(3, 0x35, 1), F3(~3, ~0x35, ~1)|SIMM13(~0), "C,[1]", 0, v6notv9 }, /* st d,[rs1+0] */
4192159047fSniklas
4202159047fSniklas { "st", F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI(~0), "F,[1+2]", 0, v6 },
4212159047fSniklas { "st", F3(3, 0x25, 0), F3(~3, ~0x25, ~0)|RD_G0|ASI_RS2(~0), "F,[1]", 0, v6 }, /* st d,[rs1+%g0] */
4222159047fSniklas { "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0, "F,[1+i]", 0, v6 },
4232159047fSniklas { "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0, "F,[i+1]", 0, v6 },
4242159047fSniklas { "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|RS1_G0, "F,[i]", 0, v6 },
4252159047fSniklas { "st", F3(3, 0x25, 1), F3(~3, ~0x25, ~1)|RD_G0|SIMM13(~0), "F,[1]", 0, v6 }, /* st d,[rs1+0] */
4262159047fSniklas
4272159047fSniklas { "stw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v9 },
4282159047fSniklas { "stw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+%g0] */
4292159047fSniklas { "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[1+i]", F_ALIAS, v9 },
4302159047fSniklas { "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[i+1]", F_ALIAS, v9 },
4312159047fSniklas { "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0, "d,[i]", F_ALIAS, v9 },
4322159047fSniklas { "stw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+0] */
433b305b0f1Sespie { "stsw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v9 },
434b305b0f1Sespie { "stsw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+%g0] */
435b305b0f1Sespie { "stsw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[1+i]", F_ALIAS, v9 },
436b305b0f1Sespie { "stsw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[i+1]", F_ALIAS, v9 },
437b305b0f1Sespie { "stsw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0, "d,[i]", F_ALIAS, v9 },
438b305b0f1Sespie { "stsw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+0] */
439b305b0f1Sespie { "stuw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v9 },
440b305b0f1Sespie { "stuw", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+%g0] */
441b305b0f1Sespie { "stuw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[1+i]", F_ALIAS, v9 },
442b305b0f1Sespie { "stuw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[i+1]", F_ALIAS, v9 },
443b305b0f1Sespie { "stuw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0, "d,[i]", F_ALIAS, v9 },
444b305b0f1Sespie { "stuw", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v9 }, /* st d,[rs1+0] */
445b305b0f1Sespie
446b305b0f1Sespie { "spill", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v6 },
447b305b0f1Sespie { "spill", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v6 }, /* st d,[rs1+%g0] */
448b305b0f1Sespie { "spill", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[1+i]", F_ALIAS, v6 },
449b305b0f1Sespie { "spill", F3(3, 0x04, 1), F3(~3, ~0x04, ~1), "d,[i+1]", F_ALIAS, v6 },
450b305b0f1Sespie { "spill", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RS1_G0, "d,[i]", F_ALIAS, v6 },
451b305b0f1Sespie { "spill", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v6 }, /* st d,[rs1+0] */
4522159047fSniklas
4532159047fSniklas { "sta", F3(3, 0x14, 0), F3(~3, ~0x14, ~0), "d,[1+2]A", 0, v6 },
4542159047fSniklas { "sta", F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* sta d,[rs1+%g0] */
4552159047fSniklas { "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[1+i]o", 0, v9 },
4562159047fSniklas { "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[i+1]o", 0, v9 },
4572159047fSniklas { "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0, "d,[i]o", 0, v9 },
4582159047fSniklas { "sta", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* st d,[rs1+0] */
4592159047fSniklas
4602159047fSniklas { "sta", F3(3, 0x34, 0), F3(~3, ~0x34, ~0), "g,[1+2]A", 0, v9 },
4612159047fSniklas { "sta", F3(3, 0x34, 0), F3(~3, ~0x34, ~0)|RS2(~0), "g,[1]A", 0, v9 }, /* sta d,[rs1+%g0] */
4622159047fSniklas { "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "g,[1+i]o", 0, v9 },
4632159047fSniklas { "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1), "g,[i+1]o", 0, v9 },
4642159047fSniklas { "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|RS1_G0, "g,[i]o", 0, v9 },
4652159047fSniklas { "sta", F3(3, 0x34, 1), F3(~3, ~0x34, ~1)|SIMM13(~0), "g,[1]o", 0, v9 }, /* st d,[rs1+0] */
4662159047fSniklas
4672159047fSniklas { "stwa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0), "d,[1+2]A", F_ALIAS, v9 },
4682159047fSniklas { "stwa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0), "d,[1]A", F_ALIAS, v9 }, /* sta d,[rs1+%g0] */
4692159047fSniklas { "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[1+i]o", F_ALIAS, v9 },
4702159047fSniklas { "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[i+1]o", F_ALIAS, v9 },
4712159047fSniklas { "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0, "d,[i]o", F_ALIAS, v9 },
4722159047fSniklas { "stwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0), "d,[1]o", F_ALIAS, v9 }, /* st d,[rs1+0] */
473b305b0f1Sespie { "stswa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0), "d,[1+2]A", F_ALIAS, v9 },
474b305b0f1Sespie { "stswa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0), "d,[1]A", F_ALIAS, v9 }, /* sta d,[rs1+%g0] */
475b305b0f1Sespie { "stswa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[1+i]o", F_ALIAS, v9 },
476b305b0f1Sespie { "stswa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[i+1]o", F_ALIAS, v9 },
477b305b0f1Sespie { "stswa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0, "d,[i]o", F_ALIAS, v9 },
478b305b0f1Sespie { "stswa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0), "d,[1]o", F_ALIAS, v9 }, /* st d,[rs1+0] */
479b305b0f1Sespie { "stuwa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0), "d,[1+2]A", F_ALIAS, v9 },
480b305b0f1Sespie { "stuwa", F3(3, 0x14, 0), F3(~3, ~0x14, ~0)|RS2(~0), "d,[1]A", F_ALIAS, v9 }, /* sta d,[rs1+%g0] */
481b305b0f1Sespie { "stuwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[1+i]o", F_ALIAS, v9 },
482b305b0f1Sespie { "stuwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1), "d,[i+1]o", F_ALIAS, v9 },
483b305b0f1Sespie { "stuwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|RS1_G0, "d,[i]o", F_ALIAS, v9 },
484b305b0f1Sespie { "stuwa", F3(3, 0x14, 1), F3(~3, ~0x14, ~1)|SIMM13(~0), "d,[1]o", F_ALIAS, v9 }, /* st d,[rs1+0] */
4852159047fSniklas
4862159047fSniklas { "stb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
4872159047fSniklas { "stb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* stb d,[rs1+%g0] */
4882159047fSniklas { "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[1+i]", 0, v6 },
4892159047fSniklas { "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[i+1]", 0, v6 },
4902159047fSniklas { "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0, "d,[i]", 0, v6 },
4912159047fSniklas { "stb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* stb d,[rs1+0] */
4922159047fSniklas
493b305b0f1Sespie { "stsb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v6 },
494b305b0f1Sespie { "stsb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v6 }, /* stb d,[rs1+%g0] */
495b305b0f1Sespie { "stsb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[1+i]", F_ALIAS, v6 },
496b305b0f1Sespie { "stsb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[i+1]", F_ALIAS, v6 },
497b305b0f1Sespie { "stsb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0, "d,[i]", F_ALIAS, v6 },
498b305b0f1Sespie { "stsb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v6 }, /* stb d,[rs1+0] */
499b305b0f1Sespie { "stub", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v6 },
500b305b0f1Sespie { "stub", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v6 }, /* stb d,[rs1+%g0] */
501b305b0f1Sespie { "stub", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[1+i]", F_ALIAS, v6 },
502b305b0f1Sespie { "stub", F3(3, 0x05, 1), F3(~3, ~0x05, ~1), "d,[i+1]", F_ALIAS, v6 },
503b305b0f1Sespie { "stub", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RS1_G0, "d,[i]", F_ALIAS, v6 },
504b305b0f1Sespie { "stub", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v6 }, /* stb d,[rs1+0] */
505b305b0f1Sespie
5062159047fSniklas { "stba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0), "d,[1+2]A", 0, v6 },
5072159047fSniklas { "stba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* stba d,[rs1+%g0] */
5082159047fSniklas { "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[1+i]o", 0, v9 },
5092159047fSniklas { "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[i+1]o", 0, v9 },
5102159047fSniklas { "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0, "d,[i]o", 0, v9 },
5112159047fSniklas { "stba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* stb d,[rs1+0] */
5122159047fSniklas
513b305b0f1Sespie { "stsba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0), "d,[1+2]A", F_ALIAS, v6 },
514b305b0f1Sespie { "stsba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0), "d,[1]A", F_ALIAS, v6 }, /* stba d,[rs1+%g0] */
515b305b0f1Sespie { "stsba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[1+i]o", F_ALIAS, v9 },
516b305b0f1Sespie { "stsba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[i+1]o", F_ALIAS, v9 },
517b305b0f1Sespie { "stsba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0, "d,[i]o", F_ALIAS, v9 },
518b305b0f1Sespie { "stsba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0), "d,[1]o", F_ALIAS, v9 }, /* stb d,[rs1+0] */
519b305b0f1Sespie { "stuba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0), "d,[1+2]A", F_ALIAS, v6 },
520b305b0f1Sespie { "stuba", F3(3, 0x15, 0), F3(~3, ~0x15, ~0)|RS2(~0), "d,[1]A", F_ALIAS, v6 }, /* stba d,[rs1+%g0] */
521b305b0f1Sespie { "stuba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[1+i]o", F_ALIAS, v9 },
522b305b0f1Sespie { "stuba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1), "d,[i+1]o", F_ALIAS, v9 },
523b305b0f1Sespie { "stuba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|RS1_G0, "d,[i]o", F_ALIAS, v9 },
524b305b0f1Sespie { "stuba", F3(3, 0x15, 1), F3(~3, ~0x15, ~1)|SIMM13(~0), "d,[1]o", F_ALIAS, v9 }, /* stb d,[rs1+0] */
525b305b0f1Sespie
5262159047fSniklas { "std", F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
5272159047fSniklas { "std", F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* std d,[rs1+%g0] */
5282159047fSniklas { "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1), "d,[1+i]", 0, v6 },
5292159047fSniklas { "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1), "d,[i+1]", 0, v6 },
5302159047fSniklas { "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|RS1_G0, "d,[i]", 0, v6 },
5312159047fSniklas { "std", F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* std d,[rs1+0] */
5322159047fSniklas
533c88b1d6cSniklas { "std", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0), "q,[1+2]", 0, v6notv9 },
534c88b1d6cSniklas { "std", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0), "q,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
535c88b1d6cSniklas { "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "q,[1+i]", 0, v6notv9 },
536c88b1d6cSniklas { "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "q,[i+1]", 0, v6notv9 },
537c88b1d6cSniklas { "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0, "q,[i]", 0, v6notv9 },
538c88b1d6cSniklas { "std", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0), "q,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
5392159047fSniklas { "std", F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI(~0), "H,[1+2]", 0, v6 },
5402159047fSniklas { "std", F3(3, 0x27, 0), F3(~3, ~0x27, ~0)|ASI_RS2(~0), "H,[1]", 0, v6 }, /* std d,[rs1+%g0] */
5412159047fSniklas { "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1), "H,[1+i]", 0, v6 },
5422159047fSniklas { "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1), "H,[i+1]", 0, v6 },
5432159047fSniklas { "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|RS1_G0, "H,[i]", 0, v6 },
5442159047fSniklas { "std", F3(3, 0x27, 1), F3(~3, ~0x27, ~1)|SIMM13(~0), "H,[1]", 0, v6 }, /* std d,[rs1+0] */
5452159047fSniklas
546c88b1d6cSniklas { "std", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0), "Q,[1+2]", 0, v6notv9 },
547c88b1d6cSniklas { "std", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0), "Q,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
548c88b1d6cSniklas { "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "Q,[1+i]", 0, v6notv9 },
549c88b1d6cSniklas { "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "Q,[i+1]", 0, v6notv9 },
550c88b1d6cSniklas { "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0, "Q,[i]", 0, v6notv9 },
551c88b1d6cSniklas { "std", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0), "Q,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
552c88b1d6cSniklas { "std", F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI(~0), "D,[1+2]", 0, v6notv9 },
553c88b1d6cSniklas { "std", F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|ASI_RS2(~0), "D,[1]", 0, v6notv9 }, /* std d,[rs1+%g0] */
554c88b1d6cSniklas { "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "D,[1+i]", 0, v6notv9 },
555c88b1d6cSniklas { "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "D,[i+1]", 0, v6notv9 },
556c88b1d6cSniklas { "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0, "D,[i]", 0, v6notv9 },
557c88b1d6cSniklas { "std", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0), "D,[1]", 0, v6notv9 }, /* std d,[rs1+0] */
5582159047fSniklas
559b305b0f1Sespie { "spilld", F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v6 },
560b305b0f1Sespie { "spilld", F3(3, 0x07, 0), F3(~3, ~0x07, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v6 }, /* std d,[rs1+%g0] */
561b305b0f1Sespie { "spilld", F3(3, 0x07, 1), F3(~3, ~0x07, ~1), "d,[1+i]", F_ALIAS, v6 },
562b305b0f1Sespie { "spilld", F3(3, 0x07, 1), F3(~3, ~0x07, ~1), "d,[i+1]", F_ALIAS, v6 },
563b305b0f1Sespie { "spilld", F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|RS1_G0, "d,[i]", F_ALIAS, v6 },
564b305b0f1Sespie { "spilld", F3(3, 0x07, 1), F3(~3, ~0x07, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v6 }, /* std d,[rs1+0] */
565b305b0f1Sespie
5662159047fSniklas { "stda", F3(3, 0x17, 0), F3(~3, ~0x17, ~0), "d,[1+2]A", 0, v6 },
5672159047fSniklas { "stda", F3(3, 0x17, 0), F3(~3, ~0x17, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* stda d,[rs1+%g0] */
5682159047fSniklas { "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1), "d,[1+i]o", 0, v9 },
5692159047fSniklas { "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1), "d,[i+1]o", 0, v9 },
5702159047fSniklas { "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|RS1_G0, "d,[i]o", 0, v9 },
5712159047fSniklas { "stda", F3(3, 0x17, 1), F3(~3, ~0x17, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* std d,[rs1+0] */
5722159047fSniklas { "stda", F3(3, 0x37, 0), F3(~3, ~0x37, ~0), "H,[1+2]A", 0, v9 },
5732159047fSniklas { "stda", F3(3, 0x37, 0), F3(~3, ~0x37, ~0)|RS2(~0), "H,[1]A", 0, v9 }, /* stda d,[rs1+%g0] */
5742159047fSniklas { "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "H,[1+i]o", 0, v9 },
5752159047fSniklas { "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1), "H,[i+1]o", 0, v9 },
5762159047fSniklas { "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|RS1_G0, "H,[i]o", 0, v9 },
5772159047fSniklas { "stda", F3(3, 0x37, 1), F3(~3, ~0x37, ~1)|SIMM13(~0), "H,[1]o", 0, v9 }, /* std d,[rs1+0] */
5782159047fSniklas
5792159047fSniklas { "sth", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0), "d,[1+2]", 0, v6 },
5802159047fSniklas { "sth", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0), "d,[1]", 0, v6 }, /* sth d,[rs1+%g0] */
5812159047fSniklas { "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[1+i]", 0, v6 },
5822159047fSniklas { "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[i+1]", 0, v6 },
5832159047fSniklas { "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0, "d,[i]", 0, v6 },
5842159047fSniklas { "sth", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0), "d,[1]", 0, v6 }, /* sth d,[rs1+0] */
5852159047fSniklas
586b305b0f1Sespie { "stsh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v6 },
587b305b0f1Sespie { "stsh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v6 }, /* sth d,[rs1+%g0] */
588b305b0f1Sespie { "stsh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[1+i]", F_ALIAS, v6 },
589b305b0f1Sespie { "stsh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[i+1]", F_ALIAS, v6 },
590b305b0f1Sespie { "stsh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0, "d,[i]", F_ALIAS, v6 },
591b305b0f1Sespie { "stsh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v6 }, /* sth d,[rs1+0] */
592b305b0f1Sespie { "stuh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI(~0), "d,[1+2]", F_ALIAS, v6 },
593b305b0f1Sespie { "stuh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|ASI_RS2(~0), "d,[1]", F_ALIAS, v6 }, /* sth d,[rs1+%g0] */
594b305b0f1Sespie { "stuh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[1+i]", F_ALIAS, v6 },
595b305b0f1Sespie { "stuh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1), "d,[i+1]", F_ALIAS, v6 },
596b305b0f1Sespie { "stuh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RS1_G0, "d,[i]", F_ALIAS, v6 },
597b305b0f1Sespie { "stuh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|SIMM13(~0), "d,[1]", F_ALIAS, v6 }, /* sth d,[rs1+0] */
598b305b0f1Sespie
5992159047fSniklas { "stha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0), "d,[1+2]A", 0, v6 },
6002159047fSniklas { "stha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0), "d,[1]A", 0, v6 }, /* stha ,[rs1+%g0] */
6012159047fSniklas { "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[1+i]o", 0, v9 },
6022159047fSniklas { "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[i+1]o", 0, v9 },
6032159047fSniklas { "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0, "d,[i]o", 0, v9 },
6042159047fSniklas { "stha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* sth d,[rs1+0] */
6052159047fSniklas
606b305b0f1Sespie { "stsha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0), "d,[1+2]A", F_ALIAS, v6 },
607b305b0f1Sespie { "stsha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0), "d,[1]A", F_ALIAS, v6 }, /* stha ,[rs1+%g0] */
608b305b0f1Sespie { "stsha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[1+i]o", F_ALIAS, v9 },
609b305b0f1Sespie { "stsha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[i+1]o", F_ALIAS, v9 },
610b305b0f1Sespie { "stsha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0, "d,[i]o", F_ALIAS, v9 },
611b305b0f1Sespie { "stsha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0), "d,[1]o", F_ALIAS, v9 }, /* sth d,[rs1+0] */
612b305b0f1Sespie { "stuha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0), "d,[1+2]A", F_ALIAS, v6 },
613b305b0f1Sespie { "stuha", F3(3, 0x16, 0), F3(~3, ~0x16, ~0)|RS2(~0), "d,[1]A", F_ALIAS, v6 }, /* stha ,[rs1+%g0] */
614b305b0f1Sespie { "stuha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[1+i]o", F_ALIAS, v9 },
615b305b0f1Sespie { "stuha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1), "d,[i+1]o", F_ALIAS, v9 },
616b305b0f1Sespie { "stuha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|RS1_G0, "d,[i]o", F_ALIAS, v9 },
617b305b0f1Sespie { "stuha", F3(3, 0x16, 1), F3(~3, ~0x16, ~1)|SIMM13(~0), "d,[1]o", F_ALIAS, v9 }, /* sth d,[rs1+0] */
618b305b0f1Sespie
6192159047fSniklas { "stx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI(~0), "d,[1+2]", 0, v9 },
6202159047fSniklas { "stx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|ASI_RS2(~0), "d,[1]", 0, v9 }, /* stx d,[rs1+%g0] */
6212159047fSniklas { "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1), "d,[1+i]", 0, v9 },
6222159047fSniklas { "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1), "d,[i+1]", 0, v9 },
6232159047fSniklas { "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RS1_G0, "d,[i]", 0, v9 },
6242159047fSniklas { "stx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|SIMM13(~0), "d,[1]", 0, v9 }, /* stx d,[rs1+0] */
6252159047fSniklas
6262159047fSniklas { "stx", F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI(~0)|RD(~1), "F,[1+2]", 0, v9 },
6272159047fSniklas { "stx", F3(3, 0x25, 0)|RD(1), F3(~3, ~0x25, ~0)|ASI_RS2(~0)|RD(~1),"F,[1]", 0, v9 }, /* stx d,[rs1+%g0] */
6282159047fSniklas { "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1), "F,[1+i]", 0, v9 },
6292159047fSniklas { "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RD(~1), "F,[i+1]", 0, v9 },
6302159047fSniklas { "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|RS1_G0|RD(~1), "F,[i]", 0, v9 },
6312159047fSniklas { "stx", F3(3, 0x25, 1)|RD(1), F3(~3, ~0x25, ~1)|SIMM13(~0)|RD(~1),"F,[1]", 0, v9 }, /* stx d,[rs1+0] */
6322159047fSniklas
6332159047fSniklas { "stxa", F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0), "d,[1+2]A", 0, v9 },
6342159047fSniklas { "stxa", F3(3, 0x1e, 0), F3(~3, ~0x1e, ~0)|RS2(~0), "d,[1]A", 0, v9 }, /* stxa d,[rs1+%g0] */
6352159047fSniklas { "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1), "d,[1+i]o", 0, v9 },
6362159047fSniklas { "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1), "d,[i+1]o", 0, v9 },
6372159047fSniklas { "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|RS1_G0, "d,[i]o", 0, v9 },
6382159047fSniklas { "stxa", F3(3, 0x1e, 1), F3(~3, ~0x1e, ~1)|SIMM13(~0), "d,[1]o", 0, v9 }, /* stx d,[rs1+0] */
6392159047fSniklas
6402159047fSniklas { "stq", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI(~0), "J,[1+2]", 0, v9 },
6412159047fSniklas { "stq", F3(3, 0x26, 0), F3(~3, ~0x26, ~0)|ASI_RS2(~0), "J,[1]", 0, v9 }, /* stq [rs1+%g0] */
6422159047fSniklas { "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "J,[1+i]", 0, v9 },
6432159047fSniklas { "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1), "J,[i+1]", 0, v9 },
6442159047fSniklas { "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|RS1_G0, "J,[i]", 0, v9 },
6452159047fSniklas { "stq", F3(3, 0x26, 1), F3(~3, ~0x26, ~1)|SIMM13(~0), "J,[1]", 0, v9 }, /* stq [rs1+0] */
6462159047fSniklas
6472159047fSniklas { "stqa", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI(~0), "J,[1+2]A", 0, v9 },
6482159047fSniklas { "stqa", F3(3, 0x36, 0), F3(~3, ~0x36, ~0)|ASI_RS2(~0), "J,[1]A", 0, v9 }, /* stqa [rs1+%g0] */
6492159047fSniklas { "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "J,[1+i]o", 0, v9 },
6502159047fSniklas { "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1), "J,[i+1]o", 0, v9 },
6512159047fSniklas { "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|RS1_G0, "J,[i]o", 0, v9 },
6522159047fSniklas { "stqa", F3(3, 0x36, 1), F3(~3, ~0x36, ~1)|SIMM13(~0), "J,[1]o", 0, v9 }, /* stqa [rs1+0] */
6532159047fSniklas
6542159047fSniklas { "swap", F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI(~0), "[1+2],d", 0, v7 },
6552159047fSniklas { "swap", F3(3, 0x0f, 0), F3(~3, ~0x0f, ~0)|ASI_RS2(~0), "[1],d", 0, v7 }, /* swap [rs1+%g0],d */
6562159047fSniklas { "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1), "[1+i],d", 0, v7 },
6572159047fSniklas { "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1), "[i+1],d", 0, v7 },
6582159047fSniklas { "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|RS1_G0, "[i],d", 0, v7 },
6592159047fSniklas { "swap", F3(3, 0x0f, 1), F3(~3, ~0x0f, ~1)|SIMM13(~0), "[1],d", 0, v7 }, /* swap [rs1+0],d */
6602159047fSniklas
6612159047fSniklas { "swapa", F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0), "[1+2]A,d", 0, v7 },
6622159047fSniklas { "swapa", F3(3, 0x1f, 0), F3(~3, ~0x1f, ~0)|RS2(~0), "[1]A,d", 0, v7 }, /* swapa [rs1+%g0],d */
6632159047fSniklas { "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1), "[1+i]o,d", 0, v9 },
6642159047fSniklas { "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1), "[i+1]o,d", 0, v9 },
6652159047fSniklas { "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|RS1_G0, "[i]o,d", 0, v9 },
6662159047fSniklas { "swapa", F3(3, 0x1f, 1), F3(~3, ~0x1f, ~1)|SIMM13(~0), "[1]o,d", 0, v9 }, /* swap [rs1+0],d */
6672159047fSniklas
6682159047fSniklas { "restore", F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|ASI(~0), "1,2,d", 0, v6 },
6692159047fSniklas { "restore", F3(2, 0x3d, 0), F3(~2, ~0x3d, ~0)|RD_G0|RS1_G0|ASI_RS2(~0), "", 0, v6 }, /* restore %g0,%g0,%g0 */
6702159047fSniklas { "restore", F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1), "1,i,d", 0, v6 },
6712159047fSniklas { "restore", F3(2, 0x3d, 1), F3(~2, ~0x3d, ~1)|RD_G0|RS1_G0|SIMM13(~0), "", 0, v6 }, /* restore %g0,0,%g0 */
6722159047fSniklas
6732159047fSniklas { "rett", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI(~0), "1+2", F_UNBR|F_DELAYED, v6 }, /* rett rs1+rs2 */
6742159047fSniklas { "rett", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|RD_G0|ASI_RS2(~0), "1", F_UNBR|F_DELAYED, v6 }, /* rett rs1,%g0 */
6752159047fSniklas { "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0, "1+i", F_UNBR|F_DELAYED, v6 }, /* rett rs1+X */
6762159047fSniklas { "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0, "i+1", F_UNBR|F_DELAYED, v6 }, /* rett X+rs1 */
6772159047fSniklas { "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0, "i", F_UNBR|F_DELAYED, v6 }, /* rett X+rs1 */
6782159047fSniklas { "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|RS1_G0, "i", F_UNBR|F_DELAYED, v6 }, /* rett X */
6792159047fSniklas { "rett", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RD_G0|SIMM13(~0), "1", F_UNBR|F_DELAYED, v6 }, /* rett rs1+0 */
6802159047fSniklas
6812159047fSniklas { "save", F3(2, 0x3c, 0), F3(~2, ~0x3c, ~0)|ASI(~0), "1,2,d", 0, v6 },
6822159047fSniklas { "save", F3(2, 0x3c, 1), F3(~2, ~0x3c, ~1), "1,i,d", 0, v6 },
6832159047fSniklas { "save", 0x81e00000, ~0x81e00000, "", F_ALIAS, v6 },
6842159047fSniklas
6852159047fSniklas { "ret", F3(2, 0x38, 1)|RS1(0x1f)|SIMM13(8), F3(~2, ~0x38, ~1)|SIMM13(~8), "", F_UNBR|F_DELAYED, v6 }, /* jmpl %i7+8,%g0 */
6862159047fSniklas { "retl", F3(2, 0x38, 1)|RS1(0x0f)|SIMM13(8), F3(~2, ~0x38, ~1)|RS1(~0x0f)|SIMM13(~8), "", F_UNBR|F_DELAYED, v6 }, /* jmpl %o7+8,%g0 */
6872159047fSniklas
6882159047fSniklas { "jmpl", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI(~0), "1+2,d", F_JSR|F_DELAYED, v6 },
6892159047fSniklas { "jmpl", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|ASI_RS2(~0), "1,d", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+%g0,d */
6902159047fSniklas { "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|SIMM13(~0), "1,d", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+0,d */
6912159047fSniklas { "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RS1_G0, "i,d", F_JSR|F_DELAYED, v6 }, /* jmpl %g0+i,d */
6922159047fSniklas { "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1), "1+i,d", F_JSR|F_DELAYED, v6 },
6932159047fSniklas { "jmpl", F3(2, 0x38, 1), F3(~2, ~0x38, ~1), "i+1,d", F_JSR|F_DELAYED, v6 },
6942159047fSniklas
6952159047fSniklas { "done", F3(2, 0x3e, 0)|RD(0), F3(~2, ~0x3e, ~0)|RD(~0)|RS1_G0|SIMM13(~0), "", 0, v9 },
6962159047fSniklas { "retry", F3(2, 0x3e, 0)|RD(1), F3(~2, ~0x3e, ~0)|RD(~1)|RS1_G0|SIMM13(~0), "", 0, v9 },
6972159047fSniklas { "saved", F3(2, 0x31, 0)|RD(0), F3(~2, ~0x31, ~0)|RD(~0)|RS1_G0|SIMM13(~0), "", 0, v9 },
6982159047fSniklas { "restored", F3(2, 0x31, 0)|RD(1), F3(~2, ~0x31, ~0)|RD(~1)|RS1_G0|SIMM13(~0), "", 0, v9 },
6992159047fSniklas { "sir", F3(2, 0x30, 1)|RD(0xf), F3(~2, ~0x30, ~1)|RD(~0xf)|RS1_G0, "i", 0, v9 },
7002159047fSniklas
7012159047fSniklas { "flush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0), "1+2", 0, v8 },
7022159047fSniklas { "flush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0), "1", 0, v8 }, /* flush rs1+%g0 */
7032159047fSniklas { "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0), "1", 0, v8 }, /* flush rs1+0 */
7042159047fSniklas { "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0, "i", 0, v8 }, /* flush %g0+i */
7052159047fSniklas { "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "1+i", 0, v8 },
7062159047fSniklas { "flush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "i+1", 0, v8 },
7072159047fSniklas
7082159047fSniklas /* IFLUSH was renamed to FLUSH in v8. */
7092159047fSniklas { "iflush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI(~0), "1+2", F_ALIAS, v6 },
7102159047fSniklas { "iflush", F3(2, 0x3b, 0), F3(~2, ~0x3b, ~0)|ASI_RS2(~0), "1", F_ALIAS, v6 }, /* flush rs1+%g0 */
7112159047fSniklas { "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|SIMM13(~0), "1", F_ALIAS, v6 }, /* flush rs1+0 */
7122159047fSniklas { "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1)|RS1_G0, "i", F_ALIAS, v6 },
7132159047fSniklas { "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "1+i", F_ALIAS, v6 },
7142159047fSniklas { "iflush", F3(2, 0x3b, 1), F3(~2, ~0x3b, ~1), "i+1", F_ALIAS, v6 },
7152159047fSniklas
7162159047fSniklas { "return", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI(~0), "1+2", 0, v9 },
7172159047fSniklas { "return", F3(2, 0x39, 0), F3(~2, ~0x39, ~0)|ASI_RS2(~0), "1", 0, v9 }, /* return rs1+%g0 */
7182159047fSniklas { "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|SIMM13(~0), "1", 0, v9 }, /* return rs1+0 */
7192159047fSniklas { "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1)|RS1_G0, "i", 0, v9 }, /* return %g0+i */
7202159047fSniklas { "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1), "1+i", 0, v9 },
7212159047fSniklas { "return", F3(2, 0x39, 1), F3(~2, ~0x39, ~1), "i+1", 0, v9 },
7222159047fSniklas
7232159047fSniklas { "flushw", F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RD_G0|RS1_G0|ASI_RS2(~0), "", 0, v9 },
7242159047fSniklas
7252159047fSniklas { "membar", F3(2, 0x28, 1)|RS1(0xf), F3(~2, ~0x28, ~1)|RD_G0|RS1(~0xf)|SIMM13(~127), "K", 0, v9 },
7262159047fSniklas { "stbar", F3(2, 0x28, 0)|RS1(0xf), F3(~2, ~0x28, ~0)|RD_G0|RS1(~0xf)|SIMM13(~0), "", 0, v8 },
7272159047fSniklas
7282159047fSniklas { "prefetch", F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0), "[1+2],*", 0, v9 },
7292159047fSniklas { "prefetch", F3(3, 0x2d, 0), F3(~3, ~0x2d, ~0)|RS2_G0, "[1],*", 0, v9 }, /* prefetch [rs1+%g0],prefetch_fcn */
7302159047fSniklas { "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1), "[1+i],*", 0, v9 },
7312159047fSniklas { "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1), "[i+1],*", 0, v9 },
7322159047fSniklas { "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|RS1_G0, "[i],*", 0, v9 },
7332159047fSniklas { "prefetch", F3(3, 0x2d, 1), F3(~3, ~0x2d, ~1)|SIMM13(~0), "[1],*", 0, v9 }, /* prefetch [rs1+0],prefetch_fcn */
7342159047fSniklas { "prefetcha", F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0), "[1+2]A,*", 0, v9 },
7352159047fSniklas { "prefetcha", F3(3, 0x3d, 0), F3(~3, ~0x3d, ~0)|RS2_G0, "[1]A,*", 0, v9 }, /* prefetcha [rs1+%g0],prefetch_fcn */
7362159047fSniklas { "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1), "[1+i]o,*", 0, v9 },
7372159047fSniklas { "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1), "[i+1]o,*", 0, v9 },
7382159047fSniklas { "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|RS1_G0, "[i]o,*", 0, v9 },
7392159047fSniklas { "prefetcha", F3(3, 0x3d, 1), F3(~3, ~0x3d, ~1)|SIMM13(~0), "[1]o,*", 0, v9 }, /* prefetcha [rs1+0],d */
7402159047fSniklas
741c88b1d6cSniklas { "sll", F3(2, 0x25, 0), F3(~2, ~0x25, ~0)|(1<<12)|(0x7f<<5), "1,2,d", 0, v6 },
742c88b1d6cSniklas { "sll", F3(2, 0x25, 1), F3(~2, ~0x25, ~1)|(1<<12)|(0x7f<<5), "1,X,d", 0, v6 },
743c88b1d6cSniklas { "sra", F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|(0x7f<<5), "1,2,d", 0, v6 },
744c88b1d6cSniklas { "sra", F3(2, 0x27, 1), F3(~2, ~0x27, ~1)|(1<<12)|(0x7f<<5), "1,X,d", 0, v6 },
745c88b1d6cSniklas { "srl", F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|(0x7f<<5), "1,2,d", 0, v6 },
746c88b1d6cSniklas { "srl", F3(2, 0x26, 1), F3(~2, ~0x26, ~1)|(1<<12)|(0x7f<<5), "1,X,d", 0, v6 },
7472159047fSniklas
748c88b1d6cSniklas { "sllx", F3(2, 0x25, 0)|(1<<12), F3(~2, ~0x25, ~0)|(0x7f<<5), "1,2,d", 0, v9 },
749c88b1d6cSniklas { "sllx", F3(2, 0x25, 1)|(1<<12), F3(~2, ~0x25, ~1)|(0x3f<<6), "1,Y,d", 0, v9 },
750c88b1d6cSniklas { "srax", F3(2, 0x27, 0)|(1<<12), F3(~2, ~0x27, ~0)|(0x7f<<5), "1,2,d", 0, v9 },
751c88b1d6cSniklas { "srax", F3(2, 0x27, 1)|(1<<12), F3(~2, ~0x27, ~1)|(0x3f<<6), "1,Y,d", 0, v9 },
752c88b1d6cSniklas { "srlx", F3(2, 0x26, 0)|(1<<12), F3(~2, ~0x26, ~0)|(0x7f<<5), "1,2,d", 0, v9 },
753c88b1d6cSniklas { "srlx", F3(2, 0x26, 1)|(1<<12), F3(~2, ~0x26, ~1)|(0x3f<<6), "1,Y,d", 0, v9 },
7542159047fSniklas
7552159047fSniklas { "mulscc", F3(2, 0x24, 0), F3(~2, ~0x24, ~0)|ASI(~0), "1,2,d", 0, v6 },
7562159047fSniklas { "mulscc", F3(2, 0x24, 1), F3(~2, ~0x24, ~1), "1,i,d", 0, v6 },
7572159047fSniklas
7582159047fSniklas { "divscc", F3(2, 0x1d, 0), F3(~2, ~0x1d, ~0)|ASI(~0), "1,2,d", 0, sparclite },
7592159047fSniklas { "divscc", F3(2, 0x1d, 1), F3(~2, ~0x1d, ~1), "1,i,d", 0, sparclite },
7602159047fSniklas
761c88b1d6cSniklas { "scan", F3(2, 0x2c, 0), F3(~2, ~0x2c, ~0)|ASI(~0), "1,2,d", 0, sparclet|sparclite },
762c88b1d6cSniklas { "scan", F3(2, 0x2c, 1), F3(~2, ~0x2c, ~1), "1,i,d", 0, sparclet|sparclite },
7632159047fSniklas
764b55d4692Sfgsch { "popc", F3(2, 0x2e, 0), F3(~2, ~0x2e, ~0)|RS1_G0|ASI(~0),"2,d", 0, v9 },
765b55d4692Sfgsch { "popc", F3(2, 0x2e, 1), F3(~2, ~0x2e, ~1)|RS1_G0, "i,d", 0, v9 },
7662159047fSniklas
7672159047fSniklas { "clr", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RD_G0|RS1_G0|ASI_RS2(~0), "d", F_ALIAS, v6 }, /* or %g0,%g0,d */
7682159047fSniklas { "clr", F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0|SIMM13(~0), "d", F_ALIAS, v6 }, /* or %g0,0,d */
7692159047fSniklas { "clr", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v6 },
7702159047fSniklas { "clr", F3(3, 0x04, 0), F3(~3, ~0x04, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v6 }, /* st %g0,[rs1+%g0] */
7712159047fSniklas { "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0, "[1+i]", F_ALIAS, v6 },
7722159047fSniklas { "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0, "[i+1]", F_ALIAS, v6 },
7732159047fSniklas { "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v6 },
7742159047fSniklas { "clr", F3(3, 0x04, 1), F3(~3, ~0x04, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v6 }, /* st %g0,[rs1+0] */
7752159047fSniklas
7762159047fSniklas { "clrb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v6 },
7772159047fSniklas { "clrb", F3(3, 0x05, 0), F3(~3, ~0x05, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v6 }, /* stb %g0,[rs1+%g0] */
7782159047fSniklas { "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0, "[1+i]", F_ALIAS, v6 },
7792159047fSniklas { "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0, "[i+1]", F_ALIAS, v6 },
7802159047fSniklas { "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v6 },
7812159047fSniklas { "clrb", F3(3, 0x05, 1), F3(~3, ~0x05, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v6 }, /* stb %g0,[rs1+0] */
7822159047fSniklas
7832159047fSniklas { "clrh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v6 },
7842159047fSniklas { "clrh", F3(3, 0x06, 0), F3(~3, ~0x06, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v6 }, /* sth %g0,[rs1+%g0] */
7852159047fSniklas { "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0, "[1+i]", F_ALIAS, v6 },
7862159047fSniklas { "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0, "[i+1]", F_ALIAS, v6 },
7872159047fSniklas { "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v6 },
7882159047fSniklas { "clrh", F3(3, 0x06, 1), F3(~3, ~0x06, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v6 }, /* sth %g0,[rs1+0] */
7892159047fSniklas
7902159047fSniklas { "clrx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI(~0), "[1+2]", F_ALIAS, v9 },
7912159047fSniklas { "clrx", F3(3, 0x0e, 0), F3(~3, ~0x0e, ~0)|RD_G0|ASI_RS2(~0), "[1]", F_ALIAS, v9 }, /* stx %g0,[rs1+%g0] */
7922159047fSniklas { "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0, "[1+i]", F_ALIAS, v9 },
7932159047fSniklas { "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0, "[i+1]", F_ALIAS, v9 },
7942159047fSniklas { "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|RS1_G0, "[i]", F_ALIAS, v9 },
7952159047fSniklas { "clrx", F3(3, 0x0e, 1), F3(~3, ~0x0e, ~1)|RD_G0|SIMM13(~0), "[1]", F_ALIAS, v9 }, /* stx %g0,[rs1+0] */
7962159047fSniklas
7972159047fSniklas { "orcc", F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|ASI(~0), "1,2,d", 0, v6 },
7982159047fSniklas { "orcc", F3(2, 0x12, 1), F3(~2, ~0x12, ~1), "1,i,d", 0, v6 },
7992159047fSniklas { "orcc", F3(2, 0x12, 1), F3(~2, ~0x12, ~1), "i,1,d", 0, v6 },
8002159047fSniklas
8012159047fSniklas /* This is not a commutative instruction. */
8022159047fSniklas { "orncc", F3(2, 0x16, 0), F3(~2, ~0x16, ~0)|ASI(~0), "1,2,d", 0, v6 },
8032159047fSniklas { "orncc", F3(2, 0x16, 1), F3(~2, ~0x16, ~1), "1,i,d", 0, v6 },
8042159047fSniklas
8052159047fSniklas /* This is not a commutative instruction. */
8062159047fSniklas { "orn", F3(2, 0x06, 0), F3(~2, ~0x06, ~0)|ASI(~0), "1,2,d", 0, v6 },
8072159047fSniklas { "orn", F3(2, 0x06, 1), F3(~2, ~0x06, ~1), "1,i,d", 0, v6 },
8082159047fSniklas
8092159047fSniklas { "tst", F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|ASI_RS2(~0), "1", 0, v6 }, /* orcc rs1, %g0, %g0 */
8102159047fSniklas { "tst", F3(2, 0x12, 0), F3(~2, ~0x12, ~0)|RD_G0|RS1_G0|ASI(~0), "2", 0, v6 }, /* orcc %g0, rs2, %g0 */
8112159047fSniklas { "tst", F3(2, 0x12, 1), F3(~2, ~0x12, ~1)|RD_G0|SIMM13(~0), "1", 0, v6 }, /* orcc rs1, 0, %g0 */
8122159047fSniklas
8132159047fSniklas { "wr", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI(~0), "1,2,m", 0, v8 }, /* wr r,r,%asrX */
8142159047fSniklas { "wr", F3(2, 0x30, 1), F3(~2, ~0x30, ~1), "1,i,m", 0, v8 }, /* wr r,i,%asrX */
8150c6d0228Sniklas { "wr", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI_RS2(~0), "1,m", F_ALIAS, v8 }, /* wr rs1,%g0,%asrX */
816c88b1d6cSniklas { "wr", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI(~0), "1,2,y", 0, v6 }, /* wr r,r,%y */
8172159047fSniklas { "wr", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0, "1,i,y", 0, v6 }, /* wr r,i,%y */
8180c6d0228Sniklas { "wr", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI_RS2(~0), "1,y", F_ALIAS, v6 }, /* wr rs1,%g0,%y */
819c88b1d6cSniklas { "wr", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI(~0), "1,2,p", 0, v6notv9 }, /* wr r,r,%psr */
820c88b1d6cSniklas { "wr", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0, "1,i,p", 0, v6notv9 }, /* wr r,i,%psr */
8210c6d0228Sniklas { "wr", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI_RS2(~0), "1,p", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%psr */
822c88b1d6cSniklas { "wr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI(~0), "1,2,w", 0, v6notv9 }, /* wr r,r,%wim */
823c88b1d6cSniklas { "wr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0, "1,i,w", 0, v6notv9 }, /* wr r,i,%wim */
8240c6d0228Sniklas { "wr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI_RS2(~0), "1,w", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%wim */
825c88b1d6cSniklas { "wr", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI(~0), "1,2,t", 0, v6notv9 }, /* wr r,r,%tbr */
826c88b1d6cSniklas { "wr", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0, "1,i,t", 0, v6notv9 }, /* wr r,i,%tbr */
8270c6d0228Sniklas { "wr", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI_RS2(~0), "1,t", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%tbr */
8282159047fSniklas
8292159047fSniklas { "wr", F3(2, 0x30, 0)|RD(2), F3(~2, ~0x30, ~0)|RD(~2)|ASI(~0), "1,2,E", 0, v9 }, /* wr r,r,%ccr */
8302159047fSniklas { "wr", F3(2, 0x30, 1)|RD(2), F3(~2, ~0x30, ~1)|RD(~2), "1,i,E", 0, v9 }, /* wr r,i,%ccr */
8312159047fSniklas { "wr", F3(2, 0x30, 0)|RD(3), F3(~2, ~0x30, ~0)|RD(~3)|ASI(~0), "1,2,o", 0, v9 }, /* wr r,r,%asi */
8322159047fSniklas { "wr", F3(2, 0x30, 1)|RD(3), F3(~2, ~0x30, ~1)|RD(~3), "1,i,o", 0, v9 }, /* wr r,i,%asi */
833b305b0f1Sespie { "wr", F3(2, 0x30, 0)|RD(6), F3(~2, ~0x30, ~0)|RD(~6)|ASI(~0), "1,2,s", 0, v9 }, /* wr r,r,%fprs */
8342159047fSniklas { "wr", F3(2, 0x30, 1)|RD(6), F3(~2, ~0x30, ~1)|RD(~6), "1,i,s", 0, v9 }, /* wr r,i,%fprs */
8352159047fSniklas
836b305b0f1Sespie { "wr", F3(2, 0x30, 0)|RD(16), F3(~2, ~0x30, ~0)|RD(~16)|ASI(~0), "1,2,_", 0, v9a }, /* wr r,r,%pcr */
837b305b0f1Sespie { "wr", F3(2, 0x30, 1)|RD(16), F3(~2, ~0x30, ~1)|RD(~16), "1,i,_", 0, v9a }, /* wr r,i,%pcr */
838b305b0f1Sespie { "wr", F3(2, 0x30, 0)|RD(17), F3(~2, ~0x30, ~0)|RD(~17)|ASI(~0), "1,2,_", 0, v9a }, /* wr r,r,%pic */
839b305b0f1Sespie { "wr", F3(2, 0x30, 1)|RD(17), F3(~2, ~0x30, ~1)|RD(~17), "1,i,_", 0, v9a }, /* wr r,i,%pic */
840b305b0f1Sespie { "wr", F3(2, 0x30, 0)|RD(18), F3(~2, ~0x30, ~0)|RD(~18)|ASI(~0), "1,2,_", 0, v9a }, /* wr r,r,%dcr */
841b305b0f1Sespie { "wr", F3(2, 0x30, 1)|RD(18), F3(~2, ~0x30, ~1)|RD(~18), "1,i,_", 0, v9a }, /* wr r,i,%dcr */
842b305b0f1Sespie { "wr", F3(2, 0x30, 0)|RD(19), F3(~2, ~0x30, ~0)|RD(~19)|ASI(~0), "1,2,_", 0, v9a }, /* wr r,r,%gsr */
843b305b0f1Sespie { "wr", F3(2, 0x30, 1)|RD(19), F3(~2, ~0x30, ~1)|RD(~19), "1,i,_", 0, v9a }, /* wr r,i,%gsr */
844b305b0f1Sespie { "wr", F3(2, 0x30, 0)|RD(20), F3(~2, ~0x30, ~0)|RD(~20)|ASI(~0), "1,2,_", 0, v9a }, /* wr r,r,%set_softint */
845b305b0f1Sespie { "wr", F3(2, 0x30, 1)|RD(20), F3(~2, ~0x30, ~1)|RD(~20), "1,i,_", 0, v9a }, /* wr r,i,%set_softint */
846b305b0f1Sespie { "wr", F3(2, 0x30, 0)|RD(21), F3(~2, ~0x30, ~0)|RD(~21)|ASI(~0), "1,2,_", 0, v9a }, /* wr r,r,%clear_softint */
847b305b0f1Sespie { "wr", F3(2, 0x30, 1)|RD(21), F3(~2, ~0x30, ~1)|RD(~21), "1,i,_", 0, v9a }, /* wr r,i,%clear_softint */
848b305b0f1Sespie { "wr", F3(2, 0x30, 0)|RD(22), F3(~2, ~0x30, ~0)|RD(~22)|ASI(~0), "1,2,_", 0, v9a }, /* wr r,r,%softint */
849b305b0f1Sespie { "wr", F3(2, 0x30, 1)|RD(22), F3(~2, ~0x30, ~1)|RD(~22), "1,i,_", 0, v9a }, /* wr r,i,%softint */
850b305b0f1Sespie { "wr", F3(2, 0x30, 0)|RD(23), F3(~2, ~0x30, ~0)|RD(~23)|ASI(~0), "1,2,_", 0, v9a }, /* wr r,r,%tick_cmpr */
851b305b0f1Sespie { "wr", F3(2, 0x30, 1)|RD(23), F3(~2, ~0x30, ~1)|RD(~23), "1,i,_", 0, v9a }, /* wr r,i,%tick_cmpr */
852b55d4692Sfgsch { "wr", F3(2, 0x30, 0)|RD(24), F3(~2, ~0x30, ~0)|RD(~24)|ASI(~0), "1,2,_", 0, v9b }, /* wr r,r,%sys_tick */
853b55d4692Sfgsch { "wr", F3(2, 0x30, 1)|RD(24), F3(~2, ~0x30, ~1)|RD(~24), "1,i,_", 0, v9b }, /* wr r,i,%sys_tick */
854b55d4692Sfgsch { "wr", F3(2, 0x30, 0)|RD(25), F3(~2, ~0x30, ~0)|RD(~25)|ASI(~0), "1,2,_", 0, v9b }, /* wr r,r,%sys_tick_cmpr */
855b55d4692Sfgsch { "wr", F3(2, 0x30, 1)|RD(25), F3(~2, ~0x30, ~1)|RD(~25), "1,i,_", 0, v9b }, /* wr r,i,%sys_tick_cmpr */
856b305b0f1Sespie
8572159047fSniklas { "rd", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|SIMM13(~0), "M,d", 0, v8 }, /* rd %asrX,r */
8582159047fSniklas { "rd", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0), "y,d", 0, v6 }, /* rd %y,r */
859c88b1d6cSniklas { "rd", F3(2, 0x29, 0), F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0), "p,d", 0, v6notv9 }, /* rd %psr,r */
860c88b1d6cSniklas { "rd", F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0), "w,d", 0, v6notv9 }, /* rd %wim,r */
861c88b1d6cSniklas { "rd", F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0), "t,d", 0, v6notv9 }, /* rd %tbr,r */
8622159047fSniklas
8632159047fSniklas { "rd", F3(2, 0x28, 0)|RS1(2), F3(~2, ~0x28, ~0)|RS1(~2)|SIMM13(~0), "E,d", 0, v9 }, /* rd %ccr,r */
8642159047fSniklas { "rd", F3(2, 0x28, 0)|RS1(3), F3(~2, ~0x28, ~0)|RS1(~3)|SIMM13(~0), "o,d", 0, v9 }, /* rd %asi,r */
8652159047fSniklas { "rd", F3(2, 0x28, 0)|RS1(4), F3(~2, ~0x28, ~0)|RS1(~4)|SIMM13(~0), "W,d", 0, v9 }, /* rd %tick,r */
8662159047fSniklas { "rd", F3(2, 0x28, 0)|RS1(5), F3(~2, ~0x28, ~0)|RS1(~5)|SIMM13(~0), "P,d", 0, v9 }, /* rd %pc,r */
8672159047fSniklas { "rd", F3(2, 0x28, 0)|RS1(6), F3(~2, ~0x28, ~0)|RS1(~6)|SIMM13(~0), "s,d", 0, v9 }, /* rd %fprs,r */
8682159047fSniklas
869b305b0f1Sespie { "rd", F3(2, 0x28, 0)|RS1(16), F3(~2, ~0x28, ~0)|RS1(~16)|SIMM13(~0), "/,d", 0, v9a }, /* rd %pcr,r */
870b305b0f1Sespie { "rd", F3(2, 0x28, 0)|RS1(17), F3(~2, ~0x28, ~0)|RS1(~17)|SIMM13(~0), "/,d", 0, v9a }, /* rd %pic,r */
871b305b0f1Sespie { "rd", F3(2, 0x28, 0)|RS1(18), F3(~2, ~0x28, ~0)|RS1(~18)|SIMM13(~0), "/,d", 0, v9a }, /* rd %dcr,r */
872b305b0f1Sespie { "rd", F3(2, 0x28, 0)|RS1(19), F3(~2, ~0x28, ~0)|RS1(~19)|SIMM13(~0), "/,d", 0, v9a }, /* rd %gsr,r */
873b305b0f1Sespie { "rd", F3(2, 0x28, 0)|RS1(22), F3(~2, ~0x28, ~0)|RS1(~22)|SIMM13(~0), "/,d", 0, v9a }, /* rd %softint,r */
874b305b0f1Sespie { "rd", F3(2, 0x28, 0)|RS1(23), F3(~2, ~0x28, ~0)|RS1(~23)|SIMM13(~0), "/,d", 0, v9a }, /* rd %tick_cmpr,r */
875b55d4692Sfgsch { "rd", F3(2, 0x28, 0)|RS1(24), F3(~2, ~0x28, ~0)|RS1(~24)|SIMM13(~0), "/,d", 0, v9b }, /* rd %sys_tick,r */
876b55d4692Sfgsch { "rd", F3(2, 0x28, 0)|RS1(25), F3(~2, ~0x28, ~0)|RS1(~25)|SIMM13(~0), "/,d", 0, v9b }, /* rd %sys_tick_cmpr,r */
877b305b0f1Sespie
8782159047fSniklas { "rdpr", F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|SIMM13(~0), "?,d", 0, v9 }, /* rdpr %priv,r */
8792159047fSniklas { "wrpr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0), "1,2,!", 0, v9 }, /* wrpr r1,r2,%priv */
8802159047fSniklas { "wrpr", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|SIMM13(~0), "1,!", 0, v9 }, /* wrpr r1,%priv */
8812159047fSniklas { "wrpr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1), "1,i,!", 0, v9 }, /* wrpr r1,i,%priv */
8822159047fSniklas { "wrpr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1), "i,1,!", F_ALIAS, v9 }, /* wrpr i,r1,%priv */
8832159047fSniklas { "wrpr", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RS1(~0), "i,!", 0, v9 }, /* wrpr i,%priv */
8842159047fSniklas
885c88b1d6cSniklas /* ??? This group seems wrong. A three operand move? */
8862159047fSniklas { "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI(~0), "1,2,m", F_ALIAS, v8 }, /* wr r,r,%asrX */
8872159047fSniklas { "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1), "1,i,m", F_ALIAS, v8 }, /* wr r,i,%asrX */
888c88b1d6cSniklas { "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI(~0), "1,2,y", F_ALIAS, v6 }, /* wr r,r,%y */
8892159047fSniklas { "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0, "1,i,y", F_ALIAS, v6 }, /* wr r,i,%y */
890c88b1d6cSniklas { "mov", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI(~0), "1,2,p", F_ALIAS, v6notv9 }, /* wr r,r,%psr */
891c88b1d6cSniklas { "mov", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0, "1,i,p", F_ALIAS, v6notv9 }, /* wr r,i,%psr */
892c88b1d6cSniklas { "mov", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI(~0), "1,2,w", F_ALIAS, v6notv9 }, /* wr r,r,%wim */
893c88b1d6cSniklas { "mov", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0, "1,i,w", F_ALIAS, v6notv9 }, /* wr r,i,%wim */
894c88b1d6cSniklas { "mov", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI(~0), "1,2,t", F_ALIAS, v6notv9 }, /* wr r,r,%tbr */
895c88b1d6cSniklas { "mov", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0, "1,i,t", F_ALIAS, v6notv9 }, /* wr r,i,%tbr */
8962159047fSniklas
8972159047fSniklas { "mov", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|SIMM13(~0), "M,d", F_ALIAS, v8 }, /* rd %asr1,r */
8982159047fSniklas { "mov", F3(2, 0x28, 0), F3(~2, ~0x28, ~0)|RS1_G0|SIMM13(~0), "y,d", F_ALIAS, v6 }, /* rd %y,r */
899c88b1d6cSniklas { "mov", F3(2, 0x29, 0), F3(~2, ~0x29, ~0)|RS1_G0|SIMM13(~0), "p,d", F_ALIAS, v6notv9 }, /* rd %psr,r */
900c88b1d6cSniklas { "mov", F3(2, 0x2a, 0), F3(~2, ~0x2a, ~0)|RS1_G0|SIMM13(~0), "w,d", F_ALIAS, v6notv9 }, /* rd %wim,r */
901c88b1d6cSniklas { "mov", F3(2, 0x2b, 0), F3(~2, ~0x2b, ~0)|RS1_G0|SIMM13(~0), "t,d", F_ALIAS, v6notv9 }, /* rd %tbr,r */
9022159047fSniklas
903c88b1d6cSniklas { "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|ASI_RS2(~0), "1,m", F_ALIAS, v8 }, /* wr rs1,%g0,%asrX */
904c88b1d6cSniklas { "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1), "i,m", F_ALIAS, v8 }, /* wr %g0,i,%asrX */
905c88b1d6cSniklas { "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|SIMM13(~0), "1,m", F_ALIAS, v8 }, /* wr rs1,0,%asrX */
906c88b1d6cSniklas { "mov", F3(2, 0x30, 0), F3(~2, ~0x30, ~0)|RD_G0|ASI_RS2(~0), "1,y", F_ALIAS, v6 }, /* wr rs1,%g0,%y */
907c88b1d6cSniklas { "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0, "i,y", F_ALIAS, v6 }, /* wr %g0,i,%y */
908c88b1d6cSniklas { "mov", F3(2, 0x30, 1), F3(~2, ~0x30, ~1)|RD_G0|SIMM13(~0), "1,y", F_ALIAS, v6 }, /* wr rs1,0,%y */
909c88b1d6cSniklas { "mov", F3(2, 0x31, 0), F3(~2, ~0x31, ~0)|RD_G0|ASI_RS2(~0), "1,p", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%psr */
910c88b1d6cSniklas { "mov", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0, "i,p", F_ALIAS, v6notv9 }, /* wr %g0,i,%psr */
911c88b1d6cSniklas { "mov", F3(2, 0x31, 1), F3(~2, ~0x31, ~1)|RD_G0|SIMM13(~0), "1,p", F_ALIAS, v6notv9 }, /* wr rs1,0,%psr */
912c88b1d6cSniklas { "mov", F3(2, 0x32, 0), F3(~2, ~0x32, ~0)|RD_G0|ASI_RS2(~0), "1,w", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%wim */
913c88b1d6cSniklas { "mov", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0, "i,w", F_ALIAS, v6notv9 }, /* wr %g0,i,%wim */
914c88b1d6cSniklas { "mov", F3(2, 0x32, 1), F3(~2, ~0x32, ~1)|RD_G0|SIMM13(~0), "1,w", F_ALIAS, v6notv9 }, /* wr rs1,0,%wim */
915c88b1d6cSniklas { "mov", F3(2, 0x33, 0), F3(~2, ~0x33, ~0)|RD_G0|ASI_RS2(~0), "1,t", F_ALIAS, v6notv9 }, /* wr rs1,%g0,%tbr */
916c88b1d6cSniklas { "mov", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0, "i,t", F_ALIAS, v6notv9 }, /* wr %g0,i,%tbr */
917c88b1d6cSniklas { "mov", F3(2, 0x33, 1), F3(~2, ~0x33, ~1)|RD_G0|SIMM13(~0), "1,t", F_ALIAS, v6notv9 }, /* wr rs1,0,%tbr */
9182159047fSniklas
9192159047fSniklas { "mov", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|RS1_G0|ASI(~0), "2,d", 0, v6 }, /* or %g0,rs2,d */
9202159047fSniklas { "mov", F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|RS1_G0, "i,d", 0, v6 }, /* or %g0,i,d */
9212159047fSniklas { "mov", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI_RS2(~0), "1,d", 0, v6 }, /* or rs1,%g0,d */
9222159047fSniklas { "mov", F3(2, 0x02, 1), F3(~2, ~0x02, ~1)|SIMM13(~0), "1,d", 0, v6 }, /* or rs1,0,d */
9232159047fSniklas
9242159047fSniklas { "or", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0), "1,2,d", 0, v6 },
9252159047fSniklas { "or", F3(2, 0x02, 1), F3(~2, ~0x02, ~1), "1,i,d", 0, v6 },
9262159047fSniklas { "or", F3(2, 0x02, 1), F3(~2, ~0x02, ~1), "i,1,d", 0, v6 },
9272159047fSniklas
9282159047fSniklas { "bset", F3(2, 0x02, 0), F3(~2, ~0x02, ~0)|ASI(~0), "2,r", F_ALIAS, v6 }, /* or rd,rs2,rd */
9292159047fSniklas { "bset", F3(2, 0x02, 1), F3(~2, ~0x02, ~1), "i,r", F_ALIAS, v6 }, /* or rd,i,rd */
9302159047fSniklas
9312159047fSniklas /* This is not a commutative instruction. */
9322159047fSniklas { "andn", F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0), "1,2,d", 0, v6 },
9332159047fSniklas { "andn", F3(2, 0x05, 1), F3(~2, ~0x05, ~1), "1,i,d", 0, v6 },
9342159047fSniklas
9352159047fSniklas /* This is not a commutative instruction. */
9362159047fSniklas { "andncc", F3(2, 0x15, 0), F3(~2, ~0x15, ~0)|ASI(~0), "1,2,d", 0, v6 },
9372159047fSniklas { "andncc", F3(2, 0x15, 1), F3(~2, ~0x15, ~1), "1,i,d", 0, v6 },
9382159047fSniklas
9392159047fSniklas { "bclr", F3(2, 0x05, 0), F3(~2, ~0x05, ~0)|ASI(~0), "2,r", F_ALIAS, v6 }, /* andn rd,rs2,rd */
9402159047fSniklas { "bclr", F3(2, 0x05, 1), F3(~2, ~0x05, ~1), "i,r", F_ALIAS, v6 }, /* andn rd,i,rd */
9412159047fSniklas
9422159047fSniklas { "cmp", F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|RD_G0|ASI(~0), "1,2", 0, v6 }, /* subcc rs1,rs2,%g0 */
9432159047fSniklas { "cmp", F3(2, 0x14, 1), F3(~2, ~0x14, ~1)|RD_G0, "1,i", 0, v6 }, /* subcc rs1,i,%g0 */
9442159047fSniklas
9452159047fSniklas { "sub", F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|ASI(~0), "1,2,d", 0, v6 },
9462159047fSniklas { "sub", F3(2, 0x04, 1), F3(~2, ~0x04, ~1), "1,i,d", 0, v6 },
9472159047fSniklas
9482159047fSniklas { "subcc", F3(2, 0x14, 0), F3(~2, ~0x14, ~0)|ASI(~0), "1,2,d", 0, v6 },
9492159047fSniklas { "subcc", F3(2, 0x14, 1), F3(~2, ~0x14, ~1), "1,i,d", 0, v6 },
9502159047fSniklas
951c88b1d6cSniklas { "subx", F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
952c88b1d6cSniklas { "subx", F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1), "1,i,d", 0, v6notv9 },
9532159047fSniklas { "subc", F3(2, 0x0c, 0), F3(~2, ~0x0c, ~0)|ASI(~0), "1,2,d", 0, v9 },
9542159047fSniklas { "subc", F3(2, 0x0c, 1), F3(~2, ~0x0c, ~1), "1,i,d", 0, v9 },
9552159047fSniklas
956c88b1d6cSniklas { "subxcc", F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
957c88b1d6cSniklas { "subxcc", F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1), "1,i,d", 0, v6notv9 },
9582159047fSniklas { "subccc", F3(2, 0x1c, 0), F3(~2, ~0x1c, ~0)|ASI(~0), "1,2,d", 0, v9 },
9592159047fSniklas { "subccc", F3(2, 0x1c, 1), F3(~2, ~0x1c, ~1), "1,i,d", 0, v9 },
9602159047fSniklas
9612159047fSniklas { "and", F3(2, 0x01, 0), F3(~2, ~0x01, ~0)|ASI(~0), "1,2,d", 0, v6 },
9622159047fSniklas { "and", F3(2, 0x01, 1), F3(~2, ~0x01, ~1), "1,i,d", 0, v6 },
9632159047fSniklas { "and", F3(2, 0x01, 1), F3(~2, ~0x01, ~1), "i,1,d", 0, v6 },
9642159047fSniklas
9652159047fSniklas { "andcc", F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|ASI(~0), "1,2,d", 0, v6 },
9662159047fSniklas { "andcc", F3(2, 0x11, 1), F3(~2, ~0x11, ~1), "1,i,d", 0, v6 },
9672159047fSniklas { "andcc", F3(2, 0x11, 1), F3(~2, ~0x11, ~1), "i,1,d", 0, v6 },
9682159047fSniklas
9692159047fSniklas { "dec", F3(2, 0x04, 1)|SIMM13(0x1), F3(~2, ~0x04, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* sub rd,1,rd */
9702159047fSniklas { "dec", F3(2, 0x04, 1), F3(~2, ~0x04, ~1), "i,r", F_ALIAS, v8 }, /* sub rd,imm,rd */
9712159047fSniklas { "deccc", F3(2, 0x14, 1)|SIMM13(0x1), F3(~2, ~0x14, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* subcc rd,1,rd */
9722159047fSniklas { "deccc", F3(2, 0x14, 1), F3(~2, ~0x14, ~1), "i,r", F_ALIAS, v8 }, /* subcc rd,imm,rd */
9732159047fSniklas { "inc", F3(2, 0x00, 1)|SIMM13(0x1), F3(~2, ~0x00, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* add rd,1,rd */
9742159047fSniklas { "inc", F3(2, 0x00, 1), F3(~2, ~0x00, ~1), "i,r", F_ALIAS, v8 }, /* add rd,imm,rd */
9752159047fSniklas { "inccc", F3(2, 0x10, 1)|SIMM13(0x1), F3(~2, ~0x10, ~1)|SIMM13(~0x0001), "r", F_ALIAS, v6 }, /* addcc rd,1,rd */
9762159047fSniklas { "inccc", F3(2, 0x10, 1), F3(~2, ~0x10, ~1), "i,r", F_ALIAS, v8 }, /* addcc rd,imm,rd */
9772159047fSniklas
9782159047fSniklas { "btst", F3(2, 0x11, 0), F3(~2, ~0x11, ~0)|RD_G0|ASI(~0), "1,2", F_ALIAS, v6 }, /* andcc rs1,rs2,%g0 */
9792159047fSniklas { "btst", F3(2, 0x11, 1), F3(~2, ~0x11, ~1)|RD_G0, "i,1", F_ALIAS, v6 }, /* andcc rs1,i,%g0 */
9802159047fSniklas
9812159047fSniklas { "neg", F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "2,d", F_ALIAS, v6 }, /* sub %g0,rs2,rd */
982c88b1d6cSniklas { "neg", F3(2, 0x04, 0), F3(~2, ~0x04, ~0)|RS1_G0|ASI(~0), "O", F_ALIAS, v6 }, /* sub %g0,rd,rd */
9832159047fSniklas
9842159047fSniklas { "add", F3(2, 0x00, 0), F3(~2, ~0x00, ~0)|ASI(~0), "1,2,d", 0, v6 },
9852159047fSniklas { "add", F3(2, 0x00, 1), F3(~2, ~0x00, ~1), "1,i,d", 0, v6 },
9862159047fSniklas { "add", F3(2, 0x00, 1), F3(~2, ~0x00, ~1), "i,1,d", 0, v6 },
9872159047fSniklas { "addcc", F3(2, 0x10, 0), F3(~2, ~0x10, ~0)|ASI(~0), "1,2,d", 0, v6 },
9882159047fSniklas { "addcc", F3(2, 0x10, 1), F3(~2, ~0x10, ~1), "1,i,d", 0, v6 },
9892159047fSniklas { "addcc", F3(2, 0x10, 1), F3(~2, ~0x10, ~1), "i,1,d", 0, v6 },
9902159047fSniklas
991c88b1d6cSniklas { "addx", F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
992c88b1d6cSniklas { "addx", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "1,i,d", 0, v6notv9 },
993c88b1d6cSniklas { "addx", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "i,1,d", 0, v6notv9 },
9942159047fSniklas { "addc", F3(2, 0x08, 0), F3(~2, ~0x08, ~0)|ASI(~0), "1,2,d", 0, v9 },
9952159047fSniklas { "addc", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "1,i,d", 0, v9 },
9962159047fSniklas { "addc", F3(2, 0x08, 1), F3(~2, ~0x08, ~1), "i,1,d", 0, v9 },
9972159047fSniklas
998c88b1d6cSniklas { "addxcc", F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0), "1,2,d", 0, v6notv9 },
999c88b1d6cSniklas { "addxcc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "1,i,d", 0, v6notv9 },
1000c88b1d6cSniklas { "addxcc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "i,1,d", 0, v6notv9 },
10012159047fSniklas { "addccc", F3(2, 0x18, 0), F3(~2, ~0x18, ~0)|ASI(~0), "1,2,d", 0, v9 },
10022159047fSniklas { "addccc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "1,i,d", 0, v9 },
10032159047fSniklas { "addccc", F3(2, 0x18, 1), F3(~2, ~0x18, ~1), "i,1,d", 0, v9 },
10042159047fSniklas
10052159047fSniklas { "smul", F3(2, 0x0b, 0), F3(~2, ~0x0b, ~0)|ASI(~0), "1,2,d", 0, v8 },
10062159047fSniklas { "smul", F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1), "1,i,d", 0, v8 },
10072159047fSniklas { "smul", F3(2, 0x0b, 1), F3(~2, ~0x0b, ~1), "i,1,d", 0, v8 },
10082159047fSniklas { "smulcc", F3(2, 0x1b, 0), F3(~2, ~0x1b, ~0)|ASI(~0), "1,2,d", 0, v8 },
10092159047fSniklas { "smulcc", F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1), "1,i,d", 0, v8 },
10102159047fSniklas { "smulcc", F3(2, 0x1b, 1), F3(~2, ~0x1b, ~1), "i,1,d", 0, v8 },
10112159047fSniklas { "umul", F3(2, 0x0a, 0), F3(~2, ~0x0a, ~0)|ASI(~0), "1,2,d", 0, v8 },
10122159047fSniklas { "umul", F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1), "1,i,d", 0, v8 },
10132159047fSniklas { "umul", F3(2, 0x0a, 1), F3(~2, ~0x0a, ~1), "i,1,d", 0, v8 },
10142159047fSniklas { "umulcc", F3(2, 0x1a, 0), F3(~2, ~0x1a, ~0)|ASI(~0), "1,2,d", 0, v8 },
10152159047fSniklas { "umulcc", F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1), "1,i,d", 0, v8 },
10162159047fSniklas { "umulcc", F3(2, 0x1a, 1), F3(~2, ~0x1a, ~1), "i,1,d", 0, v8 },
10172159047fSniklas { "sdiv", F3(2, 0x0f, 0), F3(~2, ~0x0f, ~0)|ASI(~0), "1,2,d", 0, v8 },
10182159047fSniklas { "sdiv", F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1), "1,i,d", 0, v8 },
10192159047fSniklas { "sdiv", F3(2, 0x0f, 1), F3(~2, ~0x0f, ~1), "i,1,d", 0, v8 },
10202159047fSniklas { "sdivcc", F3(2, 0x1f, 0), F3(~2, ~0x1f, ~0)|ASI(~0), "1,2,d", 0, v8 },
10212159047fSniklas { "sdivcc", F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1), "1,i,d", 0, v8 },
10222159047fSniklas { "sdivcc", F3(2, 0x1f, 1), F3(~2, ~0x1f, ~1), "i,1,d", 0, v8 },
10232159047fSniklas { "udiv", F3(2, 0x0e, 0), F3(~2, ~0x0e, ~0)|ASI(~0), "1,2,d", 0, v8 },
10242159047fSniklas { "udiv", F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1), "1,i,d", 0, v8 },
10252159047fSniklas { "udiv", F3(2, 0x0e, 1), F3(~2, ~0x0e, ~1), "i,1,d", 0, v8 },
10262159047fSniklas { "udivcc", F3(2, 0x1e, 0), F3(~2, ~0x1e, ~0)|ASI(~0), "1,2,d", 0, v8 },
10272159047fSniklas { "udivcc", F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1), "1,i,d", 0, v8 },
10282159047fSniklas { "udivcc", F3(2, 0x1e, 1), F3(~2, ~0x1e, ~1), "i,1,d", 0, v8 },
10292159047fSniklas
10302159047fSniklas { "mulx", F3(2, 0x09, 0), F3(~2, ~0x09, ~0)|ASI(~0), "1,2,d", 0, v9 },
10312159047fSniklas { "mulx", F3(2, 0x09, 1), F3(~2, ~0x09, ~1), "1,i,d", 0, v9 },
10322159047fSniklas { "sdivx", F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0), "1,2,d", 0, v9 },
10332159047fSniklas { "sdivx", F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1), "1,i,d", 0, v9 },
10342159047fSniklas { "udivx", F3(2, 0x0d, 0), F3(~2, ~0x0d, ~0)|ASI(~0), "1,2,d", 0, v9 },
10352159047fSniklas { "udivx", F3(2, 0x0d, 1), F3(~2, ~0x0d, ~1), "1,i,d", 0, v9 },
10362159047fSniklas
10372159047fSniklas { "call", F1(0x1), F1(~0x1), "L", F_JSR|F_DELAYED, v6 },
10382159047fSniklas { "call", F1(0x1), F1(~0x1), "L,#", F_JSR|F_DELAYED, v6 },
10392159047fSniklas
10402159047fSniklas { "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0), "1+2", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+rs2,%o7 */
10412159047fSniklas { "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI(~0), "1+2,#", F_JSR|F_DELAYED, v6 },
10422159047fSniklas { "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0), "1", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+%g0,%o7 */
10432159047fSniklas { "call", F3(2, 0x38, 0)|RD(0xf), F3(~2, ~0x38, ~0)|RD(~0xf)|ASI_RS2(~0), "1,#", F_JSR|F_DELAYED, v6 },
10442159047fSniklas { "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "1+i", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+i,%o7 */
10452159047fSniklas { "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "1+i,#", F_JSR|F_DELAYED, v6 },
10462159047fSniklas { "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "i+1", F_JSR|F_DELAYED, v6 }, /* jmpl i+rs1,%o7 */
10472159047fSniklas { "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf), "i+1,#", F_JSR|F_DELAYED, v6 },
10482159047fSniklas { "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0, "i", F_JSR|F_DELAYED, v6 }, /* jmpl %g0+i,%o7 */
10492159047fSniklas { "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|RS1_G0, "i,#", F_JSR|F_DELAYED, v6 },
10502159047fSniklas { "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0), "1", F_JSR|F_DELAYED, v6 }, /* jmpl rs1+0,%o7 */
10512159047fSniklas { "call", F3(2, 0x38, 1)|RD(0xf), F3(~2, ~0x38, ~1)|RD(~0xf)|SIMM13(~0), "1,#", F_JSR|F_DELAYED, v6 },
10522159047fSniklas
10532159047fSniklas
10542159047fSniklas /* Conditional instructions.
10552159047fSniklas
10562159047fSniklas Because this part of the table was such a mess earlier, I have
10572159047fSniklas macrofied it so that all the branches and traps are generated from
10582159047fSniklas a single-line description of each condition value. John Gilmore. */
10592159047fSniklas
10602159047fSniklas /* Define branches -- one annulled, one without, etc. */
10612159047fSniklas #define br(opcode, mask, lose, flags) \
10622159047fSniklas { opcode, (mask)|ANNUL, (lose), ",a l", (flags), v6 }, \
10632159047fSniklas { opcode, (mask) , (lose)|ANNUL, "l", (flags), v6 }
10642159047fSniklas
10652159047fSniklas #define brx(opcode, mask, lose, flags) /* v9 */ \
10662159047fSniklas { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), "Z,G", (flags), v9 }, \
10672159047fSniklas { opcode, (mask)|(2<<20)|BPRED, ANNUL|(lose), ",T Z,G", (flags), v9 }, \
10682159047fSniklas { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a Z,G", (flags), v9 }, \
10692159047fSniklas { opcode, (mask)|(2<<20)|BPRED|ANNUL, (lose), ",a,T Z,G", (flags), v9 }, \
10702159047fSniklas { opcode, (mask)|(2<<20), ANNUL|BPRED|(lose), ",N Z,G", (flags), v9 }, \
10712159047fSniklas { opcode, (mask)|(2<<20)|ANNUL, BPRED|(lose), ",a,N Z,G", (flags), v9 }, \
10722159047fSniklas { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), "z,G", (flags), v9 }, \
10732159047fSniklas { opcode, (mask)|BPRED, ANNUL|(lose)|(2<<20), ",T z,G", (flags), v9 }, \
10742159047fSniklas { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a z,G", (flags), v9 }, \
10752159047fSniklas { opcode, (mask)|BPRED|ANNUL, (lose)|(2<<20), ",a,T z,G", (flags), v9 }, \
10762159047fSniklas { opcode, (mask), ANNUL|BPRED|(lose)|(2<<20), ",N z,G", (flags), v9 }, \
10772159047fSniklas { opcode, (mask)|ANNUL, BPRED|(lose)|(2<<20), ",a,N z,G", (flags), v9 }
10782159047fSniklas
10792159047fSniklas /* Define four traps: reg+reg, reg + immediate, immediate alone, reg alone. */
10802159047fSniklas #define tr(opcode, mask, lose, flags) \
10812159047fSniklas { opcode, (mask)|(2<<11)|IMMED, (lose)|RS1_G0, "Z,i", (flags), v9 }, /* %g0 + imm */ \
10822159047fSniklas { opcode, (mask)|(2<<11)|IMMED, (lose), "Z,1+i", (flags), v9 }, /* rs1 + imm */ \
10832159047fSniklas { opcode, (mask)|(2<<11), IMMED|(lose), "Z,1+2", (flags), v9 }, /* rs1 + rs2 */ \
10842159047fSniklas { opcode, (mask)|(2<<11), IMMED|(lose)|RS2_G0, "Z,1", (flags), v9 }, /* rs1 + %g0 */ \
10852159047fSniklas { opcode, (mask)|IMMED, (lose)|RS1_G0, "z,i", (flags)|F_ALIAS, v9 }, /* %g0 + imm */ \
10862159047fSniklas { opcode, (mask)|IMMED, (lose), "z,1+i", (flags)|F_ALIAS, v9 }, /* rs1 + imm */ \
10872159047fSniklas { opcode, (mask), IMMED|(lose), "z,1+2", (flags)|F_ALIAS, v9 }, /* rs1 + rs2 */ \
10882159047fSniklas { opcode, (mask), IMMED|(lose)|RS2_G0, "z,1", (flags)|F_ALIAS, v9 }, /* rs1 + %g0 */ \
10892159047fSniklas { opcode, (mask)|IMMED, (lose)|RS1_G0, "i", (flags), v6 }, /* %g0 + imm */ \
10902159047fSniklas { opcode, (mask)|IMMED, (lose), "1+i", (flags), v6 }, /* rs1 + imm */ \
10912159047fSniklas { opcode, (mask), IMMED|(lose), "1+2", (flags), v6 }, /* rs1 + rs2 */ \
10922159047fSniklas { opcode, (mask), IMMED|(lose)|RS2_G0, "1", (flags), v6 } /* rs1 + %g0 */
10932159047fSniklas
10942159047fSniklas /* v9: We must put `brx' before `br', to ensure that we never match something
10952159047fSniklas v9: against an expression unless it is an expression. Otherwise, we end
10962159047fSniklas v9: up with undefined symbol tables entries, because they get added, but
10972159047fSniklas v9: are not deleted if the pattern fails to match. */
10982159047fSniklas
10992159047fSniklas /* Define both branches and traps based on condition mask */
11002159047fSniklas #define cond(bop, top, mask, flags) \
11012159047fSniklas brx(bop, F2(0, 1)|(mask), F2(~0, ~1)|((~mask)&COND(~0)), F_DELAYED|(flags)), /* v9 */ \
11022159047fSniklas br(bop, F2(0, 2)|(mask), F2(~0, ~2)|((~mask)&COND(~0)), F_DELAYED|(flags)), \
11032159047fSniklas tr(top, F3(2, 0x3a, 0)|(mask), F3(~2, ~0x3a, 0)|((~mask)&COND(~0)), ((flags) & ~(F_UNBR|F_CONDBR)))
11042159047fSniklas
11052159047fSniklas /* Define all the conditions, all the branches, all the traps. */
11062159047fSniklas
11072159047fSniklas /* Standard branch, trap mnemonics */
11082159047fSniklas cond ("b", "ta", CONDA, F_UNBR),
11092159047fSniklas /* Alternative form (just for assembly, not for disassembly) */
11102159047fSniklas cond ("ba", "t", CONDA, F_UNBR|F_ALIAS),
11112159047fSniklas
11122159047fSniklas cond ("bcc", "tcc", CONDCC, F_CONDBR),
11132159047fSniklas cond ("bcs", "tcs", CONDCS, F_CONDBR),
11142159047fSniklas cond ("be", "te", CONDE, F_CONDBR),
11150c6d0228Sniklas cond ("beq", "teq", CONDE, F_CONDBR|F_ALIAS),
11162159047fSniklas cond ("bg", "tg", CONDG, F_CONDBR),
11172159047fSniklas cond ("bgt", "tgt", CONDG, F_CONDBR|F_ALIAS),
11182159047fSniklas cond ("bge", "tge", CONDGE, F_CONDBR),
11192159047fSniklas cond ("bgeu", "tgeu", CONDGEU, F_CONDBR|F_ALIAS), /* for cc */
11202159047fSniklas cond ("bgu", "tgu", CONDGU, F_CONDBR),
11212159047fSniklas cond ("bl", "tl", CONDL, F_CONDBR),
11222159047fSniklas cond ("blt", "tlt", CONDL, F_CONDBR|F_ALIAS),
11232159047fSniklas cond ("ble", "tle", CONDLE, F_CONDBR),
11242159047fSniklas cond ("bleu", "tleu", CONDLEU, F_CONDBR),
11252159047fSniklas cond ("blu", "tlu", CONDLU, F_CONDBR|F_ALIAS), /* for cs */
11262159047fSniklas cond ("bn", "tn", CONDN, F_CONDBR),
11272159047fSniklas cond ("bne", "tne", CONDNE, F_CONDBR),
11282159047fSniklas cond ("bneg", "tneg", CONDNEG, F_CONDBR),
11292159047fSniklas cond ("bnz", "tnz", CONDNZ, F_CONDBR|F_ALIAS), /* for ne */
11302159047fSniklas cond ("bpos", "tpos", CONDPOS, F_CONDBR),
11312159047fSniklas cond ("bvc", "tvc", CONDVC, F_CONDBR),
11322159047fSniklas cond ("bvs", "tvs", CONDVS, F_CONDBR),
11332159047fSniklas cond ("bz", "tz", CONDZ, F_CONDBR|F_ALIAS), /* for e */
11342159047fSniklas
11352159047fSniklas #undef cond
11362159047fSniklas #undef br
11372159047fSniklas #undef brr /* v9 */
11382159047fSniklas #undef tr
11392159047fSniklas
11402159047fSniklas #define brr(opcode, mask, lose, flags) /* v9 */ \
11412159047fSniklas { opcode, (mask)|BPRED, ANNUL|(lose), "1,k", F_DELAYED|(flags), v9 }, \
11422159047fSniklas { opcode, (mask)|BPRED, ANNUL|(lose), ",T 1,k", F_DELAYED|(flags), v9 }, \
11432159047fSniklas { opcode, (mask)|BPRED|ANNUL, (lose), ",a 1,k", F_DELAYED|(flags), v9 }, \
11442159047fSniklas { opcode, (mask)|BPRED|ANNUL, (lose), ",a,T 1,k", F_DELAYED|(flags), v9 }, \
11452159047fSniklas { opcode, (mask), ANNUL|BPRED|(lose), ",N 1,k", F_DELAYED|(flags), v9 }, \
11462159047fSniklas { opcode, (mask)|ANNUL, BPRED|(lose), ",a,N 1,k", F_DELAYED|(flags), v9 }
11472159047fSniklas
11482159047fSniklas #define condr(bop, mask, flags) /* v9 */ \
11492159047fSniklas brr(bop, F2(0, 3)|COND(mask), F2(~0, ~3)|COND(~(mask)), (flags)) /* v9 */
11502159047fSniklas
11512159047fSniklas /* v9 */ condr("brnz", 0x5, F_CONDBR),
11522159047fSniklas /* v9 */ condr("brz", 0x1, F_CONDBR),
11532159047fSniklas /* v9 */ condr("brgez", 0x7, F_CONDBR),
11542159047fSniklas /* v9 */ condr("brlz", 0x3, F_CONDBR),
11552159047fSniklas /* v9 */ condr("brlez", 0x2, F_CONDBR),
11562159047fSniklas /* v9 */ condr("brgz", 0x6, F_CONDBR),
11572159047fSniklas
11582159047fSniklas #undef condr /* v9 */
11592159047fSniklas #undef brr /* v9 */
11602159047fSniklas
11612159047fSniklas #define movr(opcode, mask, flags) /* v9 */ \
11622159047fSniklas { opcode, F3(2, 0x2f, 0)|RCOND(mask), F3(~2, ~0x2f, ~0)|RCOND(~(mask)), "1,2,d", (flags), v9 }, \
11632159047fSniklas { opcode, F3(2, 0x2f, 1)|RCOND(mask), F3(~2, ~0x2f, ~1)|RCOND(~(mask)), "1,j,d", (flags), v9 }
11642159047fSniklas
11652159047fSniklas #define fmrrs(opcode, mask, lose, flags) /* v9 */ \
1166c88b1d6cSniklas { opcode, (mask), (lose), "1,f,g", (flags) | F_FLOAT, v9 }
11672159047fSniklas #define fmrrd(opcode, mask, lose, flags) /* v9 */ \
1168c88b1d6cSniklas { opcode, (mask), (lose), "1,B,H", (flags) | F_FLOAT, v9 }
11692159047fSniklas #define fmrrq(opcode, mask, lose, flags) /* v9 */ \
1170c88b1d6cSniklas { opcode, (mask), (lose), "1,R,J", (flags) | F_FLOAT, v9 }
11712159047fSniklas
11722159047fSniklas #define fmovrs(mop, mask, flags) /* v9 */ \
11732159047fSniklas fmrrs(mop, F3(2, 0x35, 0)|OPF_LOW5(5)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~5)|RCOND(~(mask)), (flags)) /* v9 */
11742159047fSniklas #define fmovrd(mop, mask, flags) /* v9 */ \
11752159047fSniklas fmrrd(mop, F3(2, 0x35, 0)|OPF_LOW5(6)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~6)|RCOND(~(mask)), (flags)) /* v9 */
11762159047fSniklas #define fmovrq(mop, mask, flags) /* v9 */ \
11772159047fSniklas fmrrq(mop, F3(2, 0x35, 0)|OPF_LOW5(7)|RCOND(mask), F3(~2, ~0x35, 0)|OPF_LOW5(~7)|RCOND(~(mask)), (flags)) /* v9 */
11782159047fSniklas
11792159047fSniklas /* v9 */ movr("movrne", 0x5, 0),
11802159047fSniklas /* v9 */ movr("movre", 0x1, 0),
11812159047fSniklas /* v9 */ movr("movrgez", 0x7, 0),
11822159047fSniklas /* v9 */ movr("movrlz", 0x3, 0),
11832159047fSniklas /* v9 */ movr("movrlez", 0x2, 0),
11842159047fSniklas /* v9 */ movr("movrgz", 0x6, 0),
11852159047fSniklas /* v9 */ movr("movrnz", 0x5, F_ALIAS),
11862159047fSniklas /* v9 */ movr("movrz", 0x1, F_ALIAS),
11872159047fSniklas
11882159047fSniklas /* v9 */ fmovrs("fmovrsne", 0x5, 0),
11892159047fSniklas /* v9 */ fmovrs("fmovrse", 0x1, 0),
11902159047fSniklas /* v9 */ fmovrs("fmovrsgez", 0x7, 0),
11912159047fSniklas /* v9 */ fmovrs("fmovrslz", 0x3, 0),
11922159047fSniklas /* v9 */ fmovrs("fmovrslez", 0x2, 0),
11932159047fSniklas /* v9 */ fmovrs("fmovrsgz", 0x6, 0),
11942159047fSniklas /* v9 */ fmovrs("fmovrsnz", 0x5, F_ALIAS),
11952159047fSniklas /* v9 */ fmovrs("fmovrsz", 0x1, F_ALIAS),
11962159047fSniklas
11972159047fSniklas /* v9 */ fmovrd("fmovrdne", 0x5, 0),
11982159047fSniklas /* v9 */ fmovrd("fmovrde", 0x1, 0),
11992159047fSniklas /* v9 */ fmovrd("fmovrdgez", 0x7, 0),
12002159047fSniklas /* v9 */ fmovrd("fmovrdlz", 0x3, 0),
12012159047fSniklas /* v9 */ fmovrd("fmovrdlez", 0x2, 0),
12022159047fSniklas /* v9 */ fmovrd("fmovrdgz", 0x6, 0),
12032159047fSniklas /* v9 */ fmovrd("fmovrdnz", 0x5, F_ALIAS),
12042159047fSniklas /* v9 */ fmovrd("fmovrdz", 0x1, F_ALIAS),
12052159047fSniklas
12062159047fSniklas /* v9 */ fmovrq("fmovrqne", 0x5, 0),
12072159047fSniklas /* v9 */ fmovrq("fmovrqe", 0x1, 0),
12082159047fSniklas /* v9 */ fmovrq("fmovrqgez", 0x7, 0),
12092159047fSniklas /* v9 */ fmovrq("fmovrqlz", 0x3, 0),
12102159047fSniklas /* v9 */ fmovrq("fmovrqlez", 0x2, 0),
12112159047fSniklas /* v9 */ fmovrq("fmovrqgz", 0x6, 0),
12122159047fSniklas /* v9 */ fmovrq("fmovrqnz", 0x5, F_ALIAS),
12132159047fSniklas /* v9 */ fmovrq("fmovrqz", 0x1, F_ALIAS),
12142159047fSniklas
12152159047fSniklas #undef movr /* v9 */
12162159047fSniklas #undef fmovr /* v9 */
12172159047fSniklas #undef fmrr /* v9 */
12182159047fSniklas
12192159047fSniklas #define movicc(opcode, cond, flags) /* v9 */ \
12202159047fSniklas { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|XCC|(1<<11), "z,2,d", flags, v9 }, \
12212159047fSniklas { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|ICC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|XCC|(1<<11), "z,I,d", flags, v9 }, \
12222159047fSniklas { opcode, F3(2, 0x2c, 0)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~0)|MCOND(~cond,~1)|(1<<11), "Z,2,d", flags, v9 }, \
12232159047fSniklas { opcode, F3(2, 0x2c, 1)|MCOND(cond,1)|XCC, F3(~2, ~0x2c, ~1)|MCOND(~cond,~1)|(1<<11), "Z,I,d", flags, v9 }
12242159047fSniklas
12252159047fSniklas #define movfcc(opcode, fcond, flags) /* v9 */ \
12262159047fSniklas { opcode, F3(2, 0x2c, 0)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~0), "6,2,d", flags, v9 }, \
12272159047fSniklas { opcode, F3(2, 0x2c, 1)|FCC(0)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~0)|F3(~2, ~0x2c, ~1), "6,I,d", flags, v9 }, \
12282159047fSniklas { opcode, F3(2, 0x2c, 0)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~0), "7,2,d", flags, v9 }, \
12292159047fSniklas { opcode, F3(2, 0x2c, 1)|FCC(1)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~1)|F3(~2, ~0x2c, ~1), "7,I,d", flags, v9 }, \
12302159047fSniklas { opcode, F3(2, 0x2c, 0)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~0), "8,2,d", flags, v9 }, \
12312159047fSniklas { opcode, F3(2, 0x2c, 1)|FCC(2)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~2)|F3(~2, ~0x2c, ~1), "8,I,d", flags, v9 }, \
12322159047fSniklas { opcode, F3(2, 0x2c, 0)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~0), "9,2,d", flags, v9 }, \
12332159047fSniklas { opcode, F3(2, 0x2c, 1)|FCC(3)|MCOND(fcond,0), MCOND(~fcond,~0)|FCC(~3)|F3(~2, ~0x2c, ~1), "9,I,d", flags, v9 }
12342159047fSniklas
12352159047fSniklas #define movcc(opcode, cond, fcond, flags) /* v9 */ \
12362159047fSniklas movfcc (opcode, fcond, flags), /* v9 */ \
12372159047fSniklas movicc (opcode, cond, flags) /* v9 */
12382159047fSniklas
12392159047fSniklas /* v9 */ movcc ("mova", CONDA, FCONDA, 0),
12402159047fSniklas /* v9 */ movicc ("movcc", CONDCC, 0),
12412159047fSniklas /* v9 */ movicc ("movgeu", CONDGEU, F_ALIAS),
12422159047fSniklas /* v9 */ movicc ("movcs", CONDCS, 0),
12432159047fSniklas /* v9 */ movicc ("movlu", CONDLU, F_ALIAS),
12442159047fSniklas /* v9 */ movcc ("move", CONDE, FCONDE, 0),
12452159047fSniklas /* v9 */ movcc ("movg", CONDG, FCONDG, 0),
12462159047fSniklas /* v9 */ movcc ("movge", CONDGE, FCONDGE, 0),
12472159047fSniklas /* v9 */ movicc ("movgu", CONDGU, 0),
12482159047fSniklas /* v9 */ movcc ("movl", CONDL, FCONDL, 0),
12492159047fSniklas /* v9 */ movcc ("movle", CONDLE, FCONDLE, 0),
12502159047fSniklas /* v9 */ movicc ("movleu", CONDLEU, 0),
12512159047fSniklas /* v9 */ movfcc ("movlg", FCONDLG, 0),
12522159047fSniklas /* v9 */ movcc ("movn", CONDN, FCONDN, 0),
12532159047fSniklas /* v9 */ movcc ("movne", CONDNE, FCONDNE, 0),
12542159047fSniklas /* v9 */ movicc ("movneg", CONDNEG, 0),
12552159047fSniklas /* v9 */ movcc ("movnz", CONDNZ, FCONDNZ, F_ALIAS),
12562159047fSniklas /* v9 */ movfcc ("movo", FCONDO, 0),
12572159047fSniklas /* v9 */ movicc ("movpos", CONDPOS, 0),
12582159047fSniklas /* v9 */ movfcc ("movu", FCONDU, 0),
12592159047fSniklas /* v9 */ movfcc ("movue", FCONDUE, 0),
12602159047fSniklas /* v9 */ movfcc ("movug", FCONDUG, 0),
12612159047fSniklas /* v9 */ movfcc ("movuge", FCONDUGE, 0),
12622159047fSniklas /* v9 */ movfcc ("movul", FCONDUL, 0),
12632159047fSniklas /* v9 */ movfcc ("movule", FCONDULE, 0),
12642159047fSniklas /* v9 */ movicc ("movvc", CONDVC, 0),
12652159047fSniklas /* v9 */ movicc ("movvs", CONDVS, 0),
12662159047fSniklas /* v9 */ movcc ("movz", CONDZ, FCONDZ, F_ALIAS),
12672159047fSniklas
12682159047fSniklas #undef movicc /* v9 */
12692159047fSniklas #undef movfcc /* v9 */
12702159047fSniklas #undef movcc /* v9 */
12712159047fSniklas
12722159047fSniklas #define FM_SF 1 /* v9 - values for fpsize */
12732159047fSniklas #define FM_DF 2 /* v9 */
12742159047fSniklas #define FM_QF 3 /* v9 */
12752159047fSniklas
12762159047fSniklas #define fmovicc(opcode, fpsize, cond, flags) /* v9 */ \
12772159047fSniklas { opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags, v9 }, \
12782159047fSniklas { opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags, v9 }
12792159047fSniklas
12802159047fSniklas #define fmovfcc(opcode, fpsize, fcond, flags) /* v9 */ \
12812159047fSniklas { opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags, v9 }, \
12822159047fSniklas { opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags, v9 }, \
12832159047fSniklas { opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags, v9 }, \
12842159047fSniklas { opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags, v9 }
12852159047fSniklas
12862159047fSniklas /* FIXME: use fmovicc/fmovfcc? */ /* v9 */
12872159047fSniklas #define fmovcc(opcode, fpsize, cond, fcond, flags) /* v9 */ \
1288c88b1d6cSniklas { opcode, F3F(2, 0x35, 0x100+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x100+fpsize))|MCOND(~cond,~0), "z,f,g", flags | F_FLOAT, v9 }, \
1289c88b1d6cSniklas { opcode, F3F(2, 0x35, 0x000+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x000+fpsize))|MCOND(~fcond,~0), "6,f,g", flags | F_FLOAT, v9 }, \
1290c88b1d6cSniklas { opcode, F3F(2, 0x35, 0x180+fpsize)|MCOND(cond,0), F3F(~2, ~0x35, ~(0x180+fpsize))|MCOND(~cond,~0), "Z,f,g", flags | F_FLOAT, v9 }, \
1291c88b1d6cSniklas { opcode, F3F(2, 0x35, 0x040+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x040+fpsize))|MCOND(~fcond,~0), "7,f,g", flags | F_FLOAT, v9 }, \
1292c88b1d6cSniklas { opcode, F3F(2, 0x35, 0x080+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x080+fpsize))|MCOND(~fcond,~0), "8,f,g", flags | F_FLOAT, v9 }, \
1293c88b1d6cSniklas { opcode, F3F(2, 0x35, 0x0c0+fpsize)|MCOND(fcond,0), F3F(~2, ~0x35, ~(0x0c0+fpsize))|MCOND(~fcond,~0), "9,f,g", flags | F_FLOAT, v9 }
12942159047fSniklas
12952159047fSniklas /* v9 */ fmovcc ("fmovda", FM_DF, CONDA, FCONDA, 0),
12962159047fSniklas /* v9 */ fmovcc ("fmovqa", FM_QF, CONDA, FCONDA, 0),
12972159047fSniklas /* v9 */ fmovcc ("fmovsa", FM_SF, CONDA, FCONDA, 0),
12982159047fSniklas /* v9 */ fmovicc ("fmovdcc", FM_DF, CONDCC, 0),
12992159047fSniklas /* v9 */ fmovicc ("fmovqcc", FM_QF, CONDCC, 0),
13002159047fSniklas /* v9 */ fmovicc ("fmovscc", FM_SF, CONDCC, 0),
13012159047fSniklas /* v9 */ fmovicc ("fmovdcs", FM_DF, CONDCS, 0),
13022159047fSniklas /* v9 */ fmovicc ("fmovqcs", FM_QF, CONDCS, 0),
13032159047fSniklas /* v9 */ fmovicc ("fmovscs", FM_SF, CONDCS, 0),
13042159047fSniklas /* v9 */ fmovcc ("fmovde", FM_DF, CONDE, FCONDE, 0),
13052159047fSniklas /* v9 */ fmovcc ("fmovqe", FM_QF, CONDE, FCONDE, 0),
13062159047fSniklas /* v9 */ fmovcc ("fmovse", FM_SF, CONDE, FCONDE, 0),
13072159047fSniklas /* v9 */ fmovcc ("fmovdg", FM_DF, CONDG, FCONDG, 0),
13082159047fSniklas /* v9 */ fmovcc ("fmovqg", FM_QF, CONDG, FCONDG, 0),
13092159047fSniklas /* v9 */ fmovcc ("fmovsg", FM_SF, CONDG, FCONDG, 0),
13102159047fSniklas /* v9 */ fmovcc ("fmovdge", FM_DF, CONDGE, FCONDGE, 0),
13112159047fSniklas /* v9 */ fmovcc ("fmovqge", FM_QF, CONDGE, FCONDGE, 0),
13122159047fSniklas /* v9 */ fmovcc ("fmovsge", FM_SF, CONDGE, FCONDGE, 0),
13132159047fSniklas /* v9 */ fmovicc ("fmovdgeu", FM_DF, CONDGEU, F_ALIAS),
13142159047fSniklas /* v9 */ fmovicc ("fmovqgeu", FM_QF, CONDGEU, F_ALIAS),
13152159047fSniklas /* v9 */ fmovicc ("fmovsgeu", FM_SF, CONDGEU, F_ALIAS),
13162159047fSniklas /* v9 */ fmovicc ("fmovdgu", FM_DF, CONDGU, 0),
13172159047fSniklas /* v9 */ fmovicc ("fmovqgu", FM_QF, CONDGU, 0),
13182159047fSniklas /* v9 */ fmovicc ("fmovsgu", FM_SF, CONDGU, 0),
13192159047fSniklas /* v9 */ fmovcc ("fmovdl", FM_DF, CONDL, FCONDL, 0),
13202159047fSniklas /* v9 */ fmovcc ("fmovql", FM_QF, CONDL, FCONDL, 0),
13212159047fSniklas /* v9 */ fmovcc ("fmovsl", FM_SF, CONDL, FCONDL, 0),
13222159047fSniklas /* v9 */ fmovcc ("fmovdle", FM_DF, CONDLE, FCONDLE, 0),
13232159047fSniklas /* v9 */ fmovcc ("fmovqle", FM_QF, CONDLE, FCONDLE, 0),
13242159047fSniklas /* v9 */ fmovcc ("fmovsle", FM_SF, CONDLE, FCONDLE, 0),
13252159047fSniklas /* v9 */ fmovicc ("fmovdleu", FM_DF, CONDLEU, 0),
13262159047fSniklas /* v9 */ fmovicc ("fmovqleu", FM_QF, CONDLEU, 0),
13272159047fSniklas /* v9 */ fmovicc ("fmovsleu", FM_SF, CONDLEU, 0),
13282159047fSniklas /* v9 */ fmovfcc ("fmovdlg", FM_DF, FCONDLG, 0),
13292159047fSniklas /* v9 */ fmovfcc ("fmovqlg", FM_QF, FCONDLG, 0),
13302159047fSniklas /* v9 */ fmovfcc ("fmovslg", FM_SF, FCONDLG, 0),
13312159047fSniklas /* v9 */ fmovicc ("fmovdlu", FM_DF, CONDLU, F_ALIAS),
13322159047fSniklas /* v9 */ fmovicc ("fmovqlu", FM_QF, CONDLU, F_ALIAS),
13332159047fSniklas /* v9 */ fmovicc ("fmovslu", FM_SF, CONDLU, F_ALIAS),
13342159047fSniklas /* v9 */ fmovcc ("fmovdn", FM_DF, CONDN, FCONDN, 0),
13352159047fSniklas /* v9 */ fmovcc ("fmovqn", FM_QF, CONDN, FCONDN, 0),
13362159047fSniklas /* v9 */ fmovcc ("fmovsn", FM_SF, CONDN, FCONDN, 0),
13372159047fSniklas /* v9 */ fmovcc ("fmovdne", FM_DF, CONDNE, FCONDNE, 0),
13382159047fSniklas /* v9 */ fmovcc ("fmovqne", FM_QF, CONDNE, FCONDNE, 0),
13392159047fSniklas /* v9 */ fmovcc ("fmovsne", FM_SF, CONDNE, FCONDNE, 0),
13402159047fSniklas /* v9 */ fmovicc ("fmovdneg", FM_DF, CONDNEG, 0),
13412159047fSniklas /* v9 */ fmovicc ("fmovqneg", FM_QF, CONDNEG, 0),
13422159047fSniklas /* v9 */ fmovicc ("fmovsneg", FM_SF, CONDNEG, 0),
13432159047fSniklas /* v9 */ fmovcc ("fmovdnz", FM_DF, CONDNZ, FCONDNZ, F_ALIAS),
13442159047fSniklas /* v9 */ fmovcc ("fmovqnz", FM_QF, CONDNZ, FCONDNZ, F_ALIAS),
13452159047fSniklas /* v9 */ fmovcc ("fmovsnz", FM_SF, CONDNZ, FCONDNZ, F_ALIAS),
13462159047fSniklas /* v9 */ fmovfcc ("fmovdo", FM_DF, FCONDO, 0),
13472159047fSniklas /* v9 */ fmovfcc ("fmovqo", FM_QF, FCONDO, 0),
13482159047fSniklas /* v9 */ fmovfcc ("fmovso", FM_SF, FCONDO, 0),
13492159047fSniklas /* v9 */ fmovicc ("fmovdpos", FM_DF, CONDPOS, 0),
13502159047fSniklas /* v9 */ fmovicc ("fmovqpos", FM_QF, CONDPOS, 0),
13512159047fSniklas /* v9 */ fmovicc ("fmovspos", FM_SF, CONDPOS, 0),
13522159047fSniklas /* v9 */ fmovfcc ("fmovdu", FM_DF, FCONDU, 0),
13532159047fSniklas /* v9 */ fmovfcc ("fmovqu", FM_QF, FCONDU, 0),
13542159047fSniklas /* v9 */ fmovfcc ("fmovsu", FM_SF, FCONDU, 0),
13552159047fSniklas /* v9 */ fmovfcc ("fmovdue", FM_DF, FCONDUE, 0),
13562159047fSniklas /* v9 */ fmovfcc ("fmovque", FM_QF, FCONDUE, 0),
13572159047fSniklas /* v9 */ fmovfcc ("fmovsue", FM_SF, FCONDUE, 0),
13582159047fSniklas /* v9 */ fmovfcc ("fmovdug", FM_DF, FCONDUG, 0),
13592159047fSniklas /* v9 */ fmovfcc ("fmovqug", FM_QF, FCONDUG, 0),
13602159047fSniklas /* v9 */ fmovfcc ("fmovsug", FM_SF, FCONDUG, 0),
13612159047fSniklas /* v9 */ fmovfcc ("fmovduge", FM_DF, FCONDUGE, 0),
13622159047fSniklas /* v9 */ fmovfcc ("fmovquge", FM_QF, FCONDUGE, 0),
13632159047fSniklas /* v9 */ fmovfcc ("fmovsuge", FM_SF, FCONDUGE, 0),
13642159047fSniklas /* v9 */ fmovfcc ("fmovdul", FM_DF, FCONDUL, 0),
13652159047fSniklas /* v9 */ fmovfcc ("fmovqul", FM_QF, FCONDUL, 0),
13662159047fSniklas /* v9 */ fmovfcc ("fmovsul", FM_SF, FCONDUL, 0),
13672159047fSniklas /* v9 */ fmovfcc ("fmovdule", FM_DF, FCONDULE, 0),
13682159047fSniklas /* v9 */ fmovfcc ("fmovqule", FM_QF, FCONDULE, 0),
13692159047fSniklas /* v9 */ fmovfcc ("fmovsule", FM_SF, FCONDULE, 0),
13702159047fSniklas /* v9 */ fmovicc ("fmovdvc", FM_DF, CONDVC, 0),
13712159047fSniklas /* v9 */ fmovicc ("fmovqvc", FM_QF, CONDVC, 0),
13722159047fSniklas /* v9 */ fmovicc ("fmovsvc", FM_SF, CONDVC, 0),
13732159047fSniklas /* v9 */ fmovicc ("fmovdvs", FM_DF, CONDVS, 0),
13742159047fSniklas /* v9 */ fmovicc ("fmovqvs", FM_QF, CONDVS, 0),
13752159047fSniklas /* v9 */ fmovicc ("fmovsvs", FM_SF, CONDVS, 0),
13762159047fSniklas /* v9 */ fmovcc ("fmovdz", FM_DF, CONDZ, FCONDZ, F_ALIAS),
13772159047fSniklas /* v9 */ fmovcc ("fmovqz", FM_QF, CONDZ, FCONDZ, F_ALIAS),
13782159047fSniklas /* v9 */ fmovcc ("fmovsz", FM_SF, CONDZ, FCONDZ, F_ALIAS),
13792159047fSniklas
13802159047fSniklas #undef fmovicc /* v9 */
13812159047fSniklas #undef fmovfcc /* v9 */
13822159047fSniklas #undef fmovcc /* v9 */
13832159047fSniklas #undef FM_DF /* v9 */
13842159047fSniklas #undef FM_QF /* v9 */
13852159047fSniklas #undef FM_SF /* v9 */
13862159047fSniklas
1387c88b1d6cSniklas /* Coprocessor branches. */
1388c88b1d6cSniklas #define CBR(opcode, mask, lose, flags, arch) \
1389c88b1d6cSniklas { opcode, (mask), ANNUL|(lose), "l", flags|F_DELAYED, arch }, \
1390c88b1d6cSniklas { opcode, (mask)|ANNUL, (lose), ",a l", flags|F_DELAYED, arch }
13912159047fSniklas
1392c88b1d6cSniklas /* Floating point branches. */
1393c88b1d6cSniklas #define FBR(opcode, mask, lose, flags) \
1394c88b1d6cSniklas { opcode, (mask), ANNUL|(lose), "l", flags|F_DELAYED|F_FBR, v6 }, \
1395c88b1d6cSniklas { opcode, (mask)|ANNUL, (lose), ",a l", flags|F_DELAYED|F_FBR, v6 }
13962159047fSniklas
1397c88b1d6cSniklas /* V9 extended floating point branches. */
1398c88b1d6cSniklas #define FBRX(opcode, mask, lose, flags) /* v9 */ \
1399c88b1d6cSniklas { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), "6,G", flags|F_DELAYED|F_FBR, v9 }, \
1400c88b1d6cSniklas { opcode, FBFCC(0)|(mask)|BPRED, ANNUL|FBFCC(~0)|(lose), ",T 6,G", flags|F_DELAYED|F_FBR, v9 }, \
1401c88b1d6cSniklas { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a 6,G", flags|F_DELAYED|F_FBR, v9 }, \
1402c88b1d6cSniklas { opcode, FBFCC(0)|(mask)|BPRED|ANNUL, FBFCC(~0)|(lose), ",a,T 6,G", flags|F_DELAYED|F_FBR, v9 }, \
1403c88b1d6cSniklas { opcode, FBFCC(0)|(mask), ANNUL|BPRED|FBFCC(~0)|(lose), ",N 6,G", flags|F_DELAYED|F_FBR, v9 }, \
1404c88b1d6cSniklas { opcode, FBFCC(0)|(mask)|ANNUL, BPRED|FBFCC(~0)|(lose), ",a,N 6,G", flags|F_DELAYED|F_FBR, v9 }, \
1405c88b1d6cSniklas { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), "7,G", flags|F_DELAYED|F_FBR, v9 }, \
1406c88b1d6cSniklas { opcode, FBFCC(1)|(mask)|BPRED, ANNUL|FBFCC(~1)|(lose), ",T 7,G", flags|F_DELAYED|F_FBR, v9 }, \
1407c88b1d6cSniklas { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a 7,G", flags|F_DELAYED|F_FBR, v9 }, \
1408c88b1d6cSniklas { opcode, FBFCC(1)|(mask)|BPRED|ANNUL, FBFCC(~1)|(lose), ",a,T 7,G", flags|F_DELAYED|F_FBR, v9 }, \
1409c88b1d6cSniklas { opcode, FBFCC(1)|(mask), ANNUL|BPRED|FBFCC(~1)|(lose), ",N 7,G", flags|F_DELAYED|F_FBR, v9 }, \
1410c88b1d6cSniklas { opcode, FBFCC(1)|(mask)|ANNUL, BPRED|FBFCC(~1)|(lose), ",a,N 7,G", flags|F_DELAYED|F_FBR, v9 }, \
1411c88b1d6cSniklas { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), "8,G", flags|F_DELAYED|F_FBR, v9 }, \
1412c88b1d6cSniklas { opcode, FBFCC(2)|(mask)|BPRED, ANNUL|FBFCC(~2)|(lose), ",T 8,G", flags|F_DELAYED|F_FBR, v9 }, \
1413c88b1d6cSniklas { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a 8,G", flags|F_DELAYED|F_FBR, v9 }, \
1414c88b1d6cSniklas { opcode, FBFCC(2)|(mask)|BPRED|ANNUL, FBFCC(~2)|(lose), ",a,T 8,G", flags|F_DELAYED|F_FBR, v9 }, \
1415c88b1d6cSniklas { opcode, FBFCC(2)|(mask), ANNUL|BPRED|FBFCC(~2)|(lose), ",N 8,G", flags|F_DELAYED|F_FBR, v9 }, \
1416c88b1d6cSniklas { opcode, FBFCC(2)|(mask)|ANNUL, BPRED|FBFCC(~2)|(lose), ",a,N 8,G", flags|F_DELAYED|F_FBR, v9 }, \
1417c88b1d6cSniklas { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), "9,G", flags|F_DELAYED|F_FBR, v9 }, \
1418c88b1d6cSniklas { opcode, FBFCC(3)|(mask)|BPRED, ANNUL|FBFCC(~3)|(lose), ",T 9,G", flags|F_DELAYED|F_FBR, v9 }, \
1419c88b1d6cSniklas { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a 9,G", flags|F_DELAYED|F_FBR, v9 }, \
1420c88b1d6cSniklas { opcode, FBFCC(3)|(mask)|BPRED|ANNUL, FBFCC(~3)|(lose), ",a,T 9,G", flags|F_DELAYED|F_FBR, v9 }, \
1421c88b1d6cSniklas { opcode, FBFCC(3)|(mask), ANNUL|BPRED|FBFCC(~3)|(lose), ",N 9,G", flags|F_DELAYED|F_FBR, v9 }, \
1422c88b1d6cSniklas { opcode, FBFCC(3)|(mask)|ANNUL, BPRED|FBFCC(~3)|(lose), ",a,N 9,G", flags|F_DELAYED|F_FBR, v9 }
1423c88b1d6cSniklas
1424c88b1d6cSniklas /* v9: We must put `FBRX' before `FBR', to ensure that we never match
14252159047fSniklas v9: something against an expression unless it is an expression. Otherwise,
14262159047fSniklas v9: we end up with undefined symbol tables entries, because they get added,
14272159047fSniklas v9: but are not deleted if the pattern fails to match. */
14282159047fSniklas
1429c88b1d6cSniklas #define CONDFC(fop, cop, mask, flags) \
1430c88b1d6cSniklas FBRX(fop, F2(0, 5)|COND(mask), F2(~0, ~5)|COND(~(mask)), flags), /* v9 */ \
1431c88b1d6cSniklas FBR(fop, F2(0, 6)|COND(mask), F2(~0, ~6)|COND(~(mask)), flags), \
1432c88b1d6cSniklas CBR(cop, F2(0, 7)|COND(mask), F2(~0, ~7)|COND(~(mask)), flags, v6notlet)
14332159047fSniklas
1434c88b1d6cSniklas #define CONDFCL(fop, cop, mask, flags) \
1435c88b1d6cSniklas FBRX(fop, F2(0, 5)|COND(mask), F2(~0, ~5)|COND(~(mask)), flags), /* v9 */ \
1436c88b1d6cSniklas FBR(fop, F2(0, 6)|COND(mask), F2(~0, ~6)|COND(~(mask)), flags), \
1437c88b1d6cSniklas CBR(cop, F2(0, 7)|COND(mask), F2(~0, ~7)|COND(~(mask)), flags, v6)
14382159047fSniklas
1439c88b1d6cSniklas #define CONDF(fop, mask, flags) \
1440c88b1d6cSniklas FBRX(fop, F2(0, 5)|COND(mask), F2(~0, ~5)|COND(~(mask)), flags), /* v9 */ \
1441c88b1d6cSniklas FBR(fop, F2(0, 6)|COND(mask), F2(~0, ~6)|COND(~(mask)), flags)
14422159047fSniklas
1443c074d1c9Sdrahn CONDFC ("fb", "cb", 0x8, F_UNBR),
1444c074d1c9Sdrahn CONDFCL ("fba", "cba", 0x8, F_UNBR|F_ALIAS),
1445c074d1c9Sdrahn CONDFC ("fbe", "cb0", 0x9, F_CONDBR),
1446c074d1c9Sdrahn CONDF ("fbz", 0x9, F_CONDBR|F_ALIAS),
1447c074d1c9Sdrahn CONDFC ("fbg", "cb2", 0x6, F_CONDBR),
1448c074d1c9Sdrahn CONDFC ("fbge", "cb02", 0xb, F_CONDBR),
1449c074d1c9Sdrahn CONDFC ("fbl", "cb1", 0x4, F_CONDBR),
1450c074d1c9Sdrahn CONDFC ("fble", "cb01", 0xd, F_CONDBR),
1451c074d1c9Sdrahn CONDFC ("fblg", "cb12", 0x2, F_CONDBR),
1452c074d1c9Sdrahn CONDFCL ("fbn", "cbn", 0x0, F_UNBR),
1453c074d1c9Sdrahn CONDFC ("fbne", "cb123", 0x1, F_CONDBR),
1454c074d1c9Sdrahn CONDF ("fbnz", 0x1, F_CONDBR|F_ALIAS),
1455c074d1c9Sdrahn CONDFC ("fbo", "cb012", 0xf, F_CONDBR),
1456c074d1c9Sdrahn CONDFC ("fbu", "cb3", 0x7, F_CONDBR),
1457c074d1c9Sdrahn CONDFC ("fbue", "cb03", 0xa, F_CONDBR),
1458c074d1c9Sdrahn CONDFC ("fbug", "cb23", 0x5, F_CONDBR),
1459c074d1c9Sdrahn CONDFC ("fbuge", "cb023", 0xc, F_CONDBR),
1460c074d1c9Sdrahn CONDFC ("fbul", "cb13", 0x3, F_CONDBR),
1461c074d1c9Sdrahn CONDFC ("fbule", "cb013", 0xe, F_CONDBR),
1462c88b1d6cSniklas
1463c88b1d6cSniklas #undef CONDFC
1464c88b1d6cSniklas #undef CONDFCL
1465c88b1d6cSniklas #undef CONDF
1466c88b1d6cSniklas #undef CBR
1467c88b1d6cSniklas #undef FBR
1468c88b1d6cSniklas #undef FBRX /* v9 */
14692159047fSniklas
14702159047fSniklas { "jmp", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI(~0), "1+2", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+rs2,%g0 */
14712159047fSniklas { "jmp", F3(2, 0x38, 0), F3(~2, ~0x38, ~0)|RD_G0|ASI_RS2(~0), "1", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+%g0,%g0 */
14722159047fSniklas { "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0, "1+i", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+i,%g0 */
14732159047fSniklas { "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0, "i+1", F_UNBR|F_DELAYED, v6 }, /* jmpl i+rs1,%g0 */
14742159047fSniklas { "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|RS1_G0, "i", F_UNBR|F_DELAYED, v6 }, /* jmpl %g0+i,%g0 */
14752159047fSniklas { "jmp", F3(2, 0x38, 1), F3(~2, ~0x38, ~1)|RD_G0|SIMM13(~0), "1", F_UNBR|F_DELAYED, v6 }, /* jmpl rs1+0,%g0 */
14762159047fSniklas
14772159047fSniklas { "nop", F2(0, 4), 0xfeffffff, "", 0, v6 }, /* sethi 0, %g0 */
14782159047fSniklas
1479b305b0f1Sespie { "set", F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,d", F_ALIAS, v6 },
1480b305b0f1Sespie { "setuw", F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,d", F_ALIAS, v9 },
1481b305b0f1Sespie { "setsw", F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,d", F_ALIAS, v9 },
14820c6d0228Sniklas { "setx", F2(0x0, 0x4), F2(~0x0, ~0x4), "S0,1,d", F_ALIAS, v9 },
14832159047fSniklas
14842159047fSniklas { "sethi", F2(0x0, 0x4), F2(~0x0, ~0x4), "h,d", 0, v6 },
14852159047fSniklas
14862159047fSniklas { "taddcc", F3(2, 0x20, 0), F3(~2, ~0x20, ~0)|ASI(~0), "1,2,d", 0, v6 },
14872159047fSniklas { "taddcc", F3(2, 0x20, 1), F3(~2, ~0x20, ~1), "1,i,d", 0, v6 },
14882159047fSniklas { "taddcc", F3(2, 0x20, 1), F3(~2, ~0x20, ~1), "i,1,d", 0, v6 },
14892159047fSniklas { "taddcctv", F3(2, 0x22, 0), F3(~2, ~0x22, ~0)|ASI(~0), "1,2,d", 0, v6 },
14902159047fSniklas { "taddcctv", F3(2, 0x22, 1), F3(~2, ~0x22, ~1), "1,i,d", 0, v6 },
14912159047fSniklas { "taddcctv", F3(2, 0x22, 1), F3(~2, ~0x22, ~1), "i,1,d", 0, v6 },
14922159047fSniklas
14932159047fSniklas { "tsubcc", F3(2, 0x21, 0), F3(~2, ~0x21, ~0)|ASI(~0), "1,2,d", 0, v6 },
14942159047fSniklas { "tsubcc", F3(2, 0x21, 1), F3(~2, ~0x21, ~1), "1,i,d", 0, v6 },
14952159047fSniklas { "tsubcctv", F3(2, 0x23, 0), F3(~2, ~0x23, ~0)|ASI(~0), "1,2,d", 0, v6 },
14962159047fSniklas { "tsubcctv", F3(2, 0x23, 1), F3(~2, ~0x23, ~1), "1,i,d", 0, v6 },
14972159047fSniklas
1498c88b1d6cSniklas { "unimp", F2(0x0, 0x0), 0xffc00000, "n", 0, v6notv9 },
14992159047fSniklas { "illtrap", F2(0, 0), F2(~0, ~0)|RD_G0, "n", 0, v9 },
15002159047fSniklas
15012159047fSniklas /* This *is* a commutative instruction. */
15022159047fSniklas { "xnor", F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "1,2,d", 0, v6 },
15032159047fSniklas { "xnor", F3(2, 0x07, 1), F3(~2, ~0x07, ~1), "1,i,d", 0, v6 },
15042159047fSniklas { "xnor", F3(2, 0x07, 1), F3(~2, ~0x07, ~1), "i,1,d", 0, v6 },
15052159047fSniklas /* This *is* a commutative instruction. */
15062159047fSniklas { "xnorcc", F3(2, 0x17, 0), F3(~2, ~0x17, ~0)|ASI(~0), "1,2,d", 0, v6 },
15072159047fSniklas { "xnorcc", F3(2, 0x17, 1), F3(~2, ~0x17, ~1), "1,i,d", 0, v6 },
15082159047fSniklas { "xnorcc", F3(2, 0x17, 1), F3(~2, ~0x17, ~1), "i,1,d", 0, v6 },
15092159047fSniklas { "xor", F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0), "1,2,d", 0, v6 },
15102159047fSniklas { "xor", F3(2, 0x03, 1), F3(~2, ~0x03, ~1), "1,i,d", 0, v6 },
15112159047fSniklas { "xor", F3(2, 0x03, 1), F3(~2, ~0x03, ~1), "i,1,d", 0, v6 },
15122159047fSniklas { "xorcc", F3(2, 0x13, 0), F3(~2, ~0x13, ~0)|ASI(~0), "1,2,d", 0, v6 },
15132159047fSniklas { "xorcc", F3(2, 0x13, 1), F3(~2, ~0x13, ~1), "1,i,d", 0, v6 },
15142159047fSniklas { "xorcc", F3(2, 0x13, 1), F3(~2, ~0x13, ~1), "i,1,d", 0, v6 },
15152159047fSniklas
15162159047fSniklas { "not", F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "1,d", F_ALIAS, v6 }, /* xnor rs1,%0,rd */
15172159047fSniklas { "not", F3(2, 0x07, 0), F3(~2, ~0x07, ~0)|ASI(~0), "r", F_ALIAS, v6 }, /* xnor rd,%0,rd */
15182159047fSniklas
15192159047fSniklas { "btog", F3(2, 0x03, 0), F3(~2, ~0x03, ~0)|ASI(~0), "2,r", F_ALIAS, v6 }, /* xor rd,rs2,rd */
15202159047fSniklas { "btog", F3(2, 0x03, 1), F3(~2, ~0x03, ~1), "i,r", F_ALIAS, v6 }, /* xor rd,i,rd */
15212159047fSniklas
15222159047fSniklas /* FPop1 and FPop2 are not instructions. Don't accept them. */
15232159047fSniklas
1524c88b1d6cSniklas { "fdtoi", F3F(2, 0x34, 0x0d2), F3F(~2, ~0x34, ~0x0d2)|RS1_G0, "B,g", F_FLOAT, v6 },
1525c88b1d6cSniklas { "fstoi", F3F(2, 0x34, 0x0d1), F3F(~2, ~0x34, ~0x0d1)|RS1_G0, "f,g", F_FLOAT, v6 },
1526c88b1d6cSniklas { "fqtoi", F3F(2, 0x34, 0x0d3), F3F(~2, ~0x34, ~0x0d3)|RS1_G0, "R,g", F_FLOAT, v8 },
15272159047fSniklas
1528*007c2a45Smiod { "fdtox", F3F(2, 0x34, 0x082), F3F(~2, ~0x34, ~0x082)|RS1_G0, "B,H", F_FLOAT, v9 },
1529*007c2a45Smiod { "fstox", F3F(2, 0x34, 0x081), F3F(~2, ~0x34, ~0x081)|RS1_G0, "f,H", F_FLOAT, v9 },
1530*007c2a45Smiod { "fqtox", F3F(2, 0x34, 0x083), F3F(~2, ~0x34, ~0x083)|RS1_G0, "R,H", F_FLOAT, v9 },
15312159047fSniklas
1532c88b1d6cSniklas { "fitod", F3F(2, 0x34, 0x0c8), F3F(~2, ~0x34, ~0x0c8)|RS1_G0, "f,H", F_FLOAT, v6 },
1533c88b1d6cSniklas { "fitos", F3F(2, 0x34, 0x0c4), F3F(~2, ~0x34, ~0x0c4)|RS1_G0, "f,g", F_FLOAT, v6 },
1534c88b1d6cSniklas { "fitoq", F3F(2, 0x34, 0x0cc), F3F(~2, ~0x34, ~0x0cc)|RS1_G0, "f,J", F_FLOAT, v8 },
15352159047fSniklas
1536*007c2a45Smiod { "fxtod", F3F(2, 0x34, 0x088), F3F(~2, ~0x34, ~0x088)|RS1_G0, "B,H", F_FLOAT, v9 },
1537*007c2a45Smiod { "fxtos", F3F(2, 0x34, 0x084), F3F(~2, ~0x34, ~0x084)|RS1_G0, "B,g", F_FLOAT, v9 },
1538*007c2a45Smiod { "fxtoq", F3F(2, 0x34, 0x08c), F3F(~2, ~0x34, ~0x08c)|RS1_G0, "B,J", F_FLOAT, v9 },
15392159047fSniklas
1540c88b1d6cSniklas { "fdtoq", F3F(2, 0x34, 0x0ce), F3F(~2, ~0x34, ~0x0ce)|RS1_G0, "B,J", F_FLOAT, v8 },
1541c88b1d6cSniklas { "fdtos", F3F(2, 0x34, 0x0c6), F3F(~2, ~0x34, ~0x0c6)|RS1_G0, "B,g", F_FLOAT, v6 },
1542c88b1d6cSniklas { "fqtod", F3F(2, 0x34, 0x0cb), F3F(~2, ~0x34, ~0x0cb)|RS1_G0, "R,H", F_FLOAT, v8 },
1543c88b1d6cSniklas { "fqtos", F3F(2, 0x34, 0x0c7), F3F(~2, ~0x34, ~0x0c7)|RS1_G0, "R,g", F_FLOAT, v8 },
1544c88b1d6cSniklas { "fstod", F3F(2, 0x34, 0x0c9), F3F(~2, ~0x34, ~0x0c9)|RS1_G0, "f,H", F_FLOAT, v6 },
1545c88b1d6cSniklas { "fstoq", F3F(2, 0x34, 0x0cd), F3F(~2, ~0x34, ~0x0cd)|RS1_G0, "f,J", F_FLOAT, v8 },
15462159047fSniklas
1547c88b1d6cSniklas { "fdivd", F3F(2, 0x34, 0x04e), F3F(~2, ~0x34, ~0x04e), "v,B,H", F_FLOAT, v6 },
1548c88b1d6cSniklas { "fdivq", F3F(2, 0x34, 0x04f), F3F(~2, ~0x34, ~0x04f), "V,R,J", F_FLOAT, v8 },
1549b305b0f1Sespie { "fdivx", F3F(2, 0x34, 0x04f), F3F(~2, ~0x34, ~0x04f), "V,R,J", F_FLOAT|F_ALIAS, v8 },
1550c88b1d6cSniklas { "fdivs", F3F(2, 0x34, 0x04d), F3F(~2, ~0x34, ~0x04d), "e,f,g", F_FLOAT, v6 },
1551c88b1d6cSniklas { "fmuld", F3F(2, 0x34, 0x04a), F3F(~2, ~0x34, ~0x04a), "v,B,H", F_FLOAT, v6 },
1552c88b1d6cSniklas { "fmulq", F3F(2, 0x34, 0x04b), F3F(~2, ~0x34, ~0x04b), "V,R,J", F_FLOAT, v8 },
1553b305b0f1Sespie { "fmulx", F3F(2, 0x34, 0x04b), F3F(~2, ~0x34, ~0x04b), "V,R,J", F_FLOAT|F_ALIAS, v8 },
1554c88b1d6cSniklas { "fmuls", F3F(2, 0x34, 0x049), F3F(~2, ~0x34, ~0x049), "e,f,g", F_FLOAT, v6 },
15552159047fSniklas
1556c88b1d6cSniklas { "fdmulq", F3F(2, 0x34, 0x06e), F3F(~2, ~0x34, ~0x06e), "v,B,J", F_FLOAT, v8 },
1557b305b0f1Sespie { "fdmulx", F3F(2, 0x34, 0x06e), F3F(~2, ~0x34, ~0x06e), "v,B,J", F_FLOAT|F_ALIAS, v8 },
1558c88b1d6cSniklas { "fsmuld", F3F(2, 0x34, 0x069), F3F(~2, ~0x34, ~0x069), "e,f,H", F_FLOAT, v8 },
15592159047fSniklas
1560c88b1d6cSniklas { "fsqrtd", F3F(2, 0x34, 0x02a), F3F(~2, ~0x34, ~0x02a)|RS1_G0, "B,H", F_FLOAT, v7 },
1561c88b1d6cSniklas { "fsqrtq", F3F(2, 0x34, 0x02b), F3F(~2, ~0x34, ~0x02b)|RS1_G0, "R,J", F_FLOAT, v8 },
1562b305b0f1Sespie { "fsqrtx", F3F(2, 0x34, 0x02b), F3F(~2, ~0x34, ~0x02b)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, v8 },
1563c88b1d6cSniklas { "fsqrts", F3F(2, 0x34, 0x029), F3F(~2, ~0x34, ~0x029)|RS1_G0, "f,g", F_FLOAT, v7 },
15642159047fSniklas
1565c88b1d6cSniklas { "fabsd", F3F(2, 0x34, 0x00a), F3F(~2, ~0x34, ~0x00a)|RS1_G0, "B,H", F_FLOAT, v9 },
1566c88b1d6cSniklas { "fabsq", F3F(2, 0x34, 0x00b), F3F(~2, ~0x34, ~0x00b)|RS1_G0, "R,J", F_FLOAT, v9 },
1567b305b0f1Sespie { "fabsx", F3F(2, 0x34, 0x00b), F3F(~2, ~0x34, ~0x00b)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, v9 },
1568c88b1d6cSniklas { "fabss", F3F(2, 0x34, 0x009), F3F(~2, ~0x34, ~0x009)|RS1_G0, "f,g", F_FLOAT, v6 },
1569c88b1d6cSniklas { "fmovd", F3F(2, 0x34, 0x002), F3F(~2, ~0x34, ~0x002)|RS1_G0, "B,H", F_FLOAT, v9 },
1570c88b1d6cSniklas { "fmovq", F3F(2, 0x34, 0x003), F3F(~2, ~0x34, ~0x003)|RS1_G0, "R,J", F_FLOAT, v9 },
1571b305b0f1Sespie { "fmovx", F3F(2, 0x34, 0x003), F3F(~2, ~0x34, ~0x003)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, v9 },
1572c88b1d6cSniklas { "fmovs", F3F(2, 0x34, 0x001), F3F(~2, ~0x34, ~0x001)|RS1_G0, "f,g", F_FLOAT, v6 },
1573c88b1d6cSniklas { "fnegd", F3F(2, 0x34, 0x006), F3F(~2, ~0x34, ~0x006)|RS1_G0, "B,H", F_FLOAT, v9 },
1574c88b1d6cSniklas { "fnegq", F3F(2, 0x34, 0x007), F3F(~2, ~0x34, ~0x007)|RS1_G0, "R,J", F_FLOAT, v9 },
1575b305b0f1Sespie { "fnegx", F3F(2, 0x34, 0x007), F3F(~2, ~0x34, ~0x007)|RS1_G0, "R,J", F_FLOAT|F_ALIAS, v9 },
1576c88b1d6cSniklas { "fnegs", F3F(2, 0x34, 0x005), F3F(~2, ~0x34, ~0x005)|RS1_G0, "f,g", F_FLOAT, v6 },
15772159047fSniklas
1578c88b1d6cSniklas { "faddd", F3F(2, 0x34, 0x042), F3F(~2, ~0x34, ~0x042), "v,B,H", F_FLOAT, v6 },
1579c88b1d6cSniklas { "faddq", F3F(2, 0x34, 0x043), F3F(~2, ~0x34, ~0x043), "V,R,J", F_FLOAT, v8 },
1580b305b0f1Sespie { "faddx", F3F(2, 0x34, 0x043), F3F(~2, ~0x34, ~0x043), "V,R,J", F_FLOAT|F_ALIAS, v8 },
1581c88b1d6cSniklas { "fadds", F3F(2, 0x34, 0x041), F3F(~2, ~0x34, ~0x041), "e,f,g", F_FLOAT, v6 },
1582c88b1d6cSniklas { "fsubd", F3F(2, 0x34, 0x046), F3F(~2, ~0x34, ~0x046), "v,B,H", F_FLOAT, v6 },
1583c88b1d6cSniklas { "fsubq", F3F(2, 0x34, 0x047), F3F(~2, ~0x34, ~0x047), "V,R,J", F_FLOAT, v8 },
1584b305b0f1Sespie { "fsubx", F3F(2, 0x34, 0x047), F3F(~2, ~0x34, ~0x047), "V,R,J", F_FLOAT|F_ALIAS, v8 },
1585c88b1d6cSniklas { "fsubs", F3F(2, 0x34, 0x045), F3F(~2, ~0x34, ~0x045), "e,f,g", F_FLOAT, v6 },
15862159047fSniklas
15872159047fSniklas #define CMPFCC(x) (((x)&0x3)<<25)
15882159047fSniklas
1589c88b1d6cSniklas { "fcmpd", F3F(2, 0x35, 0x052), F3F(~2, ~0x35, ~0x052)|RD_G0, "v,B", F_FLOAT, v6 },
1590c88b1d6cSniklas { "fcmpd", CMPFCC(0)|F3F(2, 0x35, 0x052), CMPFCC(~0)|F3F(~2, ~0x35, ~0x052), "6,v,B", F_FLOAT, v9 },
1591c88b1d6cSniklas { "fcmpd", CMPFCC(1)|F3F(2, 0x35, 0x052), CMPFCC(~1)|F3F(~2, ~0x35, ~0x052), "7,v,B", F_FLOAT, v9 },
1592c88b1d6cSniklas { "fcmpd", CMPFCC(2)|F3F(2, 0x35, 0x052), CMPFCC(~2)|F3F(~2, ~0x35, ~0x052), "8,v,B", F_FLOAT, v9 },
1593c88b1d6cSniklas { "fcmpd", CMPFCC(3)|F3F(2, 0x35, 0x052), CMPFCC(~3)|F3F(~2, ~0x35, ~0x052), "9,v,B", F_FLOAT, v9 },
1594c88b1d6cSniklas { "fcmped", F3F(2, 0x35, 0x056), F3F(~2, ~0x35, ~0x056)|RD_G0, "v,B", F_FLOAT, v6 },
1595c88b1d6cSniklas { "fcmped", CMPFCC(0)|F3F(2, 0x35, 0x056), CMPFCC(~0)|F3F(~2, ~0x35, ~0x056), "6,v,B", F_FLOAT, v9 },
1596c88b1d6cSniklas { "fcmped", CMPFCC(1)|F3F(2, 0x35, 0x056), CMPFCC(~1)|F3F(~2, ~0x35, ~0x056), "7,v,B", F_FLOAT, v9 },
1597c88b1d6cSniklas { "fcmped", CMPFCC(2)|F3F(2, 0x35, 0x056), CMPFCC(~2)|F3F(~2, ~0x35, ~0x056), "8,v,B", F_FLOAT, v9 },
1598c88b1d6cSniklas { "fcmped", CMPFCC(3)|F3F(2, 0x35, 0x056), CMPFCC(~3)|F3F(~2, ~0x35, ~0x056), "9,v,B", F_FLOAT, v9 },
1599b305b0f1Sespie { "fcmpq", F3F(2, 0x35, 0x053), F3F(~2, ~0x35, ~0x053)|RD_G0, "V,R", F_FLOAT, v8 },
1600c88b1d6cSniklas { "fcmpq", CMPFCC(0)|F3F(2, 0x35, 0x053), CMPFCC(~0)|F3F(~2, ~0x35, ~0x053), "6,V,R", F_FLOAT, v9 },
1601c88b1d6cSniklas { "fcmpq", CMPFCC(1)|F3F(2, 0x35, 0x053), CMPFCC(~1)|F3F(~2, ~0x35, ~0x053), "7,V,R", F_FLOAT, v9 },
1602c88b1d6cSniklas { "fcmpq", CMPFCC(2)|F3F(2, 0x35, 0x053), CMPFCC(~2)|F3F(~2, ~0x35, ~0x053), "8,V,R", F_FLOAT, v9 },
1603c88b1d6cSniklas { "fcmpq", CMPFCC(3)|F3F(2, 0x35, 0x053), CMPFCC(~3)|F3F(~2, ~0x35, ~0x053), "9,V,R", F_FLOAT, v9 },
1604b305b0f1Sespie { "fcmpeq", F3F(2, 0x35, 0x057), F3F(~2, ~0x35, ~0x057)|RD_G0, "V,R", F_FLOAT, v8 },
1605c88b1d6cSniklas { "fcmpeq", CMPFCC(0)|F3F(2, 0x35, 0x057), CMPFCC(~0)|F3F(~2, ~0x35, ~0x057), "6,V,R", F_FLOAT, v9 },
1606c88b1d6cSniklas { "fcmpeq", CMPFCC(1)|F3F(2, 0x35, 0x057), CMPFCC(~1)|F3F(~2, ~0x35, ~0x057), "7,V,R", F_FLOAT, v9 },
1607c88b1d6cSniklas { "fcmpeq", CMPFCC(2)|F3F(2, 0x35, 0x057), CMPFCC(~2)|F3F(~2, ~0x35, ~0x057), "8,V,R", F_FLOAT, v9 },
1608c88b1d6cSniklas { "fcmpeq", CMPFCC(3)|F3F(2, 0x35, 0x057), CMPFCC(~3)|F3F(~2, ~0x35, ~0x057), "9,V,R", F_FLOAT, v9 },
1609b305b0f1Sespie { "fcmpx", F3F(2, 0x35, 0x053), F3F(~2, ~0x35, ~0x053)|RD_G0, "V,R", F_FLOAT|F_ALIAS, v8 },
1610b305b0f1Sespie { "fcmpx", CMPFCC(0)|F3F(2, 0x35, 0x053), CMPFCC(~0)|F3F(~2, ~0x35, ~0x053), "6,V,R", F_FLOAT|F_ALIAS, v9 },
1611b305b0f1Sespie { "fcmpx", CMPFCC(1)|F3F(2, 0x35, 0x053), CMPFCC(~1)|F3F(~2, ~0x35, ~0x053), "7,V,R", F_FLOAT|F_ALIAS, v9 },
1612b305b0f1Sespie { "fcmpx", CMPFCC(2)|F3F(2, 0x35, 0x053), CMPFCC(~2)|F3F(~2, ~0x35, ~0x053), "8,V,R", F_FLOAT|F_ALIAS, v9 },
1613b305b0f1Sespie { "fcmpx", CMPFCC(3)|F3F(2, 0x35, 0x053), CMPFCC(~3)|F3F(~2, ~0x35, ~0x053), "9,V,R", F_FLOAT|F_ALIAS, v9 },
1614b305b0f1Sespie { "fcmpex", F3F(2, 0x35, 0x057), F3F(~2, ~0x35, ~0x057)|RD_G0, "V,R", F_FLOAT|F_ALIAS, v8 },
1615b305b0f1Sespie { "fcmpex", CMPFCC(0)|F3F(2, 0x35, 0x057), CMPFCC(~0)|F3F(~2, ~0x35, ~0x057), "6,V,R", F_FLOAT|F_ALIAS, v9 },
1616b305b0f1Sespie { "fcmpex", CMPFCC(1)|F3F(2, 0x35, 0x057), CMPFCC(~1)|F3F(~2, ~0x35, ~0x057), "7,V,R", F_FLOAT|F_ALIAS, v9 },
1617b305b0f1Sespie { "fcmpex", CMPFCC(2)|F3F(2, 0x35, 0x057), CMPFCC(~2)|F3F(~2, ~0x35, ~0x057), "8,V,R", F_FLOAT|F_ALIAS, v9 },
1618b305b0f1Sespie { "fcmpex", CMPFCC(3)|F3F(2, 0x35, 0x057), CMPFCC(~3)|F3F(~2, ~0x35, ~0x057), "9,V,R", F_FLOAT|F_ALIAS, v9 },
1619c88b1d6cSniklas { "fcmps", F3F(2, 0x35, 0x051), F3F(~2, ~0x35, ~0x051)|RD_G0, "e,f", F_FLOAT, v6 },
1620c88b1d6cSniklas { "fcmps", CMPFCC(0)|F3F(2, 0x35, 0x051), CMPFCC(~0)|F3F(~2, ~0x35, ~0x051), "6,e,f", F_FLOAT, v9 },
1621c88b1d6cSniklas { "fcmps", CMPFCC(1)|F3F(2, 0x35, 0x051), CMPFCC(~1)|F3F(~2, ~0x35, ~0x051), "7,e,f", F_FLOAT, v9 },
1622c88b1d6cSniklas { "fcmps", CMPFCC(2)|F3F(2, 0x35, 0x051), CMPFCC(~2)|F3F(~2, ~0x35, ~0x051), "8,e,f", F_FLOAT, v9 },
1623c88b1d6cSniklas { "fcmps", CMPFCC(3)|F3F(2, 0x35, 0x051), CMPFCC(~3)|F3F(~2, ~0x35, ~0x051), "9,e,f", F_FLOAT, v9 },
1624c88b1d6cSniklas { "fcmpes", F3F(2, 0x35, 0x055), F3F(~2, ~0x35, ~0x055)|RD_G0, "e,f", F_FLOAT, v6 },
1625c88b1d6cSniklas { "fcmpes", CMPFCC(0)|F3F(2, 0x35, 0x055), CMPFCC(~0)|F3F(~2, ~0x35, ~0x055), "6,e,f", F_FLOAT, v9 },
1626c88b1d6cSniklas { "fcmpes", CMPFCC(1)|F3F(2, 0x35, 0x055), CMPFCC(~1)|F3F(~2, ~0x35, ~0x055), "7,e,f", F_FLOAT, v9 },
1627c88b1d6cSniklas { "fcmpes", CMPFCC(2)|F3F(2, 0x35, 0x055), CMPFCC(~2)|F3F(~2, ~0x35, ~0x055), "8,e,f", F_FLOAT, v9 },
1628c88b1d6cSniklas { "fcmpes", CMPFCC(3)|F3F(2, 0x35, 0x055), CMPFCC(~3)|F3F(~2, ~0x35, ~0x055), "9,e,f", F_FLOAT, v9 },
16292159047fSniklas
16302159047fSniklas /* These Extended FPop (FIFO) instructions are new in the Fujitsu
16312159047fSniklas MB86934, replacing the CPop instructions from v6 and later
16322159047fSniklas processors. */
16332159047fSniklas
16342159047fSniklas #define EFPOP1_2(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op)|RS1_G0, args, 0, sparclite }
16352159047fSniklas #define EFPOP1_3(name, op, args) { name, F3F(2, 0x36, op), F3F(~2, ~0x36, ~op), args, 0, sparclite }
16362159047fSniklas #define EFPOP2_2(name, op, args) { name, F3F(2, 0x37, op), F3F(~2, ~0x37, ~op)|RD_G0, args, 0, sparclite }
16372159047fSniklas
16382159047fSniklas EFPOP1_2 ("efitod", 0x0c8, "f,H"),
16392159047fSniklas EFPOP1_2 ("efitos", 0x0c4, "f,g"),
16402159047fSniklas EFPOP1_2 ("efdtoi", 0x0d2, "B,g"),
16412159047fSniklas EFPOP1_2 ("efstoi", 0x0d1, "f,g"),
16422159047fSniklas EFPOP1_2 ("efstod", 0x0c9, "f,H"),
16432159047fSniklas EFPOP1_2 ("efdtos", 0x0c6, "B,g"),
16442159047fSniklas EFPOP1_2 ("efmovs", 0x001, "f,g"),
16452159047fSniklas EFPOP1_2 ("efnegs", 0x005, "f,g"),
16462159047fSniklas EFPOP1_2 ("efabss", 0x009, "f,g"),
16472159047fSniklas EFPOP1_2 ("efsqrtd", 0x02a, "B,H"),
16482159047fSniklas EFPOP1_2 ("efsqrts", 0x029, "f,g"),
16492159047fSniklas EFPOP1_3 ("efaddd", 0x042, "v,B,H"),
16502159047fSniklas EFPOP1_3 ("efadds", 0x041, "e,f,g"),
16512159047fSniklas EFPOP1_3 ("efsubd", 0x046, "v,B,H"),
16522159047fSniklas EFPOP1_3 ("efsubs", 0x045, "e,f,g"),
16532159047fSniklas EFPOP1_3 ("efdivd", 0x04e, "v,B,H"),
16542159047fSniklas EFPOP1_3 ("efdivs", 0x04d, "e,f,g"),
16552159047fSniklas EFPOP1_3 ("efmuld", 0x04a, "v,B,H"),
16562159047fSniklas EFPOP1_3 ("efmuls", 0x049, "e,f,g"),
16572159047fSniklas EFPOP1_3 ("efsmuld", 0x069, "e,f,H"),
16582159047fSniklas EFPOP2_2 ("efcmpd", 0x052, "v,B"),
16592159047fSniklas EFPOP2_2 ("efcmped", 0x056, "v,B"),
16602159047fSniklas EFPOP2_2 ("efcmps", 0x051, "e,f"),
16612159047fSniklas EFPOP2_2 ("efcmpes", 0x055, "e,f"),
16622159047fSniklas
16632159047fSniklas #undef EFPOP1_2
16642159047fSniklas #undef EFPOP1_3
16652159047fSniklas #undef EFPOP2_2
16662159047fSniklas
16672159047fSniklas /* These are marked F_ALIAS, so that they won't conflict with sparclite insns
16682159047fSniklas present. Otherwise, the F_ALIAS flag is ignored. */
1669c88b1d6cSniklas { "cpop1", F3(2, 0x36, 0), F3(~2, ~0x36, ~1), "[1+2],d", F_ALIAS, v6notv9 },
1670c88b1d6cSniklas { "cpop2", F3(2, 0x37, 0), F3(~2, ~0x37, ~1), "[1+2],d", F_ALIAS, v6notv9 },
1671c88b1d6cSniklas
1672c88b1d6cSniklas /* sparclet specific insns */
1673c88b1d6cSniklas
1674c88b1d6cSniklas COMMUTEOP ("umac", 0x3e, sparclet),
1675c88b1d6cSniklas COMMUTEOP ("smac", 0x3f, sparclet),
1676c88b1d6cSniklas COMMUTEOP ("umacd", 0x2e, sparclet),
1677c88b1d6cSniklas COMMUTEOP ("smacd", 0x2f, sparclet),
1678c88b1d6cSniklas COMMUTEOP ("umuld", 0x09, sparclet),
1679c88b1d6cSniklas COMMUTEOP ("smuld", 0x0d, sparclet),
1680c88b1d6cSniklas
1681c88b1d6cSniklas { "shuffle", F3(2, 0x2d, 0), F3(~2, ~0x2d, ~0)|ASI(~0), "1,2,d", 0, sparclet },
1682c88b1d6cSniklas { "shuffle", F3(2, 0x2d, 1), F3(~2, ~0x2d, ~1), "1,i,d", 0, sparclet },
1683c88b1d6cSniklas
1684c88b1d6cSniklas /* The manual isn't completely accurate on these insns. The `rs2' field is
1685c88b1d6cSniklas treated as being 6 bits to account for 6 bit immediates to cpush. It is
1686c88b1d6cSniklas assumed that it is intended that bit 5 is 0 when rs2 contains a reg. */
1687c88b1d6cSniklas #define BIT5 (1<<5)
1688c88b1d6cSniklas { "crdcxt", F3(2, 0x36, 0)|SLCPOP(4), F3(~2, ~0x36, ~0)|SLCPOP(~4)|BIT5|RS2(~0), "U,d", 0, sparclet },
1689c88b1d6cSniklas { "cwrcxt", F3(2, 0x36, 0)|SLCPOP(3), F3(~2, ~0x36, ~0)|SLCPOP(~3)|BIT5|RS2(~0), "1,u", 0, sparclet },
1690c88b1d6cSniklas { "cpush", F3(2, 0x36, 0)|SLCPOP(0), F3(~2, ~0x36, ~0)|SLCPOP(~0)|BIT5|RD(~0), "1,2", 0, sparclet },
1691c88b1d6cSniklas { "cpush", F3(2, 0x36, 1)|SLCPOP(0), F3(~2, ~0x36, ~1)|SLCPOP(~0)|RD(~0), "1,Y", 0, sparclet },
1692c88b1d6cSniklas { "cpusha", F3(2, 0x36, 0)|SLCPOP(1), F3(~2, ~0x36, ~0)|SLCPOP(~1)|BIT5|RD(~0), "1,2", 0, sparclet },
1693c88b1d6cSniklas { "cpusha", F3(2, 0x36, 1)|SLCPOP(1), F3(~2, ~0x36, ~1)|SLCPOP(~1)|RD(~0), "1,Y", 0, sparclet },
1694c88b1d6cSniklas { "cpull", F3(2, 0x36, 0)|SLCPOP(2), F3(~2, ~0x36, ~0)|SLCPOP(~2)|BIT5|RS1(~0)|RS2(~0), "d", 0, sparclet },
1695c88b1d6cSniklas #undef BIT5
1696c88b1d6cSniklas
1697c88b1d6cSniklas /* sparclet coprocessor branch insns */
1698c88b1d6cSniklas #define SLCBCC2(opcode, mask, lose) \
1699c88b1d6cSniklas { opcode, (mask), ANNUL|(lose), "l", F_DELAYED|F_CONDBR, sparclet }, \
1700c88b1d6cSniklas { opcode, (mask)|ANNUL, (lose), ",a l", F_DELAYED|F_CONDBR, sparclet }
1701c88b1d6cSniklas #define SLCBCC(opcode, mask) \
1702c88b1d6cSniklas SLCBCC2(opcode, F2(0, 7)|COND(mask), F2(~0, ~7)|COND(~(mask)))
1703c88b1d6cSniklas
1704c88b1d6cSniklas /* cbn,cba can't be defined here because they're defined elsewhere and GAS
1705c88b1d6cSniklas requires all mnemonics of the same name to be consecutive. */
1706c88b1d6cSniklas /*SLCBCC("cbn", 0), - already defined */
1707c88b1d6cSniklas SLCBCC("cbe", 1),
1708c88b1d6cSniklas SLCBCC("cbf", 2),
1709c88b1d6cSniklas SLCBCC("cbef", 3),
1710c88b1d6cSniklas SLCBCC("cbr", 4),
1711c88b1d6cSniklas SLCBCC("cber", 5),
1712c88b1d6cSniklas SLCBCC("cbfr", 6),
1713c88b1d6cSniklas SLCBCC("cbefr", 7),
1714c88b1d6cSniklas /*SLCBCC("cba", 8), - already defined */
1715c88b1d6cSniklas SLCBCC("cbne", 9),
1716c88b1d6cSniklas SLCBCC("cbnf", 10),
1717c88b1d6cSniklas SLCBCC("cbnef", 11),
1718c88b1d6cSniklas SLCBCC("cbnr", 12),
1719c88b1d6cSniklas SLCBCC("cbner", 13),
1720c88b1d6cSniklas SLCBCC("cbnfr", 14),
1721c88b1d6cSniklas SLCBCC("cbnefr", 15),
1722c88b1d6cSniklas
1723c88b1d6cSniklas #undef SLCBCC2
1724c88b1d6cSniklas #undef SLCBCC
1725c88b1d6cSniklas
17262159047fSniklas { "casa", F3(3, 0x3c, 0), F3(~3, ~0x3c, ~0), "[1]A,2,d", 0, v9 },
17272159047fSniklas { "casa", F3(3, 0x3c, 1), F3(~3, ~0x3c, ~1), "[1]o,2,d", 0, v9 },
17282159047fSniklas { "casxa", F3(3, 0x3e, 0), F3(~3, ~0x3e, ~0), "[1]A,2,d", 0, v9 },
17292159047fSniklas { "casxa", F3(3, 0x3e, 1), F3(~3, ~0x3e, ~1), "[1]o,2,d", 0, v9 },
17302159047fSniklas
17312159047fSniklas /* v9 synthetic insns */
17322159047fSniklas { "iprefetch", F2(0, 1)|(2<<20)|BPRED, F2(~0, ~1)|(1<<20)|ANNUL|COND(~0), "G", 0, v9 }, /* bn,a,pt %xcc,label */
17332159047fSniklas { "signx", F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, v9 }, /* sra rs1,%g0,rd */
1734b305b0f1Sespie { "signx", F3(2, 0x27, 0), F3(~2, ~0x27, ~0)|(1<<12)|ASI(~0)|RS2_G0, "r", F_ALIAS, v9 }, /* sra rd,%g0,rd */
17352159047fSniklas { "clruw", F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0)|RS2_G0, "1,d", F_ALIAS, v9 }, /* srl rs1,%g0,rd */
1736b305b0f1Sespie { "clruw", F3(2, 0x26, 0), F3(~2, ~0x26, ~0)|(1<<12)|ASI(~0)|RS2_G0, "r", F_ALIAS, v9 }, /* srl rd,%g0,rd */
17372159047fSniklas { "cas", F3(3, 0x3c, 0)|ASI(0x80), F3(~3, ~0x3c, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, v9 }, /* casa [rs1]ASI_P,rs2,rd */
17382159047fSniklas { "casl", F3(3, 0x3c, 0)|ASI(0x88), F3(~3, ~0x3c, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, v9 }, /* casa [rs1]ASI_P_L,rs2,rd */
17392159047fSniklas { "casx", F3(3, 0x3e, 0)|ASI(0x80), F3(~3, ~0x3e, ~0)|ASI(~0x80), "[1],2,d", F_ALIAS, v9 }, /* casxa [rs1]ASI_P,rs2,rd */
17402159047fSniklas { "casxl", F3(3, 0x3e, 0)|ASI(0x88), F3(~3, ~0x3e, ~0)|ASI(~0x88), "[1],2,d", F_ALIAS, v9 }, /* casxa [rs1]ASI_P_L,rs2,rd */
17412159047fSniklas
1742c88b1d6cSniklas /* Ultrasparc extensions */
1743c88b1d6cSniklas { "shutdown", F3F(2, 0x36, 0x080), F3F(~2, ~0x36, ~0x080)|RD_G0|RS1_G0|RS2_G0, "", 0, v9a },
1744c88b1d6cSniklas
1745c88b1d6cSniklas /* FIXME: Do we want to mark these as F_FLOAT, or something similar? */
1746b305b0f1Sespie { "fpadd16", F3F(2, 0x36, 0x050), F3F(~2, ~0x36, ~0x050), "v,B,H", 0, v9a },
1747b305b0f1Sespie { "fpadd16s", F3F(2, 0x36, 0x051), F3F(~2, ~0x36, ~0x051), "e,f,g", 0, v9a },
1748b305b0f1Sespie { "fpadd32", F3F(2, 0x36, 0x052), F3F(~2, ~0x36, ~0x052), "v,B,H", 0, v9a },
1749b305b0f1Sespie { "fpadd32s", F3F(2, 0x36, 0x053), F3F(~2, ~0x36, ~0x053), "e,f,g", 0, v9a },
1750b305b0f1Sespie { "fpsub16", F3F(2, 0x36, 0x054), F3F(~2, ~0x36, ~0x054), "v,B,H", 0, v9a },
1751b305b0f1Sespie { "fpsub16s", F3F(2, 0x36, 0x055), F3F(~2, ~0x36, ~0x055), "e,f,g", 0, v9a },
1752b305b0f1Sespie { "fpsub32", F3F(2, 0x36, 0x056), F3F(~2, ~0x36, ~0x056), "v,B,H", 0, v9a },
1753b305b0f1Sespie { "fpsub32s", F3F(2, 0x36, 0x057), F3F(~2, ~0x36, ~0x057), "e,f,g", 0, v9a },
1754c88b1d6cSniklas
1755c88b1d6cSniklas { "fpack32", F3F(2, 0x36, 0x03a), F3F(~2, ~0x36, ~0x03a), "v,B,H", 0, v9a },
17560c6d0228Sniklas { "fpack16", F3F(2, 0x36, 0x03b), F3F(~2, ~0x36, ~0x03b)|RS1_G0, "B,g", 0, v9a },
17570c6d0228Sniklas { "fpackfix", F3F(2, 0x36, 0x03d), F3F(~2, ~0x36, ~0x03d)|RS1_G0, "B,g", 0, v9a },
17580c6d0228Sniklas { "fexpand", F3F(2, 0x36, 0x04d), F3F(~2, ~0x36, ~0x04d)|RS1_G0, "f,H", 0, v9a },
17590c6d0228Sniklas { "fpmerge", F3F(2, 0x36, 0x04b), F3F(~2, ~0x36, ~0x04b), "e,f,H", 0, v9a },
1760c88b1d6cSniklas
1761b305b0f1Sespie /* Note that the mixing of 32/64 bit regs is intentional. */
1762c88b1d6cSniklas { "fmul8x16", F3F(2, 0x36, 0x031), F3F(~2, ~0x36, ~0x031), "e,B,H", 0, v9a },
1763c88b1d6cSniklas { "fmul8x16au", F3F(2, 0x36, 0x033), F3F(~2, ~0x36, ~0x033), "e,f,H", 0, v9a },
1764c88b1d6cSniklas { "fmul8x16al", F3F(2, 0x36, 0x035), F3F(~2, ~0x36, ~0x035), "e,f,H", 0, v9a },
1765c88b1d6cSniklas { "fmul8sux16", F3F(2, 0x36, 0x036), F3F(~2, ~0x36, ~0x036), "v,B,H", 0, v9a },
1766c88b1d6cSniklas { "fmul8ulx16", F3F(2, 0x36, 0x037), F3F(~2, ~0x36, ~0x037), "v,B,H", 0, v9a },
1767c88b1d6cSniklas { "fmuld8sux16", F3F(2, 0x36, 0x038), F3F(~2, ~0x36, ~0x038), "e,f,H", 0, v9a },
1768c88b1d6cSniklas { "fmuld8ulx16", F3F(2, 0x36, 0x039), F3F(~2, ~0x36, ~0x039), "e,f,H", 0, v9a },
1769c88b1d6cSniklas
1770c88b1d6cSniklas { "alignaddr", F3F(2, 0x36, 0x018), F3F(~2, ~0x36, ~0x018), "1,2,d", 0, v9a },
1771c88b1d6cSniklas { "alignaddrl", F3F(2, 0x36, 0x01a), F3F(~2, ~0x36, ~0x01a), "1,2,d", 0, v9a },
1772c88b1d6cSniklas { "faligndata", F3F(2, 0x36, 0x048), F3F(~2, ~0x36, ~0x048), "v,B,H", 0, v9a },
1773c88b1d6cSniklas
1774c88b1d6cSniklas { "fzero", F3F(2, 0x36, 0x060), F3F(~2, ~0x36, ~0x060), "H", 0, v9a },
1775b305b0f1Sespie { "fzeros", F3F(2, 0x36, 0x061), F3F(~2, ~0x36, ~0x061), "g", 0, v9a },
1776c88b1d6cSniklas { "fone", F3F(2, 0x36, 0x07e), F3F(~2, ~0x36, ~0x07e), "H", 0, v9a },
1777b305b0f1Sespie { "fones", F3F(2, 0x36, 0x07f), F3F(~2, ~0x36, ~0x07f), "g", 0, v9a },
1778b305b0f1Sespie { "fsrc1", F3F(2, 0x36, 0x074), F3F(~2, ~0x36, ~0x074), "v,H", 0, v9a },
1779b305b0f1Sespie { "fsrc1s", F3F(2, 0x36, 0x075), F3F(~2, ~0x36, ~0x075), "e,g", 0, v9a },
1780c88b1d6cSniklas { "fsrc2", F3F(2, 0x36, 0x078), F3F(~2, ~0x36, ~0x078), "B,H", 0, v9a },
1781b305b0f1Sespie { "fsrc2s", F3F(2, 0x36, 0x079), F3F(~2, ~0x36, ~0x079), "f,g", 0, v9a },
1782b305b0f1Sespie { "fnot1", F3F(2, 0x36, 0x06a), F3F(~2, ~0x36, ~0x06a), "v,H", 0, v9a },
1783b305b0f1Sespie { "fnot1s", F3F(2, 0x36, 0x06b), F3F(~2, ~0x36, ~0x06b), "e,g", 0, v9a },
1784c88b1d6cSniklas { "fnot2", F3F(2, 0x36, 0x066), F3F(~2, ~0x36, ~0x066), "B,H", 0, v9a },
1785b305b0f1Sespie { "fnot2s", F3F(2, 0x36, 0x067), F3F(~2, ~0x36, ~0x067), "f,g", 0, v9a },
1786c88b1d6cSniklas { "for", F3F(2, 0x36, 0x07c), F3F(~2, ~0x36, ~0x07c), "v,B,H", 0, v9a },
1787b305b0f1Sespie { "fors", F3F(2, 0x36, 0x07d), F3F(~2, ~0x36, ~0x07d), "e,f,g", 0, v9a },
1788c88b1d6cSniklas { "fnor", F3F(2, 0x36, 0x062), F3F(~2, ~0x36, ~0x062), "v,B,H", 0, v9a },
1789b305b0f1Sespie { "fnors", F3F(2, 0x36, 0x063), F3F(~2, ~0x36, ~0x063), "e,f,g", 0, v9a },
1790c88b1d6cSniklas { "fand", F3F(2, 0x36, 0x070), F3F(~2, ~0x36, ~0x070), "v,B,H", 0, v9a },
1791b305b0f1Sespie { "fands", F3F(2, 0x36, 0x071), F3F(~2, ~0x36, ~0x071), "e,f,g", 0, v9a },
1792c88b1d6cSniklas { "fnand", F3F(2, 0x36, 0x06e), F3F(~2, ~0x36, ~0x06e), "v,B,H", 0, v9a },
1793b305b0f1Sespie { "fnands", F3F(2, 0x36, 0x06f), F3F(~2, ~0x36, ~0x06f), "e,f,g", 0, v9a },
1794c88b1d6cSniklas { "fxor", F3F(2, 0x36, 0x06c), F3F(~2, ~0x36, ~0x06c), "v,B,H", 0, v9a },
1795b305b0f1Sespie { "fxors", F3F(2, 0x36, 0x06d), F3F(~2, ~0x36, ~0x06d), "e,f,g", 0, v9a },
1796c88b1d6cSniklas { "fxnor", F3F(2, 0x36, 0x072), F3F(~2, ~0x36, ~0x072), "v,B,H", 0, v9a },
1797b305b0f1Sespie { "fxnors", F3F(2, 0x36, 0x073), F3F(~2, ~0x36, ~0x073), "e,f,g", 0, v9a },
1798c88b1d6cSniklas { "fornot1", F3F(2, 0x36, 0x07a), F3F(~2, ~0x36, ~0x07a), "v,B,H", 0, v9a },
1799b305b0f1Sespie { "fornot1s", F3F(2, 0x36, 0x07b), F3F(~2, ~0x36, ~0x07b), "e,f,g", 0, v9a },
1800c88b1d6cSniklas { "fornot2", F3F(2, 0x36, 0x076), F3F(~2, ~0x36, ~0x076), "v,B,H", 0, v9a },
1801b305b0f1Sespie { "fornot2s", F3F(2, 0x36, 0x077), F3F(~2, ~0x36, ~0x077), "e,f,g", 0, v9a },
1802c88b1d6cSniklas { "fandnot1", F3F(2, 0x36, 0x068), F3F(~2, ~0x36, ~0x068), "v,B,H", 0, v9a },
1803b305b0f1Sespie { "fandnot1s", F3F(2, 0x36, 0x069), F3F(~2, ~0x36, ~0x069), "e,f,g", 0, v9a },
1804c88b1d6cSniklas { "fandnot2", F3F(2, 0x36, 0x064), F3F(~2, ~0x36, ~0x064), "v,B,H", 0, v9a },
1805b305b0f1Sespie { "fandnot2s", F3F(2, 0x36, 0x065), F3F(~2, ~0x36, ~0x065), "e,f,g", 0, v9a },
1806c88b1d6cSniklas
1807b305b0f1Sespie { "fcmpgt16", F3F(2, 0x36, 0x028), F3F(~2, ~0x36, ~0x028), "v,B,d", 0, v9a },
1808b305b0f1Sespie { "fcmpgt32", F3F(2, 0x36, 0x02c), F3F(~2, ~0x36, ~0x02c), "v,B,d", 0, v9a },
1809b305b0f1Sespie { "fcmple16", F3F(2, 0x36, 0x020), F3F(~2, ~0x36, ~0x020), "v,B,d", 0, v9a },
1810b305b0f1Sespie { "fcmple32", F3F(2, 0x36, 0x024), F3F(~2, ~0x36, ~0x024), "v,B,d", 0, v9a },
1811b305b0f1Sespie { "fcmpne16", F3F(2, 0x36, 0x022), F3F(~2, ~0x36, ~0x022), "v,B,d", 0, v9a },
1812b305b0f1Sespie { "fcmpne32", F3F(2, 0x36, 0x026), F3F(~2, ~0x36, ~0x026), "v,B,d", 0, v9a },
1813b305b0f1Sespie { "fcmpeq16", F3F(2, 0x36, 0x02a), F3F(~2, ~0x36, ~0x02a), "v,B,d", 0, v9a },
1814b305b0f1Sespie { "fcmpeq32", F3F(2, 0x36, 0x02e), F3F(~2, ~0x36, ~0x02e), "v,B,d", 0, v9a },
1815c88b1d6cSniklas
1816c88b1d6cSniklas { "edge8", F3F(2, 0x36, 0x000), F3F(~2, ~0x36, ~0x000), "1,2,d", 0, v9a },
1817c88b1d6cSniklas { "edge8l", F3F(2, 0x36, 0x002), F3F(~2, ~0x36, ~0x002), "1,2,d", 0, v9a },
1818c88b1d6cSniklas { "edge16", F3F(2, 0x36, 0x004), F3F(~2, ~0x36, ~0x004), "1,2,d", 0, v9a },
1819c88b1d6cSniklas { "edge16l", F3F(2, 0x36, 0x006), F3F(~2, ~0x36, ~0x006), "1,2,d", 0, v9a },
1820c88b1d6cSniklas { "edge32", F3F(2, 0x36, 0x008), F3F(~2, ~0x36, ~0x008), "1,2,d", 0, v9a },
1821c88b1d6cSniklas { "edge32l", F3F(2, 0x36, 0x00a), F3F(~2, ~0x36, ~0x00a), "1,2,d", 0, v9a },
1822c88b1d6cSniklas
1823c88b1d6cSniklas { "pdist", F3F(2, 0x36, 0x03e), F3F(~2, ~0x36, ~0x03e), "v,B,H", 0, v9a },
1824c88b1d6cSniklas
1825c88b1d6cSniklas { "array8", F3F(2, 0x36, 0x010), F3F(~2, ~0x36, ~0x010), "1,2,d", 0, v9a },
1826c88b1d6cSniklas { "array16", F3F(2, 0x36, 0x012), F3F(~2, ~0x36, ~0x012), "1,2,d", 0, v9a },
1827c88b1d6cSniklas { "array32", F3F(2, 0x36, 0x014), F3F(~2, ~0x36, ~0x014), "1,2,d", 0, v9a },
1828c88b1d6cSniklas
1829b55d4692Sfgsch /* Cheetah instructions */
1830b55d4692Sfgsch { "edge8n", F3F(2, 0x36, 0x001), F3F(~2, ~0x36, ~0x001), "1,2,d", 0, v9b },
1831b55d4692Sfgsch { "edge8ln", F3F(2, 0x36, 0x003), F3F(~2, ~0x36, ~0x003), "1,2,d", 0, v9b },
1832b55d4692Sfgsch { "edge16n", F3F(2, 0x36, 0x005), F3F(~2, ~0x36, ~0x005), "1,2,d", 0, v9b },
1833b55d4692Sfgsch { "edge16ln", F3F(2, 0x36, 0x007), F3F(~2, ~0x36, ~0x007), "1,2,d", 0, v9b },
1834b55d4692Sfgsch { "edge32n", F3F(2, 0x36, 0x009), F3F(~2, ~0x36, ~0x009), "1,2,d", 0, v9b },
1835b55d4692Sfgsch { "edge32ln", F3F(2, 0x36, 0x00b), F3F(~2, ~0x36, ~0x00b), "1,2,d", 0, v9b },
1836b55d4692Sfgsch
1837b55d4692Sfgsch { "bmask", F3F(2, 0x36, 0x019), F3F(~2, ~0x36, ~0x019), "1,2,d", 0, v9b },
1838b55d4692Sfgsch { "bshuffle", F3F(2, 0x36, 0x04c), F3F(~2, ~0x36, ~0x04c), "v,B,H", 0, v9b },
1839b55d4692Sfgsch
1840b55d4692Sfgsch { "siam", F3F(2, 0x36, 0x081), F3F(~2, ~0x36, ~0x081)|RD_G0|RS1_G0|RS2(~7), "3", 0, v9b },
1841b55d4692Sfgsch
1842b305b0f1Sespie /* More v9 specific insns, these need to come last so they do not clash
1843b305b0f1Sespie with v9a instructions such as "edge8" which looks like impdep1. */
1844b305b0f1Sespie
1845b305b0f1Sespie #define IMPDEP(name, code) \
1846b305b0f1Sespie { name, F3(2, code, 0), F3(~2, ~code, ~0)|ASI(~0), "1,2,d", 0, v9notv9a }, \
1847b305b0f1Sespie { name, F3(2, code, 1), F3(~2, ~code, ~1), "1,i,d", 0, v9notv9a }, \
1848b305b0f1Sespie { name, F3(2, code, 0), F3(~2, ~code, ~0), "x,1,2,d", 0, v9notv9a }, \
1849b305b0f1Sespie { name, F3(2, code, 0), F3(~2, ~code, ~0), "x,e,f,g", 0, v9notv9a }
1850b305b0f1Sespie
1851b305b0f1Sespie IMPDEP ("impdep1", 0x36),
1852b305b0f1Sespie IMPDEP ("impdep2", 0x37),
1853b305b0f1Sespie
1854b305b0f1Sespie #undef IMPDEP
1855b305b0f1Sespie
18562159047fSniklas };
18572159047fSniklas
1858c88b1d6cSniklas const int sparc_num_opcodes = ((sizeof sparc_opcodes)/(sizeof sparc_opcodes[0]));
18592159047fSniklas
18602159047fSniklas /* Utilities for argument parsing. */
18612159047fSniklas
18622159047fSniklas typedef struct
18632159047fSniklas {
18642159047fSniklas int value;
1865b305b0f1Sespie const char *name;
18662159047fSniklas } arg;
18672159047fSniklas
18682159047fSniklas /* Look up NAME in TABLE. */
18692159047fSniklas
1870b305b0f1Sespie static int lookup_name PARAMS ((const arg *, const char *));
1871b305b0f1Sespie static const char *lookup_value PARAMS ((const arg *, int));
1872b305b0f1Sespie
18732159047fSniklas static int
lookup_name(table,name)18742159047fSniklas lookup_name (table, name)
1875b305b0f1Sespie const arg *table;
1876b305b0f1Sespie const char *name;
18772159047fSniklas {
1878b305b0f1Sespie const arg *p;
18792159047fSniklas
18802159047fSniklas for (p = table; p->name; ++p)
18812159047fSniklas if (strcmp (name, p->name) == 0)
18822159047fSniklas return p->value;
18832159047fSniklas
18842159047fSniklas return -1;
18852159047fSniklas }
18862159047fSniklas
18872159047fSniklas /* Look up VALUE in TABLE. */
18882159047fSniklas
1889b305b0f1Sespie static const char *
lookup_value(table,value)18902159047fSniklas lookup_value (table, value)
1891b305b0f1Sespie const arg *table;
18922159047fSniklas int value;
18932159047fSniklas {
1894b305b0f1Sespie const arg *p;
18952159047fSniklas
18962159047fSniklas for (p = table; p->name; ++p)
18972159047fSniklas if (value == p->value)
18982159047fSniklas return p->name;
18992159047fSniklas
19002159047fSniklas return (char *) 0;
19012159047fSniklas }
19022159047fSniklas
19032159047fSniklas /* Handle ASI's. */
19042159047fSniklas
19052159047fSniklas static arg asi_table[] =
19062159047fSniklas {
19070c6d0228Sniklas /* These are in the v9 architecture manual. */
19080c6d0228Sniklas /* The shorter versions appear first, they're here because Sun's as has them.
19090c6d0228Sniklas Sun's as uses #ASI_P_L instead of #ASI_PL (which appears in the
19100c6d0228Sniklas UltraSPARC architecture manual). */
19110c6d0228Sniklas { 0x04, "#ASI_N" },
19120c6d0228Sniklas { 0x0c, "#ASI_N_L" },
19132159047fSniklas { 0x10, "#ASI_AIUP" },
19142159047fSniklas { 0x11, "#ASI_AIUS" },
19152159047fSniklas { 0x18, "#ASI_AIUP_L" },
19162159047fSniklas { 0x19, "#ASI_AIUS_L" },
19172159047fSniklas { 0x80, "#ASI_P" },
19182159047fSniklas { 0x81, "#ASI_S" },
19192159047fSniklas { 0x82, "#ASI_PNF" },
19202159047fSniklas { 0x83, "#ASI_SNF" },
19212159047fSniklas { 0x88, "#ASI_P_L" },
19222159047fSniklas { 0x89, "#ASI_S_L" },
19232159047fSniklas { 0x8a, "#ASI_PNF_L" },
19242159047fSniklas { 0x8b, "#ASI_SNF_L" },
19250c6d0228Sniklas { 0x04, "#ASI_NUCLEUS" },
19260c6d0228Sniklas { 0x0c, "#ASI_NUCLEUS_LITTLE" },
19272159047fSniklas { 0x10, "#ASI_AS_IF_USER_PRIMARY" },
19282159047fSniklas { 0x11, "#ASI_AS_IF_USER_SECONDARY" },
19290c6d0228Sniklas { 0x18, "#ASI_AS_IF_USER_PRIMARY_LITTLE" },
19300c6d0228Sniklas { 0x19, "#ASI_AS_IF_USER_SECONDARY_LITTLE" },
19312159047fSniklas { 0x80, "#ASI_PRIMARY" },
19322159047fSniklas { 0x81, "#ASI_SECONDARY" },
19332159047fSniklas { 0x82, "#ASI_PRIMARY_NOFAULT" },
19342159047fSniklas { 0x83, "#ASI_SECONDARY_NOFAULT" },
19352159047fSniklas { 0x88, "#ASI_PRIMARY_LITTLE" },
19362159047fSniklas { 0x89, "#ASI_SECONDARY_LITTLE" },
19372159047fSniklas { 0x8a, "#ASI_PRIMARY_NOFAULT_LITTLE" },
19382159047fSniklas { 0x8b, "#ASI_SECONDARY_NOFAULT_LITTLE" },
19390c6d0228Sniklas /* These are UltraSPARC extensions. */
19400c6d0228Sniklas /* FIXME: There are dozens of them. Not sure we want them all.
19410c6d0228Sniklas Most are for kernel building but some are for vis type stuff. */
19422159047fSniklas { 0, 0 }
19432159047fSniklas };
19442159047fSniklas
19452159047fSniklas /* Return the value for ASI NAME, or -1 if not found. */
19462159047fSniklas
19472159047fSniklas int
sparc_encode_asi(name)19482159047fSniklas sparc_encode_asi (name)
1949b305b0f1Sespie const char *name;
19502159047fSniklas {
19512159047fSniklas return lookup_name (asi_table, name);
19522159047fSniklas }
19532159047fSniklas
19542159047fSniklas /* Return the name for ASI value VALUE or NULL if not found. */
19552159047fSniklas
1956b305b0f1Sespie const char *
sparc_decode_asi(value)19572159047fSniklas sparc_decode_asi (value)
19582159047fSniklas int value;
19592159047fSniklas {
19602159047fSniklas return lookup_value (asi_table, value);
19612159047fSniklas }
19622159047fSniklas
19632159047fSniklas /* Handle membar masks. */
19642159047fSniklas
19652159047fSniklas static arg membar_table[] =
19662159047fSniklas {
19672159047fSniklas { 0x40, "#Sync" },
19682159047fSniklas { 0x20, "#MemIssue" },
19692159047fSniklas { 0x10, "#Lookaside" },
19702159047fSniklas { 0x08, "#StoreStore" },
19712159047fSniklas { 0x04, "#LoadStore" },
19722159047fSniklas { 0x02, "#StoreLoad" },
19732159047fSniklas { 0x01, "#LoadLoad" },
19742159047fSniklas { 0, 0 }
19752159047fSniklas };
19762159047fSniklas
19772159047fSniklas /* Return the value for membar arg NAME, or -1 if not found. */
19782159047fSniklas
19792159047fSniklas int
sparc_encode_membar(name)19802159047fSniklas sparc_encode_membar (name)
1981b305b0f1Sespie const char *name;
19822159047fSniklas {
19832159047fSniklas return lookup_name (membar_table, name);
19842159047fSniklas }
19852159047fSniklas
19862159047fSniklas /* Return the name for membar value VALUE or NULL if not found. */
19872159047fSniklas
1988b305b0f1Sespie const char *
sparc_decode_membar(value)19892159047fSniklas sparc_decode_membar (value)
19902159047fSniklas int value;
19912159047fSniklas {
19922159047fSniklas return lookup_value (membar_table, value);
19932159047fSniklas }
19942159047fSniklas
19952159047fSniklas /* Handle prefetch args. */
19962159047fSniklas
19972159047fSniklas static arg prefetch_table[] =
19982159047fSniklas {
19992159047fSniklas { 0, "#n_reads" },
20002159047fSniklas { 1, "#one_read" },
20012159047fSniklas { 2, "#n_writes" },
20022159047fSniklas { 3, "#one_write" },
20032159047fSniklas { 4, "#page" },
2004b55d4692Sfgsch { 16, "#invalidate" },
20052159047fSniklas { 0, 0 }
20062159047fSniklas };
20072159047fSniklas
20082159047fSniklas /* Return the value for prefetch arg NAME, or -1 if not found. */
20092159047fSniklas
20102159047fSniklas int
sparc_encode_prefetch(name)20112159047fSniklas sparc_encode_prefetch (name)
2012b305b0f1Sespie const char *name;
20132159047fSniklas {
20142159047fSniklas return lookup_name (prefetch_table, name);
20152159047fSniklas }
20162159047fSniklas
20172159047fSniklas /* Return the name for prefetch value VALUE or NULL if not found. */
20182159047fSniklas
2019b305b0f1Sespie const char *
sparc_decode_prefetch(value)20202159047fSniklas sparc_decode_prefetch (value)
20212159047fSniklas int value;
20222159047fSniklas {
20232159047fSniklas return lookup_value (prefetch_table, value);
20242159047fSniklas }
2025c88b1d6cSniklas
2026c88b1d6cSniklas /* Handle sparclet coprocessor registers. */
2027c88b1d6cSniklas
2028c88b1d6cSniklas static arg sparclet_cpreg_table[] =
2029c88b1d6cSniklas {
2030c88b1d6cSniklas { 0, "%ccsr" },
2031c88b1d6cSniklas { 1, "%ccfr" },
2032c88b1d6cSniklas { 2, "%cccrcr" },
2033c88b1d6cSniklas { 3, "%ccpr" },
2034b305b0f1Sespie { 4, "%ccsr2" },
2035b305b0f1Sespie { 5, "%cccrr" },
2036b305b0f1Sespie { 6, "%ccrstr" },
2037c88b1d6cSniklas { 0, 0 }
2038c88b1d6cSniklas };
2039c88b1d6cSniklas
2040c88b1d6cSniklas /* Return the value for sparclet cpreg arg NAME, or -1 if not found. */
2041c88b1d6cSniklas
2042c88b1d6cSniklas int
sparc_encode_sparclet_cpreg(name)2043c88b1d6cSniklas sparc_encode_sparclet_cpreg (name)
2044b305b0f1Sespie const char *name;
2045c88b1d6cSniklas {
2046c88b1d6cSniklas return lookup_name (sparclet_cpreg_table, name);
2047c88b1d6cSniklas }
2048c88b1d6cSniklas
2049c88b1d6cSniklas /* Return the name for sparclet cpreg value VALUE or NULL if not found. */
2050c88b1d6cSniklas
2051b305b0f1Sespie const char *
sparc_decode_sparclet_cpreg(value)2052c88b1d6cSniklas sparc_decode_sparclet_cpreg (value)
2053c88b1d6cSniklas int value;
2054c88b1d6cSniklas {
2055c88b1d6cSniklas return lookup_value (sparclet_cpreg_table, value);
2056c88b1d6cSniklas }
2057