1 /* Capstone Disassembly Engine */
2 /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2014 */
3 
4 #ifdef CAPSTONE_HAS_SPARC
5 
6 #include <stdio.h>	// debug
7 #include <string.h>
8 
9 #include "../../utils.h"
10 
11 #include "SparcMapping.h"
12 
13 #define GET_INSTRINFO_ENUM
14 #include "SparcGenInstrInfo.inc"
15 
16 #ifndef CAPSTONE_DIET
17 static name_map reg_name_maps[] = {
18 	{ SPARC_REG_INVALID, NULL },
19 
20 	{ SPARC_REG_F0, "f0"},
21 	{ SPARC_REG_F1, "f1"},
22 	{ SPARC_REG_F2, "f2"},
23 	{ SPARC_REG_F3, "f3"},
24 	{ SPARC_REG_F4, "f4"},
25 	{ SPARC_REG_F5, "f5"},
26 	{ SPARC_REG_F6, "f6"},
27 	{ SPARC_REG_F7, "f7"},
28 	{ SPARC_REG_F8, "f8"},
29 	{ SPARC_REG_F9, "f9"},
30 	{ SPARC_REG_F10, "f10"},
31 	{ SPARC_REG_F11, "f11"},
32 	{ SPARC_REG_F12, "f12"},
33 	{ SPARC_REG_F13, "f13"},
34 	{ SPARC_REG_F14, "f14"},
35 	{ SPARC_REG_F15, "f15"},
36 	{ SPARC_REG_F16, "f16"},
37 	{ SPARC_REG_F17, "f17"},
38 	{ SPARC_REG_F18, "f18"},
39 	{ SPARC_REG_F19, "f19"},
40 	{ SPARC_REG_F20, "f20"},
41 	{ SPARC_REG_F21, "f21"},
42 	{ SPARC_REG_F22, "f22"},
43 	{ SPARC_REG_F23, "f23"},
44 	{ SPARC_REG_F24, "f24"},
45 	{ SPARC_REG_F25, "f25"},
46 	{ SPARC_REG_F26, "f26"},
47 	{ SPARC_REG_F27, "f27"},
48 	{ SPARC_REG_F28, "f28"},
49 	{ SPARC_REG_F29, "f29"},
50 	{ SPARC_REG_F30, "f30"},
51 	{ SPARC_REG_F31, "f31"},
52 	{ SPARC_REG_F32, "f32"},
53 	{ SPARC_REG_F34, "f34"},
54 	{ SPARC_REG_F36, "f36"},
55 	{ SPARC_REG_F38, "f38"},
56 	{ SPARC_REG_F40, "f40"},
57 	{ SPARC_REG_F42, "f42"},
58 	{ SPARC_REG_F44, "f44"},
59 	{ SPARC_REG_F46, "f46"},
60 	{ SPARC_REG_F48, "f48"},
61 	{ SPARC_REG_F50, "f50"},
62 	{ SPARC_REG_F52, "f52"},
63 	{ SPARC_REG_F54, "f54"},
64 	{ SPARC_REG_F56, "f56"},
65 	{ SPARC_REG_F58, "f58"},
66 	{ SPARC_REG_F60, "f60"},
67 	{ SPARC_REG_F62, "f62"},
68 	{ SPARC_REG_FCC0, "fcc0"},
69 	{ SPARC_REG_FCC1, "fcc1"},
70 	{ SPARC_REG_FCC2, "fcc2"},
71 	{ SPARC_REG_FCC3, "fcc3"},
72 	{ SPARC_REG_FP, "fp"},
73 	{ SPARC_REG_G0, "g0"},
74 	{ SPARC_REG_G1, "g1"},
75 	{ SPARC_REG_G2, "g2"},
76 	{ SPARC_REG_G3, "g3"},
77 	{ SPARC_REG_G4, "g4"},
78 	{ SPARC_REG_G5, "g5"},
79 	{ SPARC_REG_G6, "g6"},
80 	{ SPARC_REG_G7, "g7"},
81 	{ SPARC_REG_I0, "i0"},
82 	{ SPARC_REG_I1, "i1"},
83 	{ SPARC_REG_I2, "i2"},
84 	{ SPARC_REG_I3, "i3"},
85 	{ SPARC_REG_I4, "i4"},
86 	{ SPARC_REG_I5, "i5"},
87 	{ SPARC_REG_I7, "i7"},
88 	{ SPARC_REG_ICC, "icc"},
89 	{ SPARC_REG_L0, "l0"},
90 	{ SPARC_REG_L1, "l1"},
91 	{ SPARC_REG_L2, "l2"},
92 	{ SPARC_REG_L3, "l3"},
93 	{ SPARC_REG_L4, "l4"},
94 	{ SPARC_REG_L5, "l5"},
95 	{ SPARC_REG_L6, "l6"},
96 	{ SPARC_REG_L7, "l7"},
97 	{ SPARC_REG_O0, "o0"},
98 	{ SPARC_REG_O1, "o1"},
99 	{ SPARC_REG_O2, "o2"},
100 	{ SPARC_REG_O3, "o3"},
101 	{ SPARC_REG_O4, "o4"},
102 	{ SPARC_REG_O5, "o5"},
103 	{ SPARC_REG_O7, "o7"},
104 	{ SPARC_REG_SP, "sp"},
105 	{ SPARC_REG_Y, "y"},
106 
107 	// special registers
108 	{ SPARC_REG_XCC, "xcc"},
109 };
110 #endif
111 
Sparc_reg_name(csh handle,unsigned int reg)112 const char *Sparc_reg_name(csh handle, unsigned int reg)
113 {
114 #ifndef CAPSTONE_DIET
115 	if (reg >= SPARC_REG_ENDING)
116 		return NULL;
117 
118 	return reg_name_maps[reg].name;
119 #else
120 	return NULL;
121 #endif
122 }
123 
124 static insn_map insns[] = {
125 	// dummy item
126 	{
127 		0, 0,
128 #ifndef CAPSTONE_DIET
129 		{ 0 }, { 0 }, { 0 }, 0, 0
130 #endif
131 	},
132 
133 	{
134 		SP_ADDCCri, SPARC_INS_ADDCC,
135 #ifndef CAPSTONE_DIET
136 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
137 #endif
138 	},
139 	{
140 		SP_ADDCCrr, SPARC_INS_ADDCC,
141 #ifndef CAPSTONE_DIET
142 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
143 #endif
144 	},
145 	{
146 		SP_ADDCri, SPARC_INS_ADDX,
147 #ifndef CAPSTONE_DIET
148 		{ SPARC_REG_ICC, 0 }, { 0 }, { 0 }, 0, 0
149 #endif
150 	},
151 	{
152 		SP_ADDCrr, SPARC_INS_ADDX,
153 #ifndef CAPSTONE_DIET
154 		{ SPARC_REG_ICC, 0 }, { 0 }, { 0 }, 0, 0
155 #endif
156 	},
157 	{
158 		SP_ADDEri, SPARC_INS_ADDXCC,
159 #ifndef CAPSTONE_DIET
160 		{ SPARC_REG_ICC, 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
161 #endif
162 	},
163 	{
164 		SP_ADDErr, SPARC_INS_ADDXCC,
165 #ifndef CAPSTONE_DIET
166 		{ SPARC_REG_ICC, 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
167 #endif
168 	},
169 	{
170 		SP_ADDXC, SPARC_INS_ADDXC,
171 #ifndef CAPSTONE_DIET
172 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
173 #endif
174 	},
175 	{
176 		SP_ADDXCCC, SPARC_INS_ADDXCCC,
177 #ifndef CAPSTONE_DIET
178 		{ SPARC_REG_ICC, 0 }, { SPARC_REG_ICC, 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
179 #endif
180 	},
181 	{
182 		SP_ADDXri, SPARC_INS_ADD,
183 #ifndef CAPSTONE_DIET
184 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
185 #endif
186 	},
187 	{
188 		SP_ADDXrr, SPARC_INS_ADD,
189 #ifndef CAPSTONE_DIET
190 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
191 #endif
192 	},
193 	{
194 		SP_ADDri, SPARC_INS_ADD,
195 #ifndef CAPSTONE_DIET
196 		{ 0 }, { 0 }, { 0 }, 0, 0
197 #endif
198 	},
199 	{
200 		SP_ADDrr, SPARC_INS_ADD,
201 #ifndef CAPSTONE_DIET
202 		{ 0 }, { 0 }, { 0 }, 0, 0
203 #endif
204 	},
205 	{
206 		SP_ALIGNADDR, SPARC_INS_ALIGNADDR,
207 #ifndef CAPSTONE_DIET
208 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
209 #endif
210 	},
211 	{
212 		SP_ALIGNADDRL, SPARC_INS_ALIGNADDRL,
213 #ifndef CAPSTONE_DIET
214 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
215 #endif
216 	},
217 	{
218 		SP_ANDCCri, SPARC_INS_ANDCC,
219 #ifndef CAPSTONE_DIET
220 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
221 #endif
222 	},
223 	{
224 		SP_ANDCCrr, SPARC_INS_ANDCC,
225 #ifndef CAPSTONE_DIET
226 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
227 #endif
228 	},
229 	{
230 		SP_ANDNCCri, SPARC_INS_ANDNCC,
231 #ifndef CAPSTONE_DIET
232 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
233 #endif
234 	},
235 	{
236 		SP_ANDNCCrr, SPARC_INS_ANDNCC,
237 #ifndef CAPSTONE_DIET
238 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
239 #endif
240 	},
241 	{
242 		SP_ANDNri, SPARC_INS_ANDN,
243 #ifndef CAPSTONE_DIET
244 		{ 0 }, { 0 }, { 0 }, 0, 0
245 #endif
246 	},
247 	{
248 		SP_ANDNrr, SPARC_INS_ANDN,
249 #ifndef CAPSTONE_DIET
250 		{ 0 }, { 0 }, { 0 }, 0, 0
251 #endif
252 	},
253 	{
254 		SP_ANDXNrr, SPARC_INS_ANDN,
255 #ifndef CAPSTONE_DIET
256 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
257 #endif
258 	},
259 	{
260 		SP_ANDXri, SPARC_INS_AND,
261 #ifndef CAPSTONE_DIET
262 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
263 #endif
264 	},
265 	{
266 		SP_ANDXrr, SPARC_INS_AND,
267 #ifndef CAPSTONE_DIET
268 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
269 #endif
270 	},
271 	{
272 		SP_ANDri, SPARC_INS_AND,
273 #ifndef CAPSTONE_DIET
274 		{ 0 }, { 0 }, { 0 }, 0, 0
275 #endif
276 	},
277 	{
278 		SP_ANDrr, SPARC_INS_AND,
279 #ifndef CAPSTONE_DIET
280 		{ 0 }, { 0 }, { 0 }, 0, 0
281 #endif
282 	},
283 	{
284 		SP_ARRAY16, SPARC_INS_ARRAY16,
285 #ifndef CAPSTONE_DIET
286 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
287 #endif
288 	},
289 	{
290 		SP_ARRAY32, SPARC_INS_ARRAY32,
291 #ifndef CAPSTONE_DIET
292 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
293 #endif
294 	},
295 	{
296 		SP_ARRAY8, SPARC_INS_ARRAY8,
297 #ifndef CAPSTONE_DIET
298 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
299 #endif
300 	},
301 	{
302 		SP_BA, SPARC_INS_B,
303 #ifndef CAPSTONE_DIET
304 		{ 0 }, { 0 }, { 0 }, 1, 0
305 #endif
306 	},
307 	{
308 		SP_BCOND, SPARC_INS_B,
309 #ifndef CAPSTONE_DIET
310 		{ SPARC_REG_ICC, 0 }, { 0 }, { 0 }, 1, 0
311 #endif
312 	},
313 	{
314 		SP_BCONDA, SPARC_INS_B,
315 #ifndef CAPSTONE_DIET
316 		{ SPARC_REG_ICC, 0 }, { 0 }, { 0 }, 1, 0
317 #endif
318 	},
319 	{
320 		SP_BINDri, SPARC_INS_JMP,
321 #ifndef CAPSTONE_DIET
322 		{ 0 }, { 0 }, { 0 }, 1, 1
323 #endif
324 	},
325 	{
326 		SP_BINDrr, SPARC_INS_JMP,
327 #ifndef CAPSTONE_DIET
328 		{ 0 }, { 0 }, { 0 }, 1, 1
329 #endif
330 	},
331 	{
332 		SP_BMASK, SPARC_INS_BMASK,
333 #ifndef CAPSTONE_DIET
334 		{ 0 }, { 0 }, { SPARC_GRP_VIS2, 0 }, 0, 0
335 #endif
336 	},
337 	{
338 		SP_BPFCC, SPARC_INS_FB,
339 #ifndef CAPSTONE_DIET
340 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 1, 0
341 #endif
342 	},
343 	{
344 		SP_BPFCCA, SPARC_INS_FB,
345 #ifndef CAPSTONE_DIET
346 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 1, 0
347 #endif
348 	},
349 	{
350 		SP_BPFCCANT, SPARC_INS_FB,
351 #ifndef CAPSTONE_DIET
352 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 1, 0
353 #endif
354 	},
355 	{
356 		SP_BPFCCNT, SPARC_INS_FB,
357 #ifndef CAPSTONE_DIET
358 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 1, 0
359 #endif
360 	},
361 	{
362 		SP_BPGEZapn, SPARC_INS_BRGEZ,
363 #ifndef CAPSTONE_DIET
364 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
365 #endif
366 	},
367 	{
368 		SP_BPGEZapt, SPARC_INS_BRGEZ,
369 #ifndef CAPSTONE_DIET
370 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
371 #endif
372 	},
373 	{
374 		SP_BPGEZnapn, SPARC_INS_BRGEZ,
375 #ifndef CAPSTONE_DIET
376 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
377 #endif
378 	},
379 	{
380 		SP_BPGEZnapt, SPARC_INS_BRGEZ,
381 #ifndef CAPSTONE_DIET
382 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
383 #endif
384 	},
385 	{
386 		SP_BPGZapn, SPARC_INS_BRGZ,
387 #ifndef CAPSTONE_DIET
388 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
389 #endif
390 	},
391 	{
392 		SP_BPGZapt, SPARC_INS_BRGZ,
393 #ifndef CAPSTONE_DIET
394 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
395 #endif
396 	},
397 	{
398 		SP_BPGZnapn, SPARC_INS_BRGZ,
399 #ifndef CAPSTONE_DIET
400 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
401 #endif
402 	},
403 	{
404 		SP_BPGZnapt, SPARC_INS_BRGZ,
405 #ifndef CAPSTONE_DIET
406 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
407 #endif
408 	},
409 	{
410 		SP_BPICC, SPARC_INS_B,
411 #ifndef CAPSTONE_DIET
412 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 1, 0
413 #endif
414 	},
415 	{
416 		SP_BPICCA, SPARC_INS_B,
417 #ifndef CAPSTONE_DIET
418 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 1, 0
419 #endif
420 	},
421 	{
422 		SP_BPICCANT, SPARC_INS_B,
423 #ifndef CAPSTONE_DIET
424 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 1, 0
425 #endif
426 	},
427 	{
428 		SP_BPICCNT, SPARC_INS_B,
429 #ifndef CAPSTONE_DIET
430 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 1, 0
431 #endif
432 	},
433 	{
434 		SP_BPLEZapn, SPARC_INS_BRLEZ,
435 #ifndef CAPSTONE_DIET
436 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
437 #endif
438 	},
439 	{
440 		SP_BPLEZapt, SPARC_INS_BRLEZ,
441 #ifndef CAPSTONE_DIET
442 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
443 #endif
444 	},
445 	{
446 		SP_BPLEZnapn, SPARC_INS_BRLEZ,
447 #ifndef CAPSTONE_DIET
448 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
449 #endif
450 	},
451 	{
452 		SP_BPLEZnapt, SPARC_INS_BRLEZ,
453 #ifndef CAPSTONE_DIET
454 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
455 #endif
456 	},
457 	{
458 		SP_BPLZapn, SPARC_INS_BRLZ,
459 #ifndef CAPSTONE_DIET
460 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
461 #endif
462 	},
463 	{
464 		SP_BPLZapt, SPARC_INS_BRLZ,
465 #ifndef CAPSTONE_DIET
466 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
467 #endif
468 	},
469 	{
470 		SP_BPLZnapn, SPARC_INS_BRLZ,
471 #ifndef CAPSTONE_DIET
472 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
473 #endif
474 	},
475 	{
476 		SP_BPLZnapt, SPARC_INS_BRLZ,
477 #ifndef CAPSTONE_DIET
478 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
479 #endif
480 	},
481 	{
482 		SP_BPNZapn, SPARC_INS_BRNZ,
483 #ifndef CAPSTONE_DIET
484 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
485 #endif
486 	},
487 	{
488 		SP_BPNZapt, SPARC_INS_BRNZ,
489 #ifndef CAPSTONE_DIET
490 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
491 #endif
492 	},
493 	{
494 		SP_BPNZnapn, SPARC_INS_BRNZ,
495 #ifndef CAPSTONE_DIET
496 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
497 #endif
498 	},
499 	{
500 		SP_BPNZnapt, SPARC_INS_BRNZ,
501 #ifndef CAPSTONE_DIET
502 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
503 #endif
504 	},
505 	{
506 		SP_BPXCC, SPARC_INS_B,
507 #ifndef CAPSTONE_DIET
508 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
509 #endif
510 	},
511 	{
512 		SP_BPXCCA, SPARC_INS_B,
513 #ifndef CAPSTONE_DIET
514 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
515 #endif
516 	},
517 	{
518 		SP_BPXCCANT, SPARC_INS_B,
519 #ifndef CAPSTONE_DIET
520 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
521 #endif
522 	},
523 	{
524 		SP_BPXCCNT, SPARC_INS_B,
525 #ifndef CAPSTONE_DIET
526 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
527 #endif
528 	},
529 	{
530 		SP_BPZapn, SPARC_INS_BRZ,
531 #ifndef CAPSTONE_DIET
532 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
533 #endif
534 	},
535 	{
536 		SP_BPZapt, SPARC_INS_BRZ,
537 #ifndef CAPSTONE_DIET
538 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
539 #endif
540 	},
541 	{
542 		SP_BPZnapn, SPARC_INS_BRZ,
543 #ifndef CAPSTONE_DIET
544 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
545 #endif
546 	},
547 	{
548 		SP_BPZnapt, SPARC_INS_BRZ,
549 #ifndef CAPSTONE_DIET
550 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 1, 0
551 #endif
552 	},
553 	{
554 		SP_BSHUFFLE, SPARC_INS_BSHUFFLE,
555 #ifndef CAPSTONE_DIET
556 		{ 0 }, { 0 }, { SPARC_GRP_VIS2, 0 }, 0, 0
557 #endif
558 	},
559 	{
560 		SP_CALL, SPARC_INS_CALL,
561 #ifndef CAPSTONE_DIET
562 		{ SPARC_REG_O6, 0 }, { 0 }, { 0 }, 0, 0
563 #endif
564 	},
565 	{
566 		SP_CALLri, SPARC_INS_CALL,
567 #ifndef CAPSTONE_DIET
568 		{ SPARC_REG_O6, 0 }, { 0 }, { 0 }, 0, 0
569 #endif
570 	},
571 	{
572 		SP_CALLrr, SPARC_INS_CALL,
573 #ifndef CAPSTONE_DIET
574 		{ SPARC_REG_O6, 0 }, { 0 }, { 0 }, 0, 0
575 #endif
576 	},
577 	{
578 		SP_CASXrr, SPARC_INS_CASX,
579 #ifndef CAPSTONE_DIET
580 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
581 #endif
582 	},
583 	{
584 		SP_CASrr, SPARC_INS_CAS,
585 #ifndef CAPSTONE_DIET
586 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
587 #endif
588 	},
589 	{
590 		SP_CMASK16, SPARC_INS_CMASK16,
591 #ifndef CAPSTONE_DIET
592 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
593 #endif
594 	},
595 	{
596 		SP_CMASK32, SPARC_INS_CMASK32,
597 #ifndef CAPSTONE_DIET
598 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
599 #endif
600 	},
601 	{
602 		SP_CMASK8, SPARC_INS_CMASK8,
603 #ifndef CAPSTONE_DIET
604 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
605 #endif
606 	},
607 	{
608 		SP_CMPri, SPARC_INS_CMP,
609 #ifndef CAPSTONE_DIET
610 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
611 #endif
612 	},
613 	{
614 		SP_CMPrr, SPARC_INS_CMP,
615 #ifndef CAPSTONE_DIET
616 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
617 #endif
618 	},
619 	{
620 		SP_EDGE16, SPARC_INS_EDGE16,
621 #ifndef CAPSTONE_DIET
622 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
623 #endif
624 	},
625 	{
626 		SP_EDGE16L, SPARC_INS_EDGE16L,
627 #ifndef CAPSTONE_DIET
628 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
629 #endif
630 	},
631 	{
632 		SP_EDGE16LN, SPARC_INS_EDGE16LN,
633 #ifndef CAPSTONE_DIET
634 		{ 0 }, { 0 }, { SPARC_GRP_VIS2, 0 }, 0, 0
635 #endif
636 	},
637 	{
638 		SP_EDGE16N, SPARC_INS_EDGE16N,
639 #ifndef CAPSTONE_DIET
640 		{ 0 }, { 0 }, { SPARC_GRP_VIS2, 0 }, 0, 0
641 #endif
642 	},
643 	{
644 		SP_EDGE32, SPARC_INS_EDGE32,
645 #ifndef CAPSTONE_DIET
646 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
647 #endif
648 	},
649 	{
650 		SP_EDGE32L, SPARC_INS_EDGE32L,
651 #ifndef CAPSTONE_DIET
652 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
653 #endif
654 	},
655 	{
656 		SP_EDGE32LN, SPARC_INS_EDGE32LN,
657 #ifndef CAPSTONE_DIET
658 		{ 0 }, { 0 }, { SPARC_GRP_VIS2, 0 }, 0, 0
659 #endif
660 	},
661 	{
662 		SP_EDGE32N, SPARC_INS_EDGE32N,
663 #ifndef CAPSTONE_DIET
664 		{ 0 }, { 0 }, { SPARC_GRP_VIS2, 0 }, 0, 0
665 #endif
666 	},
667 	{
668 		SP_EDGE8, SPARC_INS_EDGE8,
669 #ifndef CAPSTONE_DIET
670 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
671 #endif
672 	},
673 	{
674 		SP_EDGE8L, SPARC_INS_EDGE8L,
675 #ifndef CAPSTONE_DIET
676 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
677 #endif
678 	},
679 	{
680 		SP_EDGE8LN, SPARC_INS_EDGE8LN,
681 #ifndef CAPSTONE_DIET
682 		{ 0 }, { 0 }, { SPARC_GRP_VIS2, 0 }, 0, 0
683 #endif
684 	},
685 	{
686 		SP_EDGE8N, SPARC_INS_EDGE8N,
687 #ifndef CAPSTONE_DIET
688 		{ 0 }, { 0 }, { SPARC_GRP_VIS2, 0 }, 0, 0
689 #endif
690 	},
691 	{
692 		SP_FABSD, SPARC_INS_FABSD,
693 #ifndef CAPSTONE_DIET
694 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
695 #endif
696 	},
697 	{
698 		SP_FABSQ, SPARC_INS_FABSQ,
699 #ifndef CAPSTONE_DIET
700 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
701 #endif
702 	},
703 	{
704 		SP_FABSS, SPARC_INS_FABSS,
705 #ifndef CAPSTONE_DIET
706 		{ 0 }, { 0 }, { 0 }, 0, 0
707 #endif
708 	},
709 	{
710 		SP_FADDD, SPARC_INS_FADDD,
711 #ifndef CAPSTONE_DIET
712 		{ 0 }, { 0 }, { 0 }, 0, 0
713 #endif
714 	},
715 	{
716 		SP_FADDQ, SPARC_INS_FADDQ,
717 #ifndef CAPSTONE_DIET
718 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
719 #endif
720 	},
721 	{
722 		SP_FADDS, SPARC_INS_FADDS,
723 #ifndef CAPSTONE_DIET
724 		{ 0 }, { 0 }, { 0 }, 0, 0
725 #endif
726 	},
727 	{
728 		SP_FALIGNADATA, SPARC_INS_FALIGNDATA,
729 #ifndef CAPSTONE_DIET
730 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
731 #endif
732 	},
733 	{
734 		SP_FAND, SPARC_INS_FAND,
735 #ifndef CAPSTONE_DIET
736 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
737 #endif
738 	},
739 	{
740 		SP_FANDNOT1, SPARC_INS_FANDNOT1,
741 #ifndef CAPSTONE_DIET
742 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
743 #endif
744 	},
745 	{
746 		SP_FANDNOT1S, SPARC_INS_FANDNOT1S,
747 #ifndef CAPSTONE_DIET
748 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
749 #endif
750 	},
751 	{
752 		SP_FANDNOT2, SPARC_INS_FANDNOT2,
753 #ifndef CAPSTONE_DIET
754 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
755 #endif
756 	},
757 	{
758 		SP_FANDNOT2S, SPARC_INS_FANDNOT2S,
759 #ifndef CAPSTONE_DIET
760 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
761 #endif
762 	},
763 	{
764 		SP_FANDS, SPARC_INS_FANDS,
765 #ifndef CAPSTONE_DIET
766 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
767 #endif
768 	},
769 	{
770 		SP_FBCOND, SPARC_INS_FB,
771 #ifndef CAPSTONE_DIET
772 		{ SPARC_REG_FCC0, 0 }, { 0 }, { 0 }, 1, 0
773 #endif
774 	},
775 	{
776 		SP_FBCONDA, SPARC_INS_FB,
777 #ifndef CAPSTONE_DIET
778 		{ SPARC_REG_FCC0, 0 }, { 0 }, { 0 }, 1, 0
779 #endif
780 	},
781 	{
782 		SP_FCHKSM16, SPARC_INS_FCHKSM16,
783 #ifndef CAPSTONE_DIET
784 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
785 #endif
786 	},
787 	{
788 		SP_FCMPD, SPARC_INS_FCMPD,
789 #ifndef CAPSTONE_DIET
790 		{ 0 }, { SPARC_REG_FCC0, 0 }, { 0 }, 0, 0
791 #endif
792 	},
793 	{
794 		SP_FCMPEQ16, SPARC_INS_FCMPEQ16,
795 #ifndef CAPSTONE_DIET
796 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
797 #endif
798 	},
799 	{
800 		SP_FCMPEQ32, SPARC_INS_FCMPEQ32,
801 #ifndef CAPSTONE_DIET
802 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
803 #endif
804 	},
805 	{
806 		SP_FCMPGT16, SPARC_INS_FCMPGT16,
807 #ifndef CAPSTONE_DIET
808 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
809 #endif
810 	},
811 	{
812 		SP_FCMPGT32, SPARC_INS_FCMPGT32,
813 #ifndef CAPSTONE_DIET
814 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
815 #endif
816 	},
817 	{
818 		SP_FCMPLE16, SPARC_INS_FCMPLE16,
819 #ifndef CAPSTONE_DIET
820 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
821 #endif
822 	},
823 	{
824 		SP_FCMPLE32, SPARC_INS_FCMPLE32,
825 #ifndef CAPSTONE_DIET
826 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
827 #endif
828 	},
829 	{
830 		SP_FCMPNE16, SPARC_INS_FCMPNE16,
831 #ifndef CAPSTONE_DIET
832 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
833 #endif
834 	},
835 	{
836 		SP_FCMPNE32, SPARC_INS_FCMPNE32,
837 #ifndef CAPSTONE_DIET
838 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
839 #endif
840 	},
841 	{
842 		SP_FCMPQ, SPARC_INS_FCMPQ,
843 #ifndef CAPSTONE_DIET
844 		{ 0 }, { SPARC_REG_FCC0, 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
845 #endif
846 	},
847 	{
848 		SP_FCMPS, SPARC_INS_FCMPS,
849 #ifndef CAPSTONE_DIET
850 		{ 0 }, { SPARC_REG_FCC0, 0 }, { 0 }, 0, 0
851 #endif
852 	},
853 	{
854 		SP_FDIVD, SPARC_INS_FDIVD,
855 #ifndef CAPSTONE_DIET
856 		{ 0 }, { 0 }, { 0 }, 0, 0
857 #endif
858 	},
859 	{
860 		SP_FDIVQ, SPARC_INS_FDIVQ,
861 #ifndef CAPSTONE_DIET
862 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
863 #endif
864 	},
865 	{
866 		SP_FDIVS, SPARC_INS_FDIVS,
867 #ifndef CAPSTONE_DIET
868 		{ 0 }, { 0 }, { 0 }, 0, 0
869 #endif
870 	},
871 	{
872 		SP_FDMULQ, SPARC_INS_FDMULQ,
873 #ifndef CAPSTONE_DIET
874 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
875 #endif
876 	},
877 	{
878 		SP_FDTOI, SPARC_INS_FDTOI,
879 #ifndef CAPSTONE_DIET
880 		{ 0 }, { 0 }, { 0 }, 0, 0
881 #endif
882 	},
883 	{
884 		SP_FDTOQ, SPARC_INS_FDTOQ,
885 #ifndef CAPSTONE_DIET
886 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
887 #endif
888 	},
889 	{
890 		SP_FDTOS, SPARC_INS_FDTOS,
891 #ifndef CAPSTONE_DIET
892 		{ 0 }, { 0 }, { 0 }, 0, 0
893 #endif
894 	},
895 	{
896 		SP_FDTOX, SPARC_INS_FDTOX,
897 #ifndef CAPSTONE_DIET
898 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
899 #endif
900 	},
901 	{
902 		SP_FEXPAND, SPARC_INS_FEXPAND,
903 #ifndef CAPSTONE_DIET
904 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
905 #endif
906 	},
907 	{
908 		SP_FHADDD, SPARC_INS_FHADDD,
909 #ifndef CAPSTONE_DIET
910 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
911 #endif
912 	},
913 	{
914 		SP_FHADDS, SPARC_INS_FHADDS,
915 #ifndef CAPSTONE_DIET
916 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
917 #endif
918 	},
919 	{
920 		SP_FHSUBD, SPARC_INS_FHSUBD,
921 #ifndef CAPSTONE_DIET
922 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
923 #endif
924 	},
925 	{
926 		SP_FHSUBS, SPARC_INS_FHSUBS,
927 #ifndef CAPSTONE_DIET
928 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
929 #endif
930 	},
931 	{
932 		SP_FITOD, SPARC_INS_FITOD,
933 #ifndef CAPSTONE_DIET
934 		{ 0 }, { 0 }, { 0 }, 0, 0
935 #endif
936 	},
937 	{
938 		SP_FITOQ, SPARC_INS_FITOQ,
939 #ifndef CAPSTONE_DIET
940 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
941 #endif
942 	},
943 	{
944 		SP_FITOS, SPARC_INS_FITOS,
945 #ifndef CAPSTONE_DIET
946 		{ 0 }, { 0 }, { 0 }, 0, 0
947 #endif
948 	},
949 	{
950 		SP_FLCMPD, SPARC_INS_FLCMPD,
951 #ifndef CAPSTONE_DIET
952 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
953 #endif
954 	},
955 	{
956 		SP_FLCMPS, SPARC_INS_FLCMPS,
957 #ifndef CAPSTONE_DIET
958 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
959 #endif
960 	},
961 	{
962 		SP_FLUSHW, SPARC_INS_FLUSHW,
963 #ifndef CAPSTONE_DIET
964 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
965 #endif
966 	},
967 	{
968 		SP_FMEAN16, SPARC_INS_FMEAN16,
969 #ifndef CAPSTONE_DIET
970 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
971 #endif
972 	},
973 	{
974 		SP_FMOVD, SPARC_INS_FMOVD,
975 #ifndef CAPSTONE_DIET
976 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
977 #endif
978 	},
979 	{
980 		SP_FMOVD_FCC, SPARC_INS_FMOVD,
981 #ifndef CAPSTONE_DIET
982 		{ SPARC_REG_FCC0, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
983 #endif
984 	},
985 	{
986 		SP_FMOVD_ICC, SPARC_INS_FMOVD,
987 #ifndef CAPSTONE_DIET
988 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
989 #endif
990 	},
991 	{
992 		SP_FMOVD_XCC, SPARC_INS_FMOVD,
993 #ifndef CAPSTONE_DIET
994 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
995 #endif
996 	},
997 	{
998 		SP_FMOVQ, SPARC_INS_FMOVQ,
999 #ifndef CAPSTONE_DIET
1000 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1001 #endif
1002 	},
1003 	{
1004 		SP_FMOVQ_FCC, SPARC_INS_FMOVQ,
1005 #ifndef CAPSTONE_DIET
1006 		{ SPARC_REG_FCC0, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1007 #endif
1008 	},
1009 	{
1010 		SP_FMOVQ_ICC, SPARC_INS_FMOVQ,
1011 #ifndef CAPSTONE_DIET
1012 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1013 #endif
1014 	},
1015 	{
1016 		SP_FMOVQ_XCC, SPARC_INS_FMOVQ,
1017 #ifndef CAPSTONE_DIET
1018 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1019 #endif
1020 	},
1021 	{
1022 		SP_FMOVRGEZD, SPARC_INS_FMOVRDGEZ,
1023 #ifndef CAPSTONE_DIET
1024 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1025 #endif
1026 	},
1027 	{
1028 		SP_FMOVRGEZQ, SPARC_INS_FMOVRQGEZ,
1029 #ifndef CAPSTONE_DIET
1030 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1031 #endif
1032 	},
1033 	{
1034 		SP_FMOVRGEZS, SPARC_INS_FMOVRSGEZ,
1035 #ifndef CAPSTONE_DIET
1036 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1037 #endif
1038 	},
1039 	{
1040 		SP_FMOVRGZD, SPARC_INS_FMOVRDGZ,
1041 #ifndef CAPSTONE_DIET
1042 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1043 #endif
1044 	},
1045 	{
1046 		SP_FMOVRGZQ, SPARC_INS_FMOVRQGZ,
1047 #ifndef CAPSTONE_DIET
1048 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1049 #endif
1050 	},
1051 	{
1052 		SP_FMOVRGZS, SPARC_INS_FMOVRSGZ,
1053 #ifndef CAPSTONE_DIET
1054 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1055 #endif
1056 	},
1057 	{
1058 		SP_FMOVRLEZD, SPARC_INS_FMOVRDLEZ,
1059 #ifndef CAPSTONE_DIET
1060 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1061 #endif
1062 	},
1063 	{
1064 		SP_FMOVRLEZQ, SPARC_INS_FMOVRQLEZ,
1065 #ifndef CAPSTONE_DIET
1066 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1067 #endif
1068 	},
1069 	{
1070 		SP_FMOVRLEZS, SPARC_INS_FMOVRSLEZ,
1071 #ifndef CAPSTONE_DIET
1072 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1073 #endif
1074 	},
1075 	{
1076 		SP_FMOVRLZD, SPARC_INS_FMOVRDLZ,
1077 #ifndef CAPSTONE_DIET
1078 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1079 #endif
1080 	},
1081 	{
1082 		SP_FMOVRLZQ, SPARC_INS_FMOVRQLZ,
1083 #ifndef CAPSTONE_DIET
1084 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1085 #endif
1086 	},
1087 	{
1088 		SP_FMOVRLZS, SPARC_INS_FMOVRSLZ,
1089 #ifndef CAPSTONE_DIET
1090 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1091 #endif
1092 	},
1093 	{
1094 		SP_FMOVRNZD, SPARC_INS_FMOVRDNZ,
1095 #ifndef CAPSTONE_DIET
1096 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1097 #endif
1098 	},
1099 	{
1100 		SP_FMOVRNZQ, SPARC_INS_FMOVRQNZ,
1101 #ifndef CAPSTONE_DIET
1102 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1103 #endif
1104 	},
1105 	{
1106 		SP_FMOVRNZS, SPARC_INS_FMOVRSNZ,
1107 #ifndef CAPSTONE_DIET
1108 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1109 #endif
1110 	},
1111 	{
1112 		SP_FMOVRZD, SPARC_INS_FMOVRDZ,
1113 #ifndef CAPSTONE_DIET
1114 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1115 #endif
1116 	},
1117 	{
1118 		SP_FMOVRZQ, SPARC_INS_FMOVRQZ,
1119 #ifndef CAPSTONE_DIET
1120 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1121 #endif
1122 	},
1123 	{
1124 		SP_FMOVRZS, SPARC_INS_FMOVRSZ,
1125 #ifndef CAPSTONE_DIET
1126 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1127 #endif
1128 	},
1129 	{
1130 		SP_FMOVS, SPARC_INS_FMOVS,
1131 #ifndef CAPSTONE_DIET
1132 		{ 0 }, { 0 }, { 0 }, 0, 0
1133 #endif
1134 	},
1135 	{
1136 		SP_FMOVS_FCC, SPARC_INS_FMOVS,
1137 #ifndef CAPSTONE_DIET
1138 		{ SPARC_REG_FCC0, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1139 #endif
1140 	},
1141 	{
1142 		SP_FMOVS_ICC, SPARC_INS_FMOVS,
1143 #ifndef CAPSTONE_DIET
1144 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1145 #endif
1146 	},
1147 	{
1148 		SP_FMOVS_XCC, SPARC_INS_FMOVS,
1149 #ifndef CAPSTONE_DIET
1150 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1151 #endif
1152 	},
1153 	{
1154 		SP_FMUL8SUX16, SPARC_INS_FMUL8SUX16,
1155 #ifndef CAPSTONE_DIET
1156 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1157 #endif
1158 	},
1159 	{
1160 		SP_FMUL8ULX16, SPARC_INS_FMUL8ULX16,
1161 #ifndef CAPSTONE_DIET
1162 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1163 #endif
1164 	},
1165 	{
1166 		SP_FMUL8X16, SPARC_INS_FMUL8X16,
1167 #ifndef CAPSTONE_DIET
1168 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1169 #endif
1170 	},
1171 	{
1172 		SP_FMUL8X16AL, SPARC_INS_FMUL8X16AL,
1173 #ifndef CAPSTONE_DIET
1174 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1175 #endif
1176 	},
1177 	{
1178 		SP_FMUL8X16AU, SPARC_INS_FMUL8X16AU,
1179 #ifndef CAPSTONE_DIET
1180 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1181 #endif
1182 	},
1183 	{
1184 		SP_FMULD, SPARC_INS_FMULD,
1185 #ifndef CAPSTONE_DIET
1186 		{ 0 }, { 0 }, { 0 }, 0, 0
1187 #endif
1188 	},
1189 	{
1190 		SP_FMULD8SUX16, SPARC_INS_FMULD8SUX16,
1191 #ifndef CAPSTONE_DIET
1192 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1193 #endif
1194 	},
1195 	{
1196 		SP_FMULD8ULX16, SPARC_INS_FMULD8ULX16,
1197 #ifndef CAPSTONE_DIET
1198 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1199 #endif
1200 	},
1201 	{
1202 		SP_FMULQ, SPARC_INS_FMULQ,
1203 #ifndef CAPSTONE_DIET
1204 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
1205 #endif
1206 	},
1207 	{
1208 		SP_FMULS, SPARC_INS_FMULS,
1209 #ifndef CAPSTONE_DIET
1210 		{ 0 }, { 0 }, { 0 }, 0, 0
1211 #endif
1212 	},
1213 	{
1214 		SP_FNADDD, SPARC_INS_FNADDD,
1215 #ifndef CAPSTONE_DIET
1216 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1217 #endif
1218 	},
1219 	{
1220 		SP_FNADDS, SPARC_INS_FNADDS,
1221 #ifndef CAPSTONE_DIET
1222 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1223 #endif
1224 	},
1225 	{
1226 		SP_FNAND, SPARC_INS_FNAND,
1227 #ifndef CAPSTONE_DIET
1228 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1229 #endif
1230 	},
1231 	{
1232 		SP_FNANDS, SPARC_INS_FNANDS,
1233 #ifndef CAPSTONE_DIET
1234 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1235 #endif
1236 	},
1237 	{
1238 		SP_FNEGD, SPARC_INS_FNEGD,
1239 #ifndef CAPSTONE_DIET
1240 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1241 #endif
1242 	},
1243 	{
1244 		SP_FNEGQ, SPARC_INS_FNEGQ,
1245 #ifndef CAPSTONE_DIET
1246 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1247 #endif
1248 	},
1249 	{
1250 		SP_FNEGS, SPARC_INS_FNEGS,
1251 #ifndef CAPSTONE_DIET
1252 		{ 0 }, { 0 }, { 0 }, 0, 0
1253 #endif
1254 	},
1255 	{
1256 		SP_FNHADDD, SPARC_INS_FNHADDD,
1257 #ifndef CAPSTONE_DIET
1258 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1259 #endif
1260 	},
1261 	{
1262 		SP_FNHADDS, SPARC_INS_FNHADDS,
1263 #ifndef CAPSTONE_DIET
1264 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1265 #endif
1266 	},
1267 	{
1268 		SP_FNMULD, SPARC_INS_FNHADDD,
1269 #ifndef CAPSTONE_DIET
1270 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1271 #endif
1272 	},
1273 	{
1274 		SP_FNMULS, SPARC_INS_FNHADDS,
1275 #ifndef CAPSTONE_DIET
1276 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1277 #endif
1278 	},
1279 	{
1280 		SP_FNOR, SPARC_INS_FNOR,
1281 #ifndef CAPSTONE_DIET
1282 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1283 #endif
1284 	},
1285 	{
1286 		SP_FNORS, SPARC_INS_FNORS,
1287 #ifndef CAPSTONE_DIET
1288 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1289 #endif
1290 	},
1291 	{
1292 		SP_FNOT1, SPARC_INS_FNOT1,
1293 #ifndef CAPSTONE_DIET
1294 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1295 #endif
1296 	},
1297 	{
1298 		SP_FNOT1S, SPARC_INS_FNOT1S,
1299 #ifndef CAPSTONE_DIET
1300 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1301 #endif
1302 	},
1303 	{
1304 		SP_FNOT2, SPARC_INS_FNOT2,
1305 #ifndef CAPSTONE_DIET
1306 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1307 #endif
1308 	},
1309 	{
1310 		SP_FNOT2S, SPARC_INS_FNOT2S,
1311 #ifndef CAPSTONE_DIET
1312 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1313 #endif
1314 	},
1315 	{
1316 		SP_FNSMULD, SPARC_INS_FNHADDS,
1317 #ifndef CAPSTONE_DIET
1318 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1319 #endif
1320 	},
1321 	{
1322 		SP_FONE, SPARC_INS_FONE,
1323 #ifndef CAPSTONE_DIET
1324 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1325 #endif
1326 	},
1327 	{
1328 		SP_FONES, SPARC_INS_FONES,
1329 #ifndef CAPSTONE_DIET
1330 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1331 #endif
1332 	},
1333 	{
1334 		SP_FOR, SPARC_INS_FOR,
1335 #ifndef CAPSTONE_DIET
1336 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1337 #endif
1338 	},
1339 	{
1340 		SP_FORNOT1, SPARC_INS_FORNOT1,
1341 #ifndef CAPSTONE_DIET
1342 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1343 #endif
1344 	},
1345 	{
1346 		SP_FORNOT1S, SPARC_INS_FORNOT1S,
1347 #ifndef CAPSTONE_DIET
1348 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1349 #endif
1350 	},
1351 	{
1352 		SP_FORNOT2, SPARC_INS_FORNOT2,
1353 #ifndef CAPSTONE_DIET
1354 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1355 #endif
1356 	},
1357 	{
1358 		SP_FORNOT2S, SPARC_INS_FORNOT2S,
1359 #ifndef CAPSTONE_DIET
1360 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1361 #endif
1362 	},
1363 	{
1364 		SP_FORS, SPARC_INS_FORS,
1365 #ifndef CAPSTONE_DIET
1366 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1367 #endif
1368 	},
1369 	{
1370 		SP_FPACK16, SPARC_INS_FPACK16,
1371 #ifndef CAPSTONE_DIET
1372 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1373 #endif
1374 	},
1375 	{
1376 		SP_FPACK32, SPARC_INS_FPACK32,
1377 #ifndef CAPSTONE_DIET
1378 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1379 #endif
1380 	},
1381 	{
1382 		SP_FPACKFIX, SPARC_INS_FPACKFIX,
1383 #ifndef CAPSTONE_DIET
1384 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1385 #endif
1386 	},
1387 	{
1388 		SP_FPADD16, SPARC_INS_FPADD16,
1389 #ifndef CAPSTONE_DIET
1390 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1391 #endif
1392 	},
1393 	{
1394 		SP_FPADD16S, SPARC_INS_FPADD16S,
1395 #ifndef CAPSTONE_DIET
1396 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1397 #endif
1398 	},
1399 	{
1400 		SP_FPADD32, SPARC_INS_FPADD32,
1401 #ifndef CAPSTONE_DIET
1402 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1403 #endif
1404 	},
1405 	{
1406 		SP_FPADD32S, SPARC_INS_FPADD32S,
1407 #ifndef CAPSTONE_DIET
1408 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1409 #endif
1410 	},
1411 	{
1412 		SP_FPADD64, SPARC_INS_FPADD64,
1413 #ifndef CAPSTONE_DIET
1414 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1415 #endif
1416 	},
1417 	{
1418 		SP_FPMERGE, SPARC_INS_FPMERGE,
1419 #ifndef CAPSTONE_DIET
1420 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1421 #endif
1422 	},
1423 	{
1424 		SP_FPSUB16, SPARC_INS_FPSUB16,
1425 #ifndef CAPSTONE_DIET
1426 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1427 #endif
1428 	},
1429 	{
1430 		SP_FPSUB16S, SPARC_INS_FPSUB16S,
1431 #ifndef CAPSTONE_DIET
1432 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1433 #endif
1434 	},
1435 	{
1436 		SP_FPSUB32, SPARC_INS_FPSUB32,
1437 #ifndef CAPSTONE_DIET
1438 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1439 #endif
1440 	},
1441 	{
1442 		SP_FPSUB32S, SPARC_INS_FPSUB32S,
1443 #ifndef CAPSTONE_DIET
1444 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1445 #endif
1446 	},
1447 	{
1448 		SP_FQTOD, SPARC_INS_FQTOD,
1449 #ifndef CAPSTONE_DIET
1450 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
1451 #endif
1452 	},
1453 	{
1454 		SP_FQTOI, SPARC_INS_FQTOI,
1455 #ifndef CAPSTONE_DIET
1456 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
1457 #endif
1458 	},
1459 	{
1460 		SP_FQTOS, SPARC_INS_FQTOS,
1461 #ifndef CAPSTONE_DIET
1462 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
1463 #endif
1464 	},
1465 	{
1466 		SP_FQTOX, SPARC_INS_FQTOX,
1467 #ifndef CAPSTONE_DIET
1468 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1469 #endif
1470 	},
1471 	{
1472 		SP_FSLAS16, SPARC_INS_FSLAS16,
1473 #ifndef CAPSTONE_DIET
1474 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1475 #endif
1476 	},
1477 	{
1478 		SP_FSLAS32, SPARC_INS_FSLAS32,
1479 #ifndef CAPSTONE_DIET
1480 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1481 #endif
1482 	},
1483 	{
1484 		SP_FSLL16, SPARC_INS_FSLL16,
1485 #ifndef CAPSTONE_DIET
1486 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1487 #endif
1488 	},
1489 	{
1490 		SP_FSLL32, SPARC_INS_FSLL32,
1491 #ifndef CAPSTONE_DIET
1492 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1493 #endif
1494 	},
1495 	{
1496 		SP_FSMULD, SPARC_INS_FSMULD,
1497 #ifndef CAPSTONE_DIET
1498 		{ 0 }, { 0 }, { 0 }, 0, 0
1499 #endif
1500 	},
1501 	{
1502 		SP_FSQRTD, SPARC_INS_FSQRTD,
1503 #ifndef CAPSTONE_DIET
1504 		{ 0 }, { 0 }, { 0 }, 0, 0
1505 #endif
1506 	},
1507 	{
1508 		SP_FSQRTQ, SPARC_INS_FSQRTQ,
1509 #ifndef CAPSTONE_DIET
1510 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
1511 #endif
1512 	},
1513 	{
1514 		SP_FSQRTS, SPARC_INS_FSQRTS,
1515 #ifndef CAPSTONE_DIET
1516 		{ 0 }, { 0 }, { 0 }, 0, 0
1517 #endif
1518 	},
1519 	{
1520 		SP_FSRA16, SPARC_INS_FSRA16,
1521 #ifndef CAPSTONE_DIET
1522 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1523 #endif
1524 	},
1525 	{
1526 		SP_FSRA32, SPARC_INS_FSRA32,
1527 #ifndef CAPSTONE_DIET
1528 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1529 #endif
1530 	},
1531 	{
1532 		SP_FSRC1, SPARC_INS_FSRC1,
1533 #ifndef CAPSTONE_DIET
1534 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1535 #endif
1536 	},
1537 	{
1538 		SP_FSRC1S, SPARC_INS_FSRC1S,
1539 #ifndef CAPSTONE_DIET
1540 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1541 #endif
1542 	},
1543 	{
1544 		SP_FSRC2, SPARC_INS_FSRC2,
1545 #ifndef CAPSTONE_DIET
1546 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1547 #endif
1548 	},
1549 	{
1550 		SP_FSRC2S, SPARC_INS_FSRC2S,
1551 #ifndef CAPSTONE_DIET
1552 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1553 #endif
1554 	},
1555 	{
1556 		SP_FSRL16, SPARC_INS_FSRL16,
1557 #ifndef CAPSTONE_DIET
1558 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1559 #endif
1560 	},
1561 	{
1562 		SP_FSRL32, SPARC_INS_FSRL32,
1563 #ifndef CAPSTONE_DIET
1564 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1565 #endif
1566 	},
1567 	{
1568 		SP_FSTOD, SPARC_INS_FSTOD,
1569 #ifndef CAPSTONE_DIET
1570 		{ 0 }, { 0 }, { 0 }, 0, 0
1571 #endif
1572 	},
1573 	{
1574 		SP_FSTOI, SPARC_INS_FSTOI,
1575 #ifndef CAPSTONE_DIET
1576 		{ 0 }, { 0 }, { 0 }, 0, 0
1577 #endif
1578 	},
1579 	{
1580 		SP_FSTOQ, SPARC_INS_FSTOQ,
1581 #ifndef CAPSTONE_DIET
1582 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
1583 #endif
1584 	},
1585 	{
1586 		SP_FSTOX, SPARC_INS_FSTOX,
1587 #ifndef CAPSTONE_DIET
1588 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1589 #endif
1590 	},
1591 	{
1592 		SP_FSUBD, SPARC_INS_FSUBD,
1593 #ifndef CAPSTONE_DIET
1594 		{ 0 }, { 0 }, { 0 }, 0, 0
1595 #endif
1596 	},
1597 	{
1598 		SP_FSUBQ, SPARC_INS_FSUBQ,
1599 #ifndef CAPSTONE_DIET
1600 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
1601 #endif
1602 	},
1603 	{
1604 		SP_FSUBS, SPARC_INS_FSUBS,
1605 #ifndef CAPSTONE_DIET
1606 		{ 0 }, { 0 }, { 0 }, 0, 0
1607 #endif
1608 	},
1609 	{
1610 		SP_FXNOR, SPARC_INS_FXNOR,
1611 #ifndef CAPSTONE_DIET
1612 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1613 #endif
1614 	},
1615 	{
1616 		SP_FXNORS, SPARC_INS_FXNORS,
1617 #ifndef CAPSTONE_DIET
1618 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1619 #endif
1620 	},
1621 	{
1622 		SP_FXOR, SPARC_INS_FXOR,
1623 #ifndef CAPSTONE_DIET
1624 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1625 #endif
1626 	},
1627 	{
1628 		SP_FXORS, SPARC_INS_FXORS,
1629 #ifndef CAPSTONE_DIET
1630 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1631 #endif
1632 	},
1633 	{
1634 		SP_FXTOD, SPARC_INS_FXTOD,
1635 #ifndef CAPSTONE_DIET
1636 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1637 #endif
1638 	},
1639 	{
1640 		SP_FXTOQ, SPARC_INS_FXTOQ,
1641 #ifndef CAPSTONE_DIET
1642 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1643 #endif
1644 	},
1645 	{
1646 		SP_FXTOS, SPARC_INS_FXTOS,
1647 #ifndef CAPSTONE_DIET
1648 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1649 #endif
1650 	},
1651 	{
1652 		SP_FZERO, SPARC_INS_FZERO,
1653 #ifndef CAPSTONE_DIET
1654 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1655 #endif
1656 	},
1657 	{
1658 		SP_FZEROS, SPARC_INS_FZEROS,
1659 #ifndef CAPSTONE_DIET
1660 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
1661 #endif
1662 	},
1663 	{
1664 		SP_JMPLri, SPARC_INS_JMPL,
1665 #ifndef CAPSTONE_DIET
1666 		{ 0 }, { 0 }, { 0 }, 0, 0
1667 #endif
1668 	},
1669 	{
1670 		SP_JMPLrr, SPARC_INS_JMPL,
1671 #ifndef CAPSTONE_DIET
1672 		{ 0 }, { 0 }, { 0 }, 0, 0
1673 #endif
1674 	},
1675 	{
1676 		SP_LDDFri, SPARC_INS_LDD,
1677 #ifndef CAPSTONE_DIET
1678 		{ 0 }, { 0 }, { 0 }, 0, 0
1679 #endif
1680 	},
1681 	{
1682 		SP_LDDFrr, SPARC_INS_LDD,
1683 #ifndef CAPSTONE_DIET
1684 		{ 0 }, { 0 }, { 0 }, 0, 0
1685 #endif
1686 	},
1687 	{
1688 		SP_LDFri, SPARC_INS_LD,
1689 #ifndef CAPSTONE_DIET
1690 		{ 0 }, { 0 }, { 0 }, 0, 0
1691 #endif
1692 	},
1693 	{
1694 		SP_LDFrr, SPARC_INS_LD,
1695 #ifndef CAPSTONE_DIET
1696 		{ 0 }, { 0 }, { 0 }, 0, 0
1697 #endif
1698 	},
1699 	{
1700 		SP_LDQFri, SPARC_INS_LDQ,
1701 #ifndef CAPSTONE_DIET
1702 		{ 0 }, { 0 }, { SPARC_GRP_V9, SPARC_GRP_HARDQUAD, 0 }, 0, 0
1703 #endif
1704 	},
1705 	{
1706 		SP_LDQFrr, SPARC_INS_LDQ,
1707 #ifndef CAPSTONE_DIET
1708 		{ 0 }, { 0 }, { SPARC_GRP_V9, SPARC_GRP_HARDQUAD, 0 }, 0, 0
1709 #endif
1710 	},
1711 	{
1712 		SP_LDSBri, SPARC_INS_LDSB,
1713 #ifndef CAPSTONE_DIET
1714 		{ 0 }, { 0 }, { 0 }, 0, 0
1715 #endif
1716 	},
1717 	{
1718 		SP_LDSBrr, SPARC_INS_LDSB,
1719 #ifndef CAPSTONE_DIET
1720 		{ 0 }, { 0 }, { 0 }, 0, 0
1721 #endif
1722 	},
1723 	{
1724 		SP_LDSHri, SPARC_INS_LDSH,
1725 #ifndef CAPSTONE_DIET
1726 		{ 0 }, { 0 }, { 0 }, 0, 0
1727 #endif
1728 	},
1729 	{
1730 		SP_LDSHrr, SPARC_INS_LDSH,
1731 #ifndef CAPSTONE_DIET
1732 		{ 0 }, { 0 }, { 0 }, 0, 0
1733 #endif
1734 	},
1735 	{
1736 		SP_LDSWri, SPARC_INS_LDSW,
1737 #ifndef CAPSTONE_DIET
1738 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1739 #endif
1740 	},
1741 	{
1742 		SP_LDSWrr, SPARC_INS_LDSW,
1743 #ifndef CAPSTONE_DIET
1744 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1745 #endif
1746 	},
1747 	{
1748 		SP_LDUBri, SPARC_INS_LDUB,
1749 #ifndef CAPSTONE_DIET
1750 		{ 0 }, { 0 }, { 0 }, 0, 0
1751 #endif
1752 	},
1753 	{
1754 		SP_LDUBrr, SPARC_INS_LDUB,
1755 #ifndef CAPSTONE_DIET
1756 		{ 0 }, { 0 }, { 0 }, 0, 0
1757 #endif
1758 	},
1759 	{
1760 		SP_LDUHri, SPARC_INS_LDUH,
1761 #ifndef CAPSTONE_DIET
1762 		{ 0 }, { 0 }, { 0 }, 0, 0
1763 #endif
1764 	},
1765 	{
1766 		SP_LDUHrr, SPARC_INS_LDUH,
1767 #ifndef CAPSTONE_DIET
1768 		{ 0 }, { 0 }, { 0 }, 0, 0
1769 #endif
1770 	},
1771 	{
1772 		SP_LDXri, SPARC_INS_LDX,
1773 #ifndef CAPSTONE_DIET
1774 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1775 #endif
1776 	},
1777 	{
1778 		SP_LDXrr, SPARC_INS_LDX,
1779 #ifndef CAPSTONE_DIET
1780 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1781 #endif
1782 	},
1783 	{
1784 		SP_LDri, SPARC_INS_LD,
1785 #ifndef CAPSTONE_DIET
1786 		{ 0 }, { 0 }, { 0 }, 0, 0
1787 #endif
1788 	},
1789 	{
1790 		SP_LDrr, SPARC_INS_LD,
1791 #ifndef CAPSTONE_DIET
1792 		{ 0 }, { 0 }, { 0 }, 0, 0
1793 #endif
1794 	},
1795 	{
1796 		SP_LEAX_ADDri, SPARC_INS_ADD,
1797 #ifndef CAPSTONE_DIET
1798 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1799 #endif
1800 	},
1801 	{
1802 		SP_LEA_ADDri, SPARC_INS_ADD,
1803 #ifndef CAPSTONE_DIET
1804 		{ 0 }, { 0 }, { SPARC_GRP_32BIT, 0 }, 0, 0
1805 #endif
1806 	},
1807 	{
1808 		SP_LZCNT, SPARC_INS_LZCNT,
1809 #ifndef CAPSTONE_DIET
1810 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1811 #endif
1812 	},
1813 	{
1814 		SP_MEMBARi, SPARC_INS_MEMBAR,
1815 #ifndef CAPSTONE_DIET
1816 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1817 #endif
1818 	},
1819 	{
1820 		SP_MOVDTOX, SPARC_INS_MOVDTOX,
1821 #ifndef CAPSTONE_DIET
1822 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1823 #endif
1824 	},
1825 	{
1826 		SP_MOVFCCri, SPARC_INS_MOV,
1827 #ifndef CAPSTONE_DIET
1828 		{ SPARC_REG_FCC0, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1829 #endif
1830 	},
1831 	{
1832 		SP_MOVFCCrr, SPARC_INS_MOV,
1833 #ifndef CAPSTONE_DIET
1834 		{ SPARC_REG_FCC0, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1835 #endif
1836 	},
1837 	{
1838 		SP_MOVICCri, SPARC_INS_MOV,
1839 #ifndef CAPSTONE_DIET
1840 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1841 #endif
1842 	},
1843 	{
1844 		SP_MOVICCrr, SPARC_INS_MOV,
1845 #ifndef CAPSTONE_DIET
1846 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
1847 #endif
1848 	},
1849 	{
1850 		SP_MOVRGEZri, SPARC_INS_MOVRGEZ,
1851 #ifndef CAPSTONE_DIET
1852 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1853 #endif
1854 	},
1855 	{
1856 		SP_MOVRGEZrr, SPARC_INS_MOVRGEZ,
1857 #ifndef CAPSTONE_DIET
1858 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1859 #endif
1860 	},
1861 	{
1862 		SP_MOVRGZri, SPARC_INS_MOVRGZ,
1863 #ifndef CAPSTONE_DIET
1864 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1865 #endif
1866 	},
1867 	{
1868 		SP_MOVRGZrr, SPARC_INS_MOVRGZ,
1869 #ifndef CAPSTONE_DIET
1870 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1871 #endif
1872 	},
1873 	{
1874 		SP_MOVRLEZri, SPARC_INS_MOVRLEZ,
1875 #ifndef CAPSTONE_DIET
1876 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1877 #endif
1878 	},
1879 	{
1880 		SP_MOVRLEZrr, SPARC_INS_MOVRLEZ,
1881 #ifndef CAPSTONE_DIET
1882 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1883 #endif
1884 	},
1885 	{
1886 		SP_MOVRLZri, SPARC_INS_MOVRLZ,
1887 #ifndef CAPSTONE_DIET
1888 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1889 #endif
1890 	},
1891 	{
1892 		SP_MOVRLZrr, SPARC_INS_MOVRLZ,
1893 #ifndef CAPSTONE_DIET
1894 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1895 #endif
1896 	},
1897 	{
1898 		SP_MOVRNZri, SPARC_INS_MOVRNZ,
1899 #ifndef CAPSTONE_DIET
1900 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1901 #endif
1902 	},
1903 	{
1904 		SP_MOVRNZrr, SPARC_INS_MOVRNZ,
1905 #ifndef CAPSTONE_DIET
1906 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1907 #endif
1908 	},
1909 	{
1910 		SP_MOVRRZri, SPARC_INS_MOVRZ,
1911 #ifndef CAPSTONE_DIET
1912 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1913 #endif
1914 	},
1915 	{
1916 		SP_MOVRRZrr, SPARC_INS_MOVRZ,
1917 #ifndef CAPSTONE_DIET
1918 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1919 #endif
1920 	},
1921 	{
1922 		SP_MOVSTOSW, SPARC_INS_MOVSTOSW,
1923 #ifndef CAPSTONE_DIET
1924 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1925 #endif
1926 	},
1927 	{
1928 		SP_MOVSTOUW, SPARC_INS_MOVSTOUW,
1929 #ifndef CAPSTONE_DIET
1930 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1931 #endif
1932 	},
1933 	{
1934 		SP_MOVWTOS, SPARC_INS_MOVDTOX,
1935 #ifndef CAPSTONE_DIET
1936 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1937 #endif
1938 	},
1939 	{
1940 		SP_MOVXCCri, SPARC_INS_MOV,
1941 #ifndef CAPSTONE_DIET
1942 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1943 #endif
1944 	},
1945 	{
1946 		SP_MOVXCCrr, SPARC_INS_MOV,
1947 #ifndef CAPSTONE_DIET
1948 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1949 #endif
1950 	},
1951 	{
1952 		SP_MOVXTOD, SPARC_INS_MOVDTOX,
1953 #ifndef CAPSTONE_DIET
1954 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
1955 #endif
1956 	},
1957 	{
1958 		SP_MULXri, SPARC_INS_MULX,
1959 #ifndef CAPSTONE_DIET
1960 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1961 #endif
1962 	},
1963 	{
1964 		SP_MULXrr, SPARC_INS_MULX,
1965 #ifndef CAPSTONE_DIET
1966 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
1967 #endif
1968 	},
1969 	{
1970 		SP_NOP, SPARC_INS_NOP,
1971 #ifndef CAPSTONE_DIET
1972 		{ 0 }, { 0 }, { 0 }, 0, 0
1973 #endif
1974 	},
1975 	{
1976 		SP_ORCCri, SPARC_INS_ORCC,
1977 #ifndef CAPSTONE_DIET
1978 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
1979 #endif
1980 	},
1981 	{
1982 		SP_ORCCrr, SPARC_INS_ORCC,
1983 #ifndef CAPSTONE_DIET
1984 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
1985 #endif
1986 	},
1987 	{
1988 		SP_ORNCCri, SPARC_INS_ORNCC,
1989 #ifndef CAPSTONE_DIET
1990 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
1991 #endif
1992 	},
1993 	{
1994 		SP_ORNCCrr, SPARC_INS_ORNCC,
1995 #ifndef CAPSTONE_DIET
1996 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
1997 #endif
1998 	},
1999 	{
2000 		SP_ORNri, SPARC_INS_ORN,
2001 #ifndef CAPSTONE_DIET
2002 		{ 0 }, { 0 }, { 0 }, 0, 0
2003 #endif
2004 	},
2005 	{
2006 		SP_ORNrr, SPARC_INS_ORN,
2007 #ifndef CAPSTONE_DIET
2008 		{ 0 }, { 0 }, { 0 }, 0, 0
2009 #endif
2010 	},
2011 	{
2012 		SP_ORXNrr, SPARC_INS_ORN,
2013 #ifndef CAPSTONE_DIET
2014 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2015 #endif
2016 	},
2017 	{
2018 		SP_ORXri, SPARC_INS_OR,
2019 #ifndef CAPSTONE_DIET
2020 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2021 #endif
2022 	},
2023 	{
2024 		SP_ORXrr, SPARC_INS_OR,
2025 #ifndef CAPSTONE_DIET
2026 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2027 #endif
2028 	},
2029 	{
2030 		SP_ORri, SPARC_INS_OR,
2031 #ifndef CAPSTONE_DIET
2032 		{ 0 }, { 0 }, { 0 }, 0, 0
2033 #endif
2034 	},
2035 	{
2036 		SP_ORrr, SPARC_INS_OR,
2037 #ifndef CAPSTONE_DIET
2038 		{ 0 }, { 0 }, { 0 }, 0, 0
2039 #endif
2040 	},
2041 	{
2042 		SP_PDIST, SPARC_INS_PDIST,
2043 #ifndef CAPSTONE_DIET
2044 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
2045 #endif
2046 	},
2047 	{
2048 		SP_PDISTN, SPARC_INS_PDISTN,
2049 #ifndef CAPSTONE_DIET
2050 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
2051 #endif
2052 	},
2053 	{
2054 		SP_POPCrr, SPARC_INS_POPC,
2055 #ifndef CAPSTONE_DIET
2056 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
2057 #endif
2058 	},
2059 	{
2060 		SP_RDY, SPARC_INS_RD,
2061 #ifndef CAPSTONE_DIET
2062 		{ SPARC_REG_Y, 0 }, { 0 }, { 0 }, 0, 0
2063 #endif
2064 	},
2065 	{
2066 		SP_RESTOREri, SPARC_INS_RESTORE,
2067 #ifndef CAPSTONE_DIET
2068 		{ 0 }, { 0 }, { 0 }, 0, 0
2069 #endif
2070 	},
2071 	{
2072 		SP_RESTORErr, SPARC_INS_RESTORE,
2073 #ifndef CAPSTONE_DIET
2074 		{ 0 }, { 0 }, { 0 }, 0, 0
2075 #endif
2076 	},
2077 	{
2078 		SP_RET, SPARC_INS_JMP,
2079 #ifndef CAPSTONE_DIET
2080 		{ 0 }, { 0 }, { 0 }, 0, 0
2081 #endif
2082 	},
2083 	{
2084 		SP_RETL, SPARC_INS_JMP,
2085 #ifndef CAPSTONE_DIET
2086 		{ 0 }, { 0 }, { 0 }, 0, 0
2087 #endif
2088 	},
2089 	{
2090 		SP_RETTri, SPARC_INS_RETT,
2091 #ifndef CAPSTONE_DIET
2092 		{ 0 }, { 0 }, { 0 }, 0, 0
2093 #endif
2094 	},
2095 	{
2096 		SP_RETTrr, SPARC_INS_RETT,
2097 #ifndef CAPSTONE_DIET
2098 		{ 0 }, { 0 }, { 0 }, 0, 0
2099 #endif
2100 	},
2101 	{
2102 		SP_SAVEri, SPARC_INS_SAVE,
2103 #ifndef CAPSTONE_DIET
2104 		{ 0 }, { 0 }, { 0 }, 0, 0
2105 #endif
2106 	},
2107 	{
2108 		SP_SAVErr, SPARC_INS_SAVE,
2109 #ifndef CAPSTONE_DIET
2110 		{ 0 }, { 0 }, { 0 }, 0, 0
2111 #endif
2112 	},
2113 	{
2114 		SP_SDIVCCri, SPARC_INS_SDIVCC,
2115 #ifndef CAPSTONE_DIET
2116 		{ 0 }, { SPARC_REG_Y, SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2117 #endif
2118 	},
2119 	{
2120 		SP_SDIVCCrr, SPARC_INS_SDIVCC,
2121 #ifndef CAPSTONE_DIET
2122 		{ 0 }, { SPARC_REG_Y, SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2123 #endif
2124 	},
2125 	{
2126 		SP_SDIVXri, SPARC_INS_SDIVX,
2127 #ifndef CAPSTONE_DIET
2128 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2129 #endif
2130 	},
2131 	{
2132 		SP_SDIVXrr, SPARC_INS_SDIVX,
2133 #ifndef CAPSTONE_DIET
2134 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2135 #endif
2136 	},
2137 	{
2138 		SP_SDIVri, SPARC_INS_SDIV,
2139 #ifndef CAPSTONE_DIET
2140 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2141 #endif
2142 	},
2143 	{
2144 		SP_SDIVrr, SPARC_INS_SDIV,
2145 #ifndef CAPSTONE_DIET
2146 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2147 #endif
2148 	},
2149 	{
2150 		SP_SETHIXi, SPARC_INS_SETHI,
2151 #ifndef CAPSTONE_DIET
2152 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2153 #endif
2154 	},
2155 	{
2156 		SP_SETHIi, SPARC_INS_SETHI,
2157 #ifndef CAPSTONE_DIET
2158 		{ 0 }, { 0 }, { 0 }, 0, 0
2159 #endif
2160 	},
2161 	{
2162 		SP_SHUTDOWN, SPARC_INS_SHUTDOWN,
2163 #ifndef CAPSTONE_DIET
2164 		{ 0 }, { 0 }, { SPARC_GRP_VIS, 0 }, 0, 0
2165 #endif
2166 	},
2167 	{
2168 		SP_SIAM, SPARC_INS_SIAM,
2169 #ifndef CAPSTONE_DIET
2170 		{ 0 }, { 0 }, { SPARC_GRP_VIS2, 0 }, 0, 0
2171 #endif
2172 	},
2173 	{
2174 		SP_SLLXri, SPARC_INS_SLLX,
2175 #ifndef CAPSTONE_DIET
2176 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2177 #endif
2178 	},
2179 	{
2180 		SP_SLLXrr, SPARC_INS_SLLX,
2181 #ifndef CAPSTONE_DIET
2182 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2183 #endif
2184 	},
2185 	{
2186 		SP_SLLri, SPARC_INS_SLL,
2187 #ifndef CAPSTONE_DIET
2188 		{ 0 }, { 0 }, { 0 }, 0, 0
2189 #endif
2190 	},
2191 	{
2192 		SP_SLLrr, SPARC_INS_SLL,
2193 #ifndef CAPSTONE_DIET
2194 		{ 0 }, { 0 }, { 0 }, 0, 0
2195 #endif
2196 	},
2197 	{
2198 		SP_SMULCCri, SPARC_INS_SMULCC,
2199 #ifndef CAPSTONE_DIET
2200 		{ 0 }, { SPARC_REG_Y, SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2201 #endif
2202 	},
2203 	{
2204 		SP_SMULCCrr, SPARC_INS_SMULCC,
2205 #ifndef CAPSTONE_DIET
2206 		{ 0 }, { SPARC_REG_Y, SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2207 #endif
2208 	},
2209 	{
2210 		SP_SMULri, SPARC_INS_SMUL,
2211 #ifndef CAPSTONE_DIET
2212 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2213 #endif
2214 	},
2215 	{
2216 		SP_SMULrr, SPARC_INS_SMUL,
2217 #ifndef CAPSTONE_DIET
2218 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2219 #endif
2220 	},
2221 	{
2222 		SP_SRAXri, SPARC_INS_SRAX,
2223 #ifndef CAPSTONE_DIET
2224 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2225 #endif
2226 	},
2227 	{
2228 		SP_SRAXrr, SPARC_INS_SRAX,
2229 #ifndef CAPSTONE_DIET
2230 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2231 #endif
2232 	},
2233 	{
2234 		SP_SRAri, SPARC_INS_SRA,
2235 #ifndef CAPSTONE_DIET
2236 		{ 0 }, { 0 }, { 0 }, 0, 0
2237 #endif
2238 	},
2239 	{
2240 		SP_SRArr, SPARC_INS_SRA,
2241 #ifndef CAPSTONE_DIET
2242 		{ 0 }, { 0 }, { 0 }, 0, 0
2243 #endif
2244 	},
2245 	{
2246 		SP_SRLXri, SPARC_INS_SRLX,
2247 #ifndef CAPSTONE_DIET
2248 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2249 #endif
2250 	},
2251 	{
2252 		SP_SRLXrr, SPARC_INS_SRLX,
2253 #ifndef CAPSTONE_DIET
2254 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2255 #endif
2256 	},
2257 	{
2258 		SP_SRLri, SPARC_INS_SRL,
2259 #ifndef CAPSTONE_DIET
2260 		{ 0 }, { 0 }, { 0 }, 0, 0
2261 #endif
2262 	},
2263 	{
2264 		SP_SRLrr, SPARC_INS_SRL,
2265 #ifndef CAPSTONE_DIET
2266 		{ 0 }, { 0 }, { 0 }, 0, 0
2267 #endif
2268 	},
2269 	{
2270 		SP_STBAR, SPARC_INS_STBAR,
2271 #ifndef CAPSTONE_DIET
2272 		{ 0 }, { 0 }, { 0 }, 0, 0
2273 #endif
2274 	},
2275 	{
2276 		SP_STBri, SPARC_INS_STB,
2277 #ifndef CAPSTONE_DIET
2278 		{ 0 }, { 0 }, { 0 }, 0, 0
2279 #endif
2280 	},
2281 	{
2282 		SP_STBrr, SPARC_INS_STB,
2283 #ifndef CAPSTONE_DIET
2284 		{ 0 }, { 0 }, { 0 }, 0, 0
2285 #endif
2286 	},
2287 	{
2288 		SP_STDFri, SPARC_INS_STD,
2289 #ifndef CAPSTONE_DIET
2290 		{ 0 }, { 0 }, { 0 }, 0, 0
2291 #endif
2292 	},
2293 	{
2294 		SP_STDFrr, SPARC_INS_STD,
2295 #ifndef CAPSTONE_DIET
2296 		{ 0 }, { 0 }, { 0 }, 0, 0
2297 #endif
2298 	},
2299 	{
2300 		SP_STFri, SPARC_INS_ST,
2301 #ifndef CAPSTONE_DIET
2302 		{ 0 }, { 0 }, { 0 }, 0, 0
2303 #endif
2304 	},
2305 	{
2306 		SP_STFrr, SPARC_INS_ST,
2307 #ifndef CAPSTONE_DIET
2308 		{ 0 }, { 0 }, { 0 }, 0, 0
2309 #endif
2310 	},
2311 	{
2312 		SP_STHri, SPARC_INS_STH,
2313 #ifndef CAPSTONE_DIET
2314 		{ 0 }, { 0 }, { 0 }, 0, 0
2315 #endif
2316 	},
2317 	{
2318 		SP_STHrr, SPARC_INS_STH,
2319 #ifndef CAPSTONE_DIET
2320 		{ 0 }, { 0 }, { 0 }, 0, 0
2321 #endif
2322 	},
2323 	{
2324 		SP_STQFri, SPARC_INS_STQ,
2325 #ifndef CAPSTONE_DIET
2326 		{ 0 }, { 0 }, { SPARC_GRP_V9, SPARC_GRP_HARDQUAD, 0 }, 0, 0
2327 #endif
2328 	},
2329 	{
2330 		SP_STQFrr, SPARC_INS_STQ,
2331 #ifndef CAPSTONE_DIET
2332 		{ 0 }, { 0 }, { SPARC_GRP_V9, SPARC_GRP_HARDQUAD, 0 }, 0, 0
2333 #endif
2334 	},
2335 	{
2336 		SP_STXri, SPARC_INS_STX,
2337 #ifndef CAPSTONE_DIET
2338 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2339 #endif
2340 	},
2341 	{
2342 		SP_STXrr, SPARC_INS_STX,
2343 #ifndef CAPSTONE_DIET
2344 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2345 #endif
2346 	},
2347 	{
2348 		SP_STri, SPARC_INS_ST,
2349 #ifndef CAPSTONE_DIET
2350 		{ 0 }, { 0 }, { 0 }, 0, 0
2351 #endif
2352 	},
2353 	{
2354 		SP_STrr, SPARC_INS_ST,
2355 #ifndef CAPSTONE_DIET
2356 		{ 0 }, { 0 }, { 0 }, 0, 0
2357 #endif
2358 	},
2359 	{
2360 		SP_SUBCCri, SPARC_INS_SUBCC,
2361 #ifndef CAPSTONE_DIET
2362 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2363 #endif
2364 	},
2365 	{
2366 		SP_SUBCCrr, SPARC_INS_SUBCC,
2367 #ifndef CAPSTONE_DIET
2368 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2369 #endif
2370 	},
2371 	{
2372 		SP_SUBCri, SPARC_INS_SUBX,
2373 #ifndef CAPSTONE_DIET
2374 		{ SPARC_REG_ICC, 0 }, { 0 }, { 0 }, 0, 0
2375 #endif
2376 	},
2377 	{
2378 		SP_SUBCrr, SPARC_INS_SUBX,
2379 #ifndef CAPSTONE_DIET
2380 		{ SPARC_REG_ICC, 0 }, { 0 }, { 0 }, 0, 0
2381 #endif
2382 	},
2383 	{
2384 		SP_SUBEri, SPARC_INS_SUBXCC,
2385 #ifndef CAPSTONE_DIET
2386 		{ SPARC_REG_ICC, 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2387 #endif
2388 	},
2389 	{
2390 		SP_SUBErr, SPARC_INS_SUBXCC,
2391 #ifndef CAPSTONE_DIET
2392 		{ SPARC_REG_ICC, 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2393 #endif
2394 	},
2395 	{
2396 		SP_SUBXri, SPARC_INS_SUB,
2397 #ifndef CAPSTONE_DIET
2398 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2399 #endif
2400 	},
2401 	{
2402 		SP_SUBXrr, SPARC_INS_SUB,
2403 #ifndef CAPSTONE_DIET
2404 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2405 #endif
2406 	},
2407 	{
2408 		SP_SUBri, SPARC_INS_SUB,
2409 #ifndef CAPSTONE_DIET
2410 		{ 0 }, { 0 }, { 0 }, 0, 0
2411 #endif
2412 	},
2413 	{
2414 		SP_SUBrr, SPARC_INS_SUB,
2415 #ifndef CAPSTONE_DIET
2416 		{ 0 }, { 0 }, { 0 }, 0, 0
2417 #endif
2418 	},
2419 	{
2420 		SP_SWAPri, SPARC_INS_SWAP,
2421 #ifndef CAPSTONE_DIET
2422 		{ 0 }, { 0 }, { 0 }, 0, 0
2423 #endif
2424 	},
2425 	{
2426 		SP_SWAPrr, SPARC_INS_SWAP,
2427 #ifndef CAPSTONE_DIET
2428 		{ 0 }, { 0 }, { 0 }, 0, 0
2429 #endif
2430 	},
2431 	{
2432 		SP_TA3, SPARC_INS_T,
2433 #ifndef CAPSTONE_DIET
2434 		{ 0 }, { 0 }, { 0 }, 0, 0
2435 #endif
2436 	},
2437 	{
2438 		SP_TA5, SPARC_INS_T,
2439 #ifndef CAPSTONE_DIET
2440 		{ 0 }, { 0 }, { 0 }, 0, 0
2441 #endif
2442 	},
2443 	{
2444 		SP_TADDCCTVri, SPARC_INS_TADDCCTV,
2445 #ifndef CAPSTONE_DIET
2446 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2447 #endif
2448 	},
2449 	{
2450 		SP_TADDCCTVrr, SPARC_INS_TADDCCTV,
2451 #ifndef CAPSTONE_DIET
2452 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2453 #endif
2454 	},
2455 	{
2456 		SP_TADDCCri, SPARC_INS_TADDCC,
2457 #ifndef CAPSTONE_DIET
2458 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2459 #endif
2460 	},
2461 	{
2462 		SP_TADDCCrr, SPARC_INS_TADDCC,
2463 #ifndef CAPSTONE_DIET
2464 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2465 #endif
2466 	},
2467 	{
2468 		SP_TICCri, SPARC_INS_T,
2469 #ifndef CAPSTONE_DIET
2470 		{ SPARC_REG_ICC, 0 }, { 0 }, { 0 }, 0, 0
2471 #endif
2472 	},
2473 	{
2474 		SP_TICCrr, SPARC_INS_T,
2475 #ifndef CAPSTONE_DIET
2476 		{ SPARC_REG_ICC, 0 }, { 0 }, { 0 }, 0, 0
2477 #endif
2478 	},
2479 	{
2480 		SP_TLS_ADDXrr, SPARC_INS_ADD,
2481 #ifndef CAPSTONE_DIET
2482 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2483 #endif
2484 	},
2485 	{
2486 		SP_TLS_ADDrr, SPARC_INS_ADD,
2487 #ifndef CAPSTONE_DIET
2488 		{ 0 }, { 0 }, { 0 }, 0, 0
2489 #endif
2490 	},
2491 	{
2492 		SP_TLS_CALL, SPARC_INS_CALL,
2493 #ifndef CAPSTONE_DIET
2494 		{ SPARC_REG_O6, 0 }, { 0 }, { 0 }, 0, 0
2495 #endif
2496 	},
2497 	{
2498 		SP_TLS_LDXrr, SPARC_INS_LDX,
2499 #ifndef CAPSTONE_DIET
2500 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2501 #endif
2502 	},
2503 	{
2504 		SP_TLS_LDrr, SPARC_INS_LD,
2505 #ifndef CAPSTONE_DIET
2506 		{ 0 }, { 0 }, { 0 }, 0, 0
2507 #endif
2508 	},
2509 	{
2510 		SP_TSUBCCTVri, SPARC_INS_TSUBCCTV,
2511 #ifndef CAPSTONE_DIET
2512 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2513 #endif
2514 	},
2515 	{
2516 		SP_TSUBCCTVrr, SPARC_INS_TSUBCCTV,
2517 #ifndef CAPSTONE_DIET
2518 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2519 #endif
2520 	},
2521 	{
2522 		SP_TSUBCCri, SPARC_INS_TSUBCC,
2523 #ifndef CAPSTONE_DIET
2524 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2525 #endif
2526 	},
2527 	{
2528 		SP_TSUBCCrr, SPARC_INS_TSUBCC,
2529 #ifndef CAPSTONE_DIET
2530 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2531 #endif
2532 	},
2533 	{
2534 		SP_TXCCri, SPARC_INS_T,
2535 #ifndef CAPSTONE_DIET
2536 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2537 #endif
2538 	},
2539 	{
2540 		SP_TXCCrr, SPARC_INS_T,
2541 #ifndef CAPSTONE_DIET
2542 		{ SPARC_REG_ICC, 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2543 #endif
2544 	},
2545 	{
2546 		SP_UDIVCCri, SPARC_INS_UDIVCC,
2547 #ifndef CAPSTONE_DIET
2548 		{ 0 }, { SPARC_REG_Y, SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2549 #endif
2550 	},
2551 	{
2552 		SP_UDIVCCrr, SPARC_INS_UDIVCC,
2553 #ifndef CAPSTONE_DIET
2554 		{ 0 }, { SPARC_REG_Y, SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2555 #endif
2556 	},
2557 	{
2558 		SP_UDIVXri, SPARC_INS_UDIVX,
2559 #ifndef CAPSTONE_DIET
2560 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2561 #endif
2562 	},
2563 	{
2564 		SP_UDIVXrr, SPARC_INS_UDIVX,
2565 #ifndef CAPSTONE_DIET
2566 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2567 #endif
2568 	},
2569 	{
2570 		SP_UDIVri, SPARC_INS_UDIV,
2571 #ifndef CAPSTONE_DIET
2572 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2573 #endif
2574 	},
2575 	{
2576 		SP_UDIVrr, SPARC_INS_UDIV,
2577 #ifndef CAPSTONE_DIET
2578 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2579 #endif
2580 	},
2581 	{
2582 		SP_UMULCCri, SPARC_INS_UMULCC,
2583 #ifndef CAPSTONE_DIET
2584 		{ 0 }, { SPARC_REG_Y, SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2585 #endif
2586 	},
2587 	{
2588 		SP_UMULCCrr, SPARC_INS_UMULCC,
2589 #ifndef CAPSTONE_DIET
2590 		{ 0 }, { SPARC_REG_Y, SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2591 #endif
2592 	},
2593 	{
2594 		SP_UMULXHI, SPARC_INS_UMULXHI,
2595 #ifndef CAPSTONE_DIET
2596 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
2597 #endif
2598 	},
2599 	{
2600 		SP_UMULri, SPARC_INS_UMUL,
2601 #ifndef CAPSTONE_DIET
2602 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2603 #endif
2604 	},
2605 	{
2606 		SP_UMULrr, SPARC_INS_UMUL,
2607 #ifndef CAPSTONE_DIET
2608 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2609 #endif
2610 	},
2611 	{
2612 		SP_UNIMP, SPARC_INS_UNIMP,
2613 #ifndef CAPSTONE_DIET
2614 		{ 0 }, { 0 }, { 0 }, 0, 0
2615 #endif
2616 	},
2617 	{
2618 		SP_V9FCMPD, SPARC_INS_FCMPD,
2619 #ifndef CAPSTONE_DIET
2620 		{ 0 }, { 0 }, { 0 }, 0, 0
2621 #endif
2622 	},
2623 	{
2624 		SP_V9FCMPED, SPARC_INS_FCMPED,
2625 #ifndef CAPSTONE_DIET
2626 		{ 0 }, { 0 }, { 0 }, 0, 0
2627 #endif
2628 	},
2629 	{
2630 		SP_V9FCMPEQ, SPARC_INS_FCMPEQ,
2631 #ifndef CAPSTONE_DIET
2632 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
2633 #endif
2634 	},
2635 	{
2636 		SP_V9FCMPES, SPARC_INS_FCMPES,
2637 #ifndef CAPSTONE_DIET
2638 		{ 0 }, { 0 }, { 0 }, 0, 0
2639 #endif
2640 	},
2641 	{
2642 		SP_V9FCMPQ, SPARC_INS_FCMPQ,
2643 #ifndef CAPSTONE_DIET
2644 		{ 0 }, { 0 }, { SPARC_GRP_HARDQUAD, 0 }, 0, 0
2645 #endif
2646 	},
2647 	{
2648 		SP_V9FCMPS, SPARC_INS_FCMPS,
2649 #ifndef CAPSTONE_DIET
2650 		{ 0 }, { 0 }, { 0 }, 0, 0
2651 #endif
2652 	},
2653 	{
2654 		SP_V9FMOVD_FCC, SPARC_INS_FMOVD,
2655 #ifndef CAPSTONE_DIET
2656 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
2657 #endif
2658 	},
2659 	{
2660 		SP_V9FMOVQ_FCC, SPARC_INS_FMOVQ,
2661 #ifndef CAPSTONE_DIET
2662 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
2663 #endif
2664 	},
2665 	{
2666 		SP_V9FMOVS_FCC, SPARC_INS_FMOVS,
2667 #ifndef CAPSTONE_DIET
2668 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
2669 #endif
2670 	},
2671 	{
2672 		SP_V9MOVFCCri, SPARC_INS_MOV,
2673 #ifndef CAPSTONE_DIET
2674 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
2675 #endif
2676 	},
2677 	{
2678 		SP_V9MOVFCCrr, SPARC_INS_MOV,
2679 #ifndef CAPSTONE_DIET
2680 		{ 0 }, { 0 }, { SPARC_GRP_V9, 0 }, 0, 0
2681 #endif
2682 	},
2683 	{
2684 		SP_WRYri, SPARC_INS_WR,
2685 #ifndef CAPSTONE_DIET
2686 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2687 #endif
2688 	},
2689 	{
2690 		SP_WRYrr, SPARC_INS_WR,
2691 #ifndef CAPSTONE_DIET
2692 		{ 0 }, { SPARC_REG_Y, 0 }, { 0 }, 0, 0
2693 #endif
2694 	},
2695 	{
2696 		SP_XMULX, SPARC_INS_XMULX,
2697 #ifndef CAPSTONE_DIET
2698 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
2699 #endif
2700 	},
2701 	{
2702 		SP_XMULXHI, SPARC_INS_XMULXHI,
2703 #ifndef CAPSTONE_DIET
2704 		{ 0 }, { 0 }, { SPARC_GRP_VIS3, 0 }, 0, 0
2705 #endif
2706 	},
2707 	{
2708 		SP_XNORCCri, SPARC_INS_XNORCC,
2709 #ifndef CAPSTONE_DIET
2710 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2711 #endif
2712 	},
2713 	{
2714 		SP_XNORCCrr, SPARC_INS_XNORCC,
2715 #ifndef CAPSTONE_DIET
2716 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2717 #endif
2718 	},
2719 	{
2720 		SP_XNORXrr, SPARC_INS_XNOR,
2721 #ifndef CAPSTONE_DIET
2722 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2723 #endif
2724 	},
2725 	{
2726 		SP_XNORri, SPARC_INS_XNOR,
2727 #ifndef CAPSTONE_DIET
2728 		{ 0 }, { 0 }, { 0 }, 0, 0
2729 #endif
2730 	},
2731 	{
2732 		SP_XNORrr, SPARC_INS_XNOR,
2733 #ifndef CAPSTONE_DIET
2734 		{ 0 }, { 0 }, { 0 }, 0, 0
2735 #endif
2736 	},
2737 	{
2738 		SP_XORCCri, SPARC_INS_XORCC,
2739 #ifndef CAPSTONE_DIET
2740 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2741 #endif
2742 	},
2743 	{
2744 		SP_XORCCrr, SPARC_INS_XORCC,
2745 #ifndef CAPSTONE_DIET
2746 		{ 0 }, { SPARC_REG_ICC, 0 }, { 0 }, 0, 0
2747 #endif
2748 	},
2749 	{
2750 		SP_XORXri, SPARC_INS_XOR,
2751 #ifndef CAPSTONE_DIET
2752 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2753 #endif
2754 	},
2755 	{
2756 		SP_XORXrr, SPARC_INS_XOR,
2757 #ifndef CAPSTONE_DIET
2758 		{ 0 }, { 0 }, { SPARC_GRP_64BIT, 0 }, 0, 0
2759 #endif
2760 	},
2761 	{
2762 		SP_XORri, SPARC_INS_XOR,
2763 #ifndef CAPSTONE_DIET
2764 		{ 0 }, { 0 }, { 0 }, 0, 0
2765 #endif
2766 	},
2767 	{
2768 		SP_XORrr, SPARC_INS_XOR,
2769 #ifndef CAPSTONE_DIET
2770 		{ 0 }, { 0 }, { 0 }, 0, 0
2771 #endif
2772 	},
2773 };
2774 
2775 static struct hint_map {
2776 	unsigned int id;
2777 	uint8_t hints;
2778 } insn_hints[] = {
2779 	{ SP_BPGEZapn, SPARC_HINT_A | SPARC_HINT_PN },
2780 	{ SP_BPGEZapt, SPARC_HINT_A | SPARC_HINT_PT },
2781 	{ SP_BPGEZnapn, SPARC_HINT_PN },
2782 	{ SP_BPGZapn, SPARC_HINT_A | SPARC_HINT_PN },
2783 	{ SP_BPGZapt, SPARC_HINT_A | SPARC_HINT_PT },
2784 	{ SP_BPGZnapn, SPARC_HINT_PN },
2785 	{ SP_BPLEZapn, SPARC_HINT_A | SPARC_HINT_PN },
2786 	{ SP_BPLEZapt, SPARC_HINT_A | SPARC_HINT_PT },
2787 	{ SP_BPLEZnapn, SPARC_HINT_PN },
2788 	{ SP_BPLZapn, SPARC_HINT_A | SPARC_HINT_PN },
2789 	{ SP_BPLZapt, SPARC_HINT_A | SPARC_HINT_PT },
2790 	{ SP_BPLZnapn, SPARC_HINT_PN },
2791 	{ SP_BPNZapn, SPARC_HINT_A | SPARC_HINT_PN },
2792 	{ SP_BPNZapt, SPARC_HINT_A | SPARC_HINT_PT },
2793 	{ SP_BPNZnapn, SPARC_HINT_PN },
2794 	{ SP_BPZapn, SPARC_HINT_A | SPARC_HINT_PN },
2795 	{ SP_BPZapt, SPARC_HINT_A | SPARC_HINT_PT },
2796 	{ SP_BPZnapn, SPARC_HINT_PN },
2797 };
2798 
2799 // given internal insn id, return public instruction info
Sparc_get_insn_id(cs_struct * h,cs_insn * insn,unsigned int id)2800 void Sparc_get_insn_id(cs_struct *h, cs_insn *insn, unsigned int id)
2801 {
2802 	unsigned short i;
2803 
2804 	i = insn_find(insns, ARR_SIZE(insns), id, &h->insn_cache);
2805 	if (i != 0) {
2806 		insn->id = insns[i].mapid;
2807 
2808 		if (h->detail) {
2809 #ifndef CAPSTONE_DIET
2810 			memcpy(insn->detail->regs_read, insns[i].regs_use, sizeof(insns[i].regs_use));
2811 			insn->detail->regs_read_count = (uint8_t)count_positive(insns[i].regs_use);
2812 
2813 			memcpy(insn->detail->regs_write, insns[i].regs_mod, sizeof(insns[i].regs_mod));
2814 			insn->detail->regs_write_count = (uint8_t)count_positive(insns[i].regs_mod);
2815 
2816 			memcpy(insn->detail->groups, insns[i].groups, sizeof(insns[i].groups));
2817 			insn->detail->groups_count = (uint8_t)count_positive(insns[i].groups);
2818 
2819 			if (insns[i].branch || insns[i].indirect_branch) {
2820 				// this insn also belongs to JUMP group. add JUMP group
2821 				insn->detail->groups[insn->detail->groups_count] = SPARC_GRP_JUMP;
2822 				insn->detail->groups_count++;
2823 			}
2824 #endif
2825 			// hint code
2826 			for (i = 0; i < ARR_SIZE(insn_hints); i++) {
2827 				if (id == insn_hints[i].id) {
2828 					insn->detail->sparc.hint = insn_hints[i].hints;
2829 					break;
2830 				}
2831 			}
2832 		}
2833 	}
2834 }
2835 
2836 static name_map insn_name_maps[] = {
2837 	{ SPARC_INS_INVALID, NULL },
2838 
2839 	{ SPARC_INS_ADDCC, "addcc" },
2840 	{ SPARC_INS_ADDX, "addx" },
2841 	{ SPARC_INS_ADDXCC, "addxcc" },
2842 	{ SPARC_INS_ADDXC, "addxc" },
2843 	{ SPARC_INS_ADDXCCC, "addxccc" },
2844 	{ SPARC_INS_ADD, "add" },
2845 	{ SPARC_INS_ALIGNADDR, "alignaddr" },
2846 	{ SPARC_INS_ALIGNADDRL, "alignaddrl" },
2847 	{ SPARC_INS_ANDCC, "andcc" },
2848 	{ SPARC_INS_ANDNCC, "andncc" },
2849 	{ SPARC_INS_ANDN, "andn" },
2850 	{ SPARC_INS_AND, "and" },
2851 	{ SPARC_INS_ARRAY16, "array16" },
2852 	{ SPARC_INS_ARRAY32, "array32" },
2853 	{ SPARC_INS_ARRAY8, "array8" },
2854 	{ SPARC_INS_B, "b" },
2855 	{ SPARC_INS_JMP, "jmp" },
2856 	{ SPARC_INS_BMASK, "bmask" },
2857 	{ SPARC_INS_FB, "fb" },
2858 	{ SPARC_INS_BRGEZ, "brgez" },
2859 	{ SPARC_INS_BRGZ, "brgz" },
2860 	{ SPARC_INS_BRLEZ, "brlez" },
2861 	{ SPARC_INS_BRLZ, "brlz" },
2862 	{ SPARC_INS_BRNZ, "brnz" },
2863 	{ SPARC_INS_BRZ, "brz" },
2864 	{ SPARC_INS_BSHUFFLE, "bshuffle" },
2865 	{ SPARC_INS_CALL, "call" },
2866 	{ SPARC_INS_CASX, "casx" },
2867 	{ SPARC_INS_CAS, "cas" },
2868 	{ SPARC_INS_CMASK16, "cmask16" },
2869 	{ SPARC_INS_CMASK32, "cmask32" },
2870 	{ SPARC_INS_CMASK8, "cmask8" },
2871 	{ SPARC_INS_CMP, "cmp" },
2872 	{ SPARC_INS_EDGE16, "edge16" },
2873 	{ SPARC_INS_EDGE16L, "edge16l" },
2874 	{ SPARC_INS_EDGE16LN, "edge16ln" },
2875 	{ SPARC_INS_EDGE16N, "edge16n" },
2876 	{ SPARC_INS_EDGE32, "edge32" },
2877 	{ SPARC_INS_EDGE32L, "edge32l" },
2878 	{ SPARC_INS_EDGE32LN, "edge32ln" },
2879 	{ SPARC_INS_EDGE32N, "edge32n" },
2880 	{ SPARC_INS_EDGE8, "edge8" },
2881 	{ SPARC_INS_EDGE8L, "edge8l" },
2882 	{ SPARC_INS_EDGE8LN, "edge8ln" },
2883 	{ SPARC_INS_EDGE8N, "edge8n" },
2884 	{ SPARC_INS_FABSD, "fabsd" },
2885 	{ SPARC_INS_FABSQ, "fabsq" },
2886 	{ SPARC_INS_FABSS, "fabss" },
2887 	{ SPARC_INS_FADDD, "faddd" },
2888 	{ SPARC_INS_FADDQ, "faddq" },
2889 	{ SPARC_INS_FADDS, "fadds" },
2890 	{ SPARC_INS_FALIGNDATA, "faligndata" },
2891 	{ SPARC_INS_FAND, "fand" },
2892 	{ SPARC_INS_FANDNOT1, "fandnot1" },
2893 	{ SPARC_INS_FANDNOT1S, "fandnot1s" },
2894 	{ SPARC_INS_FANDNOT2, "fandnot2" },
2895 	{ SPARC_INS_FANDNOT2S, "fandnot2s" },
2896 	{ SPARC_INS_FANDS, "fands" },
2897 	{ SPARC_INS_FCHKSM16, "fchksm16" },
2898 	{ SPARC_INS_FCMPD, "fcmpd" },
2899 	{ SPARC_INS_FCMPEQ16, "fcmpeq16" },
2900 	{ SPARC_INS_FCMPEQ32, "fcmpeq32" },
2901 	{ SPARC_INS_FCMPGT16, "fcmpgt16" },
2902 	{ SPARC_INS_FCMPGT32, "fcmpgt32" },
2903 	{ SPARC_INS_FCMPLE16, "fcmple16" },
2904 	{ SPARC_INS_FCMPLE32, "fcmple32" },
2905 	{ SPARC_INS_FCMPNE16, "fcmpne16" },
2906 	{ SPARC_INS_FCMPNE32, "fcmpne32" },
2907 	{ SPARC_INS_FCMPQ, "fcmpq" },
2908 	{ SPARC_INS_FCMPS, "fcmps" },
2909 	{ SPARC_INS_FDIVD, "fdivd" },
2910 	{ SPARC_INS_FDIVQ, "fdivq" },
2911 	{ SPARC_INS_FDIVS, "fdivs" },
2912 	{ SPARC_INS_FDMULQ, "fdmulq" },
2913 	{ SPARC_INS_FDTOI, "fdtoi" },
2914 	{ SPARC_INS_FDTOQ, "fdtoq" },
2915 	{ SPARC_INS_FDTOS, "fdtos" },
2916 	{ SPARC_INS_FDTOX, "fdtox" },
2917 	{ SPARC_INS_FEXPAND, "fexpand" },
2918 	{ SPARC_INS_FHADDD, "fhaddd" },
2919 	{ SPARC_INS_FHADDS, "fhadds" },
2920 	{ SPARC_INS_FHSUBD, "fhsubd" },
2921 	{ SPARC_INS_FHSUBS, "fhsubs" },
2922 	{ SPARC_INS_FITOD, "fitod" },
2923 	{ SPARC_INS_FITOQ, "fitoq" },
2924 	{ SPARC_INS_FITOS, "fitos" },
2925 	{ SPARC_INS_FLCMPD, "flcmpd" },
2926 	{ SPARC_INS_FLCMPS, "flcmps" },
2927 	{ SPARC_INS_FLUSHW, "flushw" },
2928 	{ SPARC_INS_FMEAN16, "fmean16" },
2929 	{ SPARC_INS_FMOVD, "fmovd" },
2930 	{ SPARC_INS_FMOVQ, "fmovq" },
2931 	{ SPARC_INS_FMOVRDGEZ, "fmovrdgez" },
2932 	{ SPARC_INS_FMOVRQGEZ, "fmovrqgez" },
2933 	{ SPARC_INS_FMOVRSGEZ, "fmovrsgez" },
2934 	{ SPARC_INS_FMOVRDGZ, "fmovrdgz" },
2935 	{ SPARC_INS_FMOVRQGZ, "fmovrqgz" },
2936 	{ SPARC_INS_FMOVRSGZ, "fmovrsgz" },
2937 	{ SPARC_INS_FMOVRDLEZ, "fmovrdlez" },
2938 	{ SPARC_INS_FMOVRQLEZ, "fmovrqlez" },
2939 	{ SPARC_INS_FMOVRSLEZ, "fmovrslez" },
2940 	{ SPARC_INS_FMOVRDLZ, "fmovrdlz" },
2941 	{ SPARC_INS_FMOVRQLZ, "fmovrqlz" },
2942 	{ SPARC_INS_FMOVRSLZ, "fmovrslz" },
2943 	{ SPARC_INS_FMOVRDNZ, "fmovrdnz" },
2944 	{ SPARC_INS_FMOVRQNZ, "fmovrqnz" },
2945 	{ SPARC_INS_FMOVRSNZ, "fmovrsnz" },
2946 	{ SPARC_INS_FMOVRDZ, "fmovrdz" },
2947 	{ SPARC_INS_FMOVRQZ, "fmovrqz" },
2948 	{ SPARC_INS_FMOVRSZ, "fmovrsz" },
2949 	{ SPARC_INS_FMOVS, "fmovs" },
2950 	{ SPARC_INS_FMUL8SUX16, "fmul8sux16" },
2951 	{ SPARC_INS_FMUL8ULX16, "fmul8ulx16" },
2952 	{ SPARC_INS_FMUL8X16, "fmul8x16" },
2953 	{ SPARC_INS_FMUL8X16AL, "fmul8x16al" },
2954 	{ SPARC_INS_FMUL8X16AU, "fmul8x16au" },
2955 	{ SPARC_INS_FMULD, "fmuld" },
2956 	{ SPARC_INS_FMULD8SUX16, "fmuld8sux16" },
2957 	{ SPARC_INS_FMULD8ULX16, "fmuld8ulx16" },
2958 	{ SPARC_INS_FMULQ, "fmulq" },
2959 	{ SPARC_INS_FMULS, "fmuls" },
2960 	{ SPARC_INS_FNADDD, "fnaddd" },
2961 	{ SPARC_INS_FNADDS, "fnadds" },
2962 	{ SPARC_INS_FNAND, "fnand" },
2963 	{ SPARC_INS_FNANDS, "fnands" },
2964 	{ SPARC_INS_FNEGD, "fnegd" },
2965 	{ SPARC_INS_FNEGQ, "fnegq" },
2966 	{ SPARC_INS_FNEGS, "fnegs" },
2967 	{ SPARC_INS_FNHADDD, "fnhaddd" },
2968 	{ SPARC_INS_FNHADDS, "fnhadds" },
2969 	{ SPARC_INS_FNOR, "fnor" },
2970 	{ SPARC_INS_FNORS, "fnors" },
2971 	{ SPARC_INS_FNOT1, "fnot1" },
2972 	{ SPARC_INS_FNOT1S, "fnot1s" },
2973 	{ SPARC_INS_FNOT2, "fnot2" },
2974 	{ SPARC_INS_FNOT2S, "fnot2s" },
2975 	{ SPARC_INS_FONE, "fone" },
2976 	{ SPARC_INS_FONES, "fones" },
2977 	{ SPARC_INS_FOR, "for" },
2978 	{ SPARC_INS_FORNOT1, "fornot1" },
2979 	{ SPARC_INS_FORNOT1S, "fornot1s" },
2980 	{ SPARC_INS_FORNOT2, "fornot2" },
2981 	{ SPARC_INS_FORNOT2S, "fornot2s" },
2982 	{ SPARC_INS_FORS, "fors" },
2983 	{ SPARC_INS_FPACK16, "fpack16" },
2984 	{ SPARC_INS_FPACK32, "fpack32" },
2985 	{ SPARC_INS_FPACKFIX, "fpackfix" },
2986 	{ SPARC_INS_FPADD16, "fpadd16" },
2987 	{ SPARC_INS_FPADD16S, "fpadd16s" },
2988 	{ SPARC_INS_FPADD32, "fpadd32" },
2989 	{ SPARC_INS_FPADD32S, "fpadd32s" },
2990 	{ SPARC_INS_FPADD64, "fpadd64" },
2991 	{ SPARC_INS_FPMERGE, "fpmerge" },
2992 	{ SPARC_INS_FPSUB16, "fpsub16" },
2993 	{ SPARC_INS_FPSUB16S, "fpsub16s" },
2994 	{ SPARC_INS_FPSUB32, "fpsub32" },
2995 	{ SPARC_INS_FPSUB32S, "fpsub32s" },
2996 	{ SPARC_INS_FQTOD, "fqtod" },
2997 	{ SPARC_INS_FQTOI, "fqtoi" },
2998 	{ SPARC_INS_FQTOS, "fqtos" },
2999 	{ SPARC_INS_FQTOX, "fqtox" },
3000 	{ SPARC_INS_FSLAS16, "fslas16" },
3001 	{ SPARC_INS_FSLAS32, "fslas32" },
3002 	{ SPARC_INS_FSLL16, "fsll16" },
3003 	{ SPARC_INS_FSLL32, "fsll32" },
3004 	{ SPARC_INS_FSMULD, "fsmuld" },
3005 	{ SPARC_INS_FSQRTD, "fsqrtd" },
3006 	{ SPARC_INS_FSQRTQ, "fsqrtq" },
3007 	{ SPARC_INS_FSQRTS, "fsqrts" },
3008 	{ SPARC_INS_FSRA16, "fsra16" },
3009 	{ SPARC_INS_FSRA32, "fsra32" },
3010 	{ SPARC_INS_FSRC1, "fsrc1" },
3011 	{ SPARC_INS_FSRC1S, "fsrc1s" },
3012 	{ SPARC_INS_FSRC2, "fsrc2" },
3013 	{ SPARC_INS_FSRC2S, "fsrc2s" },
3014 	{ SPARC_INS_FSRL16, "fsrl16" },
3015 	{ SPARC_INS_FSRL32, "fsrl32" },
3016 	{ SPARC_INS_FSTOD, "fstod" },
3017 	{ SPARC_INS_FSTOI, "fstoi" },
3018 	{ SPARC_INS_FSTOQ, "fstoq" },
3019 	{ SPARC_INS_FSTOX, "fstox" },
3020 	{ SPARC_INS_FSUBD, "fsubd" },
3021 	{ SPARC_INS_FSUBQ, "fsubq" },
3022 	{ SPARC_INS_FSUBS, "fsubs" },
3023 	{ SPARC_INS_FXNOR, "fxnor" },
3024 	{ SPARC_INS_FXNORS, "fxnors" },
3025 	{ SPARC_INS_FXOR, "fxor" },
3026 	{ SPARC_INS_FXORS, "fxors" },
3027 	{ SPARC_INS_FXTOD, "fxtod" },
3028 	{ SPARC_INS_FXTOQ, "fxtoq" },
3029 	{ SPARC_INS_FXTOS, "fxtos" },
3030 	{ SPARC_INS_FZERO, "fzero" },
3031 	{ SPARC_INS_FZEROS, "fzeros" },
3032 	{ SPARC_INS_JMPL, "jmpl" },
3033 	{ SPARC_INS_LDD, "ldd" },
3034 	{ SPARC_INS_LD, "ld" },
3035 	{ SPARC_INS_LDQ, "ldq" },
3036 	{ SPARC_INS_LDSB, "ldsb" },
3037 	{ SPARC_INS_LDSH, "ldsh" },
3038 	{ SPARC_INS_LDSW, "ldsw" },
3039 	{ SPARC_INS_LDUB, "ldub" },
3040 	{ SPARC_INS_LDUH, "lduh" },
3041 	{ SPARC_INS_LDX, "ldx" },
3042 	{ SPARC_INS_LZCNT, "lzcnt" },
3043 	{ SPARC_INS_MEMBAR, "membar" },
3044 	{ SPARC_INS_MOVDTOX, "movdtox" },
3045 	{ SPARC_INS_MOV, "mov" },
3046 	{ SPARC_INS_MOVRGEZ, "movrgez" },
3047 	{ SPARC_INS_MOVRGZ, "movrgz" },
3048 	{ SPARC_INS_MOVRLEZ, "movrlez" },
3049 	{ SPARC_INS_MOVRLZ, "movrlz" },
3050 	{ SPARC_INS_MOVRNZ, "movrnz" },
3051 	{ SPARC_INS_MOVRZ, "movrz" },
3052 	{ SPARC_INS_MOVSTOSW, "movstosw" },
3053 	{ SPARC_INS_MOVSTOUW, "movstouw" },
3054 	{ SPARC_INS_MULX, "mulx" },
3055 	{ SPARC_INS_NOP, "nop" },
3056 	{ SPARC_INS_ORCC, "orcc" },
3057 	{ SPARC_INS_ORNCC, "orncc" },
3058 	{ SPARC_INS_ORN, "orn" },
3059 	{ SPARC_INS_OR, "or" },
3060 	{ SPARC_INS_PDIST, "pdist" },
3061 	{ SPARC_INS_PDISTN, "pdistn" },
3062 	{ SPARC_INS_POPC, "popc" },
3063 	{ SPARC_INS_RD, "rd" },
3064 	{ SPARC_INS_RESTORE, "restore" },
3065 	{ SPARC_INS_RETT, "rett" },
3066 	{ SPARC_INS_SAVE, "save" },
3067 	{ SPARC_INS_SDIVCC, "sdivcc" },
3068 	{ SPARC_INS_SDIVX, "sdivx" },
3069 	{ SPARC_INS_SDIV, "sdiv" },
3070 	{ SPARC_INS_SETHI, "sethi" },
3071 	{ SPARC_INS_SHUTDOWN, "shutdown" },
3072 	{ SPARC_INS_SIAM, "siam" },
3073 	{ SPARC_INS_SLLX, "sllx" },
3074 	{ SPARC_INS_SLL, "sll" },
3075 	{ SPARC_INS_SMULCC, "smulcc" },
3076 	{ SPARC_INS_SMUL, "smul" },
3077 	{ SPARC_INS_SRAX, "srax" },
3078 	{ SPARC_INS_SRA, "sra" },
3079 	{ SPARC_INS_SRLX, "srlx" },
3080 	{ SPARC_INS_SRL, "srl" },
3081 	{ SPARC_INS_STBAR, "stbar" },
3082 	{ SPARC_INS_STB, "stb" },
3083 	{ SPARC_INS_STD, "std" },
3084 	{ SPARC_INS_ST, "st" },
3085 	{ SPARC_INS_STH, "sth" },
3086 	{ SPARC_INS_STQ, "stq" },
3087 	{ SPARC_INS_STX, "stx" },
3088 	{ SPARC_INS_SUBCC, "subcc" },
3089 	{ SPARC_INS_SUBX, "subx" },
3090 	{ SPARC_INS_SUBXCC, "subxcc" },
3091 	{ SPARC_INS_SUB, "sub" },
3092 	{ SPARC_INS_SWAP, "swap" },
3093 	{ SPARC_INS_TADDCCTV, "taddcctv" },
3094 	{ SPARC_INS_TADDCC, "taddcc" },
3095 	{ SPARC_INS_T, "t" },
3096 	{ SPARC_INS_TSUBCCTV, "tsubcctv" },
3097 	{ SPARC_INS_TSUBCC, "tsubcc" },
3098 	{ SPARC_INS_UDIVCC, "udivcc" },
3099 	{ SPARC_INS_UDIVX, "udivx" },
3100 	{ SPARC_INS_UDIV, "udiv" },
3101 	{ SPARC_INS_UMULCC, "umulcc" },
3102 	{ SPARC_INS_UMULXHI, "umulxhi" },
3103 	{ SPARC_INS_UMUL, "umul" },
3104 	{ SPARC_INS_UNIMP, "unimp" },
3105 	{ SPARC_INS_FCMPED, "fcmped" },
3106 	{ SPARC_INS_FCMPEQ, "fcmpeq" },
3107 	{ SPARC_INS_FCMPES, "fcmpes" },
3108 	{ SPARC_INS_WR, "wr" },
3109 	{ SPARC_INS_XMULX, "xmulx" },
3110 	{ SPARC_INS_XMULXHI, "xmulxhi" },
3111 	{ SPARC_INS_XNORCC, "xnorcc" },
3112 	{ SPARC_INS_XNOR, "xnor" },
3113 	{ SPARC_INS_XORCC, "xorcc" },
3114 	{ SPARC_INS_XOR, "xor" },
3115 
3116 	// alias instructions
3117 	{ SPARC_INS_RET, "ret" },
3118 	{ SPARC_INS_RETL, "retl" },
3119 };
3120 
3121 #ifndef CAPSTONE_DIET
3122 // special alias insn
3123 static name_map alias_insn_names[] = {
3124 	{ 0, NULL }
3125 };
3126 #endif
3127 
Sparc_insn_name(csh handle,unsigned int id)3128 const char *Sparc_insn_name(csh handle, unsigned int id)
3129 {
3130 #ifndef CAPSTONE_DIET
3131 	unsigned int i;
3132 
3133 	if (id >= SPARC_INS_ENDING)
3134 		return NULL;
3135 
3136 	// handle special alias first
3137 	for (i = 0; i < ARR_SIZE(alias_insn_names); i++) {
3138 		if (alias_insn_names[i].id == id)
3139 			return alias_insn_names[i].name;
3140 	}
3141 
3142 	return insn_name_maps[id].name;
3143 #else
3144 	return NULL;
3145 #endif
3146 }
3147 
3148 #ifndef CAPSTONE_DIET
3149 static name_map group_name_maps[] = {
3150 	// generic groups
3151 	{ SPARC_GRP_INVALID, NULL },
3152 	{ SPARC_GRP_JUMP, "jump" },
3153 
3154 	// architecture-specific groups
3155 	{ SPARC_GRP_HARDQUAD, "hardquad" },
3156 	{ SPARC_GRP_V9, "v9" },
3157 	{ SPARC_GRP_VIS, "vis" },
3158 	{ SPARC_GRP_VIS2, "vis2" },
3159 	{ SPARC_GRP_VIS3,  "vis3" },
3160 	{ SPARC_GRP_32BIT, "32bit" },
3161 	{ SPARC_GRP_64BIT, "64bit" },
3162 };
3163 #endif
3164 
Sparc_group_name(csh handle,unsigned int id)3165 const char *Sparc_group_name(csh handle, unsigned int id)
3166 {
3167 #ifndef CAPSTONE_DIET
3168 	// verify group id
3169 	if (id >= SPARC_GRP_ENDING || (id > SPARC_GRP_JUMP && id < SPARC_GRP_HARDQUAD))
3170 		return NULL;
3171 
3172 	// NOTE: when new generic groups are added, 2 must be changed accordingly
3173 	if (id >= 128)
3174 		return group_name_maps[id - 128 + 2].name;
3175 	else
3176 		return group_name_maps[id].name;
3177 #else
3178 	return NULL;
3179 #endif
3180 }
3181 
3182 // map internal raw register to 'public' register
Sparc_map_register(unsigned int r)3183 sparc_reg Sparc_map_register(unsigned int r)
3184 {
3185 	static unsigned int map[] = { 0,
3186 		SPARC_REG_ICC, SPARC_REG_Y, SPARC_REG_F0, SPARC_REG_F2, SPARC_REG_F4,
3187 		SPARC_REG_F6, SPARC_REG_F8, SPARC_REG_F10, SPARC_REG_F12, SPARC_REG_F14,
3188 		SPARC_REG_F16, SPARC_REG_F18, SPARC_REG_F20, SPARC_REG_F22, SPARC_REG_F24,
3189 		SPARC_REG_F26, SPARC_REG_F28, SPARC_REG_F30, SPARC_REG_F32, SPARC_REG_F34,
3190 		SPARC_REG_F36, SPARC_REG_F38, SPARC_REG_F40, SPARC_REG_F42, SPARC_REG_F44,
3191 		SPARC_REG_F46, SPARC_REG_F48, SPARC_REG_F50, SPARC_REG_F52, SPARC_REG_F54,
3192 		SPARC_REG_F56, SPARC_REG_F58, SPARC_REG_F60, SPARC_REG_F62, SPARC_REG_F0,
3193 		SPARC_REG_F1, SPARC_REG_F2, SPARC_REG_F3, SPARC_REG_F4, SPARC_REG_F5,
3194 		SPARC_REG_F6, SPARC_REG_F7, SPARC_REG_F8, SPARC_REG_F9, SPARC_REG_F10,
3195 		SPARC_REG_F11, SPARC_REG_F12, SPARC_REG_F13, SPARC_REG_F14, SPARC_REG_F15,
3196 		SPARC_REG_F16, SPARC_REG_F17, SPARC_REG_F18, SPARC_REG_F19, SPARC_REG_F20,
3197 		SPARC_REG_F21, SPARC_REG_F22, SPARC_REG_F23, SPARC_REG_F24, SPARC_REG_F25,
3198 		SPARC_REG_F26, SPARC_REG_F27, SPARC_REG_F28, SPARC_REG_F29, SPARC_REG_F30,
3199 		SPARC_REG_F31, SPARC_REG_FCC0, SPARC_REG_FCC1, SPARC_REG_FCC2, SPARC_REG_FCC3,
3200 		SPARC_REG_G0, SPARC_REG_G1, SPARC_REG_G2, SPARC_REG_G3, SPARC_REG_G4,
3201 		SPARC_REG_G5, SPARC_REG_G6, SPARC_REG_G7, SPARC_REG_I0, SPARC_REG_I1,
3202 		SPARC_REG_I2, SPARC_REG_I3, SPARC_REG_I4, SPARC_REG_I5, SPARC_REG_FP,
3203 		SPARC_REG_I7, SPARC_REG_L0, SPARC_REG_L1, SPARC_REG_L2, SPARC_REG_L3,
3204 		SPARC_REG_L4, SPARC_REG_L5, SPARC_REG_L6, SPARC_REG_L7, SPARC_REG_O0,
3205 		SPARC_REG_O1, SPARC_REG_O2, SPARC_REG_O3, SPARC_REG_O4, SPARC_REG_O5,
3206 		SPARC_REG_SP, SPARC_REG_O7, SPARC_REG_F0, SPARC_REG_F4, SPARC_REG_F8,
3207 		SPARC_REG_F12, SPARC_REG_F16, SPARC_REG_F20, SPARC_REG_F24, SPARC_REG_F28,
3208 		SPARC_REG_F32, SPARC_REG_F36, SPARC_REG_F40, SPARC_REG_F44, SPARC_REG_F48,
3209 		SPARC_REG_F52, SPARC_REG_F56, SPARC_REG_F60,
3210 	};
3211 
3212 	if (r < ARR_SIZE(map))
3213 		return map[r];
3214 
3215 	// cannot find this register
3216 	return 0;
3217 }
3218 
3219 // map instruction name to instruction ID (public)
Sparc_map_insn(const char * name)3220 sparc_reg Sparc_map_insn(const char *name)
3221 {
3222 	unsigned int i;
3223 
3224 	// NOTE: skip first NULL name in insn_name_maps
3225 	i = name2id(&insn_name_maps[1], ARR_SIZE(insn_name_maps) - 1, name);
3226 
3227 	return (i != -1)? i : SPARC_REG_INVALID;
3228 }
3229 
3230 // NOTE: put strings in the order of string length since
3231 // we are going to compare with mnemonic to find out CC
3232 static name_map alias_icc_maps[] = {
3233 	{ SPARC_CC_ICC_LEU, "leu" },
3234 	{ SPARC_CC_ICC_POS, "pos" },
3235 	{ SPARC_CC_ICC_NEG, "neg" },
3236 	{ SPARC_CC_ICC_NE, "ne" },
3237 	{ SPARC_CC_ICC_LE, "le" },
3238 	{ SPARC_CC_ICC_GE, "ge" },
3239 	{ SPARC_CC_ICC_GU, "gu" },
3240 	{ SPARC_CC_ICC_CC, "cc" },
3241 	{ SPARC_CC_ICC_CS, "cs" },
3242 	{ SPARC_CC_ICC_VC, "vc" },
3243 	{ SPARC_CC_ICC_VS, "vs" },
3244 	{ SPARC_CC_ICC_A, "a" },
3245 	{ SPARC_CC_ICC_N, "n" },
3246 	{ SPARC_CC_ICC_E, "e" },
3247 	{ SPARC_CC_ICC_G, "g" },
3248 	{ SPARC_CC_ICC_L, "l" },
3249 };
3250 
3251 static name_map alias_fcc_maps[] = {
3252 	{ SPARC_CC_FCC_UGE, "uge" },
3253 	{ SPARC_CC_FCC_ULE, "ule" },
3254 	{ SPARC_CC_FCC_UG, "ug" },
3255 	{ SPARC_CC_FCC_UL, "ul" },
3256 	{ SPARC_CC_FCC_LG, "lg" },
3257 	{ SPARC_CC_FCC_NE, "ne" },
3258 	{ SPARC_CC_FCC_UE, "ue" },
3259 	{ SPARC_CC_FCC_GE, "ge" },
3260 	{ SPARC_CC_FCC_LE, "le" },
3261 	{ SPARC_CC_FCC_A, "a" },
3262 	{ SPARC_CC_FCC_N, "n" },
3263 	{ SPARC_CC_FCC_U, "u" },
3264 	{ SPARC_CC_FCC_G, "g" },
3265 	{ SPARC_CC_FCC_L, "l" },
3266 	{ SPARC_CC_FCC_E, "e" },
3267 	{ SPARC_CC_FCC_O, "o" },
3268 };
3269 
3270 // map CC string to CC id
Sparc_map_ICC(const char * name)3271 sparc_cc Sparc_map_ICC(const char *name)
3272 {
3273 	unsigned int i;
3274 
3275 	i = name2id(alias_icc_maps, ARR_SIZE(alias_icc_maps), name);
3276 
3277 	return (i != -1)? i : SPARC_CC_INVALID;
3278 }
3279 
Sparc_map_FCC(const char * name)3280 sparc_cc Sparc_map_FCC(const char *name)
3281 {
3282 	unsigned int i;
3283 
3284 	i = name2id(alias_fcc_maps, ARR_SIZE(alias_fcc_maps), name);
3285 
3286 	return (i != -1)? i : SPARC_CC_INVALID;
3287 }
3288 
3289 static name_map hint_maps[] = {
3290 	{ SPARC_HINT_A, ",a" },
3291 	{ SPARC_HINT_A | SPARC_HINT_PN, ",a,pn" },
3292 	{ SPARC_HINT_PN, ",pn" },
3293 };
3294 
Sparc_map_hint(const char * name)3295 sparc_hint Sparc_map_hint(const char *name)
3296 {
3297 	size_t i, l1, l2;
3298 
3299 	l1 = strlen(name);
3300 	for(i = 0; i < ARR_SIZE(hint_maps); i++) {
3301 		l2 = strlen(hint_maps[i].name);
3302 		if (l1 > l2) {
3303 			// compare the last part of @name with this hint string
3304 			if (!strcmp(hint_maps[i].name, name + (l1 - l2)))
3305 				return hint_maps[i].id;
3306 		}
3307 	}
3308 
3309 	return SPARC_HINT_INVALID;
3310 }
3311 
3312 #endif
3313