disasm_extract.c revision 1.2
1/*	$NetBSD: disasm_extract.c,v 1.2 2011/07/17 20:54:42 joerg Exp $	*/
2
3/*-
4 * Copyright (c) 2000-2003 Marcel Moolenaar
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <sys/cdefs.h>
30/* __FBSDID("$FreeBSD: src/sys/ia64/disasm/disasm_extract.c,v 1.2 2005/01/06 22:18:22 imp Exp $"); */
31
32#include <sys/param.h>
33#include <sys/systm.h>
34
35#include <ia64/disasm/disasm_int.h>
36#include <ia64/disasm/disasm.h>
37
38#define FRAG(o,l)	((int)((o << 8) | (l & 0xff)))
39#define FRAG_OFS(f)	(f >> 8)
40#define FRAG_LEN(f)	(f & 0xff)
41
42/*
43 * Support functions.
44 */
45static void
46asm_cmpltr_add(struct asm_inst *i, enum asm_cmpltr_class c,
47    enum asm_cmpltr_type t)
48{
49
50	i->i_cmpltr[i->i_ncmpltrs].c_class = c;
51	i->i_cmpltr[i->i_ncmpltrs].c_type = t;
52	i->i_ncmpltrs++;
53	KASSERT(i->i_ncmpltrs < 6);
54}
55
56static void
57asm_hint(struct asm_inst *i, enum asm_cmpltr_class c)
58{
59
60	switch (FIELD(i->i_bits, 28, 2)) { /* hint */
61	case 0:
62		asm_cmpltr_add(i, c, ASM_CT_NONE);
63		break;
64	case 1:
65		asm_cmpltr_add(i, c, ASM_CT_NT1);
66		break;
67	case 2:
68		asm_cmpltr_add(i, c, ASM_CT_NT2);
69		break;
70	case 3:
71		asm_cmpltr_add(i, c, ASM_CT_NTA);
72		break;
73	}
74}
75
76static void
77asm_sf(struct asm_inst *i)
78{
79
80	switch (FIELD(i->i_bits, 34, 2)) {
81	case 0:
82		asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S0);
83		break;
84	case 1:
85		asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S1);
86		break;
87	case 2:
88		asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S2);
89		break;
90	case 3:
91		asm_cmpltr_add(i, ASM_CC_SF, ASM_CT_S3);
92		break;
93	}
94}
95
96static void
97asm_brhint(struct asm_inst *i)
98{
99	uint64_t bits = i->i_bits;
100
101	switch (FIELD(bits, 33, 2)) { /* bwh */
102	case 0:
103		asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_SPTK);
104		break;
105	case 1:
106		asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_SPNT);
107		break;
108	case 2:
109		asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_DPTK);
110		break;
111	case 3:
112		asm_cmpltr_add(i, ASM_CC_BWH, ASM_CT_DPNT);
113		break;
114	}
115
116	if (FIELD(bits, 12, 1)) /* ph */
117		asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_MANY);
118	else
119		asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_FEW);
120
121	if (FIELD(bits, 35, 1)) /* dh */
122		asm_cmpltr_add(i, ASM_CC_DH, ASM_CT_CLR);
123	else
124		asm_cmpltr_add(i, ASM_CC_DH, ASM_CT_NONE);
125}
126
127static void
128asm_brphint(struct asm_inst *i)
129{
130	uint64_t bits = i->i_bits;
131
132	switch (FIELD(bits, 3, 2)) { /* ipwh, indwh */
133	case 0:
134		asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_SPTK);
135		break;
136	case 1:
137		asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_LOOP);
138		break;
139	case 2:
140		asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_DPTK);
141		break;
142	case 3:
143		asm_cmpltr_add(i, ASM_CC_IPWH, ASM_CT_EXIT);
144		break;
145	}
146
147	if (FIELD(bits, 5, 1)) /* ph */
148		asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_MANY);
149	else
150		asm_cmpltr_add(i, ASM_CC_PH, ASM_CT_FEW);
151
152	switch (FIELD(bits, 0, 3)) { /* pvec */
153	case 0:
154		asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_DC_DC);
155		break;
156	case 1:
157		asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_DC_NT);
158		break;
159	case 2:
160		asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_TK_DC);
161		break;
162	case 3:
163		asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_TK_TK);
164		break;
165	case 4:
166		asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_TK_NT);
167		break;
168	case 5:
169		asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_NT_DC);
170		break;
171	case 6:
172		asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_NT_TK);
173		break;
174	case 7:
175		asm_cmpltr_add(i, ASM_CC_PVEC, ASM_CT_NT_NT);
176		break;
177	}
178
179	if (FIELD(bits, 35, 1)) /* ih */
180		asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_IMP);
181	else
182		asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_NONE);
183}
184
185static enum asm_oper_type
186asm_normalize(struct asm_inst *i, enum asm_op op)
187{
188	enum asm_oper_type ot = ASM_OPER_NONE;
189
190	switch (op) {
191	case ASM_OP_BR_CALL:
192		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CALL);
193		op = ASM_OP_BR;
194		break;
195	case ASM_OP_BR_CEXIT:
196		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CEXIT);
197		op = ASM_OP_BR;
198		break;
199	case ASM_OP_BR_CLOOP:
200		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CLOOP);
201		op = ASM_OP_BR;
202		break;
203	case ASM_OP_BR_COND:
204		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_COND);
205		op = ASM_OP_BR;
206		break;
207	case ASM_OP_BR_CTOP:
208		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CTOP);
209		op = ASM_OP_BR;
210		break;
211	case ASM_OP_BR_IA:
212		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_IA);
213		op = ASM_OP_BR;
214		break;
215	case ASM_OP_BR_RET:
216		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_RET);
217		op = ASM_OP_BR;
218		break;
219	case ASM_OP_BR_WEXIT:
220		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_WEXIT);
221		op = ASM_OP_BR;
222		break;
223	case ASM_OP_BR_WTOP:
224		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_WTOP);
225		op = ASM_OP_BR;
226		break;
227	case ASM_OP_BREAK_B:
228		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_B);
229		op = ASM_OP_BREAK;
230		break;
231	case ASM_OP_BREAK_F:
232		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_F);
233		op = ASM_OP_BREAK;
234		break;
235	case ASM_OP_BREAK_I:
236		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I);
237		op = ASM_OP_BREAK;
238		break;
239	case ASM_OP_BREAK_M:
240		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M);
241		op = ASM_OP_BREAK;
242		break;
243	case ASM_OP_BREAK_X:
244		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_X);
245		op = ASM_OP_BREAK;
246		break;
247	case ASM_OP_BRL_COND:
248		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_COND);
249		op = ASM_OP_BRL;
250		break;
251	case ASM_OP_BRL_CALL:
252		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_CALL);
253		op = ASM_OP_BRL;
254		break;
255	case ASM_OP_BRP_:
256		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_NONE);
257		op = ASM_OP_BRP;
258		break;
259	case ASM_OP_BRP_RET:
260		asm_cmpltr_add(i, ASM_CC_BTYPE, ASM_CT_RET);
261		op = ASM_OP_BRP;
262		break;
263	case ASM_OP_BSW_0:
264		asm_cmpltr_add(i, ASM_CC_BSW, ASM_CT_0);
265		op = ASM_OP_BSW;
266		break;
267	case ASM_OP_BSW_1:
268		asm_cmpltr_add(i, ASM_CC_BSW, ASM_CT_1);
269		op = ASM_OP_BSW;
270		break;
271	case ASM_OP_CHK_A_CLR:
272		asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_A);
273		asm_cmpltr_add(i, ASM_CC_ACLR, ASM_CT_CLR);
274		op = ASM_OP_CHK;
275		break;
276	case ASM_OP_CHK_A_NC:
277		asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_A);
278		asm_cmpltr_add(i, ASM_CC_ACLR, ASM_CT_NC);
279		op = ASM_OP_CHK;
280		break;
281	case ASM_OP_CHK_S:
282		asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_S);
283		op = ASM_OP_CHK;
284		break;
285	case ASM_OP_CHK_S_I:
286		asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_S);
287		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I);
288		op = ASM_OP_CHK;
289		break;
290	case ASM_OP_CHK_S_M:
291		asm_cmpltr_add(i, ASM_CC_CHK, ASM_CT_S);
292		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M);
293		op = ASM_OP_CHK;
294		break;
295	case ASM_OP_CLRRRB_:
296		asm_cmpltr_add(i, ASM_CC_CLRRRB, ASM_CT_NONE);
297		op = ASM_OP_CLRRRB;
298		break;
299	case ASM_OP_CLRRRB_PR:
300		asm_cmpltr_add(i, ASM_CC_CLRRRB, ASM_CT_PR);
301		op = ASM_OP_CLRRRB;
302		break;
303	case ASM_OP_CMP_EQ:
304		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
305		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE);
306		op = ASM_OP_CMP;
307		break;
308	case ASM_OP_CMP_EQ_AND:
309		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
310		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
311		op = ASM_OP_CMP;
312		break;
313	case ASM_OP_CMP_EQ_OR:
314		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
315		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
316		op = ASM_OP_CMP;
317		break;
318	case ASM_OP_CMP_EQ_OR_ANDCM:
319		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
320		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
321		op = ASM_OP_CMP;
322		break;
323	case ASM_OP_CMP_EQ_UNC:
324		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
325		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC);
326		op = ASM_OP_CMP;
327		break;
328	case ASM_OP_CMP_GE_AND:
329		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE);
330		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
331		op = ASM_OP_CMP;
332		break;
333	case ASM_OP_CMP_GE_OR:
334		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE);
335		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
336		op = ASM_OP_CMP;
337		break;
338	case ASM_OP_CMP_GE_OR_ANDCM:
339		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE);
340		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
341		op = ASM_OP_CMP;
342		break;
343	case ASM_OP_CMP_GT_AND:
344		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT);
345		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
346		op = ASM_OP_CMP;
347		break;
348	case ASM_OP_CMP_GT_OR:
349		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT);
350		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
351		op = ASM_OP_CMP;
352		break;
353	case ASM_OP_CMP_GT_OR_ANDCM:
354		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT);
355		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
356		op = ASM_OP_CMP;
357		break;
358	case ASM_OP_CMP_LE_AND:
359		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE);
360		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
361		op = ASM_OP_CMP;
362		break;
363	case ASM_OP_CMP_LE_OR:
364		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE);
365		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
366		op = ASM_OP_CMP;
367		break;
368	case ASM_OP_CMP_LE_OR_ANDCM:
369		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE);
370		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
371		op = ASM_OP_CMP;
372		break;
373	case ASM_OP_CMP_LT:
374		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
375		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE);
376		op = ASM_OP_CMP;
377		break;
378	case ASM_OP_CMP_LT_AND:
379		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
380		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
381		op = ASM_OP_CMP;
382		break;
383	case ASM_OP_CMP_LT_OR:
384		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
385		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
386		op = ASM_OP_CMP;
387		break;
388	case ASM_OP_CMP_LT_OR_ANDCM:
389		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
390		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
391		op = ASM_OP_CMP;
392		break;
393	case ASM_OP_CMP_LT_UNC:
394		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
395		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC);
396		op = ASM_OP_CMP;
397		break;
398	case ASM_OP_CMP_LTU:
399		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU);
400		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE);
401		op = ASM_OP_CMP;
402		break;
403	case ASM_OP_CMP_LTU_UNC:
404		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU);
405		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC);
406		op = ASM_OP_CMP;
407		break;
408	case ASM_OP_CMP_NE_AND:
409		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE);
410		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
411		op = ASM_OP_CMP;
412		break;
413	case ASM_OP_CMP_NE_OR:
414		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE);
415		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
416		op = ASM_OP_CMP;
417		break;
418	case ASM_OP_CMP_NE_OR_ANDCM:
419		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE);
420		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
421		op = ASM_OP_CMP;
422		break;
423	case ASM_OP_CMP4_EQ:
424		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
425		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE);
426		op = ASM_OP_CMP4;
427		break;
428	case ASM_OP_CMP4_EQ_AND:
429		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
430		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
431		op = ASM_OP_CMP4;
432		break;
433	case ASM_OP_CMP4_EQ_OR:
434		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
435		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
436		op = ASM_OP_CMP4;
437		break;
438	case ASM_OP_CMP4_EQ_OR_ANDCM:
439		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
440		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
441		op = ASM_OP_CMP4;
442		break;
443	case ASM_OP_CMP4_EQ_UNC:
444		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_EQ);
445		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC);
446		op = ASM_OP_CMP4;
447		break;
448	case ASM_OP_CMP4_GE_AND:
449		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE);
450		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
451		op = ASM_OP_CMP4;
452		break;
453	case ASM_OP_CMP4_GE_OR:
454		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE);
455		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
456		op = ASM_OP_CMP4;
457		break;
458	case ASM_OP_CMP4_GE_OR_ANDCM:
459		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GE);
460		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
461		op = ASM_OP_CMP4;
462		break;
463	case ASM_OP_CMP4_GT_AND:
464		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT);
465		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
466		op = ASM_OP_CMP4;
467		break;
468	case ASM_OP_CMP4_GT_OR:
469		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT);
470		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
471		op = ASM_OP_CMP4;
472		break;
473	case ASM_OP_CMP4_GT_OR_ANDCM:
474		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_GT);
475		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
476		op = ASM_OP_CMP4;
477		break;
478	case ASM_OP_CMP4_LE_AND:
479		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE);
480		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
481		op = ASM_OP_CMP4;
482		break;
483	case ASM_OP_CMP4_LE_OR:
484		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE);
485		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
486		op = ASM_OP_CMP4;
487		break;
488	case ASM_OP_CMP4_LE_OR_ANDCM:
489		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LE);
490		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
491		op = ASM_OP_CMP4;
492		break;
493	case ASM_OP_CMP4_LT:
494		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
495		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE);
496		op = ASM_OP_CMP4;
497		break;
498	case ASM_OP_CMP4_LT_AND:
499		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
500		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
501		op = ASM_OP_CMP4;
502		break;
503	case ASM_OP_CMP4_LT_OR:
504		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
505		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
506		op = ASM_OP_CMP4;
507		break;
508	case ASM_OP_CMP4_LT_OR_ANDCM:
509		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
510		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
511		op = ASM_OP_CMP4;
512		break;
513	case ASM_OP_CMP4_LT_UNC:
514		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LT);
515		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC);
516		op = ASM_OP_CMP4;
517		break;
518	case ASM_OP_CMP4_LTU:
519		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU);
520		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE);
521		op = ASM_OP_CMP4;
522		break;
523	case ASM_OP_CMP4_LTU_UNC:
524		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_LTU);
525		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC);
526		op = ASM_OP_CMP4;
527		break;
528	case ASM_OP_CMP4_NE_AND:
529		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE);
530		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
531		op = ASM_OP_CMP4;
532		break;
533	case ASM_OP_CMP4_NE_OR:
534		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE);
535		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
536		op = ASM_OP_CMP4;
537		break;
538	case ASM_OP_CMP4_NE_OR_ANDCM:
539		asm_cmpltr_add(i, ASM_CC_CREL, ASM_CT_NE);
540		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
541		op = ASM_OP_CMP4;
542		break;
543	case ASM_OP_CMP8XCHG16_ACQ:
544		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ);
545		op = ASM_OP_CMP8XCHG16;
546		break;
547	case ASM_OP_CMP8XCHG16_REL:
548		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL);
549		op = ASM_OP_CMP8XCHG16;
550		break;
551	case ASM_OP_CMPXCHG1_ACQ:
552		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ);
553		op = ASM_OP_CMPXCHG1;
554		break;
555	case ASM_OP_CMPXCHG1_REL:
556		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL);
557		op = ASM_OP_CMPXCHG1;
558		break;
559	case ASM_OP_CMPXCHG2_ACQ:
560		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ);
561		op = ASM_OP_CMPXCHG2;
562		break;
563	case ASM_OP_CMPXCHG2_REL:
564		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL);
565		op = ASM_OP_CMPXCHG2;
566		break;
567	case ASM_OP_CMPXCHG4_ACQ:
568		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ);
569		op = ASM_OP_CMPXCHG4;
570		break;
571	case ASM_OP_CMPXCHG4_REL:
572		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL);
573		op = ASM_OP_CMPXCHG4;
574		break;
575	case ASM_OP_CMPXCHG8_ACQ:
576		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ);
577		op = ASM_OP_CMPXCHG8;
578		break;
579	case ASM_OP_CMPXCHG8_REL:
580		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL);
581		op = ASM_OP_CMPXCHG8;
582		break;
583	case ASM_OP_CZX1_L:
584		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L);
585		op = ASM_OP_CZX1;
586		break;
587	case ASM_OP_CZX1_R:
588		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R);
589		op = ASM_OP_CZX1;
590		break;
591	case ASM_OP_CZX2_L:
592		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L);
593		op = ASM_OP_CZX2;
594		break;
595	case ASM_OP_CZX2_R:
596		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R);
597		op = ASM_OP_CZX2;
598		break;
599	case ASM_OP_DEP_:
600		asm_cmpltr_add(i, ASM_CC_DEP, ASM_CT_NONE);
601		op = ASM_OP_DEP;
602		break;
603	case ASM_OP_DEP_Z:
604		asm_cmpltr_add(i, ASM_CC_DEP, ASM_CT_Z);
605		op = ASM_OP_DEP;
606		break;
607	case ASM_OP_FC_:
608		asm_cmpltr_add(i, ASM_CC_FC, ASM_CT_NONE);
609		op = ASM_OP_FC;
610		break;
611	case ASM_OP_FC_I:
612		asm_cmpltr_add(i, ASM_CC_FC, ASM_CT_I);
613		op = ASM_OP_FC;
614		break;
615	case ASM_OP_FCLASS_M:
616		asm_cmpltr_add(i, ASM_CC_FCREL, ASM_CT_M);
617		op = ASM_OP_FCLASS;
618		break;
619	case ASM_OP_FCVT_FX:
620		asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX);
621		asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE);
622		op = ASM_OP_FCVT;
623		break;
624	case ASM_OP_FCVT_FX_TRUNC:
625		asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX);
626		asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC);
627		op = ASM_OP_FCVT;
628		break;
629	case ASM_OP_FCVT_FXU:
630		asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU);
631		asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE);
632		op = ASM_OP_FCVT;
633		break;
634	case ASM_OP_FCVT_FXU_TRUNC:
635		asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU);
636		asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC);
637		op = ASM_OP_FCVT;
638		break;
639	case ASM_OP_FCVT_XF:
640		asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_XF);
641		asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE);
642		op = ASM_OP_FCVT;
643		break;
644	case ASM_OP_FETCHADD4_ACQ:
645		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ);
646		op = ASM_OP_FETCHADD4;
647		break;
648	case ASM_OP_FETCHADD4_REL:
649		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL);
650		op = ASM_OP_FETCHADD4;
651		break;
652	case ASM_OP_FETCHADD8_ACQ:
653		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_ACQ);
654		op = ASM_OP_FETCHADD8;
655		break;
656	case ASM_OP_FETCHADD8_REL:
657		asm_cmpltr_add(i, ASM_CC_SEM, ASM_CT_REL);
658		op = ASM_OP_FETCHADD8;
659		break;
660	case ASM_OP_FMA_:
661		asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_NONE);
662		op = ASM_OP_FMA;
663		break;
664	case ASM_OP_FMA_D:
665		asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_D);
666		op = ASM_OP_FMA;
667		break;
668	case ASM_OP_FMA_S:
669		asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_S);
670		op = ASM_OP_FMA;
671		break;
672	case ASM_OP_FMERGE_NS:
673		asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_NS);
674		op = ASM_OP_FMERGE;
675		break;
676	case ASM_OP_FMERGE_S:
677		asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_S);
678		op = ASM_OP_FMERGE;
679		break;
680	case ASM_OP_FMERGE_SE:
681		asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_SE);
682		op = ASM_OP_FMERGE;
683		break;
684	case ASM_OP_FMIX_L:
685		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L);
686		op = ASM_OP_FMIX;
687		break;
688	case ASM_OP_FMIX_LR:
689		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_LR);
690		op = ASM_OP_FMIX;
691		break;
692	case ASM_OP_FMIX_R:
693		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R);
694		op = ASM_OP_FMIX;
695		break;
696	case ASM_OP_FMS_:
697		asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_NONE);
698		op = ASM_OP_FMS;
699		break;
700	case ASM_OP_FMS_D:
701		asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_D);
702		op = ASM_OP_FMS;
703		break;
704	case ASM_OP_FMS_S:
705		asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_S);
706		op = ASM_OP_FMS;
707		break;
708	case ASM_OP_FNMA_:
709		asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_NONE);
710		op = ASM_OP_FNMA;
711		break;
712	case ASM_OP_FNMA_D:
713		asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_D);
714		op = ASM_OP_FNMA;
715		break;
716	case ASM_OP_FNMA_S:
717		asm_cmpltr_add(i, ASM_CC_PC, ASM_CT_S);
718		op = ASM_OP_FNMA;
719		break;
720	case ASM_OP_FPCMP_EQ:
721		asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_EQ);
722		op = ASM_OP_FPCMP;
723		break;
724	case ASM_OP_FPCMP_LE:
725		asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LE);
726		op = ASM_OP_FPCMP;
727		break;
728	case ASM_OP_FPCMP_LT:
729		asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LT);
730		op = ASM_OP_FPCMP;
731		break;
732	case ASM_OP_FPCMP_NEQ:
733		asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_NEQ);
734		op = ASM_OP_FPCMP;
735		break;
736	case ASM_OP_FPCMP_NLE:
737		asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_NLE);
738		op = ASM_OP_FPCMP;
739		break;
740	case ASM_OP_FPCMP_NLT:
741		asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_NLT);
742		op = ASM_OP_FPCMP;
743		break;
744	case ASM_OP_FPCMP_ORD:
745		asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_ORD);
746		op = ASM_OP_FPCMP;
747		break;
748	case ASM_OP_FPCMP_UNORD:
749		asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_UNORD);
750		op = ASM_OP_FPCMP;
751		break;
752	case ASM_OP_FPCVT_FX:
753		asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX);
754		asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE);
755		op = ASM_OP_FPCVT;
756		break;
757	case ASM_OP_FPCVT_FX_TRUNC:
758		asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FX);
759		asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC);
760		op = ASM_OP_FPCVT;
761		break;
762	case ASM_OP_FPCVT_FXU:
763		asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU);
764		asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_NONE);
765		op = ASM_OP_FPCVT;
766		break;
767	case ASM_OP_FPCVT_FXU_TRUNC:
768		asm_cmpltr_add(i, ASM_CC_FCVT, ASM_CT_FXU);
769		asm_cmpltr_add(i, ASM_CC_TRUNC, ASM_CT_TRUNC);
770		op = ASM_OP_FPCVT;
771		break;
772	case ASM_OP_FPMERGE_NS:
773		asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_NS);
774		op = ASM_OP_FPMERGE;
775		break;
776	case ASM_OP_FPMERGE_S:
777		asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_S);
778		op = ASM_OP_FPMERGE;
779		break;
780	case ASM_OP_FPMERGE_SE:
781		asm_cmpltr_add(i, ASM_CC_FMERGE, ASM_CT_SE);
782		op = ASM_OP_FPMERGE;
783		break;
784	case ASM_OP_FSWAP_:
785		asm_cmpltr_add(i, ASM_CC_FSWAP, ASM_CT_NONE);
786		op = ASM_OP_FSWAP;
787		break;
788	case ASM_OP_FSWAP_NL:
789		asm_cmpltr_add(i, ASM_CC_FSWAP, ASM_CT_NL);
790		op = ASM_OP_FSWAP;
791		break;
792	case ASM_OP_FSWAP_NR:
793		asm_cmpltr_add(i, ASM_CC_FSWAP, ASM_CT_NR);
794		op = ASM_OP_FSWAP;
795		break;
796	case ASM_OP_FSXT_L:
797		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L);
798		op = ASM_OP_FSXT;
799		break;
800	case ASM_OP_FSXT_R:
801		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R);
802		op = ASM_OP_FSXT;
803		break;
804	case ASM_OP_GETF_D:
805		asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_D);
806		op = ASM_OP_GETF;
807		break;
808	case ASM_OP_GETF_EXP:
809		asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_EXP);
810		op = ASM_OP_GETF;
811		break;
812	case ASM_OP_GETF_S:
813		asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_S);
814		op = ASM_OP_GETF;
815		break;
816	case ASM_OP_GETF_SIG:
817		asm_cmpltr_add(i, ASM_CC_GETF, ASM_CT_SIG);
818		op = ASM_OP_GETF;
819		break;
820	case ASM_OP_INVALA_:
821		asm_cmpltr_add(i, ASM_CC_INVALA, ASM_CT_NONE);
822		op = ASM_OP_INVALA;
823		break;
824	case ASM_OP_INVALA_E:
825		asm_cmpltr_add(i, ASM_CC_INVALA, ASM_CT_E);
826		op = ASM_OP_INVALA;
827		break;
828	case ASM_OP_ITC_D:
829		asm_cmpltr_add(i, ASM_CC_ITC, ASM_CT_D);
830		op = ASM_OP_ITC;
831		break;
832	case ASM_OP_ITC_I:
833		asm_cmpltr_add(i, ASM_CC_ITC, ASM_CT_I);
834		op = ASM_OP_ITC;
835		break;
836	case ASM_OP_ITR_D:
837		asm_cmpltr_add(i, ASM_CC_ITR, ASM_CT_D);
838		ot = ASM_OPER_DTR;
839		op = ASM_OP_ITR;
840		break;
841	case ASM_OP_ITR_I:
842		asm_cmpltr_add(i, ASM_CC_ITR, ASM_CT_I);
843		ot = ASM_OPER_ITR;
844		op = ASM_OP_ITR;
845		break;
846	case ASM_OP_LD1_:
847		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE);
848		op = ASM_OP_LD1;
849		break;
850	case ASM_OP_LD1_A:
851		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A);
852		op = ASM_OP_LD1;
853		break;
854	case ASM_OP_LD1_ACQ:
855		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ);
856		op = ASM_OP_LD1;
857		break;
858	case ASM_OP_LD1_BIAS:
859		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS);
860		op = ASM_OP_LD1;
861		break;
862	case ASM_OP_LD1_C_CLR:
863		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR);
864		op = ASM_OP_LD1;
865		break;
866	case ASM_OP_LD1_C_CLR_ACQ:
867		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ);
868		op = ASM_OP_LD1;
869		break;
870	case ASM_OP_LD1_C_NC:
871		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC);
872		op = ASM_OP_LD1;
873		break;
874	case ASM_OP_LD1_S:
875		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S);
876		op = ASM_OP_LD1;
877		break;
878	case ASM_OP_LD1_SA:
879		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA);
880		op = ASM_OP_LD1;
881		break;
882	case ASM_OP_LD16_:
883		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE);
884		op = ASM_OP_LD16;
885		break;
886	case ASM_OP_LD16_ACQ:
887		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ);
888		op = ASM_OP_LD16;
889		break;
890	case ASM_OP_LD2_:
891		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE);
892		op = ASM_OP_LD2;
893		break;
894	case ASM_OP_LD2_A:
895		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A);
896		op = ASM_OP_LD2;
897		break;
898	case ASM_OP_LD2_ACQ:
899		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ);
900		op = ASM_OP_LD2;
901		break;
902	case ASM_OP_LD2_BIAS:
903		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS);
904		op = ASM_OP_LD2;
905		break;
906	case ASM_OP_LD2_C_CLR:
907		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR);
908		op = ASM_OP_LD2;
909		break;
910	case ASM_OP_LD2_C_CLR_ACQ:
911		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ);
912		op = ASM_OP_LD2;
913		break;
914	case ASM_OP_LD2_C_NC:
915		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC);
916		op = ASM_OP_LD2;
917		break;
918	case ASM_OP_LD2_S:
919		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S);
920		op = ASM_OP_LD2;
921		break;
922	case ASM_OP_LD2_SA:
923		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA);
924		op = ASM_OP_LD2;
925		break;
926	case ASM_OP_LD4_:
927		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE);
928		op = ASM_OP_LD4;
929		break;
930	case ASM_OP_LD4_A:
931		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A);
932		op = ASM_OP_LD4;
933		break;
934	case ASM_OP_LD4_ACQ:
935		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ);
936		op = ASM_OP_LD4;
937		break;
938	case ASM_OP_LD4_BIAS:
939		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS);
940		op = ASM_OP_LD4;
941		break;
942	case ASM_OP_LD4_C_CLR:
943		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR);
944		op = ASM_OP_LD4;
945		break;
946	case ASM_OP_LD4_C_CLR_ACQ:
947		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ);
948		op = ASM_OP_LD4;
949		break;
950	case ASM_OP_LD4_C_NC:
951		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC);
952		op = ASM_OP_LD4;
953		break;
954	case ASM_OP_LD4_S:
955		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S);
956		op = ASM_OP_LD4;
957		break;
958	case ASM_OP_LD4_SA:
959		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA);
960		op = ASM_OP_LD4;
961		break;
962	case ASM_OP_LD8_:
963		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_NONE);
964		op = ASM_OP_LD8;
965		break;
966	case ASM_OP_LD8_A:
967		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_A);
968		op = ASM_OP_LD8;
969		break;
970	case ASM_OP_LD8_ACQ:
971		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_ACQ);
972		op = ASM_OP_LD8;
973		break;
974	case ASM_OP_LD8_BIAS:
975		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_BIAS);
976		op = ASM_OP_LD8;
977		break;
978	case ASM_OP_LD8_C_CLR:
979		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR);
980		op = ASM_OP_LD8;
981		break;
982	case ASM_OP_LD8_C_CLR_ACQ:
983		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_CLR_ACQ);
984		op = ASM_OP_LD8;
985		break;
986	case ASM_OP_LD8_C_NC:
987		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_C_NC);
988		op = ASM_OP_LD8;
989		break;
990	case ASM_OP_LD8_FILL:
991		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_FILL);
992		op = ASM_OP_LD8;
993		break;
994	case ASM_OP_LD8_S:
995		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_S);
996		op = ASM_OP_LD8;
997		break;
998	case ASM_OP_LD8_SA:
999		asm_cmpltr_add(i, ASM_CC_LDTYPE, ASM_CT_SA);
1000		op = ASM_OP_LD8;
1001		break;
1002	case ASM_OP_LDF_FILL:
1003		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_FILL);
1004		op = ASM_OP_LDF;
1005		break;
1006	case ASM_OP_LDF8_:
1007		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE);
1008		op = ASM_OP_LDF8;
1009		break;
1010	case ASM_OP_LDF8_A:
1011		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A);
1012		op = ASM_OP_LDF8;
1013		break;
1014	case ASM_OP_LDF8_C_CLR:
1015		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR);
1016		op = ASM_OP_LDF8;
1017		break;
1018	case ASM_OP_LDF8_C_NC:
1019		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC);
1020		op = ASM_OP_LDF8;
1021		break;
1022	case ASM_OP_LDF8_S:
1023		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S);
1024		op = ASM_OP_LDF8;
1025		break;
1026	case ASM_OP_LDF8_SA:
1027		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA);
1028		op = ASM_OP_LDF8;
1029		break;
1030	case ASM_OP_LDFD_:
1031		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE);
1032		op = ASM_OP_LDFD;
1033		break;
1034	case ASM_OP_LDFD_A:
1035		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A);
1036		op = ASM_OP_LDFD;
1037		break;
1038	case ASM_OP_LDFD_C_CLR:
1039		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR);
1040		op = ASM_OP_LDFD;
1041		break;
1042	case ASM_OP_LDFD_C_NC:
1043		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC);
1044		op = ASM_OP_LDFD;
1045		break;
1046	case ASM_OP_LDFD_S:
1047		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S);
1048		op = ASM_OP_LDFD;
1049		break;
1050	case ASM_OP_LDFD_SA:
1051		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA);
1052		op = ASM_OP_LDFD;
1053		break;
1054	case ASM_OP_LDFE_:
1055		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE);
1056		op = ASM_OP_LDFE;
1057		break;
1058	case ASM_OP_LDFE_A:
1059		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A);
1060		op = ASM_OP_LDFE;
1061		break;
1062	case ASM_OP_LDFE_C_CLR:
1063		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR);
1064		op = ASM_OP_LDFE;
1065		break;
1066	case ASM_OP_LDFE_C_NC:
1067		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC);
1068		op = ASM_OP_LDFE;
1069		break;
1070	case ASM_OP_LDFE_S:
1071		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S);
1072		op = ASM_OP_LDFE;
1073		break;
1074	case ASM_OP_LDFE_SA:
1075		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA);
1076		op = ASM_OP_LDFE;
1077		break;
1078	case ASM_OP_LDFP8_:
1079		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE);
1080		op = ASM_OP_LDFP8;
1081		break;
1082	case ASM_OP_LDFP8_A:
1083		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A);
1084		op = ASM_OP_LDFP8;
1085		break;
1086	case ASM_OP_LDFP8_C_CLR:
1087		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR);
1088		op = ASM_OP_LDFP8;
1089		break;
1090	case ASM_OP_LDFP8_C_NC:
1091		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC);
1092		op = ASM_OP_LDFP8;
1093		break;
1094	case ASM_OP_LDFP8_S:
1095		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S);
1096		op = ASM_OP_LDFP8;
1097		break;
1098	case ASM_OP_LDFP8_SA:
1099		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA);
1100		op = ASM_OP_LDFP8;
1101		break;
1102	case ASM_OP_LDFPD_:
1103		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE);
1104		op = ASM_OP_LDFPD;
1105		break;
1106	case ASM_OP_LDFPD_A:
1107		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A);
1108		op = ASM_OP_LDFPD;
1109		break;
1110	case ASM_OP_LDFPD_C_CLR:
1111		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR);
1112		op = ASM_OP_LDFPD;
1113		break;
1114	case ASM_OP_LDFPD_C_NC:
1115		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC);
1116		op = ASM_OP_LDFPD;
1117		break;
1118	case ASM_OP_LDFPD_S:
1119		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S);
1120		op = ASM_OP_LDFPD;
1121		break;
1122	case ASM_OP_LDFPD_SA:
1123		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA);
1124		op = ASM_OP_LDFPD;
1125		break;
1126	case ASM_OP_LDFPS_:
1127		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE);
1128		op = ASM_OP_LDFPS;
1129		break;
1130	case ASM_OP_LDFPS_A:
1131		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A);
1132		op = ASM_OP_LDFPS;
1133		break;
1134	case ASM_OP_LDFPS_C_CLR:
1135		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR);
1136		op = ASM_OP_LDFPS;
1137		break;
1138	case ASM_OP_LDFPS_C_NC:
1139		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC);
1140		op = ASM_OP_LDFPS;
1141		break;
1142	case ASM_OP_LDFPS_S:
1143		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S);
1144		op = ASM_OP_LDFPS;
1145		break;
1146	case ASM_OP_LDFPS_SA:
1147		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA);
1148		op = ASM_OP_LDFPS;
1149		break;
1150	case ASM_OP_LDFS_:
1151		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_NONE);
1152		op = ASM_OP_LDFS;
1153		break;
1154	case ASM_OP_LDFS_A:
1155		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_A);
1156		op = ASM_OP_LDFS;
1157		break;
1158	case ASM_OP_LDFS_C_CLR:
1159		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_CLR);
1160		op = ASM_OP_LDFS;
1161		break;
1162	case ASM_OP_LDFS_C_NC:
1163		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_C_NC);
1164		op = ASM_OP_LDFS;
1165		break;
1166	case ASM_OP_LDFS_S:
1167		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_S);
1168		op = ASM_OP_LDFS;
1169		break;
1170	case ASM_OP_LDFS_SA:
1171		asm_cmpltr_add(i, ASM_CC_FLDTYPE, ASM_CT_SA);
1172		op = ASM_OP_LDFS;
1173		break;
1174	case ASM_OP_LFETCH_:
1175		asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_NONE);
1176		asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_NONE);
1177		op = ASM_OP_LFETCH;
1178		break;
1179	case ASM_OP_LFETCH_EXCL:
1180		asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_NONE);
1181		asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_EXCL);
1182		op = ASM_OP_LFETCH;
1183		break;
1184	case ASM_OP_LFETCH_FAULT:
1185		asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_FAULT);
1186		asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_NONE);
1187		op = ASM_OP_LFETCH;
1188		break;
1189	case ASM_OP_LFETCH_FAULT_EXCL:
1190		asm_cmpltr_add(i, ASM_CC_LFTYPE, ASM_CT_FAULT);
1191		asm_cmpltr_add(i, ASM_CC_LFETCH, ASM_CT_EXCL);
1192		op = ASM_OP_LFETCH;
1193		break;
1194	case ASM_OP_MF_:
1195		asm_cmpltr_add(i, ASM_CC_MF, ASM_CT_NONE);
1196		op = ASM_OP_MF;
1197		break;
1198	case ASM_OP_MF_A:
1199		asm_cmpltr_add(i, ASM_CC_MF, ASM_CT_A);
1200		op = ASM_OP_MF;
1201		break;
1202	case ASM_OP_MIX1_L:
1203		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L);
1204		op = ASM_OP_MIX1;
1205		break;
1206	case ASM_OP_MIX1_R:
1207		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R);
1208		op = ASM_OP_MIX1;
1209		break;
1210	case ASM_OP_MIX2_L:
1211		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L);
1212		op = ASM_OP_MIX2;
1213		break;
1214	case ASM_OP_MIX2_R:
1215		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R);
1216		op = ASM_OP_MIX2;
1217		break;
1218	case ASM_OP_MIX4_L:
1219		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L);
1220		op = ASM_OP_MIX4;
1221		break;
1222	case ASM_OP_MIX4_R:
1223		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R);
1224		op = ASM_OP_MIX4;
1225		break;
1226	case ASM_OP_MOV_:
1227		asm_cmpltr_add(i, ASM_CC_MOV, ASM_CT_NONE);
1228		op = ASM_OP_MOV;
1229		break;
1230	case ASM_OP_MOV_I:
1231		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I);
1232		op = ASM_OP_MOV;
1233		break;
1234	case ASM_OP_MOV_M:
1235		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M);
1236		op = ASM_OP_MOV;
1237		break;
1238	case ASM_OP_MOV_RET:
1239		asm_cmpltr_add(i, ASM_CC_MOV, ASM_CT_RET);
1240		op = ASM_OP_MOV;
1241		break;
1242	case ASM_OP_MOV_CPUID:
1243		ot = ASM_OPER_CPUID;
1244		op = ASM_OP_MOV;
1245		break;
1246	case ASM_OP_MOV_DBR:
1247		ot = ASM_OPER_DBR;
1248		op = ASM_OP_MOV;
1249		break;
1250	case ASM_OP_MOV_IBR:
1251		ot = ASM_OPER_IBR;
1252		op = ASM_OP_MOV;
1253		break;
1254	case ASM_OP_MOV_IP:
1255		ot = ASM_OPER_IP;
1256		op = ASM_OP_MOV;
1257		break;
1258	case ASM_OP_MOV_MSR:
1259		ot = ASM_OPER_MSR;
1260		op = ASM_OP_MOV;
1261		break;
1262	case ASM_OP_MOV_PKR:
1263		ot = ASM_OPER_PKR;
1264		op = ASM_OP_MOV;
1265		break;
1266	case ASM_OP_MOV_PMC:
1267		ot = ASM_OPER_PMC;
1268		op = ASM_OP_MOV;
1269		break;
1270	case ASM_OP_MOV_PMD:
1271		ot = ASM_OPER_PMD;
1272		op = ASM_OP_MOV;
1273		break;
1274	case ASM_OP_MOV_PR:
1275		ot = ASM_OPER_PR;
1276		op = ASM_OP_MOV;
1277		break;
1278	case ASM_OP_MOV_PSR:
1279		ot = ASM_OPER_PSR;
1280		op = ASM_OP_MOV;
1281		break;
1282	case ASM_OP_MOV_PSR_L:
1283		ot = ASM_OPER_PSR_L;
1284		op = ASM_OP_MOV;
1285		break;
1286	case ASM_OP_MOV_PSR_UM:
1287		ot = ASM_OPER_PSR_UM;
1288		op = ASM_OP_MOV;
1289		break;
1290	case ASM_OP_MOV_RR:
1291		ot = ASM_OPER_RR;
1292		op = ASM_OP_MOV;
1293		break;
1294	case ASM_OP_NOP_B:
1295		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_B);
1296		op = ASM_OP_NOP;
1297		break;
1298	case ASM_OP_NOP_F:
1299		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_F);
1300		op = ASM_OP_NOP;
1301		break;
1302	case ASM_OP_NOP_I:
1303		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_I);
1304		op = ASM_OP_NOP;
1305		break;
1306	case ASM_OP_NOP_M:
1307		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_M);
1308		op = ASM_OP_NOP;
1309		break;
1310	case ASM_OP_NOP_X:
1311		asm_cmpltr_add(i, ASM_CC_UNIT, ASM_CT_X);
1312		op = ASM_OP_NOP;
1313		break;
1314	case ASM_OP_PACK2_SSS:
1315		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS);
1316		op = ASM_OP_PACK2;
1317		break;
1318	case ASM_OP_PACK2_USS:
1319		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_USS);
1320		op = ASM_OP_PACK2;
1321		break;
1322	case ASM_OP_PACK4_SSS:
1323		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS);
1324		op = ASM_OP_PACK4;
1325		break;
1326	case ASM_OP_PADD1_:
1327		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE);
1328		op = ASM_OP_PADD1;
1329		break;
1330	case ASM_OP_PADD1_SSS:
1331		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS);
1332		op = ASM_OP_PADD1;
1333		break;
1334	case ASM_OP_PADD1_UUS:
1335		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS);
1336		op = ASM_OP_PADD1;
1337		break;
1338	case ASM_OP_PADD1_UUU:
1339		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU);
1340		op = ASM_OP_PADD1;
1341		break;
1342	case ASM_OP_PADD2_:
1343		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE);
1344		op = ASM_OP_PADD2;
1345		break;
1346	case ASM_OP_PADD2_SSS:
1347		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS);
1348		op = ASM_OP_PADD2;
1349		break;
1350	case ASM_OP_PADD2_UUS:
1351		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS);
1352		op = ASM_OP_PADD2;
1353		break;
1354	case ASM_OP_PADD2_UUU:
1355		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU);
1356		op = ASM_OP_PADD2;
1357		break;
1358	case ASM_OP_PAVG1_:
1359		asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_NONE);
1360		op = ASM_OP_PAVG1;
1361		break;
1362	case ASM_OP_PAVG1_RAZ:
1363		asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_RAZ);
1364		op = ASM_OP_PAVG1;
1365		break;
1366	case ASM_OP_PAVG2_:
1367		asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_NONE);
1368		op = ASM_OP_PAVG2;
1369		break;
1370	case ASM_OP_PAVG2_RAZ:
1371		asm_cmpltr_add(i, ASM_CC_PAVG, ASM_CT_RAZ);
1372		op = ASM_OP_PAVG2;
1373		break;
1374	case ASM_OP_PCMP1_EQ:
1375		asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_EQ);
1376		op = ASM_OP_PCMP1;
1377		break;
1378	case ASM_OP_PCMP1_GT:
1379		asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_GT);
1380		op = ASM_OP_PCMP1;
1381		break;
1382	case ASM_OP_PCMP2_EQ:
1383		asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_EQ);
1384		op = ASM_OP_PCMP2;
1385		break;
1386	case ASM_OP_PCMP2_GT:
1387		asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_GT);
1388		op = ASM_OP_PCMP2;
1389		break;
1390	case ASM_OP_PCMP4_EQ:
1391		asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_EQ);
1392		op = ASM_OP_PCMP4;
1393		break;
1394	case ASM_OP_PCMP4_GT:
1395		asm_cmpltr_add(i, ASM_CC_PREL, ASM_CT_GT);
1396		op = ASM_OP_PCMP4;
1397		break;
1398	case ASM_OP_PMAX1_U:
1399		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U);
1400		op = ASM_OP_PMAX1;
1401		break;
1402	case ASM_OP_PMIN1_U:
1403		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U);
1404		op = ASM_OP_PMIN1;
1405		break;
1406	case ASM_OP_PMPY2_L:
1407		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_L);
1408		op = ASM_OP_PMPY2;
1409		break;
1410	case ASM_OP_PMPY2_R:
1411		asm_cmpltr_add(i, ASM_CC_LR, ASM_CT_R);
1412		op = ASM_OP_PMPY2;
1413		break;
1414	case ASM_OP_PMPYSHR2_:
1415		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE);
1416		op = ASM_OP_PMPYSHR2;
1417		break;
1418	case ASM_OP_PMPYSHR2_U:
1419		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U);
1420		op = ASM_OP_PMPYSHR2;
1421		break;
1422	case ASM_OP_PROBE_R:
1423		asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_R);
1424		asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_NONE);
1425		op = ASM_OP_PROBE;
1426		break;
1427	case ASM_OP_PROBE_R_FAULT:
1428		asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_R);
1429		asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_FAULT);
1430		op = ASM_OP_PROBE;
1431		break;
1432	case ASM_OP_PROBE_RW_FAULT:
1433		asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_RW);
1434		asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_FAULT);
1435		op = ASM_OP_PROBE;
1436		break;
1437	case ASM_OP_PROBE_W:
1438		asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_W);
1439		asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_NONE);
1440		op = ASM_OP_PROBE;
1441		break;
1442	case ASM_OP_PROBE_W_FAULT:
1443		asm_cmpltr_add(i, ASM_CC_RW, ASM_CT_W);
1444		asm_cmpltr_add(i, ASM_CC_PRTYPE, ASM_CT_FAULT);
1445		op = ASM_OP_PROBE;
1446		break;
1447	case ASM_OP_PSHR2_:
1448		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE);
1449		op = ASM_OP_PSHR2;
1450		break;
1451	case ASM_OP_PSHR2_U:
1452		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U);
1453		op = ASM_OP_PSHR2;
1454		break;
1455	case ASM_OP_PSHR4_:
1456		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE);
1457		op = ASM_OP_PSHR4;
1458		break;
1459	case ASM_OP_PSHR4_U:
1460		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U);
1461		op = ASM_OP_PSHR4;
1462		break;
1463	case ASM_OP_PSUB1_:
1464		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE);
1465		op = ASM_OP_PSUB1;
1466		break;
1467	case ASM_OP_PSUB1_SSS:
1468		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS);
1469		op = ASM_OP_PSUB1;
1470		break;
1471	case ASM_OP_PSUB1_UUS:
1472		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS);
1473		op = ASM_OP_PSUB1;
1474		break;
1475	case ASM_OP_PSUB1_UUU:
1476		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU);
1477		op = ASM_OP_PSUB1;
1478		break;
1479	case ASM_OP_PSUB2_:
1480		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_NONE);
1481		op = ASM_OP_PSUB2;
1482		break;
1483	case ASM_OP_PSUB2_SSS:
1484		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_SSS);
1485		op = ASM_OP_PSUB2;
1486		break;
1487	case ASM_OP_PSUB2_UUS:
1488		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUS);
1489		op = ASM_OP_PSUB2;
1490		break;
1491	case ASM_OP_PSUB2_UUU:
1492		asm_cmpltr_add(i, ASM_CC_SAT, ASM_CT_UUU);
1493		op = ASM_OP_PSUB2;
1494		break;
1495	case ASM_OP_PTC_E:
1496		asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_E);
1497		op = ASM_OP_PTC;
1498		break;
1499	case ASM_OP_PTC_G:
1500		asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_G);
1501		op = ASM_OP_PTC;
1502		break;
1503	case ASM_OP_PTC_GA:
1504		asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_GA);
1505		op = ASM_OP_PTC;
1506		break;
1507	case ASM_OP_PTC_L:
1508		asm_cmpltr_add(i, ASM_CC_PTC, ASM_CT_L);
1509		op = ASM_OP_PTC;
1510		break;
1511	case ASM_OP_PTR_D:
1512		asm_cmpltr_add(i, ASM_CC_PTR, ASM_CT_D);
1513		op = ASM_OP_PTR;
1514		break;
1515	case ASM_OP_PTR_I:
1516		asm_cmpltr_add(i, ASM_CC_PTR, ASM_CT_I);
1517		op = ASM_OP_PTR;
1518		break;
1519	case ASM_OP_SETF_D:
1520		asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_D);
1521		op = ASM_OP_SETF;
1522		break;
1523	case ASM_OP_SETF_EXP:
1524		asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_EXP);
1525		op = ASM_OP_SETF;
1526		break;
1527	case ASM_OP_SETF_S:
1528		asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_S);
1529		op = ASM_OP_SETF;
1530		break;
1531	case ASM_OP_SETF_SIG:
1532		asm_cmpltr_add(i, ASM_CC_SETF, ASM_CT_SIG);
1533		op = ASM_OP_SETF;
1534		break;
1535	case ASM_OP_SHR_:
1536		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_NONE);
1537		op = ASM_OP_SHR;
1538		break;
1539	case ASM_OP_SHR_U:
1540		asm_cmpltr_add(i, ASM_CC_UNS, ASM_CT_U);
1541		op = ASM_OP_SHR;
1542		break;
1543	case ASM_OP_SRLZ_D:
1544		asm_cmpltr_add(i, ASM_CC_SRLZ, ASM_CT_D);
1545		op = ASM_OP_SRLZ;
1546		break;
1547	case ASM_OP_SRLZ_I:
1548		asm_cmpltr_add(i, ASM_CC_SRLZ, ASM_CT_I);
1549		op = ASM_OP_SRLZ;
1550		break;
1551	case ASM_OP_ST1_:
1552		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE);
1553		op = ASM_OP_ST1;
1554		break;
1555	case ASM_OP_ST1_REL:
1556		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL);
1557		op = ASM_OP_ST1;
1558		break;
1559	case ASM_OP_ST16_:
1560		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE);
1561		op = ASM_OP_ST16;
1562		break;
1563	case ASM_OP_ST16_REL:
1564		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL);
1565		op = ASM_OP_ST16;
1566		break;
1567	case ASM_OP_ST2_:
1568		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE);
1569		op = ASM_OP_ST2;
1570		break;
1571	case ASM_OP_ST2_REL:
1572		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL);
1573		op = ASM_OP_ST2;
1574		break;
1575	case ASM_OP_ST4_:
1576		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE);
1577		op = ASM_OP_ST4;
1578		break;
1579	case ASM_OP_ST4_REL:
1580		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL);
1581		op = ASM_OP_ST4;
1582		break;
1583	case ASM_OP_ST8_:
1584		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_NONE);
1585		op = ASM_OP_ST8;
1586		break;
1587	case ASM_OP_ST8_REL:
1588		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_REL);
1589		op = ASM_OP_ST8;
1590		break;
1591	case ASM_OP_ST8_SPILL:
1592		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_SPILL);
1593		op = ASM_OP_ST8;
1594		break;
1595	case ASM_OP_STF_SPILL:
1596		asm_cmpltr_add(i, ASM_CC_STTYPE, ASM_CT_SPILL);
1597		op = ASM_OP_STF;
1598		break;
1599	case ASM_OP_SYNC_I:
1600		asm_cmpltr_add(i, ASM_CC_SYNC, ASM_CT_I);
1601		op = ASM_OP_SYNC;
1602		break;
1603	case ASM_OP_TBIT_NZ_AND:
1604		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ);
1605		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
1606		op = ASM_OP_TBIT;
1607		break;
1608	case ASM_OP_TBIT_NZ_OR:
1609		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ);
1610		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
1611		op = ASM_OP_TBIT;
1612		break;
1613	case ASM_OP_TBIT_NZ_OR_ANDCM:
1614		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ);
1615		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
1616		op = ASM_OP_TBIT;
1617		break;
1618	case ASM_OP_TBIT_Z:
1619		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1620		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE);
1621		op = ASM_OP_TBIT;
1622		break;
1623	case ASM_OP_TBIT_Z_AND:
1624		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1625		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
1626		op = ASM_OP_TBIT;
1627		break;
1628	case ASM_OP_TBIT_Z_OR:
1629		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1630		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
1631		op = ASM_OP_TBIT;
1632		break;
1633	case ASM_OP_TBIT_Z_OR_ANDCM:
1634		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1635		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
1636		op = ASM_OP_TBIT;
1637		break;
1638	case ASM_OP_TBIT_Z_UNC:
1639		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1640		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC);
1641		op = ASM_OP_TBIT;
1642		break;
1643	case ASM_OP_TNAT_NZ_AND:
1644		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ);
1645		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
1646		op = ASM_OP_TNAT;
1647		break;
1648	case ASM_OP_TNAT_NZ_OR:
1649		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ);
1650		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
1651		op = ASM_OP_TNAT;
1652		break;
1653	case ASM_OP_TNAT_NZ_OR_ANDCM:
1654		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_NZ);
1655		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
1656		op = ASM_OP_TNAT;
1657		break;
1658	case ASM_OP_TNAT_Z:
1659		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1660		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_NONE);
1661		op = ASM_OP_TNAT;
1662		break;
1663	case ASM_OP_TNAT_Z_AND:
1664		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1665		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_AND);
1666		op = ASM_OP_TNAT;
1667		break;
1668	case ASM_OP_TNAT_Z_OR:
1669		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1670		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR);
1671		op = ASM_OP_TNAT;
1672		break;
1673	case ASM_OP_TNAT_Z_OR_ANDCM:
1674		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1675		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_OR_ANDCM);
1676		op = ASM_OP_TNAT;
1677		break;
1678	case ASM_OP_TNAT_Z_UNC:
1679		asm_cmpltr_add(i, ASM_CC_TREL, ASM_CT_Z);
1680		asm_cmpltr_add(i, ASM_CC_CTYPE, ASM_CT_UNC);
1681		op = ASM_OP_TNAT;
1682		break;
1683	case ASM_OP_UNPACK1_H:
1684		asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_H);
1685		op = ASM_OP_UNPACK1;
1686		break;
1687	case ASM_OP_UNPACK1_L:
1688		asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_L);
1689		op = ASM_OP_UNPACK1;
1690		break;
1691	case ASM_OP_UNPACK2_H:
1692		asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_H);
1693		op = ASM_OP_UNPACK2;
1694		break;
1695	case ASM_OP_UNPACK2_L:
1696		asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_L);
1697		op = ASM_OP_UNPACK2;
1698		break;
1699	case ASM_OP_UNPACK4_H:
1700		asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_H);
1701		op = ASM_OP_UNPACK4;
1702		break;
1703	case ASM_OP_UNPACK4_L:
1704		asm_cmpltr_add(i, ASM_CC_UNPACK, ASM_CT_L);
1705		op = ASM_OP_UNPACK4;
1706		break;
1707	case ASM_OP_XMA_H:
1708		asm_cmpltr_add(i, ASM_CC_XMA, ASM_CT_H);
1709		op = ASM_OP_XMA;
1710		break;
1711	case ASM_OP_XMA_HU:
1712		asm_cmpltr_add(i, ASM_CC_XMA, ASM_CT_HU);
1713		op = ASM_OP_XMA;
1714		break;
1715	case ASM_OP_XMA_L:
1716		asm_cmpltr_add(i, ASM_CC_XMA, ASM_CT_L);
1717		op = ASM_OP_XMA;
1718		break;
1719	default:
1720		KASSERT(op < ASM_OP_NUMBER_OF_OPCODES);
1721		break;
1722	}
1723	i->i_op = op;
1724	return (ot);
1725}
1726
1727static __inline void
1728op_imm(struct asm_inst *i, int op, uint64_t val)
1729{
1730	i->i_oper[op].o_type = ASM_OPER_IMM;
1731	i->i_oper[op].o_value = val;
1732}
1733
1734static __inline void
1735op_type(struct asm_inst *i, int op, enum asm_oper_type ot)
1736{
1737	i->i_oper[op].o_type = ot;
1738}
1739
1740static __inline void
1741op_value(struct asm_inst *i, int op, uint64_t val)
1742{
1743	i->i_oper[op].o_value = val;
1744}
1745
1746static __inline void
1747operand(struct asm_inst *i, int op, enum asm_oper_type ot, uint64_t bits,
1748    int o, int l)
1749{
1750	i->i_oper[op].o_type = ot;
1751	i->i_oper[op].o_value = FIELD(bits, o, l);
1752}
1753
1754static uint64_t
1755imm(uint64_t bits, int sign, int o, int l)
1756{
1757	uint64_t val = FIELD(bits, o, l);
1758
1759	if (sign && (val & (1LL << (l - 1))) != 0)
1760		val |= -1LL << l;
1761	return (val);
1762}
1763
1764static void
1765s_imm(struct asm_inst *i, int op, uint64_t bits, int o, int l)
1766{
1767	i->i_oper[op].o_type = ASM_OPER_IMM;
1768	i->i_oper[op].o_value = imm(bits, 1, o, l);
1769}
1770
1771static void
1772u_imm(struct asm_inst *i, int op, uint64_t bits, int o, int l)
1773{
1774	i->i_oper[op].o_type = ASM_OPER_IMM;
1775	i->i_oper[op].o_value = imm(bits, 0, o, l);
1776}
1777
1778static uint64_t
1779vimm(uint64_t bits, int sign, va_list ap)
1780{
1781	uint64_t val = 0;
1782	int len = 0;
1783	int frag;
1784
1785	while ((frag = va_arg(ap, int)) != 0) {
1786		val |= (uint64_t)FIELD(bits, FRAG_OFS(frag), FRAG_LEN(frag))
1787		    << len;
1788		len += FRAG_LEN(frag);
1789	}
1790	if (sign && (val & (1LL << (len - 1))) != 0)
1791		val |= -1LL << len;
1792	return (val);
1793}
1794
1795static void
1796s_immf(struct asm_inst *i, int op, uint64_t bits, ...)
1797{
1798	va_list ap;
1799	va_start(ap, bits);
1800	i->i_oper[op].o_type = ASM_OPER_IMM;
1801	i->i_oper[op].o_value = vimm(bits, 1, ap);
1802	va_end(ap);
1803}
1804
1805static void
1806u_immf(struct asm_inst *i, int op, uint64_t bits, ...)
1807{
1808	va_list ap;
1809	va_start(ap, bits);
1810	i->i_oper[op].o_type = ASM_OPER_IMM;
1811	i->i_oper[op].o_value = vimm(bits, 0, ap);
1812	va_end(ap);
1813}
1814
1815static void
1816disp(struct asm_inst *i, int op, uint64_t bits, ...)
1817{
1818	va_list ap;
1819	va_start(ap, bits);
1820	i->i_oper[op].o_type = ASM_OPER_DISP;
1821	i->i_oper[op].o_value = vimm(bits, 1, ap) << 4;
1822	va_end(ap);
1823}
1824
1825static __inline void
1826combine(uint64_t *dst, int dl, uint64_t src, int sl, int so)
1827{
1828	*dst = (*dst & ((1LL << dl) - 1LL)) |
1829	    ((uint64_t)_FLD64(src, so, sl) << dl);
1830}
1831
1832int
1833asm_extract(enum asm_op op, enum asm_fmt fmt, uint64_t bits,
1834    struct asm_bundle *b, int slot)
1835{
1836	struct asm_inst *i = b->b_inst + slot;
1837	enum asm_oper_type ot;
1838
1839	KASSERT(op != ASM_OP_NONE);
1840	i->i_bits = bits;
1841	i->i_format = fmt;
1842	i->i_srcidx = 2;
1843
1844	ot = asm_normalize(i, op);
1845
1846	if (fmt != ASM_FMT_B6 && fmt != ASM_FMT_B7)
1847		operand(i, 0, ASM_OPER_PREG, bits, 0, 6);
1848
1849	switch (fmt) {
1850	case ASM_FMT_A1:
1851		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
1852		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
1853		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
1854		if ((op == ASM_OP_ADD && FIELD(bits, 27, 2) == 1) ||
1855		    (op == ASM_OP_SUB && FIELD(bits, 27, 2) == 0))
1856			op_imm(i, 4, 1LL);
1857		break;
1858	case ASM_FMT_A2:
1859		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
1860		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
1861		op_imm(i, 3, 1LL + FIELD(bits, 27, 2));
1862		operand(i, 4, ASM_OPER_GREG, bits, 20, 7);
1863		break;
1864	case ASM_FMT_A3:
1865		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
1866		s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0);
1867		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
1868		break;
1869	case ASM_FMT_A4:
1870		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
1871		s_immf(i, 2, bits, FRAG(13,7), FRAG(27,6), FRAG(36,1), 0);
1872		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
1873		break;
1874	case ASM_FMT_A5:
1875		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
1876		s_immf(i, 2, bits, FRAG(13,7), FRAG(27,9), FRAG(22,5),
1877		    FRAG(36,1), 0);
1878		operand(i, 3, ASM_OPER_GREG, bits, 20, 2);
1879		break;
1880	case ASM_FMT_A6: /* 2 dst */
1881		operand(i, 1, ASM_OPER_PREG, bits, 6, 6);
1882		operand(i, 2, ASM_OPER_PREG, bits, 27, 6);
1883		operand(i, 3, ASM_OPER_GREG, bits, 13, 7);
1884		operand(i, 4, ASM_OPER_GREG, bits, 20, 7);
1885		i->i_srcidx++;
1886		break;
1887	case ASM_FMT_A7: /* 2 dst */
1888		if (FIELD(bits, 13, 7) != 0)
1889			return (0);
1890		operand(i, 1, ASM_OPER_PREG, bits, 6, 6);
1891		operand(i, 2, ASM_OPER_PREG, bits, 27, 6);
1892		operand(i, 3, ASM_OPER_GREG, bits, 13, 7);
1893		operand(i, 4, ASM_OPER_GREG, bits, 20, 7);
1894		i->i_srcidx++;
1895		break;
1896	case ASM_FMT_A8: /* 2 dst */
1897		operand(i, 1, ASM_OPER_PREG, bits, 6, 6);
1898		operand(i, 2, ASM_OPER_PREG, bits, 27, 6);
1899		s_immf(i, 3, bits, FRAG(13,7), FRAG(36,1), 0);
1900		operand(i, 4, ASM_OPER_GREG, bits, 20, 7);
1901		i->i_srcidx++;
1902		break;
1903	case ASM_FMT_A9:
1904		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
1905		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
1906		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
1907		break;
1908	case ASM_FMT_A10:
1909		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
1910		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
1911		op_imm(i, 3, 1LL + FIELD(bits, 27, 2));
1912		operand(i, 4, ASM_OPER_GREG, bits, 20, 7);
1913		break;
1914	case ASM_FMT_B1: /* 0 dst */
1915		asm_brhint(i);
1916		disp(i, 1, bits, FRAG(13,20), FRAG(36,1), 0);
1917		break;
1918	case ASM_FMT_B2: /* 0 dst */
1919		if (FIELD(bits, 0, 6) != 0)
1920			return (0);
1921		asm_brhint(i);
1922		disp(i, 1, bits, FRAG(13,20), FRAG(36,1), 0);
1923		break;
1924	case ASM_FMT_B3:
1925		asm_brhint(i);
1926		operand(i, 1, ASM_OPER_BREG, bits, 6, 3);
1927		disp(i, 2, bits, FRAG(13,20), FRAG(36,1), 0);
1928		break;
1929	case ASM_FMT_B4: /* 0 dst */
1930		asm_brhint(i);
1931		operand(i, 1, ASM_OPER_BREG, bits, 13, 3);
1932		break;
1933	case ASM_FMT_B5:
1934#if 0
1935		if (FIELD(bits, 32, 1) == 0)
1936			return (0);
1937#endif
1938		asm_brhint(i);
1939		operand(i, 1, ASM_OPER_BREG, bits, 6, 3);
1940		operand(i, 2, ASM_OPER_BREG, bits, 13, 3);
1941		break;
1942	case ASM_FMT_B6: /* 0 dst */
1943		asm_brphint(i);
1944		disp(i, 1, bits, FRAG(13,20), FRAG(36,1), 0);
1945		disp(i, 2, bits, FRAG(6,7), FRAG(33,2), 0);
1946		i->i_srcidx--;
1947		break;
1948	case ASM_FMT_B7: /* 0 dst */
1949		asm_brphint(i);
1950		operand(i, 1, ASM_OPER_BREG, bits, 13, 3);
1951		disp(i, 2, bits, FRAG(6,7), FRAG(33,2), 0);
1952		i->i_srcidx--;
1953		break;
1954	case ASM_FMT_B8:
1955		/* no operands */
1956		break;
1957	case ASM_FMT_B9: /* 0 dst */
1958		u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0);
1959		break;
1960	case ASM_FMT_F1:
1961		asm_sf(i);
1962		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
1963		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
1964		operand(i, 3, ASM_OPER_FREG, bits, 20, 7);
1965		operand(i, 4, ASM_OPER_FREG, bits, 27, 7);
1966		break;
1967	case ASM_FMT_F2:
1968		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
1969		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
1970		operand(i, 3, ASM_OPER_FREG, bits, 20, 7);
1971		operand(i, 4, ASM_OPER_FREG, bits, 27, 7);
1972		break;
1973	case ASM_FMT_F3:
1974		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
1975		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
1976		operand(i, 3, ASM_OPER_FREG, bits, 20, 7);
1977		operand(i, 4, ASM_OPER_FREG, bits, 27, 7);
1978		break;
1979	case ASM_FMT_F4: /* 2 dst */
1980		if (FIELD(bits, 33, 1)) { /* ra */
1981			if (FIELD(bits, 36, 1)) /* rb */
1982				asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_UNORD);
1983			else
1984				asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LE);
1985		} else {
1986			if (FIELD(bits, 36, 1)) /* rb */
1987				asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_LT);
1988			else
1989				asm_cmpltr_add(i, ASM_CC_FREL, ASM_CT_EQ);
1990		}
1991		if (FIELD(bits, 12, 1)) /* ta */
1992			asm_cmpltr_add(i, ASM_CC_FCTYPE, ASM_CT_UNC);
1993		else
1994			asm_cmpltr_add(i, ASM_CC_FCTYPE, ASM_CT_NONE);
1995		asm_sf(i);
1996		operand(i, 1, ASM_OPER_PREG, bits, 6, 6);
1997		operand(i, 2, ASM_OPER_PREG, bits, 27, 6);
1998		operand(i, 3, ASM_OPER_FREG, bits, 13, 7);
1999		operand(i, 4, ASM_OPER_FREG, bits, 20, 7);
2000		i->i_srcidx++;
2001		break;
2002	case ASM_FMT_F5: /* 2 dst */
2003		operand(i, 1, ASM_OPER_PREG, bits, 6, 6);
2004		operand(i, 2, ASM_OPER_PREG, bits, 27, 6);
2005		operand(i, 3, ASM_OPER_FREG, bits, 13, 7);
2006		u_immf(i, 4, bits, FRAG(33,2), FRAG(20,7), 0);
2007		i->i_srcidx++;
2008		break;
2009	case ASM_FMT_F6: /* 2 dst */
2010		asm_sf(i);
2011		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2012		operand(i, 2, ASM_OPER_PREG, bits, 27, 6);
2013		operand(i, 3, ASM_OPER_FREG, bits, 13, 7);
2014		operand(i, 4, ASM_OPER_FREG, bits, 20, 7);
2015		i->i_srcidx++;
2016		break;
2017	case ASM_FMT_F7: /* 2 dst */
2018		asm_sf(i);
2019		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2020		operand(i, 2, ASM_OPER_PREG, bits, 27, 6);
2021		operand(i, 3, ASM_OPER_FREG, bits, 20, 7);
2022		i->i_srcidx++;
2023		break;
2024	case ASM_FMT_F8:
2025		asm_sf(i);
2026		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2027		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
2028		operand(i, 3, ASM_OPER_FREG, bits, 20, 7);
2029		break;
2030	case ASM_FMT_F9:
2031		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2032		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
2033		operand(i, 3, ASM_OPER_FREG, bits, 20, 7);
2034		break;
2035	case ASM_FMT_F10:
2036		asm_sf(i);
2037		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2038		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
2039		break;
2040	case ASM_FMT_F11:
2041		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2042		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
2043		break;
2044	case ASM_FMT_F12: /* 0 dst */
2045		asm_sf(i);
2046		u_imm(i, 1, bits, 13, 7);
2047		u_imm(i, 2, bits, 20, 7);
2048		i->i_srcidx--;
2049		break;
2050	case ASM_FMT_F13:
2051		asm_sf(i);
2052		/* no operands */
2053		break;
2054	case ASM_FMT_F14: /* 0 dst */
2055		asm_sf(i);
2056		disp(i, 1, bits, FRAG(6,20), FRAG(36,1), 0);
2057		break;
2058	case ASM_FMT_F15: /* 0 dst */
2059		u_imm(i, 1, bits, 6, 20);
2060		break;
2061	case ASM_FMT_I1:
2062		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2063		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2064		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
2065		switch (FIELD(bits, 30, 2)) {
2066		case 0:	op_imm(i, 4, 0LL); break;
2067		case 1: op_imm(i, 4, 7LL); break;
2068		case 2: op_imm(i, 4, 15LL); break;
2069		case 3: op_imm(i, 4, 16LL); break;
2070		}
2071		break;
2072	case ASM_FMT_I2:
2073		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2074		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2075		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
2076		break;
2077	case ASM_FMT_I3:
2078		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2079		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2080		u_imm(i, 3, bits, 20, 4);
2081		break;
2082	case ASM_FMT_I4:
2083		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2084		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2085		u_imm(i, 3, bits, 20, 8);
2086		break;
2087	case ASM_FMT_I5:
2088		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2089		operand(i, 2, ASM_OPER_GREG, bits, 20, 7);
2090		operand(i, 3, ASM_OPER_GREG, bits, 13, 7);
2091		break;
2092	case ASM_FMT_I6:
2093		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2094		operand(i, 2, ASM_OPER_GREG, bits, 20, 7);
2095		u_imm(i, 3, bits, 14, 5);
2096		break;
2097	case ASM_FMT_I7:
2098		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2099		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2100		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
2101		break;
2102	case ASM_FMT_I8:
2103		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2104		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2105		op_imm(i, 3, 31LL - FIELD(bits, 20, 5));
2106		break;
2107	case ASM_FMT_I9:
2108		if (FIELD(bits, 13, 7) != 0)
2109			return (0);
2110		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2111		operand(i, 2, ASM_OPER_GREG, bits, 20, 7);
2112		break;
2113	case ASM_FMT_I10:
2114		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2115		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2116		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
2117		u_imm(i, 4, bits, 27, 6);
2118		break;
2119	case ASM_FMT_I11:
2120		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2121		operand(i, 2, ASM_OPER_GREG, bits, 20, 7);
2122		u_imm(i, 3, bits, 14, 6);
2123		op_imm(i, 4, 1LL + FIELD(bits, 27, 6));
2124		break;
2125	case ASM_FMT_I12:
2126		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2127		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2128		op_imm(i, 3, 63LL - FIELD(bits, 20, 6));
2129		op_imm(i, 4, 1LL + FIELD(bits, 27, 6));
2130		break;
2131	case ASM_FMT_I13:
2132		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2133		s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0);
2134		op_imm(i, 3, 63LL - FIELD(bits, 20, 6));
2135		op_imm(i, 4, 1LL + FIELD(bits, 27, 6));
2136		break;
2137	case ASM_FMT_I14:
2138		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2139		s_imm(i, 2, bits, 36, 1);
2140		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
2141		op_imm(i, 4, 63LL - FIELD(bits, 14, 6));
2142		op_imm(i, 5, 1LL + FIELD(bits, 27, 6));
2143		break;
2144	case ASM_FMT_I15:
2145		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2146		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2147		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
2148		op_imm(i, 4, 63LL - FIELD(bits, 31, 6));
2149		op_imm(i, 5, 1LL + FIELD(bits, 27, 4));
2150		break;
2151	case ASM_FMT_I16: /* 2 dst */
2152		operand(i, 1, ASM_OPER_PREG, bits, 6, 6);
2153		operand(i, 2, ASM_OPER_PREG, bits, 27, 6);
2154		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
2155		u_imm(i, 4, bits, 14, 6);
2156		i->i_srcidx++;
2157		break;
2158	case ASM_FMT_I17: /* 2 dst */
2159		operand(i, 1, ASM_OPER_PREG, bits, 6, 6);
2160		operand(i, 2, ASM_OPER_PREG, bits, 27, 6);
2161		operand(i, 3, ASM_OPER_GREG, bits, 20, 7);
2162		i->i_srcidx++;
2163		break;
2164	case ASM_FMT_I19:
2165		u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0);
2166		break;
2167	case ASM_FMT_I20: /* 0 dst */
2168		operand(i, 1, ASM_OPER_GREG, bits, 13, 7);
2169		disp(i, 2, bits, FRAG(6,7), FRAG(20,13), FRAG(36,1), 0);
2170		i->i_srcidx--;
2171		break;
2172	case ASM_FMT_I21:
2173		switch (FIELD(bits, 20, 2)) { /* wh */
2174		case 0:	asm_cmpltr_add(i, ASM_CC_MWH, ASM_CT_SPTK); break;
2175		case 1:	asm_cmpltr_add(i, ASM_CC_MWH, ASM_CT_NONE); break;
2176		case 2:	asm_cmpltr_add(i, ASM_CC_MWH, ASM_CT_DPTK); break;
2177		case 3:	return (0);
2178		}
2179		if (FIELD(bits, 23, 1)) /* ih */
2180			asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_IMP);
2181		else
2182			asm_cmpltr_add(i, ASM_CC_IH, ASM_CT_NONE);
2183		operand(i, 1, ASM_OPER_BREG, bits, 6, 3);
2184		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2185		disp(i, 3, bits, FRAG(24,9), 0);
2186		break;
2187	case ASM_FMT_I22:
2188		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2189		operand(i, 2, ASM_OPER_BREG, bits, 13, 3);
2190		break;
2191	case ASM_FMT_I23:
2192		op_type(i, 1, ASM_OPER_PR);
2193		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2194		u_immf(i, 3, bits, FRAG(6,7), FRAG(24,8), FRAG(36,1), 0);
2195		i->i_oper[3].o_value <<= 1;
2196		break;
2197	case ASM_FMT_I24:
2198		op_type(i, 1, ASM_OPER_PR_ROT);
2199		s_immf(i, 2, bits, FRAG(6,27), FRAG(36,1), 0);
2200		break;
2201	case ASM_FMT_I25:
2202		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2203		op_type(i, 2, ot);
2204		break;
2205	case ASM_FMT_I26:
2206		operand(i, 1, ASM_OPER_AREG, bits, 20, 7);
2207		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2208		break;
2209	case ASM_FMT_I27:
2210		operand(i, 1, ASM_OPER_AREG, bits, 20, 7);
2211		s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0);
2212		break;
2213	case ASM_FMT_I28:
2214		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2215		operand(i, 2, ASM_OPER_AREG, bits, 20, 7);
2216		break;
2217	case ASM_FMT_I29:
2218		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2219		operand(i, 2, ASM_OPER_GREG, bits, 20, 7);
2220		break;
2221	case ASM_FMT_M1:
2222		asm_hint(i, ASM_CC_LDHINT);
2223		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2224		if (i->i_op == ASM_OP_LD16) {
2225			op_type(i, 2, ASM_OPER_AREG);
2226			op_value(i, 2, AR_CSD);
2227			i->i_srcidx++;
2228		}
2229		operand(i, i->i_srcidx, ASM_OPER_MEM, bits, 20, 7);
2230		break;
2231	case ASM_FMT_M2:
2232		asm_hint(i, ASM_CC_LDHINT);
2233		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2234		operand(i, 2, ASM_OPER_MEM, bits, 20, 7);
2235		operand(i, 3, ASM_OPER_GREG, bits, 13, 7);
2236		break;
2237	case ASM_FMT_M3:
2238		asm_hint(i, ASM_CC_LDHINT);
2239		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2240		operand(i, 2, ASM_OPER_MEM, bits, 20, 7);
2241		s_immf(i, 3, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0);
2242		break;
2243	case ASM_FMT_M4:
2244		asm_hint(i, ASM_CC_STHINT);
2245		operand(i, 1, ASM_OPER_MEM, bits, 20, 7);
2246		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2247		if (i->i_op == ASM_OP_ST16) {
2248			op_type(i, 3, ASM_OPER_AREG);
2249			op_value(i, 3, AR_CSD);
2250		}
2251		break;
2252	case ASM_FMT_M5:
2253		asm_hint(i, ASM_CC_STHINT);
2254		operand(i, 1, ASM_OPER_MEM, bits, 20, 7);
2255		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2256		s_immf(i, 3, bits, FRAG(6,7), FRAG(27,1), FRAG(36,1), 0);
2257		break;
2258	case ASM_FMT_M6:
2259		asm_hint(i, ASM_CC_LDHINT);
2260		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2261		operand(i, 2, ASM_OPER_MEM, bits, 20, 7);
2262		break;
2263	case ASM_FMT_M7:
2264		asm_hint(i, ASM_CC_LDHINT);
2265		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2266		operand(i, 2, ASM_OPER_MEM, bits, 20, 7);
2267		operand(i, 3, ASM_OPER_GREG, bits, 13, 7);
2268		break;
2269	case ASM_FMT_M8:
2270		asm_hint(i, ASM_CC_LDHINT);
2271		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2272		operand(i, 2, ASM_OPER_MEM, bits, 20, 7);
2273		s_immf(i, 3, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0);
2274		break;
2275	case ASM_FMT_M9:
2276		asm_hint(i, ASM_CC_STHINT);
2277		operand(i, 1, ASM_OPER_MEM, bits, 20, 7);
2278		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
2279		break;
2280	case ASM_FMT_M10:
2281		asm_hint(i, ASM_CC_STHINT);
2282		operand(i, 1, ASM_OPER_MEM, bits, 20, 7);
2283		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
2284		s_immf(i, 3, bits, FRAG(6,7), FRAG(27,1), FRAG(36,1), 0);
2285		break;
2286	case ASM_FMT_M11: /* 2 dst */
2287		asm_hint(i, ASM_CC_LDHINT);
2288		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2289		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
2290		operand(i, 3, ASM_OPER_MEM, bits, 20, 7);
2291		i->i_srcidx++;
2292		break;
2293	case ASM_FMT_M12: /* 2 dst */
2294		asm_hint(i, ASM_CC_LDHINT);
2295		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2296		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
2297		operand(i, 3, ASM_OPER_MEM, bits, 20, 7);
2298		op_imm(i, 4, 8LL << FIELD(bits, 30, 1));
2299		i->i_srcidx++;
2300		break;
2301	case ASM_FMT_M13:
2302		asm_hint(i, ASM_CC_LFHINT);
2303		operand(i, 1, ASM_OPER_MEM, bits, 20, 7);
2304		break;
2305	case ASM_FMT_M14: /* 0 dst */
2306		asm_hint(i, ASM_CC_LFHINT);
2307		operand(i, 1, ASM_OPER_MEM, bits, 20, 7);
2308		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2309		i->i_srcidx--;
2310		break;
2311	case ASM_FMT_M15: /* 0 dst */
2312		asm_hint(i, ASM_CC_LFHINT);
2313		operand(i, 1, ASM_OPER_MEM, bits, 20, 7);
2314		s_immf(i, 2, bits, FRAG(13,7), FRAG(27,1), FRAG(36,1), 0);
2315		i->i_srcidx--;
2316		break;
2317	case ASM_FMT_M16: {
2318		int oper;
2319		asm_hint(i, ASM_CC_LDHINT);
2320		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2321		operand(i, 2, ASM_OPER_MEM, bits, 20, 7);
2322		operand(i, 3, ASM_OPER_GREG, bits, 13, 7);
2323		if (i->i_op == ASM_OP_CMP8XCHG16) {
2324			op_type(i, 4, ASM_OPER_AREG);
2325			op_value(i, 4, AR_CSD);
2326			oper = 5;
2327		} else
2328			oper = 4;
2329		if (FIELD(bits, 30, 6) < 8) {
2330			op_type(i, oper, ASM_OPER_AREG);
2331			op_value(i, oper, AR_CCV);
2332		}
2333		break;
2334	}
2335	case ASM_FMT_M17:
2336		asm_hint(i, ASM_CC_LDHINT);
2337		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2338		operand(i, 2, ASM_OPER_MEM, bits, 20, 7);
2339		switch (FIELD(bits, 13, 2)) {
2340		case 0: op_imm(i, 3, 1LL << 4); break;
2341		case 1: op_imm(i, 3, 1LL << 3); break;
2342		case 2:	op_imm(i, 3, 1LL << 2); break;
2343		case 3: op_imm(i, 3, 1LL); break;
2344		}
2345		if (FIELD(bits, 15, 1))
2346			i->i_oper[3].o_value *= -1LL;
2347		break;
2348	case ASM_FMT_M18:
2349		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2350		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2351		break;
2352	case ASM_FMT_M19:
2353		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2354		operand(i, 2, ASM_OPER_FREG, bits, 13, 7);
2355		break;
2356	case ASM_FMT_M20: /* 0 dst */
2357		operand(i, 1, ASM_OPER_GREG, bits, 13, 7);
2358		disp(i, 2, bits, FRAG(6,7), FRAG(20,13), FRAG(36,1), 0);
2359		i->i_srcidx--;
2360		break;
2361	case ASM_FMT_M21: /* 0 dst */
2362		operand(i, 1, ASM_OPER_FREG, bits, 13, 7);
2363		disp(i, 2, bits, FRAG(6,7), FRAG(20,13), FRAG(36,1), 0);
2364		i->i_srcidx--;
2365		break;
2366	case ASM_FMT_M22: /* 0 dst */
2367		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2368		disp(i, 2, bits, FRAG(13,20), FRAG(36,1), 0);
2369		i->i_srcidx--;
2370		break;
2371	case ASM_FMT_M23: /* 0 dst */
2372		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2373		disp(i, 2, bits, FRAG(13,20), FRAG(36,1), 0);
2374		i->i_srcidx--;
2375		break;
2376	case ASM_FMT_M24:
2377		/* no operands */
2378		break;
2379	case ASM_FMT_M25:
2380		if (FIELD(bits, 0, 6) != 0)
2381			return (0);
2382		/* no operands */
2383		break;
2384	case ASM_FMT_M26:
2385		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2386		break;
2387	case ASM_FMT_M27:
2388		operand(i, 1, ASM_OPER_FREG, bits, 6, 7);
2389		break;
2390	case ASM_FMT_M28:
2391		operand(i, 1, ASM_OPER_GREG, bits, 20, 7);
2392		break;
2393	case ASM_FMT_M29:
2394		operand(i, 1, ASM_OPER_AREG, bits, 20, 7);
2395		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2396		break;
2397	case ASM_FMT_M30:
2398		operand(i, 1, ASM_OPER_AREG, bits, 20, 7);
2399		s_immf(i, 2, bits, FRAG(13,7), FRAG(36,1), 0);
2400		break;
2401	case ASM_FMT_M31:
2402		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2403		operand(i, 2, ASM_OPER_AREG, bits, 20, 7);
2404		break;
2405	case ASM_FMT_M32:
2406		operand(i, 1, ASM_OPER_CREG, bits, 20, 7);
2407		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2408		break;
2409	case ASM_FMT_M33:
2410		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2411		operand(i, 2, ASM_OPER_CREG, bits, 20, 7);
2412		break;
2413	case ASM_FMT_M34: {
2414		uint64_t loc, out;
2415		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2416		op_type(i, 2, ASM_OPER_AREG);
2417		op_value(i, 2, AR_PFS);
2418		loc = FIELD(bits, 20, 7);
2419		out = FIELD(bits, 13, 7) - loc;
2420		op_imm(i, 3, 0);
2421		op_imm(i, 4, loc);
2422		op_imm(i, 5, out);
2423		op_imm(i, 6, (uint64_t)FIELD(bits, 27, 4) << 3);
2424		break;
2425	}
2426	case ASM_FMT_M35:
2427		if (FIELD(bits, 27, 6) == 0x2D)
2428			op_type(i, 1, ASM_OPER_PSR_L);
2429		else
2430			op_type(i, 1, ASM_OPER_PSR_UM);
2431		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2432		break;
2433	case ASM_FMT_M36:
2434		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2435		if (FIELD(bits, 27, 6) == 0x25)
2436			op_type(i, 2, ASM_OPER_PSR);
2437		else
2438			op_type(i, 2, ASM_OPER_PSR_UM);
2439		break;
2440	case ASM_FMT_M37:
2441		u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0);
2442		break;
2443	case ASM_FMT_M38:
2444		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2445		operand(i, 2, ASM_OPER_GREG, bits, 20, 7);
2446		operand(i, 3, ASM_OPER_GREG, bits, 13, 7);
2447		break;
2448	case ASM_FMT_M39:
2449		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2450		operand(i, 2, ASM_OPER_GREG, bits, 20, 7);
2451		u_imm(i, 3, bits, 13, 2);
2452		break;
2453	case ASM_FMT_M40: /* 0 dst */
2454		operand(i, 1, ASM_OPER_GREG, bits, 20, 7);
2455		u_imm(i, 2, bits, 13, 2);
2456		i->i_srcidx--;
2457		break;
2458	case ASM_FMT_M41:
2459		operand(i, 1, ASM_OPER_GREG, bits, 13, 7);
2460		break;
2461	case ASM_FMT_M42:
2462		operand(i, 1, ot, bits, 20, 7);
2463		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2464		break;
2465	case ASM_FMT_M43:
2466		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2467		operand(i, 2, ot, bits, 20, 7);
2468		break;
2469	case ASM_FMT_M44:
2470		u_immf(i, 1, bits, FRAG(6,21), FRAG(31,2), FRAG(36,1), 0);
2471		break;
2472	case ASM_FMT_M45: /* 0 dst */
2473		operand(i, 1, ASM_OPER_GREG, bits, 20, 7);
2474		operand(i, 2, ASM_OPER_GREG, bits, 13, 7);
2475		i->i_srcidx--;
2476		break;
2477	case ASM_FMT_M46:
2478		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2479		operand(i, 2, ASM_OPER_GREG, bits, 20, 7);
2480		break;
2481	case ASM_FMT_X1:
2482		KASSERT(slot == 2);
2483		u_immf(i, 1, bits, FRAG(6,20), FRAG(36,1), 0);
2484		combine(&i->i_oper[1].o_value, 21, b->b_inst[1].i_bits, 41, 0);
2485		break;
2486	case ASM_FMT_X2:
2487		KASSERT(slot == 2);
2488		operand(i, 1, ASM_OPER_GREG, bits, 6, 7);
2489		u_immf(i, 2, bits, FRAG(13,7), FRAG(27,9), FRAG(22,5),
2490		    FRAG(21,1), 0);
2491		combine(&i->i_oper[2].o_value, 22, b->b_inst[1].i_bits, 41, 0);
2492		combine(&i->i_oper[2].o_value, 63, bits, 1, 36);
2493		break;
2494	case ASM_FMT_X3:
2495		KASSERT(slot == 2);
2496		asm_brhint(i);
2497		u_imm(i, 1, bits, 13, 20);
2498		combine(&i->i_oper[1].o_value, 20, b->b_inst[1].i_bits, 39, 2);
2499		combine(&i->i_oper[1].o_value, 59, bits, 1, 36);
2500		i->i_oper[1].o_value <<= 4;
2501		i->i_oper[1].o_type = ASM_OPER_DISP;
2502		break;
2503	case ASM_FMT_X4:
2504		KASSERT(slot == 2);
2505		asm_brhint(i);
2506		operand(i, 1, ASM_OPER_BREG, bits, 6, 3);
2507		u_imm(i, 2, bits, 13, 20);
2508		combine(&i->i_oper[2].o_value, 20, b->b_inst[1].i_bits, 39, 2);
2509		combine(&i->i_oper[2].o_value, 59, bits, 1, 36);
2510		i->i_oper[2].o_value <<= 4;
2511		i->i_oper[2].o_type = ASM_OPER_DISP;
2512		break;
2513	default:
2514		KASSERT(fmt == ASM_FMT_NONE);
2515		return (0);
2516	}
2517
2518	return (1);
2519}
2520