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