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]
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"
39 .in_type = INST_NONE, \
46 #define INVALIDA(_arch) \
48 .in_type = INST_NONE, \
55 #define INST(_name, _arch, _flags) \
57 .in_type = INST_DEF, \
67 #define TABLE(_name, _arch) \
69 .in_type = INST_TBL, \
76 #define OVERLAY(_idx, _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
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
= {
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
= {
153 .tbl_fmt
= fmt_branch
,
154 .tbl_inp
= Bicc_table_def
157 static const inst_t BPr_table_def
[16] = {
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
)),
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
= {
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
= {
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
= {
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
= {
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)),
283 static const table_t branch_table
= {
286 .tbl_ovp
= branch_ov_table
,
287 .tbl_fmt
= fmt_sethi
,
288 .tbl_inp
= branch_table_def
292 static const inst_t ls_table_def
[64] = {
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
),
305 INST("ldsw", V9
|V9S
, 0),
306 INST("ldsb", VALL
, 0),
307 INST("ldsh", VALL
, 0),
308 INST("ldx", V9
|V9S
, 0),
311 INST("ldstub", VALL
, 0),
312 INST("stx", V9
|V9S
, FLG_STORE
),
313 INST("swap", VALL
, 0),
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
),
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
),
333 INST("ldstuba", VALL
, FLG_ASI
),
334 INST("stxa", V9
|V9S
, FLG_STORE
|FLG_ASI
),
335 INST("swapa", VALL
, FLG_ASI
),
338 INST("ld", VALL
, FLG_RD(REG_FP
)),
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
)),
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
)),
357 INST("prefetch", V9
|V9S
, 0),
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
)),
378 INST("casa", V9
|V9S
, 0),
379 INST("prefetcha", V9
|V9S
, FLG_STORE
|FLG_ASI
),
380 INST("casxa", V9
|V9S
, 0),
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
))),
400 static const table_t ls_table
= {
403 .tbl_ovp
= ld_ov_table
,
405 .tbl_inp
= ls_table_def
410 static const inst_t Tcc_table_def
[16] = {
413 INST("tle", VALL
, 0),
416 INST("tleu", VALL
, 0),
417 INST("tcs", VALL
, 0),
418 INST("tneg", VALL
, 0),
419 INST("tvs", VALL
, 0),
422 INST("tne", VALL
, 0),
424 INST("tge", VALL
, 0),
426 INST("tgu", VALL
, 0),
427 INST("tcc", VALL
, 0),
428 INST("tpos", VALL
, 0),
432 static const table_t Tcc_table
= {
437 .tbl_inp
= Tcc_table_def
440 static const inst_t rwin_table_def
[32] = {
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),
453 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
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
= {
464 .tbl_fmt
= fmt_regwin
,
465 .tbl_inp
= rwin_table_def
468 static const inst_t tr_table_def
[32] = {
470 INST("done", V9
|V9S
, 0),
471 INST("retry", V9
|V9S
, 0),
481 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
482 INST("jpriv", V9
, FLG_DISP(DISP19
)),
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
= {
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
= {
545 .tbl_fmt
= fmt_movcc
,
546 .tbl_inp
= movfcc_table_def
549 static const table_t movicc_table
= {
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
= {
567 .tbl_inp
= movcc_table_def
570 static const inst_t movr_table_def
[8] = {
573 INST("movre", V9
|V9S
, 0),
574 INST("movrlez", V9
|V9S
, 0),
575 INST("movrlz", V9
|V9S
, 0),
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
= {
589 .tbl_inp
= movr_table_def
592 static const inst_t FPop1_table_def
[512] = {
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
)),
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
)),
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
,
622 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
623 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
626 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
631 FLG_P1(REG_NONE
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
633 FLG_P1(REG_NONE
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
635 FLG_P1(REG_NONE
)|FLG_P2(REG_FPQ
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
637 INVALID
, INVALID
, INVALID
, INVALID
,
640 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
641 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
646 FLG_P1(REG_FP
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
648 FLG_P1(REG_FPD
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
650 FLG_P1(REG_FPQ
)|FLG_P2(REG_FPQ
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
654 FLG_P1(REG_FP
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
656 FLG_P1(REG_FPD
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
658 FLG_P1(REG_FPQ
)|FLG_P2(REG_FPQ
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
663 FLG_P1(REG_FP
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
665 FLG_P1(REG_FPD
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
667 FLG_P1(REG_FPQ
)|FLG_P2(REG_FPQ
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
671 FLG_P1(REG_FP
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
673 FLG_P1(REG_FPD
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
675 FLG_P1(REG_FPQ
)|FLG_P2(REG_FPQ
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
678 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
679 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
682 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
687 FLG_P1(REG_FP
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
694 FLG_P1(REG_FPD
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
698 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
699 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, 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
|
717 INST("fxtod", V9
|V9S
,
718 FLG_P1(REG_NONE
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
723 INST("fxtoq", V9
|V9S
,
724 FLG_P1(REG_NONE
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
730 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
731 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
734 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
735 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
738 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
739 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
742 INVALID
, INVALID
, INVALID
, INVALID
,
745 FLG_P1(REG_NONE
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
748 FLG_P1(REG_NONE
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
750 FLG_P1(REG_NONE
)|FLG_P2(REG_FPQ
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
754 FLG_P1(REG_NONE
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
756 FLG_P1(REG_NONE
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
759 FLG_P1(REG_NONE
)|FLG_P2(REG_FPQ
)|FLG_NOIMM
|FLG_P3(REG_FPD
)),
762 FLG_P1(REG_NONE
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
764 FLG_P1(REG_NONE
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
766 FLG_P1(REG_NONE
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FPQ
)),
772 FLG_P1(REG_NONE
)|FLG_P2(REG_FP
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
774 FLG_P1(REG_NONE
)|FLG_P2(REG_FPD
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
776 FLG_P1(REG_NONE
)|FLG_P2(REG_FPQ
)|FLG_NOIMM
|FLG_P3(REG_FP
)),
777 INVALID
, INVALID
, INVALID
, INVALID
,
780 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
783 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
784 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
787 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
788 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
791 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
792 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
795 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
796 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
799 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
800 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
803 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
804 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
807 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
808 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
811 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
812 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
815 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
816 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
819 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
820 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
823 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
824 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
827 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
828 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
831 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
832 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
835 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
836 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
839 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
840 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
843 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
844 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
847 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
848 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
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
= {
859 .tbl_fmt
= fmt_fpop1
,
860 .tbl_inp
= FPop1_table_def
863 static const inst_t FPop2_table_def
[512] = {
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
,
876 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
879 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
880 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
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
)),
894 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
897 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
898 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, 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
)),
918 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
922 INST("fcmps", VALL
, FLG_P1(REG_FP
)|FLG_P2(REG_FP
)|FLG_P3(REG_NONE
)
924 INST("fcmpd", VALL
, FLG_P1(REG_FPD
)|FLG_P2(REG_FPD
)|FLG_P3(REG_NONE
)
926 INST("fcmpq", VALL
, FLG_P1(REG_FPQ
)|FLG_P2(REG_FPQ
)|FLG_P3(REG_NONE
)
930 INST("fcmpes", VALL
, FLG_P1(REG_FP
)|FLG_P2(REG_FP
)|FLG_P3(REG_NONE
)
932 INST("fcmped", VALL
, FLG_P1(REG_FPD
)|FLG_P2(REG_FPD
)|FLG_P3(REG_NONE
)
934 INST("fcmpeq", VALL
, FLG_P1(REG_FPQ
)|FLG_P2(REG_FPQ
)|FLG_P3(REG_NONE
)
938 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
941 INVALID
, INVALID
, INVALID
, 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
)),
952 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
955 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
956 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, 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
,
970 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
973 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
974 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
977 INVALID
, INVALID
, INVALID
, 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
)),
988 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
991 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
992 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, 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
)),
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
)),
1012 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1015 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1016 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1019 INVALID
, INVALID
, INVALID
, 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
)),
1030 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1033 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1034 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, 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
,
1048 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1051 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1052 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1055 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1056 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1059 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1060 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1063 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1064 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1067 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1068 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1071 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1072 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1075 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1076 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, 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
,
1090 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1093 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1094 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1097 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1098 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1101 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1102 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1105 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1106 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1109 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1110 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1113 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1114 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
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
= {
1125 .tbl_fmt
= fmt_fpop2
,
1126 .tbl_inp
= FPop2_table_def
1129 static const inst_t vis_table_def
[512] = {
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
),
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
,
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
)),
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
)),
1170 INST("cmask16", V9
, FLG_P1(REG_NONE
)|FLG_NOIMM
|
1171 FLG_P2(REG_INT
)|FLG_P3(REG_NONE
)),
1173 INST("cmask32", V9
, FLG_P1(REG_NONE
)|FLG_NOIMM
|
1174 FLG_P2(REG_INT
)|FLG_P3(REG_NONE
)),
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
)),
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
)),
1216 INST("fmul8x16", V9S
, FLG_P1(REG_FP
)|FLG_NOIMM
|
1217 FLG_P2(REG_FPD
)|FLG_P3(REG_FPD
)),
1219 INST("fmul8x16au", V9S
, FLG_P1(REG_FP
)|FLG_NOIMM
|
1220 FLG_P2(REG_FP
)|FLG_P3(REG_FPD
)),
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
)),
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
)),
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
)),
1249 INST("fmean16", V9
, FLG_P1(REG_FPD
)|FLG_NOIMM
|
1250 FLG_P2(REG_FPD
)|FLG_P3(REG_FPD
)),
1252 INST("fpadd64", V9S
, FLG_P1(REG_FPD
)|FLG_NOIMM
|
1253 FLG_P2(REG_FPD
)|FLG_P3(REG_FPD
)),
1255 INST("fchksm16", V9
, FLG_P1(REG_FPD
)|FLG_NOIMM
|
1256 FLG_P2(REG_FPD
)|FLG_P3(REG_FPD
)),
1258 INST("fpsub64", V9S
, FLG_P1(REG_FPD
)|FLG_NOIMM
|
1259 FLG_P2(REG_FPD
)|FLG_P3(REG_FPD
)),
1263 INST("faligndata", V9S
, FLG_P1(REG_FPD
)|FLG_NOIMM
|
1264 FLG_P2(REG_FPD
)|FLG_P3(REG_FPD
)),
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
)),
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
)),
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
)),
1315 INST("fzero", V9S
, FLG_P1(REG_NONE
)|FLG_P2(REG_NONE
)|
1317 INST("fzeros", V9S
, FLG_P1(REG_NONE
)|FLG_P2(REG_NONE
)|
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
)|
1330 INST("fnot2s", V9S
, FLG_P1(REG_NONE
)|FLG_P2(REG_FP
)|
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
)|
1340 INST("fnot1s", V9S
, FLG_P1(REG_FP
)|FLG_P2(REG_NONE
)|
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
)),
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
)|
1364 INST("fsrc1s", V9S
, FLG_P1(REG_FP
)|FLG_P2(REG_NONE
)|
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
)),
1372 INST("fsrc2", V9S
, FLG_P1(REG_NONE
)|FLG_P2(REG_FPD
)|
1374 INST("fsrc2s", V9S
, FLG_P1(REG_NONE
)|FLG_P2(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
)|
1387 INST("fones", V9S
, FLG_P1(REG_NONE
)|FLG_P2(REG_NONE
)|
1391 INST("shutdown", V9S
, 0),
1392 INST("siam", V9S
, 0),
1396 INVALID
, INVALID
, INVALID
, INVALID
,
1399 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1402 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1403 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1406 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1407 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1410 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1411 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1414 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1415 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1418 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1419 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1422 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1423 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1426 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1427 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1430 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1431 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
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
)),
1439 INST("movstosw", V9
, FLG_P1(REG_NONE
)|FLG_NOIMM
|
1440 FLG_P2(REG_FP
)|FLG_RD(REG_INT
)),
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
)),
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
,
1454 INST("fucmple8", V9
, FLG_P1(REG_FPD
)|FLG_NOIMM
|
1455 FLG_P2(REG_FPD
)|FLG_RD(REG_INT
)),
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
)),
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
,
1468 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1469 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1472 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1473 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1477 INST("flcmps", V9
, FLG_P1(REG_FP
)|FLG_P2(REG_FP
)|FLG_P3(REG_FCC
)
1479 INST("flcmpd", V9
, FLG_P1(REG_FPD
)|FLG_P2(REG_FPD
)|FLG_P3(REG_FCC
)
1481 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1482 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1485 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1486 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1489 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1490 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1493 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1494 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1497 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1498 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1501 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1502 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1505 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1506 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1509 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1510 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1513 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1514 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1517 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
1518 INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
, INVALID
,
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
= {
1530 .tbl_inp
= vis_table_def
1533 static const inst_t fused_table_def
[16] = {
1536 INST("fmadds", V9
, FLG_P1(REG_FP
)),
1537 INST("fmaddd", V9
, FLG_P1(REG_FPD
)),
1542 INST("fmsubs", V9
, FLG_P1(REG_FP
)),
1543 INST("fmsubd", V9
, FLG_P1(REG_FPD
)),
1548 INST("fnmsubs", V9
, FLG_P1(REG_FP
)),
1549 INST("fnmsubd", V9
, FLG_P1(REG_FPD
)),
1554 INST("fnmadds", V9
, FLG_P1(REG_FP
)),
1555 INST("fnmaddd", V9
, FLG_P1(REG_FPD
)),
1559 static const table_t fused_table
= {
1563 .tbl_fmt
= fmt_fused
,
1564 .tbl_inp
= fused_table_def
1567 static const inst_t alu_table_def
[64] = {
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),
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),
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),
1602 INST("addxcc", VALL
, 0),
1604 INST("umulcc", VALL
, 0),
1605 INST("smulcc", VALL
, 0),
1607 INST("subxcc", VALL
, 0),
1609 INST("udivcc", VALL
, 0),
1610 INST("sdivcc", VALL
, 0),
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),
1624 INST("rd", VALL
, 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
),
1636 INST("wr", VALL
, 0),
1641 TABLE(FPop1_table
, VALL
),
1642 TABLE(FPop2_table
, VALL
),
1643 INST("cpop1", V8
, 0),
1644 INST("cpop2", V8
, 0), /* impdep2 */
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
),
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)),
1679 static const table_t alu_table
= {
1682 .tbl_ovp
= alu_ov_table
,
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
= {
1699 .tbl_fmt
= fmt_call
,
1700 .tbl_inp
= initial_table_def