xref: /openbsd-src/gnu/usr.bin/binutils/opcodes/sparc-opc.c (revision 007c2a4539b8b8aaa95c5e73e77620090abe113b)
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