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