1*5198Sjmcp /*
2*5198Sjmcp  * CDDL HEADER START
3*5198Sjmcp  *
4*5198Sjmcp  * The contents of this file are subject to the terms of the
5*5198Sjmcp  * Common Development and Distribution License (the "License").
6*5198Sjmcp  * You may not use this file except in compliance with the License.
7*5198Sjmcp  *
8*5198Sjmcp  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*5198Sjmcp  * or http://www.opensolaris.org/os/licensing.
10*5198Sjmcp  * See the License for the specific language governing permissions
11*5198Sjmcp  * and limitations under the License.
12*5198Sjmcp  *
13*5198Sjmcp  * When distributing Covered Code, include this CDDL HEADER in each
14*5198Sjmcp  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*5198Sjmcp  * If applicable, add the following below this CDDL HEADER, with the
16*5198Sjmcp  * fields enclosed by brackets "[]" replaced with your own identifying
17*5198Sjmcp  * information: Portions Copyright [yyyy] [name of copyright owner]
18*5198Sjmcp  *
19*5198Sjmcp  * CDDL HEADER END
20*5198Sjmcp  */
21*5198Sjmcp 
22*5198Sjmcp /*
23*5198Sjmcp  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24*5198Sjmcp  * Use is subject to license terms.
25*5198Sjmcp  */
26*5198Sjmcp 
27*5198Sjmcp /*
28*5198Sjmcp  * Copyright 2007 Jason King.  All rights reserved.
29*5198Sjmcp  * Use is subject to license terms.
30*5198Sjmcp  */
31*5198Sjmcp 
32*5198Sjmcp #pragma ident	"%Z%%M%	%I%	%E% SMI"
33*5198Sjmcp 
34*5198Sjmcp #include "libdisasm.h"
35*5198Sjmcp #include "libdisasm_impl.h"
36*5198Sjmcp #include "dis_sparc.h"
37*5198Sjmcp #include "dis_sparc_fmt.h"
38*5198Sjmcp 
39*5198Sjmcp #define	INVALID                \
40*5198Sjmcp {                              \
41*5198Sjmcp 	.in_type = INST_NONE,  \
42*5198Sjmcp 	.in_arch = 0,          \
43*5198Sjmcp 	.in_data = {           \
44*5198Sjmcp 		.in_tbl = NULL \
45*5198Sjmcp 	}                      \
46*5198Sjmcp }
47*5198Sjmcp 
48*5198Sjmcp #define	INVALIDA(_arch)        \
49*5198Sjmcp {                              \
50*5198Sjmcp 	.in_type = INST_NONE,  \
51*5198Sjmcp 	.in_arch = _arch,      \
52*5198Sjmcp 	.in_data = {           \
53*5198Sjmcp 		.in_tbl = NULL \
54*5198Sjmcp 	}                      \
55*5198Sjmcp }
56*5198Sjmcp 
57*5198Sjmcp #define	INST(_name, _arch, _flags)           \
58*5198Sjmcp {                                            \
59*5198Sjmcp 	.in_type = INST_DEF,	             \
60*5198Sjmcp 	.in_arch = _arch,		     \
61*5198Sjmcp 	.in_data = {			     \
62*5198Sjmcp 		.in_def = {		     \
63*5198Sjmcp 			.in_name   = _name,  \
64*5198Sjmcp 			.in_flags  = _flags  \
65*5198Sjmcp 		}			     \
66*5198Sjmcp 	}				     \
67*5198Sjmcp }
68*5198Sjmcp 
69*5198Sjmcp #define	TABLE(_name, _arch)      \
70*5198Sjmcp {                                \
71*5198Sjmcp 	.in_type = INST_TBL,     \
72*5198Sjmcp 	.in_arch = _arch,        \
73*5198Sjmcp 	.in_data = {             \
74*5198Sjmcp 		.in_tbl = &_name \
75*5198Sjmcp 	}                       \
76*5198Sjmcp }
77*5198Sjmcp 
78*5198Sjmcp #define	OVERLAY(_idx, _inst) \
79*5198Sjmcp {                            \
80*5198Sjmcp 	.ov_idx  = _idx,     \
81*5198Sjmcp 	.ov_inst = _inst     \
82*5198Sjmcp }
83*5198Sjmcp 
84*5198Sjmcp #define	OVERLAY_END { .ov_idx = -1, .ov_inst = INVALID }
85*5198Sjmcp 
86*5198Sjmcp #define	V8	DIS_SPARC_V8
87*5198Sjmcp #define	V9	DIS_SPARC_V9
88*5198Sjmcp #define	V9S	DIS_SPARC_V9_SGI
89*5198Sjmcp #define	V9O	DIS_SPARC_V9_OPL
90*5198Sjmcp #define	VALL	V8|V9|V9S|V9O
91*5198Sjmcp 
92*5198Sjmcp /* branches */
93*5198Sjmcp static const inst_t BPcc_table_def[16] = {
94*5198Sjmcp 	INST("bn",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
95*5198Sjmcp 	INST("be",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
96*5198Sjmcp 	INST("ble",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
97*5198Sjmcp 	INST("bl",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
98*5198Sjmcp 
99*5198Sjmcp 	INST("bleu", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
100*5198Sjmcp 	INST("bcs",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
101*5198Sjmcp 	INST("bneg", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
102*5198Sjmcp 	INST("bvs",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
103*5198Sjmcp 
104*5198Sjmcp 	INST("ba",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
105*5198Sjmcp 	INST("bne",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
106*5198Sjmcp 	INST("bg",   V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
107*5198Sjmcp 	INST("bge",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
108*5198Sjmcp 
109*5198Sjmcp 	INST("bgu",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
110*5198Sjmcp 	INST("bcc",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
111*5198Sjmcp 	INST("bpos", V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19)),
112*5198Sjmcp 	INST("bvc",  V9|V9S, FLG_PRED|FLG_RS1(REG_ICC)|FLG_DISP(DISP19))
113*5198Sjmcp };
114*5198Sjmcp 
115*5198Sjmcp static const table_t BPcc_table = {
116*5198Sjmcp 	.tbl_field = 28,
117*5198Sjmcp 	.tbl_len   = 4,
118*5198Sjmcp 	.tbl_ovp   = NULL,
119*5198Sjmcp 	.tbl_fmt   = fmt_branch,
120*5198Sjmcp 	.tbl_inp   = BPcc_table_def
121*5198Sjmcp };
122*5198Sjmcp 
123*5198Sjmcp static const inst_t Bicc_table_def[16] = {
124*5198Sjmcp 	INST("bn",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
125*5198Sjmcp 	INST("be",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
126*5198Sjmcp 	INST("ble",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
127*5198Sjmcp 	INST("bl",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
128*5198Sjmcp 
129*5198Sjmcp 	INST("bleu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
130*5198Sjmcp 	/* docs say it's 'bcs' but disassembler calles it synonym 'blu' */
131*5198Sjmcp 	INST("blu",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
132*5198Sjmcp 	INST("bneg", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
133*5198Sjmcp 	INST("bvs",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
134*5198Sjmcp 
135*5198Sjmcp 	INST("ba",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
136*5198Sjmcp 	INST("bne",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
137*5198Sjmcp 	INST("bg",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
138*5198Sjmcp 	INST("bge",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
139*5198Sjmcp 
140*5198Sjmcp 	INST("bgu",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
141*5198Sjmcp 	/*
142*5198Sjmcp 	 * while the docs say it's officially 'bcc', existing disassembler
143*5198Sjmcp 	 * uses the synonym bgeu
144*5198Sjmcp 	 */
145*5198Sjmcp 	INST("bgeu", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
146*5198Sjmcp 	INST("bpos", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
147*5198Sjmcp 	INST("bvc",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE))
148*5198Sjmcp };
149*5198Sjmcp 
150*5198Sjmcp static const table_t Bicc_table = {
151*5198Sjmcp 	.tbl_field = 28,
152*5198Sjmcp 	.tbl_len   = 4,
153*5198Sjmcp 	.tbl_ovp   = NULL,
154*5198Sjmcp 	.tbl_fmt   = fmt_branch,
155*5198Sjmcp 	.tbl_inp   = Bicc_table_def
156*5198Sjmcp };
157*5198Sjmcp 
158*5198Sjmcp static const inst_t BPr_table_def[16] = {
159*5198Sjmcp 	INVALID,
160*5198Sjmcp 	INST("brz",   V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
161*5198Sjmcp 	INST("brlez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
162*5198Sjmcp 	INST("brlz",  V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
163*5198Sjmcp 
164*5198Sjmcp 	INVALID,
165*5198Sjmcp 	INST("brnz",  V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
166*5198Sjmcp 	INST("brgz",  V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
167*5198Sjmcp 	INST("brgez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
168*5198Sjmcp 
169*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
170*5198Sjmcp };
171*5198Sjmcp 
172*5198Sjmcp static const table_t BPr_table = {
173*5198Sjmcp 	.tbl_field = 28,
174*5198Sjmcp 	.tbl_len   = 4,
175*5198Sjmcp 	.tbl_ovp   = NULL,
176*5198Sjmcp 	.tbl_fmt   = fmt_branch,
177*5198Sjmcp 	.tbl_inp   = BPr_table_def
178*5198Sjmcp };
179*5198Sjmcp 
180*5198Sjmcp static const inst_t FBPfcc_table_def[16] = {
181*5198Sjmcp 	INST("fbn",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
182*5198Sjmcp 	INST("fbne",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
183*5198Sjmcp 	INST("fblg",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
184*5198Sjmcp 	INST("fbul",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
185*5198Sjmcp 
186*5198Sjmcp 	INST("fbl",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
187*5198Sjmcp 	INST("fbug",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
188*5198Sjmcp 	INST("fbg",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
189*5198Sjmcp 	INST("fbu",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
190*5198Sjmcp 
191*5198Sjmcp 	INST("fba",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
192*5198Sjmcp 	INST("fbe",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
193*5198Sjmcp 	INST("fbue",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
194*5198Sjmcp 	INST("fbge",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
195*5198Sjmcp 
196*5198Sjmcp 	INST("fbuge", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
197*5198Sjmcp 	INST("fble",  V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
198*5198Sjmcp 	INST("fbule", V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC)),
199*5198Sjmcp 	INST("fbo",   V9|V9S, FLG_PRED|FLG_DISP(DISP19)|FLG_RS1(REG_FCC))
200*5198Sjmcp };
201*5198Sjmcp 
202*5198Sjmcp static const table_t FBPfcc_table = {
203*5198Sjmcp 	.tbl_field = 28,
204*5198Sjmcp 	.tbl_len   = 4,
205*5198Sjmcp 	.tbl_ovp   = NULL,
206*5198Sjmcp 	.tbl_fmt   = fmt_branch,
207*5198Sjmcp 	.tbl_inp   = FBPfcc_table_def
208*5198Sjmcp };
209*5198Sjmcp 
210*5198Sjmcp static const inst_t FBfcc_table_def[16] = {
211*5198Sjmcp 	INST("fbn",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
212*5198Sjmcp 	INST("fbne",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
213*5198Sjmcp 	INST("fblg",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
214*5198Sjmcp 	INST("fbul",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
215*5198Sjmcp 
216*5198Sjmcp 	INST("fbl",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
217*5198Sjmcp 	INST("fbug",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
218*5198Sjmcp 	INST("fbg",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
219*5198Sjmcp 	INST("fbu",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
220*5198Sjmcp 
221*5198Sjmcp 	INST("fba",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
222*5198Sjmcp 	INST("fbe",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
223*5198Sjmcp 	INST("fbue",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
224*5198Sjmcp 	INST("fbge",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
225*5198Sjmcp 
226*5198Sjmcp 	INST("fbuge", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
227*5198Sjmcp 	INST("fble",  VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
228*5198Sjmcp 	INST("fbule", VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
229*5198Sjmcp 	INST("fbo",   VALL, FLG_DISP(DISP22)|FLG_RS1(REG_NONE))
230*5198Sjmcp };
231*5198Sjmcp 
232*5198Sjmcp static const table_t FBfcc_table = {
233*5198Sjmcp 	.tbl_field = 28,
234*5198Sjmcp 	.tbl_len   = 4,
235*5198Sjmcp 	.tbl_ovp   = NULL,
236*5198Sjmcp 	.tbl_fmt   = fmt_branch,
237*5198Sjmcp 	.tbl_inp   = FBfcc_table_def
238*5198Sjmcp };
239*5198Sjmcp 
240*5198Sjmcp static const inst_t CBccc_table_def[16] = {
241*5198Sjmcp 	INST("cbn",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
242*5198Sjmcp 	INST("cb123", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
243*5198Sjmcp 	INST("cb12",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
244*5198Sjmcp 	INST("cb13",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
245*5198Sjmcp 	INST("cb1",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
246*5198Sjmcp 	INST("cb23",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
247*5198Sjmcp 	INST("cb2",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
248*5198Sjmcp 	INST("cb3",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
249*5198Sjmcp 	INST("cba",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
250*5198Sjmcp 	INST("cb0",   V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
251*5198Sjmcp 	INST("cb03",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
252*5198Sjmcp 	INST("cb02",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
253*5198Sjmcp 	INST("cb023", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
254*5198Sjmcp 	INST("cb01",  V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
255*5198Sjmcp 	INST("cb013", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE)),
256*5198Sjmcp 	INST("cb012", V8, FLG_DISP(DISP22)|FLG_RS1(REG_NONE))
257*5198Sjmcp };
258*5198Sjmcp 
259*5198Sjmcp static const table_t CBccc_table = {
260*5198Sjmcp 	.tbl_field = 28,
261*5198Sjmcp 	.tbl_len   = 4,
262*5198Sjmcp 	.tbl_ovp   = NULL,
263*5198Sjmcp 	.tbl_fmt   = fmt_branch,
264*5198Sjmcp 	.tbl_inp   = CBccc_table_def
265*5198Sjmcp };
266*5198Sjmcp 
267*5198Sjmcp static const inst_t branch_table_def[8] = {
268*5198Sjmcp 	INST("unimp",		VALL,  0),
269*5198Sjmcp 	TABLE(BPcc_table,	V9|V9S),
270*5198Sjmcp 	TABLE(Bicc_table,	VALL),
271*5198Sjmcp 	TABLE(BPr_table,	V9|V9S),
272*5198Sjmcp 
273*5198Sjmcp 	INST("sethi",		VALL,  0),
274*5198Sjmcp 	TABLE(FBPfcc_table,	V9|V9S),
275*5198Sjmcp 	TABLE(FBfcc_table,	VALL),
276*5198Sjmcp 	TABLE(CBccc_table,	V8)
277*5198Sjmcp };
278*5198Sjmcp 
279*5198Sjmcp static const overlay_t branch_ov_table[] = {
280*5198Sjmcp 	OVERLAY(0x00, INST("illtrap", V9|V9S, 0)),
281*5198Sjmcp 	OVERLAY_END
282*5198Sjmcp };
283*5198Sjmcp 
284*5198Sjmcp static const table_t branch_table = {
285*5198Sjmcp 	.tbl_field = 24,
286*5198Sjmcp 	.tbl_len   = 3,
287*5198Sjmcp 	.tbl_ovp   = branch_ov_table,
288*5198Sjmcp 	.tbl_fmt   = fmt_sethi,
289*5198Sjmcp 	.tbl_inp   = branch_table_def
290*5198Sjmcp };
291*5198Sjmcp 
292*5198Sjmcp /* load/stores */
293*5198Sjmcp static const inst_t ls_table_def[64] = {
294*5198Sjmcp 	/* 0x00 */
295*5198Sjmcp 	INST("ld",		VALL,   0),
296*5198Sjmcp 	INST("ldub",		VALL,   0),
297*5198Sjmcp 	INST("lduh",		VALL,   0),
298*5198Sjmcp 	INST("ldd",		VALL,   0),
299*5198Sjmcp 
300*5198Sjmcp 	INST("st",		VALL,   FLG_STORE),
301*5198Sjmcp 	INST("stb",		VALL,   FLG_STORE),
302*5198Sjmcp 	INST("sth",		VALL,   FLG_STORE),
303*5198Sjmcp 	INST("std",		VALL,   FLG_STORE),
304*5198Sjmcp 
305*5198Sjmcp 	/* 0x08 */
306*5198Sjmcp 	INST("ldsw",		V9|V9S, 0),
307*5198Sjmcp 	INST("ldsb",		VALL,   0),
308*5198Sjmcp 	INST("ldsh",		VALL,   0),
309*5198Sjmcp 	INST("ldx",		V9|V9S, 0),
310*5198Sjmcp 
311*5198Sjmcp 	INVALID,
312*5198Sjmcp 	INST("ldstub",		VALL,   0),
313*5198Sjmcp 	INST("stx",		V9|V9S, FLG_STORE),
314*5198Sjmcp 	INST("swap",		VALL,   0),
315*5198Sjmcp 
316*5198Sjmcp 	/* 0x10 */
317*5198Sjmcp 	INST("lda",		VALL,   FLG_ASI),
318*5198Sjmcp 	INST("lduba",		VALL,   FLG_ASI),
319*5198Sjmcp 	INST("lduha",		VALL,   FLG_ASI),
320*5198Sjmcp 	INST("ldda",		VALL,   FLG_ASI),
321*5198Sjmcp 
322*5198Sjmcp 	INST("sta",		VALL,   FLG_STORE|FLG_ASI),
323*5198Sjmcp 	INST("stba",		VALL,   FLG_STORE|FLG_ASI),
324*5198Sjmcp 	INST("stha",		VALL,   FLG_STORE|FLG_ASI),
325*5198Sjmcp 	INST("stda",		VALL,   FLG_STORE|FLG_ASI),
326*5198Sjmcp 
327*5198Sjmcp 	/* 0x18 */
328*5198Sjmcp 	INST("ldswa",		V9|V9S, FLG_ASI),
329*5198Sjmcp 	INST("ldsba",		VALL,   FLG_ASI),
330*5198Sjmcp 	INST("ldsha",		VALL,   FLG_ASI),
331*5198Sjmcp 	INST("ldxa",		V9|V9S, FLG_ASI),
332*5198Sjmcp 
333*5198Sjmcp 	INVALID,
334*5198Sjmcp 	INST("ldstuba",		VALL,   FLG_ASI),
335*5198Sjmcp 	INST("stxa",		V9|V9S, FLG_STORE|FLG_ASI),
336*5198Sjmcp 	INST("swapa",		VALL,   FLG_ASI),
337*5198Sjmcp 
338*5198Sjmcp 	/* 0x20 */
339*5198Sjmcp 	INST("ld",		VALL,   FLG_RD(REG_FP)),
340*5198Sjmcp 	/* ldx on v9 */
341*5198Sjmcp 	INST("ld",		VALL,   FLG_RD(REG_FSR)),
342*5198Sjmcp 	INST("ldq",		V9|V9S, FLG_RD(REG_FPQ)),
343*5198Sjmcp 	INST("ldd",		VALL,   FLG_RD(REG_FPD)),
344*5198Sjmcp 
345*5198Sjmcp 	INST("st",		VALL,   FLG_STORE|FLG_RD(REG_FP)),
346*5198Sjmcp 	/* stx on v9 */
347*5198Sjmcp 	INST("st",		VALL,   FLG_STORE|FLG_RD(REG_FSR)),
348*5198Sjmcp 	INST("stq",		VALL,   FLG_STORE|FLG_RD(REG_FPQ)),
349*5198Sjmcp 	INST("std",		VALL,   FLG_STORE|FLG_RD(REG_FPD)),
350*5198Sjmcp 
351*5198Sjmcp 	/* 0x28 */
352*5198Sjmcp 	INVALID,
353*5198Sjmcp 	INVALID,
354*5198Sjmcp 	INVALID,
355*5198Sjmcp 	INVALID,
356*5198Sjmcp 
357*5198Sjmcp 	INVALID,
358*5198Sjmcp 	INST("prefetch",		V9|V9S, 0),
359*5198Sjmcp 	INVALID,
360*5198Sjmcp 	INVALID,
361*5198Sjmcp 
362*5198Sjmcp 	/* 0x30 */
363*5198Sjmcp 	INST("ld",		V8,	FLG_RD(REG_CP)),
364*5198Sjmcp 	INST("ld",		V8,	FLG_RD(REG_CSR)),
365*5198Sjmcp 	INST("ldqa",		V9|V9S,	FLG_ASI|FLG_RD(REG_FPQ)),
366*5198Sjmcp 	INST("ldd",		V8,	FLG_RD(REG_CP)),
367*5198Sjmcp 
368*5198Sjmcp 	INST("st",		V8,	FLG_STORE|FLG_RD(REG_CP)),
369*5198Sjmcp 	INST("st",		V8,	FLG_STORE|FLG_RD(REG_CSR)),
370*5198Sjmcp 	INST("std",		V8,	FLG_STORE|FLG_RD(REG_CQ)),
371*5198Sjmcp 	INST("std",		V8,	FLG_STORE|FLG_RD(REG_CP)),
372*5198Sjmcp 
373*5198Sjmcp 	/* 0x38 */
374*5198Sjmcp 	INVALID,
375*5198Sjmcp 	INVALID,
376*5198Sjmcp 	INVALID,
377*5198Sjmcp 	INVALID,
378*5198Sjmcp 
379*5198Sjmcp 	INST("casa",		V9|V9S, 0),
380*5198Sjmcp 	INST("prefetcha",	V9|V9S, FLG_STORE|FLG_ASI),
381*5198Sjmcp 	INST("casxa",		V9|V9S, 0),
382*5198Sjmcp 	INVALID
383*5198Sjmcp };
384*5198Sjmcp 
385*5198Sjmcp static const overlay_t ld_ov_table[] = {
386*5198Sjmcp 	OVERLAY(0x10, INST("lduwa", V9|V9S, FLG_ASI|FLG_RD(REG_INT))),
387*5198Sjmcp 	OVERLAY(0x14, INST("stwa",  V9|V9S,
388*5198Sjmcp 		    FLG_STORE|FLG_ASI|FLG_RD(REG_INT))),
389*5198Sjmcp 	OVERLAY(0x30, INST("lda",   V9|V9S, FLG_ASI|FLG_RD(REG_FP))),
390*5198Sjmcp 	OVERLAY(0x33, INST("ldda",  V9|V9S, FLG_ASI|FLG_RD(REG_FPD))),
391*5198Sjmcp 
392*5198Sjmcp 	OVERLAY(0x34, INST("sta",   V9|V9S, FLG_STORE|FLG_ASI|FLG_RD(REG_FP))),
393*5198Sjmcp 	OVERLAY(0x36, INST("stqa",  V9|V9S,
394*5198Sjmcp 		    FLG_STORE|FLG_ASI|FLG_RD(REG_FPQ))),
395*5198Sjmcp 	OVERLAY(0x37, INST("stda",  V9|V9S,
396*5198Sjmcp 		    FLG_STORE|FLG_ASI|FLG_RD(REG_FPD))),
397*5198Sjmcp 
398*5198Sjmcp 	OVERLAY_END
399*5198Sjmcp };
400*5198Sjmcp 
401*5198Sjmcp static const table_t ls_table = {
402*5198Sjmcp 	.tbl_field = 24,
403*5198Sjmcp 	.tbl_len   = 6,
404*5198Sjmcp 	.tbl_ovp   = ld_ov_table,
405*5198Sjmcp 	.tbl_fmt   = fmt_ls,
406*5198Sjmcp 	.tbl_inp   = ls_table_def
407*5198Sjmcp };
408*5198Sjmcp 
409*5198Sjmcp /* ALU operations */
410*5198Sjmcp static const inst_t Tcc_table_def[16] = {
411*5198Sjmcp 	INST("tn",   VALL, 0),
412*5198Sjmcp 	INST("te",   VALL, 0),
413*5198Sjmcp 	INST("tle",  VALL, 0),
414*5198Sjmcp 	INST("tl",   VALL, 0),
415*5198Sjmcp 
416*5198Sjmcp 	INST("tleu", VALL, 0),
417*5198Sjmcp 	INST("tcs",  VALL, 0),
418*5198Sjmcp 	INST("tneg", VALL, 0),
419*5198Sjmcp 	INST("tvs",  VALL, 0),
420*5198Sjmcp 
421*5198Sjmcp 	INST("ta",   VALL, 0),
422*5198Sjmcp 	INST("tne",  VALL, 0),
423*5198Sjmcp 	INST("tg",   VALL, 0),
424*5198Sjmcp 	INST("tge",  VALL, 0),
425*5198Sjmcp 
426*5198Sjmcp 	INST("tgu",  VALL, 0),
427*5198Sjmcp 	INST("tcc",  VALL, 0),
428*5198Sjmcp 	INST("tpos", VALL, 0),
429*5198Sjmcp 	INST("tvc",  VALL, 0)
430*5198Sjmcp };
431*5198Sjmcp 
432*5198Sjmcp static const table_t Tcc_table = {
433*5198Sjmcp 	.tbl_field = 28,
434*5198Sjmcp 	.tbl_len   = 4,
435*5198Sjmcp 	.tbl_ovp   = NULL,
436*5198Sjmcp 	.tbl_fmt   = fmt_trap,
437*5198Sjmcp 	.tbl_inp   = Tcc_table_def
438*5198Sjmcp };
439*5198Sjmcp 
440*5198Sjmcp static const inst_t rwin_table_def[32] = {
441*5198Sjmcp 	/* 0x00 */
442*5198Sjmcp 	INST("saved",    V9|V9S, 0),
443*5198Sjmcp 	INST("restored", V9|V9S, 0),
444*5198Sjmcp 	INST("allclean", V9|V9S, 0),
445*5198Sjmcp 	INST("otherw",   V9|V9S, 0),
446*5198Sjmcp 
447*5198Sjmcp 	INST("normalw",  V9|V9S, 0),
448*5198Sjmcp 	INST("invalw",   V9|V9S, 0),
449*5198Sjmcp 	INVALID,
450*5198Sjmcp 	INVALID,
451*5198Sjmcp 
452*5198Sjmcp 	/* 0x08 */
453*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
454*5198Sjmcp 
455*5198Sjmcp 	/* 0x10 */
456*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
457*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
458*5198Sjmcp };
459*5198Sjmcp 
460*5198Sjmcp static const table_t rwin_table = {
461*5198Sjmcp 	.tbl_field = 29,
462*5198Sjmcp 	.tbl_len   = 5,
463*5198Sjmcp 	.tbl_ovp   = NULL,
464*5198Sjmcp 	.tbl_fmt   = fmt_regwin,
465*5198Sjmcp 	.tbl_inp   = rwin_table_def
466*5198Sjmcp };
467*5198Sjmcp 
468*5198Sjmcp static const inst_t tr_table_def[32] = {
469*5198Sjmcp 	/* 0x00 */
470*5198Sjmcp 	INST("done",  V9|V9S, 0),
471*5198Sjmcp 	INST("retry", V9|V9S, 0),
472*5198Sjmcp 	INVALID,
473*5198Sjmcp 	INVALID,
474*5198Sjmcp 
475*5198Sjmcp 	INVALID,
476*5198Sjmcp 	INVALID,
477*5198Sjmcp 	INVALID,
478*5198Sjmcp 	INVALID,
479*5198Sjmcp 
480*5198Sjmcp 	/* 0x08 */
481*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
482*5198Sjmcp 
483*5198Sjmcp 	/* 0x10 */
484*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
485*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
486*5198Sjmcp };
487*5198Sjmcp 
488*5198Sjmcp static const table_t tr_table = {
489*5198Sjmcp 	.tbl_field = 29,
490*5198Sjmcp 	.tbl_len   = 5,
491*5198Sjmcp 	.tbl_ovp   = NULL,
492*5198Sjmcp 	.tbl_fmt   = fmt_trap_ret,
493*5198Sjmcp 	.tbl_inp   = tr_table_def
494*5198Sjmcp };
495*5198Sjmcp 
496*5198Sjmcp static const inst_t movicc_table_def[16] = {
497*5198Sjmcp 	INST("movn",   V9|V9S, 0),
498*5198Sjmcp 	INST("move",   V9|V9S, 0),
499*5198Sjmcp 	INST("movle",  V9|V9S, 0),
500*5198Sjmcp 	INST("movl",   V9|V9S, 0),
501*5198Sjmcp 
502*5198Sjmcp 	INST("movleu", V9|V9S, 0),
503*5198Sjmcp 	INST("movcs",  V9|V9S, 0),
504*5198Sjmcp 	INST("movneg", V9|V9S, 0),
505*5198Sjmcp 	INST("movvs",  V9|V9S, 0),
506*5198Sjmcp 
507*5198Sjmcp 	INST("mova",   V9|V9S, 0),
508*5198Sjmcp 	INST("movne",  V9|V9S, 0),
509*5198Sjmcp 	INST("movg",   V9|V9S, 0),
510*5198Sjmcp 	INST("movge",  V9|V9S, 0),
511*5198Sjmcp 
512*5198Sjmcp 	INST("movgu",  V9|V9S, 0),
513*5198Sjmcp 	INST("movcc",  V9|V9S, 0),
514*5198Sjmcp 	INST("movpos", V9|V9S, 0),
515*5198Sjmcp 	INST("movvc",  V9|V9S, 0)
516*5198Sjmcp };
517*5198Sjmcp 
518*5198Sjmcp static const inst_t movfcc_table_def[16] = {
519*5198Sjmcp 	INST("movn",   V9|V9S, 0),
520*5198Sjmcp 	INST("movne",  V9|V9S, 0),
521*5198Sjmcp 	INST("movlg",  V9|V9S, 0),
522*5198Sjmcp 	INST("movul",  V9|V9S, 0),
523*5198Sjmcp 
524*5198Sjmcp 	INST("movl",   V9|V9S, 0),
525*5198Sjmcp 	INST("movug",  V9|V9S, 0),
526*5198Sjmcp 	INST("movg",   V9|V9S, 0),
527*5198Sjmcp 	INST("movu",   V9|V9S, 0),
528*5198Sjmcp 
529*5198Sjmcp 	INST("mova",   V9|V9S, 0),
530*5198Sjmcp 	INST("move",   V9|V9S, 0),
531*5198Sjmcp 	INST("movue",  V9|V9S, 0),
532*5198Sjmcp 	INST("movge",  V9|V9S, 0),
533*5198Sjmcp 
534*5198Sjmcp 	INST("movuge", V9|V9S, 0),
535*5198Sjmcp 	INST("movle",  V9|V9S, 0),
536*5198Sjmcp 	INST("movule", V9|V9S, 0),
537*5198Sjmcp 	INST("movo",   V9|V9S, 0)
538*5198Sjmcp };
539*5198Sjmcp 
540*5198Sjmcp static const table_t movfcc_table = {
541*5198Sjmcp 	.tbl_field = 17,
542*5198Sjmcp 	.tbl_len   = 4,
543*5198Sjmcp 	.tbl_ovp   = NULL,
544*5198Sjmcp 	.tbl_fmt   = fmt_movcc,
545*5198Sjmcp 	.tbl_inp   = movfcc_table_def
546*5198Sjmcp };
547*5198Sjmcp 
548*5198Sjmcp static const table_t movicc_table = {
549*5198Sjmcp 	.tbl_field = 17,
550*5198Sjmcp 	.tbl_len   = 4,
551*5198Sjmcp 	.tbl_ovp   = NULL,
552*5198Sjmcp 	.tbl_fmt   = fmt_movcc,
553*5198Sjmcp 	.tbl_inp   = movicc_table_def
554*5198Sjmcp };
555*5198Sjmcp 
556*5198Sjmcp static const inst_t movcc_table_def[2] = {
557*5198Sjmcp 	TABLE(movfcc_table, V9|V9S),
558*5198Sjmcp 	TABLE(movicc_table, V9|V9S)
559*5198Sjmcp };
560*5198Sjmcp 
561*5198Sjmcp static const table_t movcc_table = {
562*5198Sjmcp 	.tbl_field = 18,
563*5198Sjmcp 	.tbl_len   = 1,
564*5198Sjmcp 	.tbl_ovp   = NULL,
565*5198Sjmcp 	.tbl_fmt   = NULL,
566*5198Sjmcp 	.tbl_inp   = movcc_table_def
567*5198Sjmcp };
568*5198Sjmcp 
569*5198Sjmcp static const inst_t movr_table_def[8] = {
570*5198Sjmcp 	INVALID,
571*5198Sjmcp 	/* aka movrz */
572*5198Sjmcp 	INST("movre",   V9|V9S, 0),
573*5198Sjmcp 	INST("movrlez", V9|V9S, 0),
574*5198Sjmcp 	INST("movrlz",  V9|V9S, 0),
575*5198Sjmcp 
576*5198Sjmcp 	INVALID,
577*5198Sjmcp 	/* aka movrnz */
578*5198Sjmcp 	INST("movrne",  V9|V9S, 0),
579*5198Sjmcp 	INST("movrgz",  V9|V9S, 0),
580*5198Sjmcp 	INST("movrgez", V9|V9S, 0)
581*5198Sjmcp };
582*5198Sjmcp 
583*5198Sjmcp static const table_t movr_table = {
584*5198Sjmcp 	.tbl_field = 12,
585*5198Sjmcp 	.tbl_len   = 3,
586*5198Sjmcp 	.tbl_ovp   = NULL,
587*5198Sjmcp 	.tbl_fmt   = fmt_movr,
588*5198Sjmcp 	.tbl_inp   = movr_table_def
589*5198Sjmcp };
590*5198Sjmcp 
591*5198Sjmcp static const inst_t FPop1_table_def[512] = {
592*5198Sjmcp 	/* 0x000 */
593*5198Sjmcp 	INVALID,
594*5198Sjmcp 	INST("fmovs", VALL,
595*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
596*5198Sjmcp 	INST("fmovd", V9|V9S,
597*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
598*5198Sjmcp 	INST("fmovq", V9|V9S,
599*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
600*5198Sjmcp 
601*5198Sjmcp 	INVALID,
602*5198Sjmcp 	INST("fnegs", VALL,
603*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
604*5198Sjmcp 	INST("fnegd", V9|V9S,
605*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
606*5198Sjmcp 	INST("fnegq", V9|V9S,
607*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
608*5198Sjmcp 
609*5198Sjmcp 	/* 0x008 */
610*5198Sjmcp 	INVALID,
611*5198Sjmcp 	INST("fabss", VALL,
612*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
613*5198Sjmcp 	INST("fabsd", V9|V9S,
614*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
615*5198Sjmcp 	INST("fabsq", V9|V9S,
616*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
617*5198Sjmcp 
618*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
619*5198Sjmcp 
620*5198Sjmcp 	/* 0x010 */
621*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
622*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
623*5198Sjmcp 
624*5198Sjmcp 	/* 0x020 */
625*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
626*5198Sjmcp 
627*5198Sjmcp 	/* 0x028 */
628*5198Sjmcp 	INVALID,
629*5198Sjmcp 	INST("fsqrts", VALL,
630*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
631*5198Sjmcp 	INST("fsqrtd", VALL,
632*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
633*5198Sjmcp 	INST("fsqrtq", VALL,
634*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
635*5198Sjmcp 
636*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
637*5198Sjmcp 
638*5198Sjmcp 	/* 0x30 */
639*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
640*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
641*5198Sjmcp 
642*5198Sjmcp 	/* 0x40 */
643*5198Sjmcp 	INVALID,
644*5198Sjmcp 	INST("fadds", VALL,
645*5198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
646*5198Sjmcp 	INST("faddd", VALL,
647*5198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
648*5198Sjmcp 	INST("faddq", VALL,
649*5198Sjmcp 		FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
650*5198Sjmcp 
651*5198Sjmcp 	INVALID,
652*5198Sjmcp 	INST("fsubs", VALL,
653*5198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
654*5198Sjmcp 	INST("fsubd", VALL,
655*5198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
656*5198Sjmcp 	INST("fsubq", VALL,
657*5198Sjmcp 		FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
658*5198Sjmcp 
659*5198Sjmcp 	/* 0x048 */
660*5198Sjmcp 	INVALID,
661*5198Sjmcp 	INST("fmuls", VALL,
662*5198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
663*5198Sjmcp 	INST("fmuld", VALL,
664*5198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
665*5198Sjmcp 	INST("fmulq", VALL,
666*5198Sjmcp 		FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
667*5198Sjmcp 
668*5198Sjmcp 	INVALID,
669*5198Sjmcp 	INST("fdivs", VALL,
670*5198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
671*5198Sjmcp 	INST("fdivd", VALL,
672*5198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
673*5198Sjmcp 	INST("fdivq", VALL,
674*5198Sjmcp 		FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
675*5198Sjmcp 
676*5198Sjmcp 	/* 0x050 */
677*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
678*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
679*5198Sjmcp 
680*5198Sjmcp 	/* 0x060 */
681*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
682*5198Sjmcp 
683*5198Sjmcp 	/* 0x068 */
684*5198Sjmcp 	INVALID,
685*5198Sjmcp 	INST("fsmuld", VALL,
686*5198Sjmcp 		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
687*5198Sjmcp 	INVALID,
688*5198Sjmcp 	INVALID,
689*5198Sjmcp 
690*5198Sjmcp 	INVALID,
691*5198Sjmcp 	INVALID,
692*5198Sjmcp 	INST("fdmulq", VALL,
693*5198Sjmcp 		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)),
694*5198Sjmcp 	INVALID,
695*5198Sjmcp 
696*5198Sjmcp 	/* 0x070 */
697*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
698*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
699*5198Sjmcp 
700*5198Sjmcp 	/* 0x080 */
701*5198Sjmcp 	INVALID,
702*5198Sjmcp 	INST("fstox", V9|V9S,
703*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
704*5198Sjmcp 	INST("fdtox", V9|V9S,
705*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
706*5198Sjmcp 	INST("fqtox", V9|V9S,
707*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)),
708*5198Sjmcp 
709*5198Sjmcp 	INST("fxtos", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|
710*5198Sjmcp 		FLG_P3(REG_FP)),
711*5198Sjmcp 	INVALID,
712*5198Sjmcp 	INVALID,
713*5198Sjmcp 	INVALID,
714*5198Sjmcp 
715*5198Sjmcp 	/* 0x088 */
716*5198Sjmcp 	INST("fxtod", V9|V9S,
717*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
718*5198Sjmcp 	INVALID,
719*5198Sjmcp 	INVALID,
720*5198Sjmcp 	INVALID,
721*5198Sjmcp 
722*5198Sjmcp 	INST("fxtoq", V9|V9S,
723*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)),
724*5198Sjmcp 	INVALID,
725*5198Sjmcp 	INVALID,
726*5198Sjmcp 	INVALID,
727*5198Sjmcp 
728*5198Sjmcp 	/* 0x090 */
729*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
730*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
731*5198Sjmcp 
732*5198Sjmcp 	/* 0x0a0 */
733*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
734*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
735*5198Sjmcp 
736*5198Sjmcp 	/* 0x0b0 */
737*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
738*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
739*5198Sjmcp 
740*5198Sjmcp 	/* 0x0c0 */
741*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
742*5198Sjmcp 
743*5198Sjmcp 	INST("fitos", VALL,
744*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
745*5198Sjmcp 	INVALID,
746*5198Sjmcp 	INST("fdtos", VALL,
747*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)),
748*5198Sjmcp 	INST("fqtos", VALL,
749*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)),
750*5198Sjmcp 
751*5198Sjmcp 	/* 0x0c8 */
752*5198Sjmcp 	INST("fitod", VALL,
753*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
754*5198Sjmcp 	INST("fstod", VALL,
755*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
756*5198Sjmcp 	INVALID,
757*5198Sjmcp 	INST("fqtod", VALL,
758*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPD)),
759*5198Sjmcp 
760*5198Sjmcp 	INST("fitoq", VALL,
761*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)),
762*5198Sjmcp 	INST("fstoq", VALL,
763*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPQ)),
764*5198Sjmcp 	INST("fdtoq", VALL,
765*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPQ)),
766*5198Sjmcp 	INVALID,
767*5198Sjmcp 
768*5198Sjmcp 	/* 0x0d0 */
769*5198Sjmcp 	INVALID,
770*5198Sjmcp 	INST("fstoi", VALL,
771*5198Sjmcp 	    FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
772*5198Sjmcp 	INST("fdtoi", VALL,
773*5198Sjmcp 	    FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FP)),
774*5198Sjmcp 	INST("fqtoi", VALL,
775*5198Sjmcp 	    FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FP)),
776*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
777*5198Sjmcp 
778*5198Sjmcp 	/* 0x0d8 */
779*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
780*5198Sjmcp 
781*5198Sjmcp 	/* 0x0e0 */
782*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
783*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
784*5198Sjmcp 
785*5198Sjmcp 	/* 0x0f0 */
786*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
787*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
788*5198Sjmcp 
789*5198Sjmcp 	/* 0x100 */
790*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
791*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
792*5198Sjmcp 
793*5198Sjmcp 	/* 0x110 */
794*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
795*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
796*5198Sjmcp 
797*5198Sjmcp 	/* 0x120 */
798*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
799*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
800*5198Sjmcp 
801*5198Sjmcp 	/* 0x130 */
802*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
803*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
804*5198Sjmcp 
805*5198Sjmcp 	/* 0x140 */
806*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
807*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
808*5198Sjmcp 
809*5198Sjmcp 	/* 0x150 */
810*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
811*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
812*5198Sjmcp 
813*5198Sjmcp 	/* 0x160 */
814*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
815*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
816*5198Sjmcp 
817*5198Sjmcp 	/* 0x170 */
818*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
819*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
820*5198Sjmcp 
821*5198Sjmcp 	/* 0x180 */
822*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
823*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
824*5198Sjmcp 
825*5198Sjmcp 	/* 0x190 */
826*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
827*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
828*5198Sjmcp 
829*5198Sjmcp 	/* 0x1a0 */
830*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
831*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
832*5198Sjmcp 
833*5198Sjmcp 	/* 0x1b0 */
834*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
835*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
836*5198Sjmcp 
837*5198Sjmcp 	/* 0x1c0 */
838*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
839*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
840*5198Sjmcp 
841*5198Sjmcp 	/* 0x1d0 */
842*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
843*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
844*5198Sjmcp 
845*5198Sjmcp 	/* 0x1e0 */
846*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
847*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
848*5198Sjmcp 
849*5198Sjmcp 	/* 0x1f0 */
850*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
851*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
852*5198Sjmcp };
853*5198Sjmcp 
854*5198Sjmcp static const table_t FPop1_table = {
855*5198Sjmcp 	.tbl_field = 13,
856*5198Sjmcp 	.tbl_len   = 9,
857*5198Sjmcp 	.tbl_ovp   = NULL,
858*5198Sjmcp 	.tbl_fmt   = fmt_fpop1,
859*5198Sjmcp 	.tbl_inp   = FPop1_table_def
860*5198Sjmcp };
861*5198Sjmcp 
862*5198Sjmcp static const inst_t FPop2_table_def[512] = {
863*5198Sjmcp 	/* 0x000 */
864*5198Sjmcp 	INVALID,
865*5198Sjmcp 	INST("fmovs", V9|V9S,
866*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
867*5198Sjmcp 	INST("fmovd", V9|V9S,
868*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
869*5198Sjmcp 	INST("fmovq", V9|V9S,
870*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
871*5198Sjmcp 
872*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
873*5198Sjmcp 
874*5198Sjmcp 	/* 0x008 */
875*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
876*5198Sjmcp 
877*5198Sjmcp 	/* 0x010 */
878*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
879*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
880*5198Sjmcp 
881*5198Sjmcp 	/* 0x020 */
882*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
883*5198Sjmcp 
884*5198Sjmcp 	INST("fmovrsz", V9|V9S,
885*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
886*5198Sjmcp 	INST("fmovrdz", V9|V9S,
887*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
888*5198Sjmcp 	INST("fmovrqz", V9|V9S,
889*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
890*5198Sjmcp 	INVALID,
891*5198Sjmcp 
892*5198Sjmcp 	/* 0x028 */
893*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
894*5198Sjmcp 
895*5198Sjmcp 	/* 0x030 */
896*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
897*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
898*5198Sjmcp 
899*5198Sjmcp 	/* 0x040 */
900*5198Sjmcp 	INVALID,
901*5198Sjmcp 	INST("fmovs", V9|V9S,
902*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
903*5198Sjmcp 	INST("fmovd", V9|V9S,
904*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
905*5198Sjmcp 	INST("fmovq", V9|V9S,
906*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
907*5198Sjmcp 
908*5198Sjmcp 	INST("fmovrslez", V9|V9S,
909*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
910*5198Sjmcp 	INST("fmovrdlez", V9|V9S,
911*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
912*5198Sjmcp 	INST("fmovrqlez", V9|V9S,
913*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
914*5198Sjmcp 	INVALID,
915*5198Sjmcp 
916*5198Sjmcp 	/* 0x048 */
917*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
918*5198Sjmcp 
919*5198Sjmcp 	/* 0x050 */
920*5198Sjmcp 	INVALID,
921*5198Sjmcp 	INST("fcmps", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE)
922*5198Sjmcp 	    |FLG_NOIMM),
923*5198Sjmcp 	INST("fcmpd", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE)
924*5198Sjmcp 	    |FLG_NOIMM),
925*5198Sjmcp 	INST("fcmpq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE)
926*5198Sjmcp 	    |FLG_NOIMM),
927*5198Sjmcp 
928*5198Sjmcp 	INVALID,
929*5198Sjmcp 	INST("fcmpes", VALL, FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_P3(REG_NONE)
930*5198Sjmcp 	    |FLG_NOIMM),
931*5198Sjmcp 	INST("fcmped", VALL, FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_P3(REG_NONE)
932*5198Sjmcp 	    |FLG_NOIMM),
933*5198Sjmcp 	INST("fcmpeq", VALL, FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_P3(REG_NONE)
934*5198Sjmcp 	    |FLG_NOIMM),
935*5198Sjmcp 
936*5198Sjmcp 	/* 0x058 */
937*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
938*5198Sjmcp 
939*5198Sjmcp 	/* 0x060 */
940*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
941*5198Sjmcp 
942*5198Sjmcp 	INVALID,
943*5198Sjmcp 	INST("fmovrslz", V9|V9S,
944*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
945*5198Sjmcp 	INST("fmovrdlz", V9|V9S,
946*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
947*5198Sjmcp 	INST("fmovrqlz", V9|V9S,
948*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
949*5198Sjmcp 
950*5198Sjmcp 	/* 0x068 */
951*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
952*5198Sjmcp 
953*5198Sjmcp 	/* 0x070 */
954*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
955*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
956*5198Sjmcp 
957*5198Sjmcp 	/* 0x080 */
958*5198Sjmcp 	INVALID,
959*5198Sjmcp 	INST("fmovs", V9|V9S,
960*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
961*5198Sjmcp 	INST("fmovd", V9|V9S,
962*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
963*5198Sjmcp 	INST("fmovq", V9|V9S,
964*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
965*5198Sjmcp 
966*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
967*5198Sjmcp 
968*5198Sjmcp 	/* 0x088 */
969*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
970*5198Sjmcp 
971*5198Sjmcp 	/* 0x090 */
972*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
973*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
974*5198Sjmcp 
975*5198Sjmcp 	/* 0x0a0 */
976*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
977*5198Sjmcp 
978*5198Sjmcp 	INVALID,
979*5198Sjmcp 	INST("fmovrsnz", V9|V9S,
980*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FP)|FLG_P3(REG_FP)),
981*5198Sjmcp 	INST("fmovrdnz", V9|V9S,
982*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
983*5198Sjmcp 	INST("fmovrqnz", V9|V9S,
984*5198Sjmcp 		FLG_P1(REG_INT)|FLG_NOIMM|FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
985*5198Sjmcp 
986*5198Sjmcp 	/* 0x0a8 */
987*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
988*5198Sjmcp 
989*5198Sjmcp 	/* 0x0b0 */
990*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
991*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
992*5198Sjmcp 
993*5198Sjmcp 	/* 0x0c0 */
994*5198Sjmcp 	INVALID,
995*5198Sjmcp 	INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
996*5198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FP)),
997*5198Sjmcp 	INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
998*5198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPD)),
999*5198Sjmcp 	INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|
1000*5198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPQ)),
1001*5198Sjmcp 
1002*5198Sjmcp 	INVALID,
1003*5198Sjmcp 	INST("fmovrsgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
1004*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1005*5198Sjmcp 	INST("fmovrdgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
1006*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1007*5198Sjmcp 	INST("fmovrqgz", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
1008*5198Sjmcp 		FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
1009*5198Sjmcp 
1010*5198Sjmcp 	/* 0x0c8 */
1011*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1012*5198Sjmcp 
1013*5198Sjmcp 	/* 0x0d0 */
1014*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1015*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1016*5198Sjmcp 
1017*5198Sjmcp 	/* 0x0e0 */
1018*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
1019*5198Sjmcp 
1020*5198Sjmcp 	INVALID,
1021*5198Sjmcp 	INST("fmovrsgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
1022*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1023*5198Sjmcp 	INST("fmovrdgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
1024*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1025*5198Sjmcp 	INST("fmovrqgez", V9|V9S, FLG_P1(REG_INT)|FLG_NOIMM|
1026*5198Sjmcp 		FLG_P2(REG_FPQ)|FLG_P3(REG_FPQ)),
1027*5198Sjmcp 
1028*5198Sjmcp 	/* 0x0e8 */
1029*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1030*5198Sjmcp 
1031*5198Sjmcp 	/* 0x0f0 */
1032*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1033*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1034*5198Sjmcp 
1035*5198Sjmcp 	/* 0x100 */
1036*5198Sjmcp 	INVALID,
1037*5198Sjmcp 	INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
1038*5198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FP)),
1039*5198Sjmcp 	INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
1040*5198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPD)),
1041*5198Sjmcp 	INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|
1042*5198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPQ)),
1043*5198Sjmcp 
1044*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
1045*5198Sjmcp 
1046*5198Sjmcp 	/* 0x108 */
1047*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1048*5198Sjmcp 
1049*5198Sjmcp 	/* 0x110 */
1050*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1051*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1052*5198Sjmcp 
1053*5198Sjmcp 	/* 0x120 */
1054*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1055*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1056*5198Sjmcp 
1057*5198Sjmcp 	/* 0x130 */
1058*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1059*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1060*5198Sjmcp 
1061*5198Sjmcp 	/* 0x140 */
1062*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1063*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1064*5198Sjmcp 
1065*5198Sjmcp 	/* 0x150 */
1066*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1067*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1068*5198Sjmcp 
1069*5198Sjmcp 	/* 0x160 */
1070*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1071*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1072*5198Sjmcp 
1073*5198Sjmcp 	/* 0x170 */
1074*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1075*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1076*5198Sjmcp 
1077*5198Sjmcp 	/* 0x180 */
1078*5198Sjmcp 	INVALID,
1079*5198Sjmcp 	INST("fmovs", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
1080*5198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FP)),
1081*5198Sjmcp 	INST("fmovd", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
1082*5198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPD)),
1083*5198Sjmcp 	INST("fmovq", V9|V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|
1084*5198Sjmcp 		FLG_NOIMM|FLG_P3(REG_FPQ)),
1085*5198Sjmcp 
1086*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
1087*5198Sjmcp 
1088*5198Sjmcp 	/* 0x188 */
1089*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1090*5198Sjmcp 
1091*5198Sjmcp 	/* 0x190 */
1092*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1093*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1094*5198Sjmcp 
1095*5198Sjmcp 	/* 0x1a0 */
1096*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1097*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1098*5198Sjmcp 
1099*5198Sjmcp 	/* 0x1b0 */
1100*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1101*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1102*5198Sjmcp 
1103*5198Sjmcp 	/* 0x1c0 */
1104*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1105*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1106*5198Sjmcp 
1107*5198Sjmcp 	/* 0x1d0 */
1108*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1109*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1110*5198Sjmcp 
1111*5198Sjmcp 	/* 0x1e0 */
1112*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1113*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1114*5198Sjmcp 
1115*5198Sjmcp 	/* 0x1f0 */
1116*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1117*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
1118*5198Sjmcp };
1119*5198Sjmcp 
1120*5198Sjmcp static const table_t FPop2_table = {
1121*5198Sjmcp 	.tbl_field = 13,
1122*5198Sjmcp 	.tbl_len   = 9,
1123*5198Sjmcp 	.tbl_ovp   = NULL,
1124*5198Sjmcp 	.tbl_fmt   = fmt_fpop2,
1125*5198Sjmcp 	.tbl_inp   = FPop2_table_def
1126*5198Sjmcp };
1127*5198Sjmcp 
1128*5198Sjmcp static const inst_t vis_table_def[512] = {
1129*5198Sjmcp 	/* 0x000 */
1130*5198Sjmcp 	INST("edge8cc", V9S, FLG_NOIMM),
1131*5198Sjmcp 	INST("edge8n", V9S, FLG_NOIMM),
1132*5198Sjmcp 	INST("edge8lcc", V9S, FLG_NOIMM),
1133*5198Sjmcp 	INST("edge8ln", V9S, FLG_NOIMM),
1134*5198Sjmcp 
1135*5198Sjmcp 	INST("edge16cc", V9S, FLG_NOIMM),
1136*5198Sjmcp 	INST("edge16n", V9S, FLG_NOIMM),
1137*5198Sjmcp 	INST("edge16lcc", V9S, FLG_NOIMM),
1138*5198Sjmcp 	INST("edge16ln", V9S, FLG_NOIMM),
1139*5198Sjmcp 
1140*5198Sjmcp 	/* 0x008 */
1141*5198Sjmcp 	INST("edge32cc", V9S, FLG_NOIMM),
1142*5198Sjmcp 	INST("edge32n", V9S, FLG_NOIMM),
1143*5198Sjmcp 	INST("edge32lcc", V9S, FLG_NOIMM),
1144*5198Sjmcp 	INST("edge32ln", V9S, FLG_NOIMM),
1145*5198Sjmcp 
1146*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
1147*5198Sjmcp 
1148*5198Sjmcp 	/* 0x010 */
1149*5198Sjmcp 	INST("array8", V9S, FLG_NOIMM),
1150*5198Sjmcp 	INVALID,
1151*5198Sjmcp 	INST("array16", V9S, FLG_NOIMM),
1152*5198Sjmcp 	INVALID,
1153*5198Sjmcp 
1154*5198Sjmcp 	INST("array32", V9S, FLG_NOIMM),
1155*5198Sjmcp 	INVALID,
1156*5198Sjmcp 	INVALID,
1157*5198Sjmcp 	INVALID,
1158*5198Sjmcp 
1159*5198Sjmcp 	/* 0x018 */
1160*5198Sjmcp 	INST("alignaddr", V9S, FLG_NOIMM),
1161*5198Sjmcp 	INST("bmask", V9S, FLG_NOIMM),
1162*5198Sjmcp 	INST("alignaddrl", V9S, FLG_NOIMM),
1163*5198Sjmcp 	INVALID,
1164*5198Sjmcp 
1165*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
1166*5198Sjmcp 
1167*5198Sjmcp 	/* 0x020 */
1168*5198Sjmcp 	INST("fcmple16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1169*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1170*5198Sjmcp 	INVALID,
1171*5198Sjmcp 	INST("fcmpne16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1172*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1173*5198Sjmcp 	INVALID,
1174*5198Sjmcp 
1175*5198Sjmcp 	INST("fcmple32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1176*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1177*5198Sjmcp 	INVALID,
1178*5198Sjmcp 	INST("fcmpne32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1179*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1180*5198Sjmcp 	INVALID,
1181*5198Sjmcp 
1182*5198Sjmcp 	/* 0x028 */
1183*5198Sjmcp 	INST("fcmpgt16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1184*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1185*5198Sjmcp 	INVALID,
1186*5198Sjmcp 	INST("fcmpeq16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1187*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1188*5198Sjmcp 	INVALID,
1189*5198Sjmcp 
1190*5198Sjmcp 	INST("fcmpgt32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1191*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1192*5198Sjmcp 	INVALID,
1193*5198Sjmcp 	INST("fcmpeq32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1194*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_INT)),
1195*5198Sjmcp 	INVALID,
1196*5198Sjmcp 
1197*5198Sjmcp 	/* 0x030 */
1198*5198Sjmcp 	INVALID,
1199*5198Sjmcp 	INST("fmul8x16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1200*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1201*5198Sjmcp 	INVALID,
1202*5198Sjmcp 	INST("fmul8x16au", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1203*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
1204*5198Sjmcp 
1205*5198Sjmcp 	INVALID,
1206*5198Sjmcp 	INST("fmul8x16al", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1207*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
1208*5198Sjmcp 	INST("fmul8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1209*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1210*5198Sjmcp 	INST("fmul8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1211*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1212*5198Sjmcp 
1213*5198Sjmcp 	/* 0x038 */
1214*5198Sjmcp 	INST("fmuld8sux16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1215*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
1216*5198Sjmcp 	INST("fmuld8ulx16", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1217*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
1218*5198Sjmcp 	INST("fpack32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1219*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1220*5198Sjmcp 	INST("fpack16", V9S, FLG_P1(REG_NONE)|FLG_NOIMM|
1221*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FP)),
1222*5198Sjmcp 
1223*5198Sjmcp 	INVALID,
1224*5198Sjmcp 	INST("fpackfix", V9S, FLG_P1(REG_NONE)|FLG_NOIMM|
1225*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FP)),
1226*5198Sjmcp 	INST("pdist", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1227*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1228*5198Sjmcp 	INVALID,
1229*5198Sjmcp 
1230*5198Sjmcp 	/* 0x040 */
1231*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1232*5198Sjmcp 
1233*5198Sjmcp 	/* 0x048 */
1234*5198Sjmcp 	INST("faligndata", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1235*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1236*5198Sjmcp 	INVALID,
1237*5198Sjmcp 	INVALID,
1238*5198Sjmcp 	INST("fpmerge", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1239*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
1240*5198Sjmcp 
1241*5198Sjmcp 	INST("bshuffle", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1242*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1243*5198Sjmcp 	INST("fexpand", V9S, FLG_P1(REG_NONE)|FLG_NOIMM|
1244*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FPD)),
1245*5198Sjmcp 	INVALID,
1246*5198Sjmcp 	INVALID,
1247*5198Sjmcp 
1248*5198Sjmcp 	/* 0x050 */
1249*5198Sjmcp 	INST("fpadd16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1250*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1251*5198Sjmcp 	INST("fpadd16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1252*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1253*5198Sjmcp 	INST("fpadd32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1254*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1255*5198Sjmcp 	INST("fpadd32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1256*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1257*5198Sjmcp 
1258*5198Sjmcp 	INST("fpsub16", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1259*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1260*5198Sjmcp 	INST("fpsub16s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1261*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1262*5198Sjmcp 	INST("fpsub32", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1263*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1264*5198Sjmcp 	INST("fpsub32s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1265*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1266*5198Sjmcp 
1267*5198Sjmcp 	/* 0x058 */
1268*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1269*5198Sjmcp 
1270*5198Sjmcp 	/* 0x060 */
1271*5198Sjmcp 	INST("fzero", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
1272*5198Sjmcp 		FLG_P3(REG_FPD)),
1273*5198Sjmcp 	INST("fzeros", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
1274*5198Sjmcp 		FLG_P3(REG_FP)),
1275*5198Sjmcp 	INST("fnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1276*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1277*5198Sjmcp 	INST("fnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1278*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1279*5198Sjmcp 
1280*5198Sjmcp 	INST("fandnot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1281*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1282*5198Sjmcp 	INST("fandnot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1283*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1284*5198Sjmcp 	INST("fnot2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
1285*5198Sjmcp 		FLG_P3(REG_FPD)),
1286*5198Sjmcp 	INST("fnot2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
1287*5198Sjmcp 		FLG_P3(REG_FP)),
1288*5198Sjmcp 
1289*5198Sjmcp 	/* 0x068 */
1290*5198Sjmcp 	INST("fandnot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1291*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1292*5198Sjmcp 	INST("fandnot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1293*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1294*5198Sjmcp 	INST("fnot1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)|
1295*5198Sjmcp 		FLG_P3(REG_FPD)),
1296*5198Sjmcp 	INST("fnot1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)|
1297*5198Sjmcp 		FLG_P3(REG_FP)),
1298*5198Sjmcp 
1299*5198Sjmcp 	INST("fxor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1300*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1301*5198Sjmcp 	INST("fxors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1302*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1303*5198Sjmcp 	INST("fnand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1304*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1305*5198Sjmcp 	INST("fnands", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1306*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1307*5198Sjmcp 
1308*5198Sjmcp 	/* 0x070 */
1309*5198Sjmcp 	INST("fand", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1310*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1311*5198Sjmcp 	INST("fands", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1312*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1313*5198Sjmcp 	INST("fxnor", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1314*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1315*5198Sjmcp 	INST("fxnors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1316*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1317*5198Sjmcp 
1318*5198Sjmcp 	INST("fsrc1", V9S, FLG_P1(REG_FPD)|FLG_P2(REG_NONE)|
1319*5198Sjmcp 		FLG_P3(REG_FPD)),
1320*5198Sjmcp 	INST("fsrc1s", V9S, FLG_P1(REG_FP)|FLG_P2(REG_NONE)|
1321*5198Sjmcp 		FLG_P3(REG_FP)),
1322*5198Sjmcp 	INST("fornot2", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1323*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1324*5198Sjmcp 	INST("fornot2s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1325*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1326*5198Sjmcp 
1327*5198Sjmcp 	/* 0x078 */
1328*5198Sjmcp 	INST("fsrc2", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|
1329*5198Sjmcp 		FLG_P3(REG_FPD)),
1330*5198Sjmcp 	INST("fsrc2s", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_FP)|
1331*5198Sjmcp 		FLG_P3(REG_FP)),
1332*5198Sjmcp 	INST("fornot1", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1333*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1334*5198Sjmcp 	INST("fornot1s", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1335*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1336*5198Sjmcp 
1337*5198Sjmcp 	INST("for", V9S, FLG_P1(REG_FPD)|FLG_NOIMM|
1338*5198Sjmcp 		FLG_P2(REG_FPD)|FLG_P3(REG_FPD)),
1339*5198Sjmcp 	INST("fors", V9S, FLG_P1(REG_FP)|FLG_NOIMM|
1340*5198Sjmcp 		FLG_P2(REG_FP)|FLG_P3(REG_FP)),
1341*5198Sjmcp 	INST("fone", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
1342*5198Sjmcp 		FLG_P3(REG_FPD)),
1343*5198Sjmcp 	INST("fones", V9S, FLG_P1(REG_NONE)|FLG_P2(REG_NONE)|
1344*5198Sjmcp 		FLG_P3(REG_FP)),
1345*5198Sjmcp 
1346*5198Sjmcp 	/* 0x080 */
1347*5198Sjmcp 	INST("shutdown", V9S, 0),
1348*5198Sjmcp 	INST("siam", V9S, 0),
1349*5198Sjmcp 	INVALID,
1350*5198Sjmcp 	INVALID,
1351*5198Sjmcp 
1352*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID,
1353*5198Sjmcp 
1354*5198Sjmcp 	/* 0x088 */
1355*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1356*5198Sjmcp 
1357*5198Sjmcp 	/* 0x090 */
1358*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1359*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1360*5198Sjmcp 
1361*5198Sjmcp 	/* 0x0a0 */
1362*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1363*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1364*5198Sjmcp 
1365*5198Sjmcp 	/* 0x0b0 */
1366*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1367*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1368*5198Sjmcp 
1369*5198Sjmcp 	/* 0x0c0 */
1370*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1371*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1372*5198Sjmcp 
1373*5198Sjmcp 	/* 0x0d0 */
1374*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1375*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1376*5198Sjmcp 
1377*5198Sjmcp 	/* 0x0e0 */
1378*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1379*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1380*5198Sjmcp 
1381*5198Sjmcp 	/* 0x0f0 */
1382*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1383*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1384*5198Sjmcp 
1385*5198Sjmcp 	/* 0x100 */
1386*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1387*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1388*5198Sjmcp 
1389*5198Sjmcp 	/* 0x110 */
1390*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1391*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1392*5198Sjmcp 
1393*5198Sjmcp 	/* 0x120 */
1394*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1395*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1396*5198Sjmcp 
1397*5198Sjmcp 	/* 0x130 */
1398*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1399*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1400*5198Sjmcp 
1401*5198Sjmcp 	/* 0x140 */
1402*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1403*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1404*5198Sjmcp 
1405*5198Sjmcp 	/* 0x150 */
1406*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1407*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1408*5198Sjmcp 
1409*5198Sjmcp 	/* 0x160 */
1410*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1411*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1412*5198Sjmcp 
1413*5198Sjmcp 	/* 0x170 */
1414*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1415*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1416*5198Sjmcp 
1417*5198Sjmcp 	/* 0x180 */
1418*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1419*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1420*5198Sjmcp 
1421*5198Sjmcp 	/* 0x190 */
1422*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1423*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1424*5198Sjmcp 
1425*5198Sjmcp 	/* 0x1a0 */
1426*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1427*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1428*5198Sjmcp 
1429*5198Sjmcp 	/* 0x1b0 */
1430*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1431*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1432*5198Sjmcp 
1433*5198Sjmcp 	/* 0x1c0 */
1434*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1435*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1436*5198Sjmcp 
1437*5198Sjmcp 	/* 0x1d0 */
1438*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1439*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1440*5198Sjmcp 
1441*5198Sjmcp 	/* 0x1e0 */
1442*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1443*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1444*5198Sjmcp 
1445*5198Sjmcp 	/* 0x1f0 */
1446*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
1447*5198Sjmcp 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
1448*5198Sjmcp };
1449*5198Sjmcp 
1450*5198Sjmcp static const table_t vis_table = {
1451*5198Sjmcp 	.tbl_field = 13,
1452*5198Sjmcp 	.tbl_len   = 9,
1453*5198Sjmcp 	.tbl_ovp   = NULL,
1454*5198Sjmcp 	.tbl_fmt   = fmt_vis,
1455*5198Sjmcp 	.tbl_inp   = vis_table_def
1456*5198Sjmcp };
1457*5198Sjmcp 
1458*5198Sjmcp static const inst_t fused_table_def[16] = {
1459*5198Sjmcp 	/* 0x0 */
1460*5198Sjmcp 	INVALID,
1461*5198Sjmcp 	INST("fmadds", V9O, FLG_P1(REG_FP)),
1462*5198Sjmcp 	INST("fmaddd", V9O, FLG_P1(REG_FPD)),
1463*5198Sjmcp 	INVALID,
1464*5198Sjmcp 
1465*5198Sjmcp 	/* 0x4 */
1466*5198Sjmcp 	INVALID,
1467*5198Sjmcp 	INST("fmsubs", V9O, FLG_P1(REG_FP)),
1468*5198Sjmcp 	INST("fmsubd", V9O, FLG_P1(REG_FPD)),
1469*5198Sjmcp 	INVALID,
1470*5198Sjmcp 
1471*5198Sjmcp 	/* 0x8 */
1472*5198Sjmcp 	INVALID,
1473*5198Sjmcp 	INST("fnmsubs", V9O, FLG_P1(REG_FP)),
1474*5198Sjmcp 	INST("fnmsubd", V9O, FLG_P1(REG_FPD)),
1475*5198Sjmcp 	INVALID,
1476*5198Sjmcp 
1477*5198Sjmcp 	/* 0xc */
1478*5198Sjmcp 	INVALID,
1479*5198Sjmcp 	INST("fnmadds", V9O, FLG_P1(REG_FP)),
1480*5198Sjmcp 	INST("fnmaddd", V9O, FLG_P1(REG_FPD)),
1481*5198Sjmcp 	INVALID
1482*5198Sjmcp };
1483*5198Sjmcp 
1484*5198Sjmcp static const table_t fused_table = {
1485*5198Sjmcp 	.tbl_field = 5,
1486*5198Sjmcp 	.tbl_len   = 4,
1487*5198Sjmcp 	.tbl_ovp   = NULL,
1488*5198Sjmcp 	.tbl_fmt   = fmt_fused,
1489*5198Sjmcp 	.tbl_inp   = fused_table_def
1490*5198Sjmcp };
1491*5198Sjmcp 
1492*5198Sjmcp static const inst_t alu_table_def[64] = {
1493*5198Sjmcp 	/* 0x00 */
1494*5198Sjmcp 	INST("add",		VALL,	0),
1495*5198Sjmcp 	INST("and",		VALL,	0),
1496*5198Sjmcp 	INST("or",		VALL,	0),
1497*5198Sjmcp 	INST("xor",		VALL,	0),
1498*5198Sjmcp 
1499*5198Sjmcp 	INST("sub",		VALL,	0),
1500*5198Sjmcp 	INST("andn",		VALL,	0),
1501*5198Sjmcp 	INST("orn",		VALL,	0),
1502*5198Sjmcp 	INST("xnor",		VALL,	0),
1503*5198Sjmcp 
1504*5198Sjmcp 	/* 0x08 */
1505*5198Sjmcp 	INST("addx",		VALL,	0),
1506*5198Sjmcp 	INST("mulx",		V9|V9S,	0),
1507*5198Sjmcp 	INST("umul",		VALL,	0),
1508*5198Sjmcp 	INST("smul",		VALL,	0),
1509*5198Sjmcp 
1510*5198Sjmcp 	INST("subx",		VALL,	0),
1511*5198Sjmcp 	INST("udivx",		V9|V9S,	0),
1512*5198Sjmcp 	INST("udiv",		VALL,	0),
1513*5198Sjmcp 	INST("sdiv",		VALL,	0),
1514*5198Sjmcp 
1515*5198Sjmcp 	/* 0x10 */
1516*5198Sjmcp 	INST("addcc",		VALL,	0),
1517*5198Sjmcp 	INST("andcc",		VALL,	0),
1518*5198Sjmcp 	INST("orcc",		VALL,	0),
1519*5198Sjmcp 	INST("xorcc",		VALL,	0),
1520*5198Sjmcp 
1521*5198Sjmcp 	INST("subcc",		VALL,	0),
1522*5198Sjmcp 	INST("andncc",		VALL,	0),
1523*5198Sjmcp 	INST("orncc",		VALL,	0),
1524*5198Sjmcp 	INST("xnorcc",		VALL,	0),
1525*5198Sjmcp 
1526*5198Sjmcp 	/* 0x18 */
1527*5198Sjmcp 	INST("addxcc",		VALL,	0),
1528*5198Sjmcp 	INVALID,
1529*5198Sjmcp 	INST("umulcc",		VALL,	0),
1530*5198Sjmcp 	INST("smulcc",		VALL,	0),
1531*5198Sjmcp 
1532*5198Sjmcp 	INST("subxcc",		VALL,	0),
1533*5198Sjmcp 	INVALID,
1534*5198Sjmcp 	INST("udivcc",		VALL,	0),
1535*5198Sjmcp 	INST("sdivcc",		VALL,	0),
1536*5198Sjmcp 
1537*5198Sjmcp 	/* 0x20 */
1538*5198Sjmcp 	INST("taddcc",		VALL,	0),
1539*5198Sjmcp 	INST("tsubcc",		VALL,	0),
1540*5198Sjmcp 	INST("taddcctv",	VALL,	0),
1541*5198Sjmcp 	INST("tsubcctv",	VALL,	0),
1542*5198Sjmcp 
1543*5198Sjmcp 	INST("mulscc",		VALL,	0),
1544*5198Sjmcp 	INST("sll",		VALL,	0),
1545*5198Sjmcp 	INST("srl",		VALL,	0),
1546*5198Sjmcp 	INST("sra",		VALL,	0),
1547*5198Sjmcp 
1548*5198Sjmcp 	/* 0x28 */
1549*5198Sjmcp 	INST("rd",		VALL,	0),
1550*5198Sjmcp 	INST("rd",		V8,	0),
1551*5198Sjmcp 	INST("rd",		V8,	0),
1552*5198Sjmcp 	INST("rd",		V8,	0),
1553*5198Sjmcp 
1554*5198Sjmcp 	TABLE(movcc_table,	V9|V9S),
1555*5198Sjmcp 	INST("sdivx",		V9|V9S,	0),
1556*5198Sjmcp 	INST("popc",		V9|V9S,
1557*5198Sjmcp 		FLG_P1(REG_NONE)|FLG_P2(REG_INT)|FLG_P3(REG_INT)),
1558*5198Sjmcp 	TABLE(movr_table,	V9|V9S),
1559*5198Sjmcp 
1560*5198Sjmcp 	/* 0x30 */
1561*5198Sjmcp 	INST("wr",		VALL,	0),
1562*5198Sjmcp 	INST("wr",		V8,	0),
1563*5198Sjmcp 	INST("wr",		V8,	0),
1564*5198Sjmcp 	INST("wr",		V8,	0),
1565*5198Sjmcp 
1566*5198Sjmcp 	TABLE(FPop1_table,	VALL),
1567*5198Sjmcp 	TABLE(FPop2_table,	VALL),
1568*5198Sjmcp 	INST("cpop1",		V8,	0),
1569*5198Sjmcp 	INST("cpop2",		V8,	0), /* impdep2 */
1570*5198Sjmcp 
1571*5198Sjmcp 	/* 0x38 */
1572*5198Sjmcp 	INST("jmpl",		VALL,	0),
1573*5198Sjmcp 	INST("rett",		VALL,	0),
1574*5198Sjmcp 	TABLE(Tcc_table,	VALL),
1575*5198Sjmcp 	INST("flush",		VALL,	0),
1576*5198Sjmcp 
1577*5198Sjmcp 	INST("save",		VALL,	0),
1578*5198Sjmcp 	INST("restore",		VALL,	0),
1579*5198Sjmcp 	TABLE(tr_table,		V9|V9S),
1580*5198Sjmcp 	INVALID
1581*5198Sjmcp };
1582*5198Sjmcp 
1583*5198Sjmcp static const overlay_t alu_ov_table[] = {
1584*5198Sjmcp 	OVERLAY(0x08, INST("addc",		V9|V9S, 0)),
1585*5198Sjmcp 	OVERLAY(0x0c, INST("subc",		V9|V9S, 0)),
1586*5198Sjmcp 	OVERLAY(0x18, INST("addccc",		V9|V9S, 0)),
1587*5198Sjmcp 	OVERLAY(0x1c, INST("subccc",		V9|V9S, 0)),
1588*5198Sjmcp 
1589*5198Sjmcp 	OVERLAY(0x29, INVALIDA(V9|V9S)),
1590*5198Sjmcp 	OVERLAY(0x2a, INST("rdpr",		V9|V9S, 0)),
1591*5198Sjmcp 	OVERLAY(0x2b, INST("flushw",		V9|V9S, 0)),
1592*5198Sjmcp 	OVERLAY(0x31, TABLE(rwin_table,		V9|V9S)),
1593*5198Sjmcp 
1594*5198Sjmcp 	OVERLAY(0x32, INST("wrpr",		V9|V9S, 0)),
1595*5198Sjmcp 	OVERLAY(0x33, INVALIDA(V9|V9S)),
1596*5198Sjmcp 	OVERLAY(0x36, TABLE(vis_table,		V9S)),
1597*5198Sjmcp 	OVERLAY(0x37, TABLE(fused_table,	V9O)),
1598*5198Sjmcp 	OVERLAY(0x39, INST("return",		VALL, 0)),
1599*5198Sjmcp 
1600*5198Sjmcp 	OVERLAY_END
1601*5198Sjmcp };
1602*5198Sjmcp 
1603*5198Sjmcp static const table_t alu_table = {
1604*5198Sjmcp 	.tbl_field = 24,
1605*5198Sjmcp 	.tbl_len   = 6,
1606*5198Sjmcp 	.tbl_ovp   = alu_ov_table,
1607*5198Sjmcp 	.tbl_fmt   = fmt_alu,
1608*5198Sjmcp 	.tbl_inp   = alu_table_def
1609*5198Sjmcp };
1610*5198Sjmcp 
1611*5198Sjmcp static const inst_t initial_table_def[4] = {
1612*5198Sjmcp 	TABLE(branch_table,	VALL),
1613*5198Sjmcp 	INST("call",		VALL, 0),
1614*5198Sjmcp 	TABLE(alu_table,	VALL),
1615*5198Sjmcp 	TABLE(ls_table,		VALL)
1616*5198Sjmcp };
1617*5198Sjmcp 
1618*5198Sjmcp /* NOTE: this must not be made static */
1619*5198Sjmcp const table_t initial_table = {
1620*5198Sjmcp 	.tbl_field = 31,
1621*5198Sjmcp 	.tbl_len   = 2,
1622*5198Sjmcp 	.tbl_ovp   = NULL,
1623*5198Sjmcp 	.tbl_fmt   = fmt_call,
1624*5198Sjmcp 	.tbl_inp   = initial_table_def
1625*5198Sjmcp };
1626