1 /// Types and constants of X86 architecture
2 module capstone.x86;
3 
4 import std.conv: to;
5 import std.typecons: BitFlags;
6 
7 import capstone.api;
8 import capstone.capstone;
9 import capstone.detail;
10 import capstone.instruction;
11 import capstone.instructiongroup;
12 import capstone.internal;
13 import capstone.register;
14 import capstone.utils;
15 
16 /// Architecture-specific Register variant
17 class X86Register : RegisterImpl!X86RegisterId {
18     package this(in Capstone cs, in int id) {
19         super(cs, id);
20     }
21 }
22 
23 /// Architecture-specific InstructionGroup variant
24 class X86InstructionGroup : InstructionGroupImpl!X86InstructionGroupId {
25     package this(in Capstone cs, in int id) {
26         super(cs, id);
27     }
28 }
29 
30 /// Architecture-specific Detail variant
31 class X86Detail : DetailImpl!(X86Register, X86InstructionGroup, X86InstructionDetail) {
32     package this(in Capstone cs, cs_detail* internal) {
33 		super(cs, internal);
34 	}
35 }
36 
37 /// Architecture-specific instruction variant
38 class X86Instruction : InstructionImpl!(X86InstructionId, X86Register, X86Detail) {
39     package this(in Capstone cs, cs_insn* internal) {
40 		super(cs, internal);
41 	}
42 }
43 
44 /// Architecture-specific Capstone variant
45 class CapstoneX86 : CapstoneImpl!(X86InstructionId, X86Instruction) {
46     /** Creates an architecture-specific instance with a given mode of interpretation
47     
48     Params:
49         modeFlags = The (initial) mode of interpretation, which can still be changed later on
50     */
51 	this(in ModeFlags modeFlags){
52         super(Arch.x86, modeFlags);
53     }
54 }
55 
56 /// Instruction encoding info
57 struct X86Encoding {
58 	ubyte modrmOffset; /// ModR/M offset, or 0 when irrelevant
59 
60 	ubyte dispOffset; /// Displacement offset, or 0 when irrelevant.
61 	ubyte dispSize; /// Size of displacement
62 
63 	ubyte immOffset; /// Immediate offset, or 0 when irrelevant.
64 	ubyte immSize; /// Size of immediate 
65 
66 	package this(cs_x86_encoding internal){
67 		modrmOffset = internal.modrm_offset;
68 		dispOffset = internal.disp_offset;
69 		dispSize = internal.disp_size;
70 		immOffset = internal.imm_offset;
71 		immSize = internal.imm_size;
72 	}
73 }
74 
75 /** Instruction's operand referring to memory
76 
77 This is associated with the `X86OpType.mem` operand type
78 */
79 struct X86OpMem {
80     X86Register segment; /// Segment register (or `X86Register.invalid` if irrelevant)
81     X86Register base;    /// Base register (or `X86Register.invalid` if irrelevant)
82     X86Register index;   /// Index register (or `X86Register.invalid` if irrelevant)
83     int scale;           /// Scale for index register
84     long disp;           /// Displacement value
85 
86 	package this(in Capstone cs, x86_op_mem internal){
87 		segment = new X86Register(cs, internal.segment);
88 		base = new X86Register(cs, internal.base);
89 		index = new X86Register(cs, internal.index);
90 		scale = internal.scale;
91 		disp = internal.disp;
92 	}
93 }
94 
95 /// Union of possible operand types
96 union X86OpValue {
97 	X86Register reg; /// Register value for REG operand
98 	long imm;		 /// Immediate value for IMM operand
99 	X86OpMem mem;	 /// Base/index/scale/disp value for MEM operand
100 }
101 
102 /// Instruction's operand
103 struct X86Op {
104     X86OpType type;   /// Operand type
105     SafeUnion!X86OpValue value; /// Operand value of type `type`
106     alias value this; /// Convenient access to value (as in original bindings)
107 
108     ubyte size; /// Size of this operand (in bytes)
109 	
110 	/** How is this operand accessed? (READ, WRITE or READ|WRITE)
111 
112 	NOTE: This field is irrelevant, i.e. equals 0, if engine is compiled in DIET mode.
113     */
114 	AccessFlags access;
115 
116     X86AvxBroadcast avxBcast; /// AVX broadcast type, or `X86AvxBroadcast.invalid`
117     bool avxZeroOpmask;       /// AVX zero opmask {z}
118 
119     package this(in Capstone cs, cs_x86_op internal){
120         type = internal.type.to!X86OpType;
121         final switch(internal.type) {
122             case X86OpType.invalid:
123                 break;
124             case X86OpType.reg:
125                 value.reg = new X86Register(cs, internal.reg);
126                 break;
127             case X86OpType.imm:
128                 value.imm = internal.imm;
129                 break;
130             case X86OpType.mem:
131                 value.mem = X86OpMem(cs, internal.mem);
132                 break;
133         }
134         size = internal.size;
135         access = cast(AccessType)internal.access;
136         avxBcast = internal.avx_bcast.to!X86AvxBroadcast;
137         avxZeroOpmask = internal.avx_zero_opmask;
138     }
139 }
140 
141 /// X86-specific information about an instruction
142 struct X86InstructionDetail {
143     /** Instruction prefix, which can be up to 4 bytes.
144 
145     A prefix byte gets value 0 when irrelevant.
146     $(OL
147         $(LI `prefix[0]` indicates REP/REPNE/LOCK prefix (See `X86Prefix.rep`, `X86Prefix.repne`, `X86Prefix.lock`))
148         $(LI `prefix[1]` indicates segment override (irrelevant for x86_64):
149                 See `X86Prefix.cs`,`X86Prefix.ss`,`X86Prefix.ds`,`X86Prefix.es`,`X86Prefix.fs`,`X86Prefix.gs`)
150         $(LI `prefix[2]` indicates operand-size override (`X86Prefix.opsize`))
151         $(LI `prefix[3]` indicates address-size override (`X86Prefix.addrsize`))
152     )
153     */
154     ubyte[] prefix; // TODO: Split? Get rid of trailing 0 bytes?
155 
156     /** Instruction opcode, wich can be from 1 to 4 bytes in size.
157 
158     This contains VEX opcode as well. A trailing opcode byte gets value 0 when irrelevant.
159     */
160     ubyte[] opcode; // TODO: Get rid of irrelevant trailing bytes?
161     ubyte rex;      /// REX prefix: only a non-zero value is relavant for x86_64
162     ubyte addrSize; /// Address size
163     ubyte modRM;    /// ModR/M byte
164     ubyte sib;      /// SIB value, or 0 when irrelevant
165     long disp;      /// Displacement value, or 0 when irrelevant
166 
167     // SIB state
168     X86Register sibIndex;      /// SIB index register, or `X86Register.invalid` when irrelevant
169     byte sibScale;             /// SIB scale. Only applicable if `sibIndex` is relavant
170     X86Register sibBase;       /// SIB base register, or `X86Register.invalid` when irrelevant
171 
172 	X86XopCc xopCc;			   /// XOP Code Condition
173     X86SseCodeCondition sseCc; /// SSE code condition
174     X86AvxCodeCondition avxCc; /// AVX code condition
175     bool avxSae;               /// AVX suppress all exceptions
176     X86AvxRoundingMode avxRM;  /// AVX static rounding mode
177 
178 	union{
179 		EFlags eflags;		   /// EFLAGS updated by this instruction
180 		FpuFlags fpuFlags;	   /// FPUFLAGS updated by this instruction
181 	}
182 
183     X86Op[] operands;          /// Operands for this instruction.
184 	X86Encoding encoding;	   /// Encoding information
185 
186     package this(in Capstone cs, cs_arch_detail arch_detail){
187         auto internal = arch_detail.x86;
188         prefix = internal.prefix.dup;
189         opcode = internal.opcode.dup;
190         rex = internal.rex;
191         addrSize = internal.addr_size;
192         modRM = internal.modrm;
193         sib = internal.sib;
194         disp = internal.disp;
195         sibIndex = new X86Register(cs, internal.sib_index);
196         sibScale = internal.sib_scale;
197         sibBase = new X86Register(cs, internal.sib_base);
198 		xopCc = internal.xop_cc.to!X86XopCc;
199         sseCc = internal.sse_cc.to!X86SseCodeCondition;
200         avxCc = internal.avx_cc.to!X86AvxCodeCondition;
201 		eflags = cast(EFlag)internal.eflags; // covers fpuFlags too
202         avxRM = internal.avx_rm.to!X86AvxRoundingMode;
203 		encoding = X86Encoding(internal.encoding);
204 
205         foreach(op; internal.operands[0..internal.op_count])
206             operands ~= X86Op(cs, op);
207     }
208 }
209 
210 /// Operand type for instruction's operands
211 enum X86OpType {
212     invalid = 0, /// Invalid
213     reg,         /// Register operand (`X86Register`)
214     imm,         /// Immediate operand (`long`)
215     mem,         /// Memory operand (`X86OpMem`)
216 }
217 
218 /// XOP Code Condition type
219 enum X86XopCc {
220 	invalid = 0,
221 	lt,
222 	le,
223 	gt,
224 	ge,
225 	eq,
226 	neq,
227 	false_,
228 	true_,
229 }
230 
231 /// AVX broadcast type
232 enum X86AvxBroadcast {
233     invalid = 0, /// Invalid
234     bcast_2,     /// Avx512 broadcast type {1to2}
235     bcast_4,     /// Avx512 broadcast type {1to4}
236     bcast_8,     /// Avx512 broadcast type {1to8}
237     bcast_16     /// Avx512 broadcast type {1to16}
238 }
239 
240 /// SSE code condition type
241 enum X86SseCodeCondition {
242     invalid = 0,
243     eq,
244     lt,
245     le,
246     unord,
247     neq,
248     nlt,
249     nle,
250     ord,
251     eq_uq,
252     nge,
253     ngt,
254     false_,
255     neq_oq,
256     ge,
257     gt,
258     true_
259 }
260 
261 /// AVX code condition type
262 enum X86AvxCodeCondition {
263     invalid = 0,
264     eq,
265     lt,
266     le,
267     unord,
268     neq,
269     nlt,
270     nle,
271     ord,
272     eq_uq,
273     nge,
274     ngt,
275     false_,
276     neq_oq,
277     ge,
278     gt,
279     true_,
280     eq_os,
281     lt_oq,
282     le_oq,
283     unord_s,
284     neq_us,
285     nlt_uq,
286     nle_uq,
287     ord_s,
288     eq_us,
289     nge_uq,
290     ngt_uq,
291     false_os,
292     neq_os,
293     ge_oq,
294     gt_oq,
295     true_us
296 }
297 
298 /// AVX static rounding mode type
299 enum X86AvxRoundingMode {
300     invalid = 0, /// Invalid
301     rn,          /// Round to nearest
302     rd,          /// Round down
303     ru,          /// Round up
304     rz           /// Round toward zero
305 }
306 
307 /// Instruction prefixes - used in `X86InstructionDetail.prefix[]`
308 enum X86Prefix {
309     lock        =   0xf0,   /// Rock (cs_x86.prefix[0]
310     rep         =   0xf3,   /// Rep (cs_x86.prefix[0]
311     repne       =   0xf2,   /// Repne (cs_x86.prefix[0]
312 
313     cs          =   0x2e,   /// Segment override cs (cs_x86.prefix[1]
314     ss          =   0x36,   /// Segment override ss (cs_x86.prefix[1]
315     ds          =   0x3e,   /// Segment override ds (cs_x86.prefix[1]
316     es          =   0x26,   /// Segment override es (cs_x86.prefix[1]
317     fs          =   0x64,   /// Segment override fs (cs_x86.prefix[1]
318     gs          =   0x65,   /// Segment override gs (cs_x86.prefix[1]
319 
320     opsize      =   0x66,   /// Operand-size override (cs_x86.prefix[2]
321     addrsize    =   0x67    /// Address-size override (cs_x86.prefix[3]
322 }
323 
324 /// Subflags of EFLAGS
325 enum EFlag : ulong {
326 	mod_af = 1UL << 0,
327 	mod_cf = 1UL << 1,
328 	mod_sf = 1UL << 2,
329 	mod_zf = 1UL << 3,
330 	mod_pf = 1UL << 4,
331 	mod_of = 1UL << 5,
332 	mod_tf = 1UL << 6,
333 	mod_if = 1UL << 7,
334 	mod_df = 1UL << 8,
335 	mod_nt = 1UL << 9,
336 	mod_rf = 1UL << 10,
337 	prior_of = 1UL << 11,
338 	prior_sf = 1UL << 12,
339 	prior_zf = 1UL << 13,
340 	prior_af = 1UL << 14,
341 	prior_pf = 1UL << 15,
342 	prior_cf = 1UL << 16,
343 	prior_tf = 1UL << 17,
344 	prior_if = 1UL << 18,
345 	prior_df = 1UL << 19,
346 	prior_nt = 1UL << 20,
347 	reset_of = 1UL << 21,
348 	reset_cf = 1UL << 22,
349 	reset_df = 1UL << 23,
350 	reset_if = 1UL << 24,
351 	reset_sf = 1UL << 25,
352 	reset_af = 1UL << 26,
353 	reset_tf = 1UL << 27,
354 	reset_nt = 1UL << 28,
355 	reset_pf = 1UL << 29,
356 	set_cf = 1UL << 30,
357 	set_df = 1UL << 31,
358 	set_if = 1UL << 32,
359 	test_of = 1UL << 33,
360 	test_sf = 1UL << 34,
361 	test_zf = 1UL << 35,
362 	test_pf = 1UL << 36,
363 	test_cf = 1UL << 37,
364 	test_nt = 1UL << 38,
365 	test_df = 1UL << 39,
366 	undef_of = 1UL << 40,
367 	undef_sf = 1UL << 41,
368 	undef_zf = 1UL << 42,
369 	undef_pf = 1UL << 43,
370 	undef_af = 1UL << 44,
371 	undef_cf = 1UL << 45,
372 	reset_rf  = 1UL << 46,
373 	test_rf = 1UL << 47,
374 	test_if = 1UL << 48,
375 	test_tf = 1UL << 49,
376 	test_af = 1UL << 50,
377 	reset_zf = 1UL << 51,
378 	set_of = 1UL << 52,
379 	set_sf = 1UL << 53,
380 	set_zf = 1UL << 54,
381 	set_af = 1UL << 55,
382 	set_pf = 1UL << 56,
383 	reset_0f = 1UL << 57,
384 	reset_ac = 1UL << 58
385 }
386 alias EFlags = BitFlags!EFlag;
387 
388 /// Subflags of FPU_FLAGS
389 enum FpuFlag : ulong {
390 	mod_c0 = 1UL << 0,
391 	mod_c1 = 1UL << 1,
392 	mod_c2 = 1UL << 2,
393 	mod_c3 = 1UL << 3,
394 	reset_c0 = 1UL << 4,
395 	reset_c1 = 1UL << 5,
396 	reset_c2 = 1UL << 6,
397 	reset_c3 = 1UL << 7,
398 	set_c0 = 1UL << 8,
399 	set_c1 = 1UL << 9,
400 	set_c2 = 1UL << 10,
401 	set_c3 = 1UL << 11,
402 	undef_c0 = 1UL << 12,
403 	undef_c1 = 1UL << 13,
404 	undef_c2 = 1UL << 14,
405 	undef_c3 = 1UL << 15,
406 	test_c0 = 1UL << 16,
407 	test_c1 = 1UL << 17,
408 	test_c2 = 1UL << 18,
409 	test_c3 = 1UL << 19,
410 }
411 alias FpuFlags = BitFlags!FpuFlag;
412 
413 /// X86 registers
414 enum X86RegisterId {
415     invalid = 0,
416 	ah, al, ax, bh, bl,
417 	bp, bpl, bx, ch, cl,
418 	cs, cx, dh, di, dil,
419 	dl, ds, dx, eax, ebp,
420 	ebx, ecx, edi, edx, eflags,
421 	eip, eiz, es, esi, esp,
422 	fpsw, fs, gs, ip, rax,
423 	rbp, rbx, rcx, rdi, rdx,
424 	rip, riz, rsi, rsp, si,
425 	sil, sp, spl, ss, cr0,
426 	cr1, cr2, cr3, cr4, cr5,
427 	cr6, cr7, cr8, cr9, cr10,
428 	cr11, cr12, cr13, cr14, cr15,
429 	dr0, dr1, dr2, dr3, dr4,
430 	dr5, dr6, dr7, dr8, dr9,
431 	dr10, dr11, dr12, dr13, dr14,
432 	dr15, fp0, fp1, fp2, fp3,
433 	fp4, fp5, fp6, fp7,
434 	k0, k1, k2, k3, k4,
435 	k5, k6, k7, mm0, mm1,
436 	mm2, mm3, mm4, mm5, mm6,
437 	mm7, r8, r9, r10, r11,
438 	r12, r13, r14, r15,
439 	st0, st1, st2, st3,
440 	st4, st5, st6, st7,
441 	xmm0, xmm1, xmm2, xmm3, xmm4,
442 	xmm5, xmm6, xmm7, xmm8, xmm9,
443 	xmm10, xmm11, xmm12, xmm13, xmm14,
444 	xmm15, xmm16, xmm17, xmm18, xmm19,
445 	xmm20, xmm21, xmm22, xmm23, xmm24,
446 	xmm25, xmm26, xmm27, xmm28, xmm29,
447 	xmm30, xmm31, ymm0, ymm1, ymm2,
448 	ymm3, ymm4, ymm5, ymm6, ymm7,
449 	ymm8, ymm9, ymm10, ymm11, ymm12,
450 	ymm13, ymm14, ymm15, ymm16, ymm17,
451 	ymm18, ymm19, ymm20, ymm21, ymm22,
452 	ymm23, ymm24, ymm25, ymm26, ymm27,
453 	ymm28, ymm29, ymm30, ymm31, zmm0,
454 	zmm1, zmm2, zmm3, zmm4, zmm5,
455 	zmm6, zmm7, zmm8, zmm9, zmm10,
456 	zmm11, zmm12, zmm13, zmm14, zmm15,
457 	zmm16, zmm17, zmm18, zmm19, zmm20,
458 	zmm21, zmm22, zmm23, zmm24, zmm25,
459 	zmm26, zmm27, zmm28, zmm29, zmm30,
460 	zmm31, r8b, r9b, r10b, r11b,
461 	r12b, r13b, r14b, r15b, r8d,
462 	r9d, r10d, r11d, r12d, r13d,
463 	r14d, r15d, r8w, r9w, r10w,
464     r11w, r12w, r13w, r14w, r15w,
465 }
466 
467 /// X86 instructions
468 enum X86InstructionId {
469     invalid = 0,
470 
471 	aaa,
472 	aad,
473 	aam,
474 	aas,
475 	fabs,
476 	adc,
477 	adcx,
478 	add,
479 	addpd,
480 	addps,
481 	addsd,
482 	addss,
483 	addsubpd,
484 	addsubps,
485 	fadd,
486 	fiadd,
487 	faddp,
488 	adox,
489 	aesdeclast,
490 	aesdec,
491 	aesenclast,
492 	aesenc,
493 	aesimc,
494 	aeskeygenassist,
495 	and,
496 	andn,
497 	andnpd,
498 	andnps,
499 	andpd,
500 	andps,
501 	arpl,
502 	bextr,
503 	blcfill,
504 	blci,
505 	blcic,
506 	blcmsk,
507 	blcs,
508 	blendpd,
509 	blendps,
510 	blendvpd,
511 	blendvps,
512 	blsfill,
513 	blsi,
514 	blsic,
515 	blsmsk,
516 	blsr,
517 	bound,
518 	bsf,
519 	bsr,
520 	bswap,
521 	bt,
522 	btc,
523 	btr,
524 	bts,
525 	bzhi,
526 	call,
527 	cbw,
528 	cdq,
529 	cdqe,
530 	fchs,
531 	clac,
532 	clc,
533 	cld,
534 	clflush,
535 	clflushopt,
536 	clgi,
537 	cli,
538 	clts,
539 	clwb,
540 	cmc,
541 	cmova,
542 	cmovae,
543 	cmovb,
544 	cmovbe,
545 	fcmovbe,
546 	fcmovb,
547 	cmove,
548 	fcmove,
549 	cmovg,
550 	cmovge,
551 	cmovl,
552 	cmovle,
553 	fcmovnbe,
554 	fcmovnb,
555 	cmovne,
556 	fcmovne,
557 	cmovno,
558 	cmovnp,
559 	fcmovnu,
560 	cmovns,
561 	cmovo,
562 	cmovp,
563 	fcmovu,
564 	cmovs,
565 	cmp,
566 	cmpsb,
567 	cmpsq,
568 	cmpsw,
569 	cmpxchg16b,
570 	cmpxchg,
571 	cmpxchg8b,
572 	comisd,
573 	comiss,
574 	fcomp,
575 	fcomip,
576 	fcomi,
577 	fcom,
578 	fcos,
579 	cpuid,
580 	cqo,
581 	crc32,
582 	cvtdq2pd,
583 	cvtdq2ps,
584 	cvtpd2dq,
585 	cvtpd2ps,
586 	cvtps2dq,
587 	cvtps2pd,
588 	cvtsd2si,
589 	cvtsd2ss,
590 	cvtsi2sd,
591 	cvtsi2ss,
592 	cvtss2sd,
593 	cvtss2si,
594 	cvttpd2dq,
595 	cvttps2dq,
596 	cvttsd2si,
597 	cvttss2si,
598 	cwd,
599 	cwde,
600 	daa,
601 	das,
602 	data16,
603 	dec,
604 	div,
605 	divpd,
606 	divps,
607 	fdivr,
608 	fidivr,
609 	fdivrp,
610 	divsd,
611 	divss,
612 	fdiv,
613 	fidiv,
614 	fdivp,
615 	dppd,
616 	dpps,
617 	ret,
618 	encls,
619 	enclu,
620 	enter,
621 	extractps,
622 	extrq,
623 	f2xm1,
624 	lcall,
625 	ljmp,
626 	fbld,
627 	fbstp,
628 	fcompp,
629 	fdecstp,
630 	femms,
631 	ffree,
632 	ficom,
633 	ficomp,
634 	fincstp,
635 	fldcw,
636 	fldenv,
637 	fldl2e,
638 	fldl2t,
639 	fldlg2,
640 	fldln2,
641 	fldpi,
642 	fnclex,
643 	fninit,
644 	fnop,
645 	fnstcw,
646 	fnstsw,
647 	fpatan,
648 	fprem,
649 	fprem1,
650 	fptan,
651 	ffreep,
652 	frndint,
653 	frstor,
654 	fnsave,
655 	fscale,
656 	fsetpm,
657 	fsincos,
658 	fnstenv,
659 	fxam,
660 	fxrstor,
661 	fxrstor64,
662 	fxsave,
663 	fxsave64,
664 	fxtract,
665 	fyl2x,
666 	fyl2xp1,
667 	movapd,
668 	movaps,
669 	orpd,
670 	orps,
671 	vmovapd,
672 	vmovaps,
673 	xorpd,
674 	xorps,
675 	getsec,
676 	haddpd,
677 	haddps,
678 	hlt,
679 	hsubpd,
680 	hsubps,
681 	idiv,
682 	fild,
683 	imul,
684 	in_,
685 	inc,
686 	insb,
687 	insertps,
688 	insertq,
689 	insd,
690 	insw,
691 	int_,
692 	int1,
693 	int3,
694 	into,
695 	invd,
696 	invept,
697 	invlpg,
698 	invlpga,
699 	invpcid,
700 	invvpid,
701 	iret,
702 	iretd,
703 	iretq,
704 	fisttp,
705 	fist,
706 	fistp,
707 	ucomisd,
708 	ucomiss,
709 	vcomisd,
710 	vcomiss,
711 	vcvtsd2ss,
712 	vcvtsi2sd,
713 	vcvtsi2ss,
714 	vcvtss2sd,
715 	vcvttsd2si,
716 	vcvttsd2usi,
717 	vcvttss2si,
718 	vcvttss2usi,
719 	vcvtusi2sd,
720 	vcvtusi2ss,
721 	vucomisd,
722 	vucomiss,
723 	jae,
724 	ja,
725 	jbe,
726 	jb,
727 	jcxz,
728 	jecxz,
729 	je,
730 	jge,
731 	jg,
732 	jle,
733 	jl,
734 	jmp,
735 	jne,
736 	jno,
737 	jnp,
738 	jns,
739 	jo,
740 	jp,
741 	jrcxz,
742 	js,
743 	kandb,
744 	kandd,
745 	kandnb,
746 	kandnd,
747 	kandnq,
748 	kandnw,
749 	kandq,
750 	kandw,
751 	kmovb,
752 	kmovd,
753 	kmovq,
754 	kmovw,
755 	knotb,
756 	knotd,
757 	knotq,
758 	knotw,
759 	korb,
760 	kord,
761 	korq,
762 	kortestb,
763 	kortestd,
764 	kortestq,
765 	kortestw,
766 	korw,
767 	kshiftlb,
768 	kshiftld,
769 	kshiftlq,
770 	kshiftlw,
771 	kshiftrb,
772 	kshiftrd,
773 	kshiftrq,
774 	kshiftrw,
775 	kunpckbw,
776 	kxnorb,
777 	kxnord,
778 	kxnorq,
779 	kxnorw,
780 	kxorb,
781 	kxord,
782 	kxorq,
783 	kxorw,
784 	lahf,
785 	lar,
786 	lddqu,
787 	ldmxcsr,
788 	lds,
789 	fldz,
790 	fld1,
791 	fld,
792 	lea,
793 	leave,
794 	les,
795 	lfence,
796 	lfs,
797 	lgdt,
798 	lgs,
799 	lidt,
800 	lldt,
801 	lmsw,
802 	or,
803 	sub,
804 	xor,
805 	lodsb,
806 	lodsd,
807 	lodsq,
808 	lodsw,
809 	loop,
810 	loope,
811 	loopne,
812 	retf,
813 	retfq,
814 	lsl,
815 	lss,
816 	ltr,
817 	xadd,
818 	lzcnt,
819 	maskmovdqu,
820 	maxpd,
821 	maxps,
822 	maxsd,
823 	maxss,
824 	mfence,
825 	minpd,
826 	minps,
827 	minsd,
828 	minss,
829 	cvtpd2pi,
830 	cvtpi2pd,
831 	cvtpi2ps,
832 	cvtps2pi,
833 	cvttpd2pi,
834 	cvttps2pi,
835 	emms,
836 	maskmovq,
837 	movd,
838 	movdq2q,
839 	movntq,
840 	movq2dq,
841 	movq,
842 	pabsb,
843 	pabsd,
844 	pabsw,
845 	packssdw,
846 	packsswb,
847 	packuswb,
848 	paddb,
849 	paddd,
850 	paddq,
851 	paddsb,
852 	paddsw,
853 	paddusb,
854 	paddusw,
855 	paddw,
856 	palignr,
857 	pandn,
858 	pand,
859 	pavgb,
860 	pavgw,
861 	pcmpeqb,
862 	pcmpeqd,
863 	pcmpeqw,
864 	pcmpgtb,
865 	pcmpgtd,
866 	pcmpgtw,
867 	pextrw,
868 	phaddsw,
869 	phaddw,
870 	phaddd,
871 	phsubd,
872 	phsubsw,
873 	phsubw,
874 	pinsrw,
875 	pmaddubsw,
876 	pmaddwd,
877 	pmaxsw,
878 	pmaxub,
879 	pminsw,
880 	pminub,
881 	pmovmskb,
882 	pmulhrsw,
883 	pmulhuw,
884 	pmulhw,
885 	pmullw,
886 	pmuludq,
887 	por,
888 	psadbw,
889 	pshufb,
890 	pshufw,
891 	psignb,
892 	psignd,
893 	psignw,
894 	pslld,
895 	psllq,
896 	psllw,
897 	psrad,
898 	psraw,
899 	psrld,
900 	psrlq,
901 	psrlw,
902 	psubb,
903 	psubd,
904 	psubq,
905 	psubsb,
906 	psubsw,
907 	psubusb,
908 	psubusw,
909 	psubw,
910 	punpckhbw,
911 	punpckhdq,
912 	punpckhwd,
913 	punpcklbw,
914 	punpckldq,
915 	punpcklwd,
916 	pxor,
917 	monitor,
918 	montmul,
919 	mov,
920 	movabs,
921 	movbe,
922 	movddup,
923 	movdqa,
924 	movdqu,
925 	movhlps,
926 	movhpd,
927 	movhps,
928 	movlhps,
929 	movlpd,
930 	movlps,
931 	movmskpd,
932 	movmskps,
933 	movntdqa,
934 	movntdq,
935 	movnti,
936 	movntpd,
937 	movntps,
938 	movntsd,
939 	movntss,
940 	movsb,
941 	movsd,
942 	movshdup,
943 	movsldup,
944 	movsq,
945 	movss,
946 	movsw,
947 	movsx,
948 	movsxd,
949 	movupd,
950 	movups,
951 	movzx,
952 	mpsadbw,
953 	mul,
954 	mulpd,
955 	mulps,
956 	mulsd,
957 	mulss,
958 	mulx,
959 	fmul,
960 	fimul,
961 	fmulp,
962 	mwait,
963 	neg,
964 	nop,
965 	not,
966 	out_,
967 	outsb,
968 	outsd,
969 	outsw,
970 	packusdw,
971 	pause,
972 	pavgusb,
973 	pblendvb,
974 	pblendw,
975 	pclmulqdq,
976 	pcmpeqq,
977 	pcmpestri,
978 	pcmpestrm,
979 	pcmpgtq,
980 	pcmpistri,
981 	pcmpistrm,
982 	pcommit,
983 	pdep,
984 	pext,
985 	pextrb,
986 	pextrd,
987 	pextrq,
988 	pf2id,
989 	pf2iw,
990 	pfacc,
991 	pfadd,
992 	pfcmpeq,
993 	pfcmpge,
994 	pfcmpgt,
995 	pfmax,
996 	pfmin,
997 	pfmul,
998 	pfnacc,
999 	pfpnacc,
1000 	pfrcpit1,
1001 	pfrcpit2,
1002 	pfrcp,
1003 	pfrsqit1,
1004 	pfrsqrt,
1005 	pfsubr,
1006 	pfsub,
1007 	phminposuw,
1008 	pi2fd,
1009 	pi2fw,
1010 	pinsrb,
1011 	pinsrd,
1012 	pinsrq,
1013 	pmaxsb,
1014 	pmaxsd,
1015 	pmaxud,
1016 	pmaxuw,
1017 	pminsb,
1018 	pminsd,
1019 	pminud,
1020 	pminuw,
1021 	pmovsxbd,
1022 	pmovsxbq,
1023 	pmovsxbw,
1024 	pmovsxdq,
1025 	pmovsxwd,
1026 	pmovsxwq,
1027 	pmovzxbd,
1028 	pmovzxbq,
1029 	pmovzxbw,
1030 	pmovzxdq,
1031 	pmovzxwd,
1032 	pmovzxwq,
1033 	pmuldq,
1034 	pmulhrw,
1035 	pmulld,
1036 	pop,
1037 	popaw,
1038 	popal,
1039 	popcnt,
1040 	popf,
1041 	popfd,
1042 	popfq,
1043 	prefetch,
1044 	prefetchnta,
1045 	prefetcht0,
1046 	prefetcht1,
1047 	prefetcht2,
1048 	prefetchw,
1049 	pshufd,
1050 	pshufhw,
1051 	pshuflw,
1052 	pslldq,
1053 	psrldq,
1054 	pswapd,
1055 	ptest,
1056 	punpckhqdq,
1057 	punpcklqdq,
1058 	push,
1059 	pushaw,
1060 	pushal,
1061 	pushf,
1062 	pushfd,
1063 	pushfq,
1064 	rcl,
1065 	rcpps,
1066 	rcpss,
1067 	rcr,
1068 	rdfsbase,
1069 	rdgsbase,
1070 	rdmsr,
1071 	rdpmc,
1072 	rdrand,
1073 	rdseed,
1074 	rdtsc,
1075 	rdtscp,
1076 	rol,
1077 	ror,
1078 	rorx,
1079 	roundpd,
1080 	roundps,
1081 	roundsd,
1082 	roundss,
1083 	rsm,
1084 	rsqrtps,
1085 	rsqrtss,
1086 	sahf,
1087 	sal,
1088 	salc,
1089 	sar,
1090 	sarx,
1091 	sbb,
1092 	scasb,
1093 	scasd,
1094 	scasq,
1095 	scasw,
1096 	setae,
1097 	seta,
1098 	setbe,
1099 	setb,
1100 	sete,
1101 	setge,
1102 	setg,
1103 	setle,
1104 	setl,
1105 	setne,
1106 	setno,
1107 	setnp,
1108 	setns,
1109 	seto,
1110 	setp,
1111 	sets,
1112 	sfence,
1113 	sgdt,
1114 	sha1msg1,
1115 	sha1msg2,
1116 	sha1nexte,
1117 	sha1rnds4,
1118 	sha256msg1,
1119 	sha256msg2,
1120 	sha256rnds2,
1121 	shl,
1122 	shld,
1123 	shlx,
1124 	shr,
1125 	shrd,
1126 	shrx,
1127 	shufpd,
1128 	shufps,
1129 	sidt,
1130 	fsin,
1131 	skinit,
1132 	sldt,
1133 	smsw,
1134 	sqrtpd,
1135 	sqrtps,
1136 	sqrtsd,
1137 	sqrtss,
1138 	fsqrt,
1139 	stac,
1140 	stc,
1141 	std,
1142 	stgi,
1143 	sti,
1144 	stmxcsr,
1145 	stosb,
1146 	stosd,
1147 	stosq,
1148 	stosw,
1149 	str,
1150 	fst,
1151 	fstp,
1152 	fstpnce,
1153 	fxch,
1154 	subpd,
1155 	subps,
1156 	fsubr,
1157 	fisubr,
1158 	fsubrp,
1159 	subsd,
1160 	subss,
1161 	fsub,
1162 	fisub,
1163 	fsubp,
1164 	swapgs,
1165 	syscall,
1166 	sysenter,
1167 	sysexit,
1168 	sysret,
1169 	t1mskc,
1170 	test,
1171 	ud2,
1172 	ftst,
1173 	tzcnt,
1174 	tzmsk,
1175 	fucomip,
1176 	fucomi,
1177 	fucompp,
1178 	fucomp,
1179 	fucom,
1180 	ud2b,
1181 	unpckhpd,
1182 	unpckhps,
1183 	unpcklpd,
1184 	unpcklps,
1185 	vaddpd,
1186 	vaddps,
1187 	vaddsd,
1188 	vaddss,
1189 	vaddsubpd,
1190 	vaddsubps,
1191 	vaesdeclast,
1192 	vaesdec,
1193 	vaesenclast,
1194 	vaesenc,
1195 	vaesimc,
1196 	vaeskeygenassist,
1197 	valignd,
1198 	valignq,
1199 	vandnpd,
1200 	vandnps,
1201 	vandpd,
1202 	vandps,
1203 	vblendmpd,
1204 	vblendmps,
1205 	vblendpd,
1206 	vblendps,
1207 	vblendvpd,
1208 	vblendvps,
1209 	vbroadcastf128,
1210 	vbroadcasti32x4,
1211 	vbroadcasti64x4,
1212 	vbroadcastsd,
1213 	vbroadcastss,
1214 	vcompresspd,
1215 	vcompressps,
1216 	vcvtdq2pd,
1217 	vcvtdq2ps,
1218 	vcvtpd2dqx,
1219 	vcvtpd2dq,
1220 	vcvtpd2psx,
1221 	vcvtpd2ps,
1222 	vcvtpd2udq,
1223 	vcvtph2ps,
1224 	vcvtps2dq,
1225 	vcvtps2pd,
1226 	vcvtps2ph,
1227 	vcvtps2udq,
1228 	vcvtsd2si,
1229 	vcvtsd2usi,
1230 	vcvtss2si,
1231 	vcvtss2usi,
1232 	vcvttpd2dqx,
1233 	vcvttpd2dq,
1234 	vcvttpd2udq,
1235 	vcvttps2dq,
1236 	vcvttps2udq,
1237 	vcvtudq2pd,
1238 	vcvtudq2ps,
1239 	vdivpd,
1240 	vdivps,
1241 	vdivsd,
1242 	vdivss,
1243 	vdppd,
1244 	vdpps,
1245 	verr,
1246 	verw,
1247 	vexp2pd,
1248 	vexp2ps,
1249 	vexpandpd,
1250 	vexpandps,
1251 	vextractf128,
1252 	vextractf32x4,
1253 	vextractf64x4,
1254 	vextracti128,
1255 	vextracti32x4,
1256 	vextracti64x4,
1257 	vextractps,
1258 	vfmadd132pd,
1259 	vfmadd132ps,
1260 	vfmaddpd,
1261 	vfmadd213pd,
1262 	vfmadd231pd,
1263 	vfmaddps,
1264 	vfmadd213ps,
1265 	vfmadd231ps,
1266 	vfmaddsd,
1267 	vfmadd213sd,
1268 	vfmadd132sd,
1269 	vfmadd231sd,
1270 	vfmaddss,
1271 	vfmadd213ss,
1272 	vfmadd132ss,
1273 	vfmadd231ss,
1274 	vfmaddsub132pd,
1275 	vfmaddsub132ps,
1276 	vfmaddsubpd,
1277 	vfmaddsub213pd,
1278 	vfmaddsub231pd,
1279 	vfmaddsubps,
1280 	vfmaddsub213ps,
1281 	vfmaddsub231ps,
1282 	vfmsub132pd,
1283 	vfmsub132ps,
1284 	vfmsubadd132pd,
1285 	vfmsubadd132ps,
1286 	vfmsubaddpd,
1287 	vfmsubadd213pd,
1288 	vfmsubadd231pd,
1289 	vfmsubaddps,
1290 	vfmsubadd213ps,
1291 	vfmsubadd231ps,
1292 	vfmsubpd,
1293 	vfmsub213pd,
1294 	vfmsub231pd,
1295 	vfmsubps,
1296 	vfmsub213ps,
1297 	vfmsub231ps,
1298 	vfmsubsd,
1299 	vfmsub213sd,
1300 	vfmsub132sd,
1301 	vfmsub231sd,
1302 	vfmsubss,
1303 	vfmsub213ss,
1304 	vfmsub132ss,
1305 	vfmsub231ss,
1306 	vfnmadd132pd,
1307 	vfnmadd132ps,
1308 	vfnmaddpd,
1309 	vfnmadd213pd,
1310 	vfnmadd231pd,
1311 	vfnmaddps,
1312 	vfnmadd213ps,
1313 	vfnmadd231ps,
1314 	vfnmaddsd,
1315 	vfnmadd213sd,
1316 	vfnmadd132sd,
1317 	vfnmadd231sd,
1318 	vfnmaddss,
1319 	vfnmadd213ss,
1320 	vfnmadd132ss,
1321 	vfnmadd231ss,
1322 	vfnmsub132pd,
1323 	vfnmsub132ps,
1324 	vfnmsubpd,
1325 	vfnmsub213pd,
1326 	vfnmsub231pd,
1327 	vfnmsubps,
1328 	vfnmsub213ps,
1329 	vfnmsub231ps,
1330 	vfnmsubsd,
1331 	vfnmsub213sd,
1332 	vfnmsub132sd,
1333 	vfnmsub231sd,
1334 	vfnmsubss,
1335 	vfnmsub213ss,
1336 	vfnmsub132ss,
1337 	vfnmsub231ss,
1338 	vfrczpd,
1339 	vfrczps,
1340 	vfrczsd,
1341 	vfrczss,
1342 	vorpd,
1343 	vorps,
1344 	vxorpd,
1345 	vxorps,
1346 	vgatherdpd,
1347 	vgatherdps,
1348 	vgatherpf0dpd,
1349 	vgatherpf0dps,
1350 	vgatherpf0qpd,
1351 	vgatherpf0qps,
1352 	vgatherpf1dpd,
1353 	vgatherpf1dps,
1354 	vgatherpf1qpd,
1355 	vgatherpf1qps,
1356 	vgatherqpd,
1357 	vgatherqps,
1358 	vhaddpd,
1359 	vhaddps,
1360 	vhsubpd,
1361 	vhsubps,
1362 	vinsertf128,
1363 	vinsertf32x4,
1364 	vinsertf32x8,
1365 	vinsertf64x2,
1366 	vinsertf64x4,
1367 	vinserti128,
1368 	vinserti32x4,
1369 	vinserti32x8,
1370 	vinserti64x2,
1371 	vinserti64x4,
1372 	vinsertps,
1373 	vlddqu,
1374 	vldmxcsr,
1375 	vmaskmovdqu,
1376 	vmaskmovpd,
1377 	vmaskmovps,
1378 	vmaxpd,
1379 	vmaxps,
1380 	vmaxsd,
1381 	vmaxss,
1382 	vmcall,
1383 	vmclear,
1384 	vmfunc,
1385 	vminpd,
1386 	vminps,
1387 	vminsd,
1388 	vminss,
1389 	vmlaunch,
1390 	vmload,
1391 	vmmcall,
1392 	vmovq,
1393 	vmovddup,
1394 	vmovd,
1395 	vmovdqa32,
1396 	vmovdqa64,
1397 	vmovdqa,
1398 	vmovdqu16,
1399 	vmovdqu32,
1400 	vmovdqu64,
1401 	vmovdqu8,
1402 	vmovdqu,
1403 	vmovhlps,
1404 	vmovhpd,
1405 	vmovhps,
1406 	vmovlhps,
1407 	vmovlpd,
1408 	vmovlps,
1409 	vmovmskpd,
1410 	vmovmskps,
1411 	vmovntdqa,
1412 	vmovntdq,
1413 	vmovntpd,
1414 	vmovntps,
1415 	vmovsd,
1416 	vmovshdup,
1417 	vmovsldup,
1418 	vmovss,
1419 	vmovupd,
1420 	vmovups,
1421 	vmpsadbw,
1422 	vmptrld,
1423 	vmptrst,
1424 	vmread,
1425 	vmresume,
1426 	vmrun,
1427 	vmsave,
1428 	vmulpd,
1429 	vmulps,
1430 	vmulsd,
1431 	vmulss,
1432 	vmwrite,
1433 	vmxoff,
1434 	vmxon,
1435 	vpabsb,
1436 	vpabsd,
1437 	vpabsq,
1438 	vpabsw,
1439 	vpackssdw,
1440 	vpacksswb,
1441 	vpackusdw,
1442 	vpackuswb,
1443 	vpaddb,
1444 	vpaddd,
1445 	vpaddq,
1446 	vpaddsb,
1447 	vpaddsw,
1448 	vpaddusb,
1449 	vpaddusw,
1450 	vpaddw,
1451 	vpalignr,
1452 	vpandd,
1453 	vpandnd,
1454 	vpandnq,
1455 	vpandn,
1456 	vpandq,
1457 	vpand,
1458 	vpavgb,
1459 	vpavgw,
1460 	vpblendd,
1461 	vpblendmb,
1462 	vpblendmd,
1463 	vpblendmq,
1464 	vpblendmw,
1465 	vpblendvb,
1466 	vpblendw,
1467 	vpbroadcastb,
1468 	vpbroadcastd,
1469 	vpbroadcastmb2q,
1470 	vpbroadcastmw2d,
1471 	vpbroadcastq,
1472 	vpbroadcastw,
1473 	vpclmulqdq,
1474 	vpcmov,
1475 	vpcmpb,
1476 	vpcmpd,
1477 	vpcmpeqb,
1478 	vpcmpeqd,
1479 	vpcmpeqq,
1480 	vpcmpeqw,
1481 	vpcmpestri,
1482 	vpcmpestrm,
1483 	vpcmpgtb,
1484 	vpcmpgtd,
1485 	vpcmpgtq,
1486 	vpcmpgtw,
1487 	vpcmpistri,
1488 	vpcmpistrm,
1489 	vpcmpq,
1490 	vpcmpub,
1491 	vpcmpud,
1492 	vpcmpuq,
1493 	vpcmpuw,
1494 	vpcmpw,
1495 	vpcomb,
1496 	vpcomd,
1497 	vpcompressd,
1498 	vpcompressq,
1499 	vpcomq,
1500 	vpcomub,
1501 	vpcomud,
1502 	vpcomuq,
1503 	vpcomuw,
1504 	vpcomw,
1505 	vpconflictd,
1506 	vpconflictq,
1507 	vperm2f128,
1508 	vperm2i128,
1509 	vpermd,
1510 	vpermi2d,
1511 	vpermi2pd,
1512 	vpermi2ps,
1513 	vpermi2q,
1514 	vpermil2pd,
1515 	vpermil2ps,
1516 	vpermilpd,
1517 	vpermilps,
1518 	vpermpd,
1519 	vpermps,
1520 	vpermq,
1521 	vpermt2d,
1522 	vpermt2pd,
1523 	vpermt2ps,
1524 	vpermt2q,
1525 	vpexpandd,
1526 	vpexpandq,
1527 	vpextrb,
1528 	vpextrd,
1529 	vpextrq,
1530 	vpextrw,
1531 	vpgatherdd,
1532 	vpgatherdq,
1533 	vpgatherqd,
1534 	vpgatherqq,
1535 	vphaddbd,
1536 	vphaddbq,
1537 	vphaddbw,
1538 	vphadddq,
1539 	vphaddd,
1540 	vphaddsw,
1541 	vphaddubd,
1542 	vphaddubq,
1543 	vphaddubw,
1544 	vphaddudq,
1545 	vphadduwd,
1546 	vphadduwq,
1547 	vphaddwd,
1548 	vphaddwq,
1549 	vphaddw,
1550 	vphminposuw,
1551 	vphsubbw,
1552 	vphsubdq,
1553 	vphsubd,
1554 	vphsubsw,
1555 	vphsubwd,
1556 	vphsubw,
1557 	vpinsrb,
1558 	vpinsrd,
1559 	vpinsrq,
1560 	vpinsrw,
1561 	vplzcntd,
1562 	vplzcntq,
1563 	vpmacsdd,
1564 	vpmacsdqh,
1565 	vpmacsdql,
1566 	vpmacssdd,
1567 	vpmacssdqh,
1568 	vpmacssdql,
1569 	vpmacsswd,
1570 	vpmacssww,
1571 	vpmacswd,
1572 	vpmacsww,
1573 	vpmadcsswd,
1574 	vpmadcswd,
1575 	vpmaddubsw,
1576 	vpmaddwd,
1577 	vpmaskmovd,
1578 	vpmaskmovq,
1579 	vpmaxsb,
1580 	vpmaxsd,
1581 	vpmaxsq,
1582 	vpmaxsw,
1583 	vpmaxub,
1584 	vpmaxud,
1585 	vpmaxuq,
1586 	vpmaxuw,
1587 	vpminsb,
1588 	vpminsd,
1589 	vpminsq,
1590 	vpminsw,
1591 	vpminub,
1592 	vpminud,
1593 	vpminuq,
1594 	vpminuw,
1595 	vpmovdb,
1596 	vpmovdw,
1597 	vpmovm2b,
1598 	vpmovm2d,
1599 	vpmovm2q,
1600 	vpmovm2w,
1601 	vpmovmskb,
1602 	vpmovqb,
1603 	vpmovqd,
1604 	vpmovqw,
1605 	vpmovsdb,
1606 	vpmovsdw,
1607 	vpmovsqb,
1608 	vpmovsqd,
1609 	vpmovsqw,
1610 	vpmovsxbd,
1611 	vpmovsxbq,
1612 	vpmovsxbw,
1613 	vpmovsxdq,
1614 	vpmovsxwd,
1615 	vpmovsxwq,
1616 	vpmovusdb,
1617 	vpmovusdw,
1618 	vpmovusqb,
1619 	vpmovusqd,
1620 	vpmovusqw,
1621 	vpmovzxbd,
1622 	vpmovzxbq,
1623 	vpmovzxbw,
1624 	vpmovzxdq,
1625 	vpmovzxwd,
1626 	vpmovzxwq,
1627 	vpmuldq,
1628 	vpmulhrsw,
1629 	vpmulhuw,
1630 	vpmulhw,
1631 	vpmulld,
1632 	vpmullq,
1633 	vpmullw,
1634 	vpmuludq,
1635 	vpord,
1636 	vporq,
1637 	vpor,
1638 	vpperm,
1639 	vprotb,
1640 	vprotd,
1641 	vprotq,
1642 	vprotw,
1643 	vpsadbw,
1644 	vpscatterdd,
1645 	vpscatterdq,
1646 	vpscatterqd,
1647 	vpscatterqq,
1648 	vpshab,
1649 	vpshad,
1650 	vpshaq,
1651 	vpshaw,
1652 	vpshlb,
1653 	vpshld,
1654 	vpshlq,
1655 	vpshlw,
1656 	vpshufb,
1657 	vpshufd,
1658 	vpshufhw,
1659 	vpshuflw,
1660 	vpsignb,
1661 	vpsignd,
1662 	vpsignw,
1663 	vpslldq,
1664 	vpslld,
1665 	vpsllq,
1666 	vpsllvd,
1667 	vpsllvq,
1668 	vpsllw,
1669 	vpsrad,
1670 	vpsraq,
1671 	vpsravd,
1672 	vpsravq,
1673 	vpsraw,
1674 	vpsrldq,
1675 	vpsrld,
1676 	vpsrlq,
1677 	vpsrlvd,
1678 	vpsrlvq,
1679 	vpsrlw,
1680 	vpsubb,
1681 	vpsubd,
1682 	vpsubq,
1683 	vpsubsb,
1684 	vpsubsw,
1685 	vpsubusb,
1686 	vpsubusw,
1687 	vpsubw,
1688 	vptestmd,
1689 	vptestmq,
1690 	vptestnmd,
1691 	vptestnmq,
1692 	vptest,
1693 	vpunpckhbw,
1694 	vpunpckhdq,
1695 	vpunpckhqdq,
1696 	vpunpckhwd,
1697 	vpunpcklbw,
1698 	vpunpckldq,
1699 	vpunpcklqdq,
1700 	vpunpcklwd,
1701 	vpxord,
1702 	vpxorq,
1703 	vpxor,
1704 	vrcp14pd,
1705 	vrcp14ps,
1706 	vrcp14sd,
1707 	vrcp14ss,
1708 	vrcp28pd,
1709 	vrcp28ps,
1710 	vrcp28sd,
1711 	vrcp28ss,
1712 	vrcpps,
1713 	vrcpss,
1714 	vrndscalepd,
1715 	vrndscaleps,
1716 	vrndscalesd,
1717 	vrndscaless,
1718 	vroundpd,
1719 	vroundps,
1720 	vroundsd,
1721 	vroundss,
1722 	vrsqrt14pd,
1723 	vrsqrt14ps,
1724 	vrsqrt14sd,
1725 	vrsqrt14ss,
1726 	vrsqrt28pd,
1727 	vrsqrt28ps,
1728 	vrsqrt28sd,
1729 	vrsqrt28ss,
1730 	vrsqrtps,
1731 	vrsqrtss,
1732 	vscatterdpd,
1733 	vscatterdps,
1734 	vscatterpf0dpd,
1735 	vscatterpf0dps,
1736 	vscatterpf0qpd,
1737 	vscatterpf0qps,
1738 	vscatterpf1dpd,
1739 	vscatterpf1dps,
1740 	vscatterpf1qpd,
1741 	vscatterpf1qps,
1742 	vscatterqpd,
1743 	vscatterqps,
1744 	vshufpd,
1745 	vshufps,
1746 	vsqrtpd,
1747 	vsqrtps,
1748 	vsqrtsd,
1749 	vsqrtss,
1750 	vstmxcsr,
1751 	vsubpd,
1752 	vsubps,
1753 	vsubsd,
1754 	vsubss,
1755 	vtestpd,
1756 	vtestps,
1757 	vunpckhpd,
1758 	vunpckhps,
1759 	vunpcklpd,
1760 	vunpcklps,
1761 	vzeroall,
1762 	vzeroupper,
1763 	wait,
1764 	wbinvd,
1765 	wrfsbase,
1766 	wrgsbase,
1767 	wrmsr,
1768 	xabort,
1769 	xacquire,
1770 	xbegin,
1771 	xchg,
1772 	xcryptcbc,
1773 	xcryptcfb,
1774 	xcryptctr,
1775 	xcryptecb,
1776 	xcryptofb,
1777 	xend,
1778 	xgetbv,
1779 	xlatb,
1780 	xrelease,
1781 	xrstor,
1782 	xrstor64,
1783 	xrstors,
1784 	xrstors64,
1785 	xsave,
1786 	xsave64,
1787 	xsavec,
1788 	xsavec64,
1789 	xsaveopt,
1790 	xsaveopt64,
1791 	xsaves,
1792 	xsaves64,
1793 	xsetbv,
1794 	xsha1,
1795 	xsha256,
1796 	xstore,
1797 	xtest,
1798 	fdisi8087_nop,
1799 	feni8087_nop,
1800 
1801 	// pseudo instructions
1802 	cmpss,
1803 	cmpeqss,
1804 	cmpltss,
1805 	cmpless,
1806 	cmpunordss,
1807 	cmpneqss,
1808 	cmpnltss,
1809 	cmpnless,
1810 	cmpordss,
1811 
1812 	cmpsd,
1813 	cmpeqsd,
1814 	cmpltsd,
1815 	cmplesd,
1816 	cmpunordsd,
1817 	cmpneqsd,
1818 	cmpnltsd,
1819 	cmpnlesd,
1820 	cmpordsd,
1821 
1822 	cmpps,
1823 	cmpeqps,
1824 	cmpltps,
1825 	cmpleps,
1826 	cmpunordps,
1827 	cmpneqps,
1828 	cmpnltps,
1829 	cmpnleps,
1830 	cmpordps,
1831 
1832 	cmppd,
1833 	cmpeqpd,
1834 	cmpltpd,
1835 	cmplepd,
1836 	cmpunordpd,
1837 	cmpneqpd,
1838 	cmpnltpd,
1839 	cmpnlepd,
1840 	cmpordpd,
1841 
1842 	vcmpss,
1843 	vcmpeqss,
1844 	vcmpltss,
1845 	vcmpless,
1846 	vcmpunordss,
1847 	vcmpneqss,
1848 	vcmpnltss,
1849 	vcmpnless,
1850 	vcmpordss,
1851 	vcmpeq_uqss,
1852 	vcmpngess,
1853 	vcmpngtss,
1854 	vcmpfalsess,
1855 	vcmpneq_oqss,
1856 	vcmpgess,
1857 	vcmpgtss,
1858 	vcmptruess,
1859 	vcmpeq_osss,
1860 	vcmplt_oqss,
1861 	vcmple_oqss,
1862 	vcmpunord_sss,
1863 	vcmpneq_usss,
1864 	vcmpnlt_uqss,
1865 	vcmpnle_uqss,
1866 	vcmpord_sss,
1867 	vcmpeq_usss,
1868 	vcmpnge_uqss,
1869 	vcmpngt_uqss,
1870 	vcmpfalse_osss,
1871 	vcmpneq_osss,
1872 	vcmpge_oqss,
1873 	vcmpgt_oqss,
1874 	vcmptrue_usss,
1875 
1876 	vcmpsd,
1877 	vcmpeqsd,
1878 	vcmpltsd,
1879 	vcmplesd,
1880 	vcmpunordsd,
1881 	vcmpneqsd,
1882 	vcmpnltsd,
1883 	vcmpnlesd,
1884 	vcmpordsd,
1885 	vcmpeq_uqsd,
1886 	vcmpngesd,
1887 	vcmpngtsd,
1888 	vcmpfalsesd,
1889 	vcmpneq_oqsd,
1890 	vcmpgesd,
1891 	vcmpgtsd,
1892 	vcmptruesd,
1893 	vcmpeq_ossd,
1894 	vcmplt_oqsd,
1895 	vcmple_oqsd,
1896 	vcmpunord_ssd,
1897 	vcmpneq_ussd,
1898 	vcmpnlt_uqsd,
1899 	vcmpnle_uqsd,
1900 	vcmpord_ssd,
1901 	vcmpeq_ussd,
1902 	vcmpnge_uqsd,
1903 	vcmpngt_uqsd,
1904 	vcmpfalse_ossd,
1905 	vcmpneq_ossd,
1906 	vcmpge_oqsd,
1907 	vcmpgt_oqsd,
1908 	vcmptrue_ussd,
1909 
1910 	vcmpps,
1911 	vcmpeqps,
1912 	vcmpltps,
1913 	vcmpleps,
1914 	vcmpunordps,
1915 	vcmpneqps,
1916 	vcmpnltps,
1917 	vcmpnleps,
1918 	vcmpordps,
1919 	vcmpeq_uqps,
1920 	vcmpngeps,
1921 	vcmpngtps,
1922 	vcmpfalseps,
1923 	vcmpneq_oqps,
1924 	vcmpgeps,
1925 	vcmpgtps,
1926 	vcmptrueps,
1927 	vcmpeq_osps,
1928 	vcmplt_oqps,
1929 	vcmple_oqps,
1930 	vcmpunord_sps,
1931 	vcmpneq_usps,
1932 	vcmpnlt_uqps,
1933 	vcmpnle_uqps,
1934 	vcmpord_sps,
1935 	vcmpeq_usps,
1936 	vcmpnge_uqps,
1937 	vcmpngt_uqps,
1938 	vcmpfalse_osps,
1939 	vcmpneq_osps,
1940 	vcmpge_oqps,
1941 	vcmpgt_oqps,
1942 	vcmptrue_usps,
1943 
1944 	vcmppd,
1945 	vcmpeqpd,
1946 	vcmpltpd,
1947 	vcmplepd,
1948 	vcmpunordpd,
1949 	vcmpneqpd,
1950 	vcmpnltpd,
1951 	vcmpnlepd,
1952 	vcmpordpd,
1953 	vcmpeq_uqpd,
1954 	vcmpngepd,
1955 	vcmpngtpd,
1956 	vcmpfalsepd,
1957 	vcmpneq_oqpd,
1958 	vcmpgepd,
1959 	vcmpgtpd,
1960 	vcmptruepd,
1961 	vcmpeq_ospd,
1962 	vcmplt_oqpd,
1963 	vcmple_oqpd,
1964 	vcmpunord_spd,
1965 	vcmpneq_uspd,
1966 	vcmpnlt_uqpd,
1967 	vcmpnle_uqpd,
1968 	vcmpord_spd,
1969 	vcmpeq_uspd,
1970 	vcmpnge_uqpd,
1971 	vcmpngt_uqpd,
1972 	vcmpfalse_ospd,
1973 	vcmpneq_ospd,
1974 	vcmpge_oqpd,
1975 	vcmpgt_oqpd,
1976 	vcmptrue_uspd,
1977 
1978 	ud0,
1979 	endbr32,
1980     endbr64,
1981 }
1982 
1983 /// Group of X86 instructions
1984 enum  X86InstructionGroupId {
1985     invalid = 0,
1986 
1987 	// Generic groups
1988 	// all jump instructions (conditional+direct+indirect jumps)
1989 	jump,
1990 	// all call instructions
1991 	call,
1992 	// all return instructions
1993 	ret,
1994 	// all interrupt instructions (int+syscall)
1995 	int_,
1996 	// all interrupt return instructions
1997 	iret,
1998 	// all privileged instructions
1999 	privilege,
2000 	// all relative branching instructions
2001 	branch_relative,
2002 
2003 	// Architecture-specific groups
2004 	vm = 128,	/// All virtualization instructions (VT-x + AMD-V)
2005 	grp_3dnow,
2006 	aes,
2007 	adx,
2008 	avx,
2009 	avx2,
2010 	avx512,
2011 	bmi,
2012 	bmi2,
2013 	cmov,
2014 	f16c,
2015 	fma,
2016 	fma4,
2017 	fsgsbase,
2018 	hle,
2019 	mmx,
2020 	mode32,
2021 	mode64,
2022 	rtm,
2023 	sha,
2024 	sse1,
2025 	sse2,
2026 	sse3,
2027 	sse41,
2028 	sse42,
2029 	sse4a,
2030 	ssse3,
2031 	pclmul,
2032 	xop,
2033 	cdi,
2034 	eri,
2035 	tbm,
2036 	grp_16bitmode,
2037 	not64bitmode,
2038 	sgx,
2039 	dqi,
2040 	bwi,
2041 	pfi,
2042 	vlx,
2043 	smap,
2044 	novlx,
2045     fpu,
2046 }