summaryrefslogtreecommitdiff
path: root/modules/arch/x86/x86parse.gap
blob: 82f4d3bf13b94182e4892a9b4c2d1ddd62edcc4d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
# GAP (gen_arch_parse) input file for x86 architecture
# $Id$

# Configure GAP for x86 generation mode
ARCH	x86

# Supported x86 parsers
PARSERS	nasm gas

# INSN parameters:
# - parser (- if any)
# - base name of instruction
# - if string, each character is an allowed GAS suffix
#   if defined name, value is GAS suffix mode set (no character suffix reqd)
# - instruction group (sans _insn suffix)
# - modifiers (up to 3 bytes)
# - CPU flags
#
# The string mode of the second parameter is a shortcut for GAS forms, e.g.:
# INSN	-	mov	"bwl"	mov	0	CPU_Any
# is equivalent to:
# INSN	-	mov	NONE	mov	0	CPU_Any
# INSN	gas	movb	SUF_B	mov	0	CPU_Any
# INSN	gas	movw	SUF_W	mov	0	CPU_Any
# INSN	gas	movl	SUF_L	mov	0	CPU_Any

# Move
INSN	-	mov	"bwl"	mov	0		CPU_Any
INSN	gas	movabs	"bwlq"	movabs	0		CPU_Hammer|CPU_64

# Move with sign/zero extend
INSN	gas	movsbw	SUF_B	movszx	0xBE		CPU_386
INSN	gas	movsbl	SUF_B	movszx	0xBE		CPU_386
INSN	gas	movswl	SUF_W	movszx	0xBE		CPU_386
INSN	gas	movsbq	SUF_B	movszx	0xBE		CPU_Hammer|CPU_64
INSN	gas	movswq	SUF_W	movszx	0xBE		CPU_Hammer|CPU_64
INSN	-	movsx	"bw"	movszx	0xBE		CPU_386
INSN	gas	movslq	SUF_L	movsxd	0		CPU_Hammer|CPU_64
INSN	nasm	movsxd	NONE	movsxd	0		CPU_Hammer|CPU_64
INSN	gas	movzbw	SUF_B	movszx	0xB6		CPU_386
INSN	gas	movzbl	SUF_B	movszx	0xB6		CPU_386
INSN	gas	movzwl	SUF_W	movszx	0xB6		CPU_386
INSN	gas	movzbq	SUF_B	movszx	0xB6		CPU_Hammer|CPU_64
INSN	gas	movzwq	SUF_W	movszx	0xB6		CPU_Hammer|CPU_64
INSN	-	movzx	NONE	movszx	0xB6		CPU_386

# Push instructions
INSN	-	push	"wlq"	push	0		CPU_Any
INSN	-	pusha	NONE	onebyte	0x0060		CPU_186|CPU_Not64
INSN	nasm	pushad	NONE	onebyte	0x2060		CPU_386|CPU_Not64
INSN	gas	pushal	NONE	onebyte	0x2060		CPU_386|CPU_Not64
INSN	-	pushaw	NONE	onebyte	0x1060		CPU_186|CPU_Not64

# Pop instructions
INSN	-	pop	"wlq"	pop	0		CPU_Any
INSN	-	popa	NONE	onebyte	0x0061		CPU_186|CPU_Not64
INSN	nasm	popad	NONE	onebyte	0x2061		CPU_386|CPU_Not64
INSN	gas	popal	NONE	onebyte	0x2061		CPU_386|CPU_Not64
INSN	-	popaw	NONE	onebyte	0x1061		CPU_186|CPU_Not64

# Exchange
INSN	-	xchg	"bwlq"	xchg	0		CPU_Any

# In/out from ports
INSN	-	in	"bwl"	in	0		CPU_Any
INSN	-	out	"bwl"	out	0		CPU_Any
# Load effective address
INSN	-	lea	"wlq"	lea	0		CPU_Any
# Load segment registers from memory
INSN	-	lds	"wl"	ldes	0xC5		CPU_Not64
INSN	-	les	"wl"	ldes	0xC4		CPU_Not64
INSN	-	lfs	"wl"	lfgss	0xB4		CPU_386
INSN	-	lgs	"wl"	lfgss	0xB5		CPU_386
INSN	-	lss	"wl"	lfgss	0xB2		CPU_386
# Flags register instructions
INSN	-	clc	NONE	onebyte	0x00F8		CPU_Any
INSN	-	cld	NONE	onebyte	0x00FC		CPU_Any
INSN	-	cli	NONE	onebyte	0x00FA		CPU_Any
INSN	-	clts	NONE	twobyte	0x0F06		CPU_286|CPU_Priv
INSN	-	cmc	NONE	onebyte	0x00F5		CPU_Any
INSN	-	lahf	NONE	onebyte	0x009F		CPU_Any
INSN	-	sahf	NONE	onebyte	0x009E		CPU_Any
INSN	-	pushf	NONE	onebyte	0x40009C	CPU_Any
INSN	nasm	pushfd	NONE	onebyte	0x00209C	CPU_386|CPU_Not64
INSN	gas	pushfl	NONE	onebyte	0x00209C	CPU_386|CPU_Not64
INSN	-	pushfw	NONE	onebyte	0x40109C	CPU_Any
INSN	-	pushfq	NONE	onebyte	0x40409C	CPU_Hammer|CPU_64
INSN	-	popf	NONE	onebyte	0x40009D	CPU_Any
INSN	nasm	popfd	NONE	onebyte	0x00209D	CPU_386|CPU_Not64
INSN	gas	popfl   NONE	onebyte	0x00209D	CPU_386|CPU_Not64
INSN	-	popfw   NONE	onebyte	0x40109D	CPU_Any
INSN	-	popfq   NONE	onebyte	0x40409D	CPU_Hammer|CPU_64
INSN	-	stc	NONE	onebyte	0x00F9		CPU_Any
INSN	-	std	NONE	onebyte	0x00FD		CPU_Any
INSN	-	sti	NONE	onebyte	0x00FB		CPU_Any
# Arithmetic
INSN	-	add	"bwlq"	arith	0x0000		CPU_Any
INSN	-	inc	"bwlq"	incdec	0x0040		CPU_Any
INSN	-	sub	"bwlq"	arith	0x0528		CPU_Any
INSN	-	dec	"bwlq"	incdec	0x0148		CPU_Any
INSN	-	sbb	"bwlq"	arith	0x0318		CPU_Any
INSN	-	cmp	"bwlq"	arith	0x0738		CPU_Any
INSN	-	test    "bwlq"	test	0		CPU_Any
INSN	-	and	"bwlq"	arith	0x0420		CPU_Any
INSN	-	or	"bwlq"	arith	0x0108		CPU_Any
INSN	-	xor	"bwlq"	arith	0x0630		CPU_Any
INSN	-	adc	"bwlq"	arith	0x0210		CPU_Any
INSN	-	neg	"bwlq"	f6	0x03		CPU_Any
INSN	-	not	"bwlq"	f6	0x02		CPU_Any
INSN	-	aaa	NONE	onebyte	0x0037		CPU_Not64
INSN	-	aas	NONE	onebyte	0x003F		CPU_Not64
INSN	-	daa	NONE	onebyte	0x0027		CPU_Not64
INSN	-	das	NONE	onebyte	0x002F		CPU_Not64
INSN	-	aad	NONE	aadm	0x01		CPU_Not64
INSN	-	aam	NONE	aadm	0x00		CPU_Not64
# Conversion instructions
INSN	-	cbw	NONE	onebyte	0x1098		CPU_Any
INSN	-	cwde    NONE	onebyte	0x2098		CPU_386
INSN	-	cdqe    NONE	onebyte	0x4098		CPU_Hammer|CPU_64
INSN	-	cwd	NONE	onebyte	0x1099		CPU_Any
INSN	-	cdq	NONE	onebyte	0x2099		CPU_386
INSN	-	cqo	NONE	onebyte	0x4099		CPU_Hammer|CPU_64
# Conversion instructions - GAS / AT&T naming
INSN	gas	cbtw	NONE	onebyte	0x1098		CPU_Any
INSN	gas	cwtl	NONE	onebyte	0x2098		CPU_386
INSN	gas	cltq	NONE	onebyte	0x4098		CPU_Hammer|CPU_64
INSN	gas	cwtd	NONE	onebyte	0x1099		CPU_Any
INSN	gas	cltd	NONE	onebyte	0x2099		CPU_386
INSN	gas	cqto	NONE	onebyte	0x4099		CPU_Hammer|CPU_64
# Multiplication and division
INSN	-	mul	"bwlq"	f6	0x04		CPU_Any
INSN	-	imul	"bwlq"	imul	0		CPU_Any
INSN	-	div	"bwlq"	div	0x06		CPU_Any
INSN	-	idiv	"bwlq"	div	0x07		CPU_Any
# Shifts
INSN	-	rol	"bwlq"	shift	0x00		CPU_Any
INSN	-	ror	"bwlq"	shift	0x01		CPU_Any
INSN	-	rcl	"bwlq"	shift	0x02		CPU_Any
INSN	-	rcr	"bwlq"	shift	0x03		CPU_Any
INSN	-	sal	"bwlq"	shift	0x04		CPU_Any
INSN	-	shl	"bwlq"	shift	0x04		CPU_Any
INSN	-	shr	"bwlq"	shift	0x05		CPU_Any
INSN	-	sar	"bwlq"	shift	0x07		CPU_Any
INSN	-	shld	"wlq"	shlrd	0xA4		CPU_386
INSN	-	shrd	"wlq"	shlrd	0xAC		CPU_386
# Control transfer instructions unconditional)
INSN	-	call	NONE	call	0		CPU_Any
INSN	-	jmp	NONE	jmp	0		CPU_Any
INSN	-	ret	NONE	retnf	0x00C2		CPU_Any
INSN	gas	retw	NONE	retnf	0x10C2		CPU_Any
INSN	gas	retl	NONE	retnf	0x00C2		CPU_Not64
INSN	gas	retq	NONE	retnf	0x00C2		CPU_Hammer|CPU_64
INSN	nasm	retn	NONE	retnf	0x00C2		CPU_Any
INSN	nasm	retf	NONE	retnf	0x40CA		CPU_Any
INSN	gas	lretw	NONE	retnf	0x10CA		CPU_Any
INSN	gas	lretl	NONE	retnf	0x00CA		CPU_Any
INSN	gas	lretq	NONE	retnf	0x40CA		CPU_Hammer|CPU_64
INSN	-	enter	"wlq"	enter	0		CPU_186
INSN	-	leave	NONE	onebyte	0x4000C9	CPU_186
INSN	gas	leavew	NONE	onebyte	0x0010C9	CPU_186
INSN	gas	leavel	NONE	onebyte	0x4000C9	CPU_186
INSN	gas	leaveq	NONE	onebyte	0x4000C9	CPU_Hammer|CPU_64
# Conditional jumps
INSN	-	jo	NONE	jcc	0x00		CPU_Any
INSN	-	jno	NONE	jcc	0x01		CPU_Any
INSN	-	jb	NONE	jcc	0x02		CPU_Any
INSN	-	jc	NONE	jcc	0x02		CPU_Any
INSN	-	jnae	NONE	jcc	0x02		CPU_Any
INSN	-	jnb	NONE	jcc	0x03		CPU_Any
INSN	-	jnc	NONE	jcc	0x03		CPU_Any
INSN	-	jae	NONE	jcc	0x03		CPU_Any
INSN	-	je	NONE	jcc	0x04		CPU_Any
INSN	-	jz	NONE	jcc	0x04		CPU_Any
INSN	-	jne	NONE	jcc	0x05		CPU_Any
INSN	-	jnz	NONE	jcc	0x05		CPU_Any
INSN	-	jbe	NONE	jcc	0x06		CPU_Any
INSN	-	jna	NONE	jcc	0x06		CPU_Any
INSN	-	jnbe	NONE	jcc	0x07		CPU_Any
INSN	-	ja	NONE	jcc	0x07		CPU_Any
INSN	-	js	NONE	jcc	0x08		CPU_Any
INSN	-	jns	NONE	jcc	0x09		CPU_Any
INSN	-	jp	NONE	jcc	0x0A		CPU_Any
INSN	-	jpe	NONE	jcc	0x0A		CPU_Any
INSN	-	jnp	NONE	jcc	0x0B		CPU_Any
INSN	-	jpo	NONE	jcc	0x0B		CPU_Any
INSN	-	jl	NONE	jcc	0x0C		CPU_Any
INSN	-	jnge	NONE	jcc	0x0C		CPU_Any
INSN	-	jnl	NONE	jcc	0x0D		CPU_Any
INSN	-	jge	NONE	jcc	0x0D		CPU_Any
INSN	-	jle	NONE	jcc	0x0E		CPU_Any
INSN	-	jng	NONE	jcc	0x0E		CPU_Any
INSN	-	jnle	NONE	jcc	0x0F		CPU_Any
INSN	-	jg	NONE	jcc	0x0F		CPU_Any
INSN	-	jcxz	NONE	jcxz	0x10		CPU_Any
INSN	-	jecxz	NONE	jcxz	0x20		CPU_386
INSN	-	jrcxz	NONE	jcxz	0x40		CPU_Hammer|CPU_64
# Loop instructions
INSN	-	loop	NONE	loop	0x02		CPU_Any
INSN	-	loopz	NONE	loop	0x01		CPU_Any
INSN	-	loope	NONE	loop	0x01		CPU_Any
INSN	-	loopnz	NONE	loop	0x00		CPU_Any
INSN	-	loopne	NONE	loop	0x00		CPU_Any
# Set byte on flag instructions
INSN	-	seto	"b"	setcc	0x00		CPU_386
INSN	-	setno	"b"	setcc	0x01		CPU_386
INSN	-	setb	"b"	setcc	0x02		CPU_386
INSN	-	setc	"b"	setcc	0x02		CPU_386
INSN	-	setnae	"b"	setcc	0x02		CPU_386
INSN	-	setnb	"b"	setcc	0x03		CPU_386
INSN	-	setnc	"b"	setcc	0x03		CPU_386
INSN	-	setae	"b"	setcc	0x03		CPU_386
INSN	-	sete	"b"	setcc	0x04		CPU_386
INSN	-	setz	"b"	setcc	0x04		CPU_386
INSN	-	setne	"b"	setcc	0x05		CPU_386
INSN	-	setnz	"b"	setcc	0x05		CPU_386
INSN	-	setbe	"b"	setcc	0x06		CPU_386
INSN	-	setna	"b"	setcc	0x06		CPU_386
INSN	-	setnbe	"b"	setcc	0x07		CPU_386
INSN	-	seta	"b"	setcc	0x07		CPU_386
INSN	-	sets	"b"	setcc	0x08		CPU_386
INSN	-	setns	"b"	setcc	0x09		CPU_386
INSN	-	setp	"b"	setcc	0x0A		CPU_386
INSN	-	setpe	"b"	setcc	0x0A		CPU_386
INSN	-	setnp	"b"	setcc	0x0B		CPU_386
INSN	-	setpo	"b"	setcc	0x0B		CPU_386
INSN	-	setl	"b"	setcc	0x0C		CPU_386
INSN	-	setnge	"b"	setcc	0x0C		CPU_386
INSN	-	setnl	"b"	setcc	0x0D		CPU_386
INSN	-	setge	"b"	setcc	0x0D		CPU_386
INSN	-	setle	"b"	setcc	0x0E		CPU_386
INSN	-	setng	"b"	setcc	0x0E		CPU_386
INSN	-	setnle	"b"	setcc	0x0F		CPU_386
INSN	-	setg	"b"	setcc	0x0F		CPU_386
# String instructions
INSN	-	cmpsb	NONE	onebyte	0x00A6		CPU_Any
INSN	-	cmpsw	NONE	onebyte	0x10A7		CPU_Any
INSN	-	cmpsd	NONE	cmpsd	0		CPU_Any
INSN	gas	cmpsl	NONE	onebyte	0x20A7		CPU_386
INSN	-	cmpsq	NONE	onebyte	0x40A7		CPU_Hammer|CPU_64
INSN	-	insb	NONE	onebyte	0x006C		CPU_Any
INSN	-	insw	NONE	onebyte	0x106D		CPU_Any
INSN	nasm	insd	NONE	onebyte	0x206D		CPU_386
INSN	gas	insl	NONE	onebyte	0x206D		CPU_386
INSN	-	outsb	NONE	onebyte	0x006E		CPU_Any
INSN	-	outsw	NONE	onebyte	0x106F		CPU_Any
INSN	nasm	outsd	NONE	onebyte	0x206F		CPU_386
INSN	gas	outsl	NONE	onebyte	0x206F		CPU_386
INSN	-	lodsb	NONE	onebyte	0x00AC		CPU_Any
INSN	-	lodsw	NONE	onebyte	0x10AD		CPU_Any
INSN	nasm	lodsd	NONE	onebyte	0x20AD		CPU_386
INSN	gas	lodsl	NONE	onebyte	0x20AD		CPU_386
INSN	-	lodsq	NONE	onebyte	0x40AD		CPU_Hammer|CPU_64
INSN	-	movsb	NONE	onebyte	0x00A4		CPU_Any
INSN	-	movsw	NONE	onebyte	0x10A5		CPU_Any
INSN	-	movsd	NONE	movsd	0		CPU_Any
INSN	gas	movsl	NONE	onebyte	0x20A5		CPU_386
INSN	-	movsq	NONE	onebyte	0x40A5		CPU_Hammer|CPU_64
# smov alias for movs in GAS mode
INSN	gas	smovb	NONE	onebyte	0x00A4		CPU_Any
INSN	gas	smovw	NONE	onebyte	0x10A5		CPU_Any
INSN	gas	smovl	NONE	onebyte	0x20A5		CPU_386
INSN	gas	smovq	NONE	onebyte	0x40A5		CPU_Hammer|CPU_64
INSN	-	scasb	NONE	onebyte	0x00AE		CPU_Any
INSN	-	scasw	NONE	onebyte	0x10AF		CPU_Any
INSN	nasm	scasd	NONE	onebyte	0x20AF		CPU_386
INSN	gas	scasl	NONE	onebyte	0x20AF		CPU_386
INSN	-	scasq	NONE	onebyte	0x40AF		CPU_Hammer|CPU_64
# ssca alias for scas in GAS mode
INSN	gas	sscab	NONE	onebyte	0x00AE		CPU_Any
INSN	gas	sscaw	NONE	onebyte	0x10AF		CPU_Any
INSN	gas	sscal	NONE	onebyte	0x20AF		CPU_386
INSN	gas	sscaq	NONE	onebyte	0x40AF		CPU_Hammer|CPU_64
INSN	-	stosb	NONE	onebyte	0x00AA		CPU_Any
INSN	-	stosw	NONE	onebyte	0x10AB		CPU_Any
INSN	nasm	stosd	NONE	onebyte	0x20AB		CPU_386
INSN	gas	stosl	NONE	onebyte	0x20AB		CPU_386
INSN	-	stosq	NONE	onebyte	0x40AB		CPU_Hammer|CPU_64
INSN	-	xlatb	NONE	onebyte	0x00D7		CPU_Any
# Bit manipulation
INSN	-	bsf	"wlq"	bsfr	0xBC		CPU_386
INSN	-	bsr	"wlq"	bsfr	0xBD		CPU_386
INSN	-	bt	"wlq"	bittest	0x04A3		CPU_386
INSN	-	btc	"wlq"	bittest	0x07BB		CPU_386
INSN	-	btr	"wlq"	bittest	0x06B3		CPU_386
INSN	-	bts	"wlq"	bittest	0x05AB		CPU_386
# Interrupts and operating system instructions
INSN	-	int	NONE	int	0		CPU_Any
INSN	-	int3	NONE	onebyte	0x00CC		CPU_Any
INSN	nasm	int03	NONE	onebyte	0x00CC		CPU_Any
INSN	-	into	NONE	onebyte	0x00CE		CPU_Not64
INSN	-	iret	NONE	onebyte	0x00CF		CPU_Any
INSN	-	iretw	NONE	onebyte	0x10CF		CPU_Any
INSN	nasm	iretd	NONE	onebyte	0x20CF		CPU_386
INSN	gas	iretl	NONE	onebyte	0x20CF		CPU_386
INSN	-	iretq	NONE	onebyte	0x40CF		CPU_Hammer|CPU_64
INSN	-	rsm	NONE	twobyte	0x0FAA		CPU_586|CPU_SMM
INSN	-	bound	"wl"	bound	0		CPU_186|CPU_Not64
INSN	-	hlt	NONE	onebyte	0x00F4		CPU_Priv
INSN	-	nop	NONE	onebyte	0x0090		CPU_Any
# Protection control
INSN	-	arpl	"w"	arpl	0		CPU_286|CPU_Prot|CPU_Not64
INSN	-	lar	"wlq"	bsfr	0x02		CPU_286|CPU_Prot
INSN	-	lgdt	"wlq"	twobytemem  0x020F01	CPU_286|CPU_Priv
INSN	-	lidt	"wlq"	twobytemem  0x030F01	CPU_286|CPU_Priv
INSN	-	lldt	"w"	prot286	0x0200		CPU_286|CPU_Prot|CPU_Priv
INSN	-	lmsw	"w"	prot286	0x0601		CPU_286|CPU_Priv
INSN	-	lsl	"wlq"	bsfr	0x03		CPU_286|CPU_Prot
INSN	-	ltr	"w"	prot286	0x0300		CPU_286|CPU_Prot|CPU_Priv
INSN	-	sgdt	"wlq"	twobytemem  0x000F01	CPU_286|CPU_Priv
INSN	-	sidt	"wlq"	twobytemem  0x010F01	CPU_286|CPU_Priv
INSN	-	sldt	"wlq"	sldtmsw	0x0000		CPU_286
INSN	-	smsw	"wlq"	sldtmsw	0x0401		CPU_286
INSN	-	str	"wlq"	str	0		CPU_286|CPU_Prot
INSN	-	verr	"w"	prot286	0x0400		CPU_286|CPU_Prot
INSN	-	verw	"w"	prot286	0x0500		CPU_286|CPU_Prot
# Floating point instructions
INSN	-	fld	"ls"	fld	0		CPU_FPU
INSN	gas	fldt	WEAK	fldstpt	0x05		CPU_FPU
INSN	-	fild	"lqs"	fildstp	0x050200	CPU_FPU
INSN	gas	fildll	NONE	fbldstp	0x05		CPU_FPU
INSN	-	fbld	NONE	fbldstp	0x04		CPU_FPU
INSN	-	fst	"ls"	fst	0		CPU_FPU
INSN	-	fist	"ls"	fiarith	0x02DB		CPU_FPU
INSN	-	fstp	"ls"	fstp	0		CPU_FPU
INSN	gas	fstpt	WEAK	fldstpt	0x07		CPU_FPU
INSN	-	fistp	"lqs"	fildstp	0x070203	CPU_FPU
INSN	gas	fistpll	NONE	fbldstp	0x07		CPU_FPU
INSN	-	fbstp	NONE	fbldstp	0x06		CPU_FPU
INSN	-	fxch	NONE	fxch	0		CPU_FPU
INSN	-	fcom	"ls"	fcom	0x02D0		CPU_FPU
INSN	-	ficom	"ls"	fiarith	0x02DA		CPU_FPU
INSN	-	fcomp	"ls"	fcom	0x03D8		CPU_FPU
INSN	-	ficomp	"ls"	fiarith	0x03DA		CPU_FPU
INSN	-	fcompp	NONE	twobyte	0xDED9		CPU_FPU
INSN	-	fucom	NONE	fcom2	0xDDE0		CPU_286|CPU_FPU
INSN	-	fucomp	NONE	fcom2	0xDDE8		CPU_286|CPU_FPU
INSN	-	fucompp	NONE	twobyte	0xDAE9		CPU_286|CPU_FPU
INSN	-	ftst	NONE	twobyte	0xD9E4		CPU_FPU
INSN	-	fxam	NONE	twobyte	0xD9E5		CPU_FPU
INSN	-	fld1	NONE	twobyte	0xD9E8		CPU_FPU
INSN	-	fldl2t	NONE	twobyte	0xD9E9		CPU_FPU
INSN	-	fldl2e	NONE	twobyte	0xD9EA		CPU_FPU
INSN	-	fldpi	NONE	twobyte	0xD9EB		CPU_FPU
INSN	-	fldlg2	NONE	twobyte	0xD9EC		CPU_FPU
INSN	-	fldln2	NONE	twobyte	0xD9ED		CPU_FPU
INSN	-	fldz	NONE	twobyte	0xD9EE		CPU_FPU
INSN	-	fadd	"ls"	farith	0x00C0C0	CPU_FPU
INSN	-	faddp	NONE	farithp	0xC0		CPU_FPU
INSN	-	fiadd	"ls"	fiarith	0x00DA		CPU_FPU
INSN	-	fsub	"ls"	farith	0x04E0E8	CPU_FPU
INSN	-	fisub	"ls"	fiarith	0x04DA		CPU_FPU
INSN	-	fsubp	NONE	farithp	0xE8		CPU_FPU
INSN	-	fsubr	"ls"	farith	0x05E8E0	CPU_FPU
INSN	-	fisubr	"ls"	fiarith	0x05DA		CPU_FPU
INSN	-	fsubrp	NONE	farithp	0xE0		CPU_FPU
INSN	-	fmul	"ls"	farith	0x01C8C8	CPU_FPU
INSN	-	fimul	"ls"	fiarith	0x01DA		CPU_FPU
INSN	-	fmulp	NONE	farithp	0xC8		CPU_FPU
INSN	-	fdiv	"ls"	farith	0x06F0F8	CPU_FPU
INSN	-	fidiv	"ls"	fiarith	0x06DA		CPU_FPU
INSN	-	fdivp	NONE	farithp	0xF8		CPU_FPU
INSN	-	fdivr	"ls"	farith	0x07F8F0	CPU_FPU
INSN	-	fidivr	"ls"	fiarith	0x07DA		CPU_FPU
INSN	-	fdivrp	NONE	farithp	0xF0		CPU_FPU
INSN	-	f2xm1	NONE	twobyte	0xD9F0		CPU_FPU
INSN	-	fyl2x	NONE	twobyte	0xD9F1		CPU_FPU
INSN	-	fptan	NONE	twobyte	0xD9F2		CPU_FPU
INSN	-	fpatan	NONE	twobyte	0xD9F3		CPU_FPU
INSN	-	fxtract	NONE	twobyte	0xD9F4		CPU_FPU
INSN	-	fprem1	NONE	twobyte	0xD9F5		CPU_286|CPU_FPU
INSN	-	fdecstp	NONE	twobyte	0xD9F6		CPU_FPU
INSN	-	fincstp	NONE	twobyte	0xD9F7		CPU_FPU
INSN	-	fprem	NONE	twobyte	0xD9F8		CPU_FPU
INSN	-	fyl2xp1	NONE	twobyte	0xD9F9		CPU_FPU
INSN	-	fsqrt	NONE	twobyte	0xD9FA		CPU_FPU
INSN	-	fsincos	NONE	twobyte	0xD9FB		CPU_286|CPU_FPU
INSN	-	frndint	NONE	twobyte	0xD9FC		CPU_FPU
INSN	-	fscale	NONE	twobyte	0xD9FD		CPU_FPU
INSN	-	fsin	NONE	twobyte	0xD9FE		CPU_286|CPU_FPU
INSN	-	fcos	NONE	twobyte	0xD9FF		CPU_286|CPU_FPU
INSN	-	fchs	NONE	twobyte	0xD9E0		CPU_FPU
INSN	-	fabs	NONE	twobyte	0xD9E1		CPU_FPU
INSN	-	fninit	NONE	twobyte	0xDBE3		CPU_FPU
INSN	-	finit	NONE	threebyte   0x9BDBE3	CPU_FPU
INSN	-	fldcw	"w"	fldnstcw	0x05	CPU_FPU
INSN	-	fnstcw	"w"	fldnstcw	0x07	CPU_FPU
INSN	-	fstcw	"w"	fstcw	0		CPU_FPU
INSN	-	fnstsw	"w"	fnstsw	0		CPU_FPU
INSN	-	fstsw	"w"	fstsw	0		CPU_FPU
INSN	-	fnclex	NONE	twobyte	0xDBE2		CPU_FPU
INSN	-	fclex	NONE	threebyte   0x9BDBE2	CPU_FPU
INSN	-	fnstenv	"ls"	onebytemem 0x06D9	CPU_FPU
INSN	-	fstenv	"ls"	twobytemem 0x069BD9	CPU_FPU
INSN	-	fldenv	"ls"	onebytemem 0x04D9	CPU_FPU
INSN	-	fnsave	"ls"	onebytemem 0x06DD	CPU_FPU
INSN	-	fsave	"ls"	twobytemem 0x069BDD	CPU_FPU
INSN	-	frstor	"ls"	onebytemem 0x04DD	CPU_FPU
INSN	-	ffree	NONE	ffree	0xDD		CPU_FPU
INSN	-	ffreep	NONE	ffree	0xDF		CPU_686|CPU_FPU|CPU_Undoc
INSN	-	fnop	NONE	twobyte	0xD9D0		CPU_FPU
INSN	-	fwait	NONE	onebyte	0x009B		CPU_FPU
# Prefixes should the others be here too? should wait be a prefix?
INSN	-	wait	NONE	onebyte	0x009B		CPU_Any
# 486 extensions
INSN	-	bswap	"lq"	bswap	0		CPU_486
INSN	-	xadd	"bwlq"	cmpxchgxadd 0xC0	CPU_486
INSN	-	cmpxchg	"bwlq"	cmpxchgxadd 0xB0	CPU_486
INSN	nasm	cmpxchg486 NONE cmpxchgxadd 0xA6	CPU_486|CPU_Undoc
INSN	-	invd	NONE	twobyte	0x0F08		CPU_486|CPU_Priv
INSN	-	wbinvd	NONE	twobyte	0x0F09		CPU_486|CPU_Priv
INSN	-	invlpg	NONE	twobytemem  0x070F01	CPU_486|CPU_Priv
# 586+ and late 486 extensions
INSN	-	cpuid	NONE	twobyte	0x0FA2		CPU_486
# Pentium extensions
INSN	-	wrmsr	NONE	twobyte	0x0F30		CPU_586|CPU_Priv
INSN	-	rdtsc	NONE	twobyte	0x0F31		CPU_586
INSN	-	rdmsr	NONE	twobyte	0x0F32		CPU_586|CPU_Priv
INSN	-	cmpxchg8b "q"	cmpxchg8b	0	CPU_586
# Pentium II/Pentium Pro extensions
INSN	-	sysenter NONE	twobyte	0x0F34		CPU_686|CPU_Not64
INSN	-	sysexit	NONE	twobyte	0x0F35		CPU_686|CPU_Priv|CPU_Not64
INSN	-	fxsave	"q"	twobytemem  0x000FAE	CPU_686|CPU_FPU
INSN	-	fxrstor	"q"	twobytemem  0x010FAE	CPU_686|CPU_FPU
INSN	-	rdpmc	NONE	twobyte	0x0F33		CPU_686
INSN	-	ud2	NONE	twobyte	0x0F0B		CPU_286
INSN	-	ud1	NONE	twobyte	0x0FB9		CPU_286|CPU_Undoc
INSN	-	cmovo	"wlq"	cmovcc	0x00		CPU_686
INSN	-	cmovno	"wlq"	cmovcc	0x01		CPU_686
INSN	-	cmovb	"wlq"	cmovcc	0x02		CPU_686
INSN	-	cmovc	"wlq"	cmovcc	0x02		CPU_686
INSN	-	cmovnae	"wlq"	cmovcc	0x02		CPU_686
INSN	-	cmovnb	"wlq"	cmovcc	0x03		CPU_686
INSN	-	cmovnc	"wlq"	cmovcc	0x03		CPU_686
INSN	-	cmovae	"wlq"	cmovcc	0x03		CPU_686
INSN	-	cmove	"wlq"	cmovcc	0x04		CPU_686
INSN	-	cmovz	"wlq"	cmovcc	0x04		CPU_686
INSN	-	cmovne	"wlq"	cmovcc	0x05		CPU_686
INSN	-	cmovnz	"wlq"	cmovcc	0x05		CPU_686
INSN	-	cmovbe	"wlq"	cmovcc	0x06		CPU_686
INSN	-	cmovna	"wlq"	cmovcc	0x06		CPU_686
INSN	-	cmovnbe	"wlq"	cmovcc	0x07		CPU_686
INSN	-	cmova	"wlq"	cmovcc	0x07		CPU_686
INSN	-	cmovs	"wlq"	cmovcc	0x08		CPU_686
INSN	-	cmovns	"wlq"	cmovcc	0x09		CPU_686
INSN	-	cmovp	"wlq"	cmovcc	0x0A		CPU_686
INSN	-	cmovpe	"wlq"	cmovcc	0x0A		CPU_686
INSN	-	cmovnp	"wlq"	cmovcc	0x0B		CPU_686
INSN	-	cmovpo	"wlq"	cmovcc	0x0B		CPU_686
INSN	-	cmovl	"wlq"	cmovcc	0x0C		CPU_686
INSN	-	cmovnge	"wlq"	cmovcc	0x0C		CPU_686
INSN	-	cmovnl	"wlq"	cmovcc	0x0D		CPU_686
INSN	-	cmovge	"wlq"	cmovcc	0x0D		CPU_686
INSN	-	cmovle	"wlq"	cmovcc	0x0E		CPU_686
INSN	-	cmovng	"wlq"	cmovcc	0x0E		CPU_686
INSN	-	cmovnle	"wlq"	cmovcc	0x0F		CPU_686
INSN	-	cmovg	"wlq"	cmovcc	0x0F		CPU_686
INSN	-	fcmovb	NONE	fcmovcc	0xDAC0		CPU_686|CPU_FPU
INSN	-	fcmove	NONE	fcmovcc	0xDAC8		CPU_686|CPU_FPU
INSN	-	fcmovbe	NONE	fcmovcc	0xDAD0		CPU_686|CPU_FPU
INSN	-	fcmovu	NONE	fcmovcc	0xDAD8		CPU_686|CPU_FPU
INSN	-	fcmovnb	NONE	fcmovcc	0xDBC0		CPU_686|CPU_FPU
INSN	-	fcmovne	NONE	fcmovcc	0xDBC8		CPU_686|CPU_FPU
INSN	-	fcmovnbe NONE	fcmovcc	0xDBD0		CPU_686|CPU_FPU
INSN	-	fcmovnu	NONE	fcmovcc	0xDBD8		CPU_686|CPU_FPU
INSN	-	fcomi	NONE	fcom2	0xDBF0		CPU_686|CPU_FPU
INSN	-	fucomi	NONE	fcom2	0xDBE8		CPU_686|CPU_FPU
INSN	-	fcomip	NONE	fcom2	0xDFF0		CPU_686|CPU_FPU
INSN	-	fucomip	NONE	fcom2	0xDFE8		CPU_686|CPU_FPU
# Pentium4 extensions
INSN	-	movnti	"lq"	movnti	0		CPU_P4
INSN	-	clflush	NONE	clflush	0		CPU_P3
INSN	-	lfence	NONE	threebyte   0x0FAEE8	CPU_P3
INSN	-	mfence	NONE	threebyte   0x0FAEF0	CPU_P3
INSN	-	pause	NONE	onebyte_prefix	0xF390	CPU_P4
# MMX/SSE2 instructions
INSN	-	emms	NONE	twobyte	0x0F77		CPU_MMX
INSN	-	movd	NONE	movd	0		CPU_MMX
# For GAS movq must use standard mov instruction.
# For NASM it can use a dedicated instruction.
INSN	gas	movq	SUF_Q	mov	0		CPU_Any
INSN	nasm	movq	NONE	movq	0		CPU_MMX
INSN	-	packssdw NONE	mmxsse2	0x6B		CPU_MMX
INSN	-	packsswb NONE	mmxsse2	0x63		CPU_MMX
INSN	-	packuswb NONE	mmxsse2	0x67		CPU_MMX
INSN	-	paddb	NONE	mmxsse2	0xFC		CPU_MMX
INSN	-	paddw	NONE	mmxsse2	0xFD		CPU_MMX
INSN	-	paddd	NONE	mmxsse2	0xFE		CPU_MMX
INSN	-	paddq	NONE	mmxsse2	0xD4		CPU_MMX
INSN	-	paddsb	NONE	mmxsse2	0xEC		CPU_MMX
INSN	-	paddsw	NONE	mmxsse2	0xED		CPU_MMX
INSN	-	paddusb	NONE	mmxsse2	0xDC		CPU_MMX
INSN	-	paddusw	NONE	mmxsse2	0xDD		CPU_MMX
INSN	-	pand	NONE	mmxsse2	0xDB		CPU_MMX
INSN	-	pandn	NONE	mmxsse2	0xDF		CPU_MMX
INSN	-	pcmpeqb	NONE	mmxsse2	0x74		CPU_MMX
INSN	-	pcmpeqw	NONE	mmxsse2	0x75		CPU_MMX
INSN	-	pcmpeqd	NONE	mmxsse2	0x76		CPU_MMX
INSN	-	pcmpgtb	NONE	mmxsse2	0x64		CPU_MMX
INSN	-	pcmpgtw	NONE	mmxsse2	0x65		CPU_MMX
INSN	-	pcmpgtd	NONE	mmxsse2	0x66		CPU_MMX
INSN	-	pmaddwd	NONE	mmxsse2	0xF5		CPU_MMX
INSN	-	pmulhw	NONE	mmxsse2	0xE5		CPU_MMX
INSN	-	pmullw	NONE	mmxsse2	0xD5		CPU_MMX
INSN	-	por	NONE	mmxsse2	0xEB		CPU_MMX
INSN	-	psllw	NONE	pshift	0x0671F1	CPU_MMX
INSN	-	pslld	NONE	pshift	0x0672F2	CPU_MMX
INSN	-	psllq	NONE	pshift	0x0673F3	CPU_MMX
INSN	-	psraw	NONE	pshift	0x0471E1	CPU_MMX
INSN	-	psrad	NONE	pshift	0x0472E2	CPU_MMX
INSN	-	psrlw	NONE	pshift	0x0271D1	CPU_MMX
INSN	-	psrld	NONE	pshift	0x0272D2	CPU_MMX
INSN	-	psrlq	NONE	pshift	0x0273D3	CPU_MMX
INSN	-	psubb	NONE	mmxsse2	0xF8		CPU_MMX
INSN	-	psubw	NONE	mmxsse2	0xF9		CPU_MMX
INSN	-	psubd	NONE	mmxsse2	0xFA		CPU_MMX
INSN	-	psubq	NONE	mmxsse2	0xFB		CPU_MMX
INSN	-	psubsb	NONE	mmxsse2	0xE8		CPU_MMX
INSN	-	psubsw	NONE	mmxsse2	0xE9		CPU_MMX
INSN	-	psubusb	NONE	mmxsse2	0xD8		CPU_MMX
INSN	-	psubusw	NONE	mmxsse2	0xD9		CPU_MMX
INSN	-	punpckhbw NONE	mmxsse2	0x68		CPU_MMX
INSN	-	punpckhwd NONE	mmxsse2	0x69		CPU_MMX
INSN	-	punpckhdq NONE	mmxsse2	0x6A		CPU_MMX
INSN	-	punpcklbw NONE	mmxsse2	0x60		CPU_MMX
INSN	-	punpcklwd NONE	mmxsse2	0x61		CPU_MMX
INSN	-	punpckldq NONE	mmxsse2	0x62		CPU_MMX
INSN	-	pxor	NONE	mmxsse2	0xEF		CPU_MMX
# PIII Katmai new instructions / SIMD instructions
INSN	-	addps	NONE	sseps	0x58		CPU_SSE
INSN	-	addss	NONE	ssess	0xF358		CPU_SSE
INSN	-	andnps	NONE	sseps	0x55		CPU_SSE
INSN	-	andps	NONE	sseps	0x54		CPU_SSE
INSN	-	cmpeqps	NONE	ssecmpps	0x00	CPU_SSE
INSN	-	cmpeqss	NONE	ssecmpss	0x00F3	CPU_SSE
INSN	-	cmpleps	NONE	ssecmpps	0x02	CPU_SSE
INSN	-	cmpless	NONE	ssecmpss	0x02F3	CPU_SSE
INSN	-	cmpltps	NONE	ssecmpps	0x01	CPU_SSE
INSN	-	cmpltss	NONE	ssecmpss	0x01F3	CPU_SSE
INSN	-	cmpneqps NONE	ssecmpps	0x04	CPU_SSE
INSN	-	cmpneqss NONE	ssecmpss	0x04F3	CPU_SSE
INSN	-	cmpnleps NONE	ssecmpps	0x06	CPU_SSE
INSN	-	cmpnless NONE	ssecmpss	0x06F3	CPU_SSE
INSN	-	cmpnltps NONE	ssecmpps	0x05	CPU_SSE
INSN	-	cmpnltss NONE	ssecmpss	0x05F3	CPU_SSE
INSN	-	cmpordps NONE	ssecmpps	0x07	CPU_SSE
INSN	-	cmpordss NONE	ssecmpss	0x07F3	CPU_SSE
INSN	-	cmpunordps NONE	ssecmpps	0x03	CPU_SSE
INSN	-	cmpunordss NONE	ssecmpss	0x03F3	CPU_SSE
INSN	-	cmpps	NONE	ssepsimm	0xC2	CPU_SSE
INSN	-	cmpss	NONE	ssessimm	0xF3C2	CPU_SSE
INSN	-	comiss	NONE	sseps	0x2F		CPU_SSE
INSN	-	cvtpi2ps NONE	cvt_xmm_mm_ps  0x2A	CPU_SSE
INSN	-	cvtps2pi NONE	cvt_mm_xmm64   0x2D	CPU_SSE
INSN	-	cvtsi2ss "lq"	cvt_xmm_rmx    0xF32A	CPU_SSE
INSN	-	cvtss2si "lq"	cvt_rx_xmm32   0xF32D	CPU_SSE
INSN	-	cvttps2pi NONE	cvt_mm_xmm64   0x2C	CPU_SSE
INSN	-	cvttss2si "lq"	cvt_rx_xmm32   0xF32C	CPU_SSE
INSN	-	divps	NONE	sseps	0x5E		CPU_SSE
INSN	-	divss	NONE	ssess	0xF35E		CPU_SSE
INSN	-	ldmxcsr	NONE	ldstmxcsr	0x02	CPU_SSE
INSN	-	maskmovq NONE	maskmovq	0	CPU_P3|CPU_MMX
INSN	-	maxps	NONE	sseps	0x5F		CPU_SSE
INSN	-	maxss	NONE	ssess	0xF35F		CPU_SSE
INSN	-	minps	NONE	sseps	0x5D		CPU_SSE
INSN	-	minss	NONE	ssess	0xF35D		CPU_SSE
INSN	-	movaps	NONE	movaups	0x28		CPU_SSE
INSN	-	movhlps	NONE	movhllhps	0x12	CPU_SSE
INSN	-	movhps	NONE	movhlps	0x16		CPU_SSE
INSN	-	movlhps	NONE	movhllhps	0x16	CPU_SSE
INSN	-	movlps	NONE	movhlps	0x12		CPU_SSE
INSN	-	movmskps "lq"	movmskps	0	CPU_SSE
INSN	-	movntps	NONE	movntps	0		CPU_SSE
INSN	-	movntq	NONE	movntq	0		CPU_SSE
INSN	-	movss	NONE	movss	0		CPU_SSE
INSN	-	movups	NONE	movaups	0x10		CPU_SSE
INSN	-	mulps	NONE	sseps	0x59		CPU_SSE
INSN	-	mulss	NONE	ssess	0xF359		CPU_SSE
INSN	-	orps	NONE	sseps	0x56		CPU_SSE
INSN	-	pavgb	NONE	mmxsse2	0xE0		CPU_P3|CPU_MMX
INSN	-	pavgw	NONE	mmxsse2	0xE3		CPU_P3|CPU_MMX
INSN	-	pextrw	"lq"	pextrw	0		CPU_P3|CPU_MMX
INSN	-	pinsrw	"lq"	pinsrw	0		CPU_P3|CPU_MMX
INSN	-	pmaxsw	NONE	mmxsse2	0xEE		CPU_P3|CPU_MMX
INSN	-	pmaxub	NONE	mmxsse2	0xDE		CPU_P3|CPU_MMX
INSN	-	pminsw	NONE	mmxsse2	0xEA		CPU_P3|CPU_MMX
INSN	-	pminub	NONE	mmxsse2	0xDA		CPU_P3|CPU_MMX
INSN	-	pmovmskb "lq"	pmovmskb	0	CPU_SSE
INSN	-	pmulhuw NONE	mmxsse2	0xE4		CPU_P3|CPU_MMX
INSN	-	prefetchnta NONE twobytemem 0x000F18	CPU_P3
INSN	-	prefetcht0 NONE	twobytemem  0x010F18	CPU_P3
INSN	-	prefetcht1 NONE	twobytemem  0x020F18	CPU_P3
INSN	-	prefetcht2 NONE	twobytemem  0x030F18	CPU_P3
INSN	-	psadbw	NONE	mmxsse2	0xF6		CPU_P3|CPU_MMX
INSN	-	pshufw	NONE	pshufw	0		CPU_P3|CPU_MMX
INSN	-	rcpps	NONE	sseps	0x53		CPU_SSE
INSN	-	rcpss	NONE	ssess	0xF353		CPU_SSE
INSN	-	rsqrtps	NONE	sseps	0x52		CPU_SSE
INSN	-	rsqrtss	NONE	ssess	0xF352		CPU_SSE
INSN	-	sfence	NONE	threebyte   0x0FAEF8	CPU_P3
INSN	-	shufps	NONE	ssepsimm	0xC6	CPU_SSE
INSN	-	sqrtps	NONE	sseps	0x51		CPU_SSE
INSN	-	sqrtss	NONE	ssess	0xF351		CPU_SSE
INSN	-	stmxcsr	NONE	ldstmxcsr	0x03	CPU_SSE
INSN	-	subps	NONE	sseps	0x5C		CPU_SSE
INSN	-	subss	NONE	ssess	0xF35C		CPU_SSE
INSN	-	ucomiss	NONE	ssess	0x2E		CPU_SSE
INSN	-	unpckhps NONE	sseps	0x15		CPU_SSE
INSN	-	unpcklps NONE	sseps	0x14		CPU_SSE
INSN	-	xorps	NONE	sseps	0x57		CPU_SSE
# SSE2 instructions
INSN	-	addpd	NONE	ssess	0x6658		CPU_SSE2
INSN	-	addsd	NONE	ssess	0xF258		CPU_SSE2
INSN	-	andnpd	NONE	ssess	0x6655		CPU_SSE2
INSN	-	andpd	NONE	ssess	0x6654		CPU_SSE2
INSN	-	cmpeqpd	NONE	ssecmpss	0x0066	CPU_SSE2
INSN	-	cmpeqsd	NONE	ssecmpss	0x00F2	CPU_SSE2
INSN	-	cmplepd	NONE	ssecmpss	0x0266	CPU_SSE2
INSN	-	cmplesd	NONE	ssecmpss	0x02F2	CPU_SSE2
INSN	-	cmpltpd	NONE	ssecmpss	0x0166	CPU_SSE2
INSN	-	cmpltsd	NONE	ssecmpss	0x01F2	CPU_SSE2
INSN	-	cmpneqpd NONE	ssecmpss	0x0466	CPU_SSE2
INSN	-	cmpneqsd NONE	ssecmpss	0x04F2	CPU_SSE2
INSN	-	cmpnlepd NONE	ssecmpss	0x0666	CPU_SSE2
INSN	-	cmpnlesd NONE	ssecmpss	0x06F2	CPU_SSE2
INSN	-	cmpnltpd NONE	ssecmpss	0x0566	CPU_SSE2
INSN	-	cmpnltsd NONE	ssecmpss	0x05F2	CPU_SSE2
INSN	-	cmpordpd NONE	ssecmpss	0x0766	CPU_SSE2
INSN	-	cmpordsd NONE	ssecmpss	0x07F2	CPU_SSE2
INSN	-	cmpunordpd NONE	ssecmpss	0x0366	CPU_SSE2
INSN	-	cmpunordsd NONE	ssecmpss	0x03F2	CPU_SSE2
INSN	-	cmppd	NONE	ssessimm	0x66C2	CPU_SSE2
# cmpsd is in string instructions above
INSN	-	comisd	NONE	ssess	0x662F		CPU_SSE2
INSN	-	cvtpi2pd NONE	cvt_xmm_mm_ss	0x662A	CPU_SSE2
INSN	-	cvtsi2sd "lq"	cvt_xmm_rmx	0xF22A	CPU_SSE2
INSN	-	divpd	NONE	ssess	0x665E		CPU_SSE2
INSN	-	divsd	NONE	ssess	0xF25E		CPU_SSE2
INSN	-	maxpd	NONE	ssess	0x665F		CPU_SSE2
INSN	-	maxsd	NONE	ssess	0xF25F		CPU_SSE2
INSN	-	minpd	NONE	ssess	0x665D		CPU_SSE2
INSN	-	minsd	NONE	ssess	0xF25D		CPU_SSE2
INSN	-	movapd	NONE	movaupd	0x28		CPU_SSE2
INSN	-	movhpd	NONE	movhlpd	0x16		CPU_SSE2
INSN	-	movlpd	NONE	movhlpd	0x12		CPU_SSE2
INSN	-	movmskpd "lq"	movmskpd	0	CPU_SSE2
INSN	-	movntpd	NONE	movntpddq	0x2B	CPU_SSE2
INSN	-	movntdq	NONE	movntpddq	0xE7	CPU_SSE2
# movsd is in string instructions above
INSN	-	movupd	NONE	movaupd	0x10		CPU_SSE2
INSN	-	mulpd	NONE	ssess	0x6659		CPU_SSE2
INSN	-	mulsd	NONE	ssess	0xF259		CPU_SSE2
INSN	-	orpd	NONE	ssess	0x6656		CPU_SSE2
INSN	-	shufpd	NONE	ssessimm	0x66C6	CPU_SSE2
INSN	-	sqrtpd	NONE	ssess	0x6651		CPU_SSE2
INSN	-	sqrtsd	NONE	ssess	0xF251		CPU_SSE2
INSN	-	subpd	NONE	ssess	0x665C		CPU_SSE2
INSN	-	subsd	NONE	ssess	0xF25C		CPU_SSE2
INSN	-	ucomisd	NONE	ssess	0x662E		CPU_SSE2
INSN	-	unpckhpd NONE	ssess	0x6615		CPU_SSE2
INSN	-	unpcklpd NONE	ssess	0x6614		CPU_SSE2
INSN	-	xorpd	NONE	ssess	0x6657		CPU_SSE2
INSN	-	cvtdq2pd NONE	cvt_xmm_xmm64_ss 0xF3E6	CPU_SSE2
INSN	-	cvtpd2dq NONE	ssess	0xF2E6		CPU_SSE2
INSN	-	cvtdq2ps NONE	sseps	0x5B		CPU_SSE2
INSN	-	cvtpd2pi NONE	cvt_mm_xmm	0x662D	CPU_SSE2
INSN	-	cvtpd2ps NONE	ssess	0x665A		CPU_SSE2
INSN	-	cvtps2pd NONE	cvt_xmm_xmm64_ps 0x5A	CPU_SSE2
INSN	-	cvtps2dq NONE	ssess	0x665B		CPU_SSE2
INSN	-	cvtsd2si "lq"	cvt_rx_xmm64	0xF22D	CPU_SSE2
INSN	-	cvtsd2ss NONE	cvt_xmm_xmm64_ss 0xF25A	CPU_SSE2
# P4 VMX Instructions
INSN	-	vmcall	NONE	threebyte   0x0F01C1	CPU_P4
INSN	-	vmlaunch NONE	threebyte   0x0F01C2	CPU_P4
INSN	-	vmresume NONE	threebyte   0x0F01C3	CPU_P4
INSN	-	vmxoff	NONE	threebyte   0x0F01C4	CPU_P4
INSN	-	vmread	"lq"	vmxmemrd    0x0F78	CPU_P4
INSN	-	vmwrite	"lq"	vmxmemwr    0x0F79	CPU_P4
INSN	-	vmptrld	NONE	vmxtwobytemem	0x06C7	CPU_P4
INSN	-	vmptrst	NONE	vmxtwobytemem	0x07C7	CPU_P4
INSN	-	vmclear	NONE	vmxthreebytemem	0x0666C7 CPU_P4
INSN	-	vmxon	NONE	vmxthreebytemem	0x06F3C7 CPU_P4
INSN	-	cvtss2sd NONE	cvt_xmm_xmm32	0xF35A	CPU_SSE2
INSN	-	cvttpd2pi NONE	cvt_mm_xmm	0x662C	CPU_SSE2
INSN	-	cvttsd2si "lq"	cvt_rx_xmm64	0xF22C	CPU_SSE2
INSN	-	cvttpd2dq NONE	ssess	0x66E6		CPU_SSE2
INSN	-	cvttps2dq NONE	ssess	0xF35B		CPU_SSE2
INSN	-	maskmovdqu NONE	maskmovdqu	0	CPU_SSE2
INSN	-	movdqa	NONE	movdqau	0x66		CPU_SSE2
INSN	-	movdqu	NONE	movdqau	0xF3		CPU_SSE2
INSN	-	movdq2q	NONE	movdq2q	0		CPU_SSE2
INSN	-	movq2dq	NONE	movq2dq	0		CPU_SSE2
INSN	-	pmuludq	NONE	mmxsse2	0xF4		CPU_SSE2
INSN	-	pshufd	NONE	ssessimm	0x6670	CPU_SSE2
INSN	-	pshufhw	NONE	ssessimm	0xF370	CPU_SSE2
INSN	-	pshuflw	NONE	ssessimm	0xF270	CPU_SSE2
INSN	-	pslldq	NONE	pslrldq	0x07		CPU_SSE2
INSN	-	psrldq	NONE	pslrldq	0x03		CPU_SSE2
INSN	-	punpckhqdq NONE	ssess	0x666D		CPU_SSE2
INSN	-	punpcklqdq NONE	ssess	0x666C		CPU_SSE2
# SSE3 / PNI Prescott New Instructions instructions
INSN	-	addsubpd NONE	ssess	0x66D0		CPU_SSE3
INSN	-	addsubps NONE	ssess	0xF2D0		CPU_SSE3
INSN	-	fisttp	"lqs"	fildstp	0x010001	CPU_SSE3
INSN	gas	fisttpll SUF_Q	fildstp	0x07		CPU_FPU
INSN	-	haddpd	NONE	ssess	0x667C		CPU_SSE3
INSN	-	haddps	NONE	ssess	0xF27C		CPU_SSE3
INSN	-	hsubpd	NONE	ssess	0x667D		CPU_SSE3
INSN	-	hsubps	NONE	ssess	0xF27D		CPU_SSE3
INSN	-	lddqu	NONE	lddqu	0		CPU_SSE3
INSN	-	monitor	NONE	threebyte   0x0F01C8	CPU_SSE3
INSN	-	movddup	NONE	cvt_xmm_xmm64_ss 0xF212	CPU_SSE3
INSN	-	movshdup NONE	ssess	0xF316		CPU_SSE3
INSN	-	movsldup NONE	ssess	0xF312		CPU_SSE3
INSN	-	mwait	NONE	threebyte   0x0F01C9	CPU_SSE3
# AMD 3DNow! instructions
INSN	-	prefetch NONE	twobytemem  0x000F0D	CPU_3DNow
INSN	-	prefetchw NONE	twobytemem  0x010F0D	CPU_3DNow
INSN	-	femms	NONE	twobyte	0x0F0E		CPU_3DNow
INSN	-	pavgusb	NONE	now3d	0xBF		CPU_3DNow
INSN	-	pf2id	NONE	now3d	0x1D		CPU_3DNow
INSN	-	pf2iw	NONE	now3d	0x1C		CPU_Athlon|CPU_3DNow
INSN	-	pfacc	NONE	now3d	0xAE		CPU_3DNow
INSN	-	pfadd	NONE	now3d	0x9E		CPU_3DNow
INSN	-	pfcmpeq	NONE	now3d	0xB0		CPU_3DNow
INSN	-	pfcmpge NONE	now3d	0x90		CPU_3DNow
INSN	-	pfcmpgt	NONE	now3d	0xA0		CPU_3DNow
INSN	-	pfmax	NONE	now3d	0xA4		CPU_3DNow
INSN	-	pfmin	NONE	now3d	0x94		CPU_3DNow
INSN	-	pfmul	NONE	now3d	0xB4		CPU_3DNow
INSN	-	pfnacc	NONE	now3d	0x8A		CPU_Athlon|CPU_3DNow
INSN	-	pfpnacc	NONE	now3d	0x8E		CPU_Athlon|CPU_3DNow
INSN	-	pfrcp	NONE	now3d	0x96		CPU_3DNow
INSN	-	pfrcpit1 NONE	now3d	0xA6		CPU_3DNow
INSN	-	pfrcpit2 NONE	now3d	0xB6		CPU_3DNow
INSN	-	pfrsqit1 NONE	now3d	0xA7		CPU_3DNow
INSN	-	pfrsqrt	NONE	now3d	0x97		CPU_3DNow
INSN	-	pfsub	NONE	now3d	0x9A		CPU_3DNow
INSN	-	pfsubr	NONE	now3d	0xAA		CPU_3DNow
INSN	-	pi2fd	NONE	now3d	0x0D		CPU_3DNow
INSN	-	pi2fw	NONE	now3d	0x0C		CPU_Athlon|CPU_3DNow
INSN	-	pmulhrwa NONE	now3d	0xB7		CPU_3DNow
INSN	-	pswapd	NONE	now3d	0xBB		CPU_Athlon|CPU_3DNow
# AMD extensions
INSN	-	syscall	NONE	twobyte	0x0F05		CPU_686|CPU_AMD
INSN	-	sysret	"lq"	twobyte	0x0F07		CPU_686|CPU_AMD|CPU_Priv
# AMD x86-64 extensions
INSN	-	swapgs	NONE	threebyte   0x0F01F8	CPU_Hammer|CPU_64
INSN	-	rdtscp	NONE	threebyte   0x0F01F9	CPU_686|CPU_AMD|CPU_Priv
# AMD Pacifica SVM instructions
INSN	-	clgi	NONE	threebyte   0x0F01DD	CPU_Hammer|CPU_64|CPU_SVM
INSN	-	invlpga	NONE	invlpga	    0		CPU_Hammer|CPU_64|CPU_SVM
INSN	-	skinit	NONE	skinit	    0		CPU_Hammer|CPU_64|CPU_SVM
INSN	-	stgi	NONE	threebyte   0x0F01DC	CPU_Hammer|CPU_64|CPU_SVM
INSN	-	vmload	NONE	svm_rax	    0xDA	CPU_Hammer|CPU_64|CPU_SVM
INSN	-	vmmcall	NONE	threebyte   0x0F01D9	CPU_Hammer|CPU_64|CPU_SVM
INSN	-	vmrun	NONE	svm_rax	    0xD8	CPU_Hammer|CPU_64|CPU_SVM
INSN	-	vmsave	NONE	svm_rax	    0xDB	CPU_Hammer|CPU_64|CPU_SVM
# VIA PadLock instructions
INSN	-	xstore	NONE	padlock	0xC000A7   CPU_PadLock
INSN	-	xstorerng NONE	padlock	0xC000A7   CPU_PadLock
INSN	-	xcryptecb NONE	padlock	0xC8F3A7   CPU_PadLock
INSN	-	xcryptcbc NONE	padlock	0xD0F3A7   CPU_PadLock
INSN	-	xcryptctr NONE	padlock	0xD8F3A7   CPU_PadLock
INSN	-	xcryptcfb NONE	padlock	0xE0F3A7   CPU_PadLock
INSN	-	xcryptofb NONE	padlock	0xE8F3A7   CPU_PadLock
INSN	-	montmul	NONE	padlock	0xC0F3A6   CPU_PadLock
INSN	-	xsha1	NONE	padlock	0xC8F3A6   CPU_PadLock
INSN	-	xsha256	NONE	padlock	0xD0F3A6   CPU_PadLock
# Cyrix MMX instructions
INSN	-	paddsiw	NONE	cyrixmmx    0x51	CPU_Cyrix|CPU_MMX
INSN	-	paveb	NONE	cyrixmmx    0x50	CPU_Cyrix|CPU_MMX
INSN	-	pdistib	NONE	cyrixmmx    0x54	CPU_Cyrix|CPU_MMX
INSN	-	pmachriw NONE	pmachriw    0		CPU_Cyrix|CPU_MMX
INSN	-	pmagw	NONE	cyrixmmx    0x52	CPU_Cyrix|CPU_MMX
INSN	-	pmulhriw NONE	cyrixmmx    0x5D	CPU_Cyrix|CPU_MMX
INSN	-	pmulhrwc NONE	cyrixmmx    0x59	CPU_Cyrix|CPU_MMX
INSN	-	pmvgezb	NONE	cyrixmmx    0x5C	CPU_Cyrix|CPU_MMX
INSN	-	pmvlzb	NONE	cyrixmmx    0x5B	CPU_Cyrix|CPU_MMX
INSN	-	pmvnzb	NONE	cyrixmmx    0x5A	CPU_Cyrix|CPU_MMX
INSN	-	pmvzb	NONE	cyrixmmx    0x58	CPU_Cyrix|CPU_MMX
INSN	-	psubsiw	NONE	cyrixmmx    0x55	CPU_Cyrix|CPU_MMX
# Cyrix extensions
INSN	-	rdshr	NONE	twobyte	    0x0F36	CPU_686|CPU_Cyrix|CPU_SMM
INSN	-	rsdc	NONE	rsdc	    0		CPU_486|CPU_Cyrix|CPU_SMM
INSN	-	rsldt	NONE	cyrixsmm    0x7B	CPU_486|CPU_Cyrix|CPU_SMM
INSN	-	rsts	NONE	cyrixsmm    0x7D	CPU_486|CPU_Cyrix|CPU_SMM
INSN	-	svdc	NONE	svdc	    0		CPU_486|CPU_Cyrix|CPU_SMM
INSN	-	svldt	NONE	cyrixsmm    0x7A	CPU_486|CPU_Cyrix|CPU_SMM
INSN	-	svts	NONE	cyrixsmm    0x7C	CPU_486|CPU_Cyrix|CPU_SMM
INSN	-	smint	NONE	twobyte	    0x0F38	CPU_686|CPU_Cyrix
INSN	-	smintold NONE	twobyte	    0x0F7E	CPU_486|CPU_Cyrix|CPU_Obs
INSN	-	wrshr	NONE	twobyte	    0x0F37	CPU_686|CPU_Cyrix|CPU_SMM
# Obsolete/undocumented instructions
INSN	-	fsetpm	NONE	twobyte	0xDBE4		CPU_286|CPU_FPU|CPU_Obs
INSN	-	ibts	NONE	ibts	0		CPU_386|CPU_Undoc|CPU_Obs
INSN	-	loadall	NONE	twobyte	0x0F07		CPU_386|CPU_Undoc
INSN	-	loadall286 NONE	twobyte	0x0F05		CPU_286|CPU_Undoc
INSN	-	salc	NONE	onebyte	0x00D6		CPU_Undoc|CPU_Not64
INSN	-	smi	NONE	onebyte	0x00F1		CPU_386|CPU_Undoc
INSN	-	umov	NONE	umov	0		CPU_386|CPU_Undoc
INSN	-	xbts	NONE	xbts	0		CPU_386|CPU_Undoc|CPU_Obs


# DEF_CPU parameters:
# - CPU name
# - CPU flags to set
# DEF_CPU_ALIAS parameters:
# - CPU alias name
# - CPU base name
# DEF_CPU_FEATURE parameters:
# - CPU feature name
# - CPU flag to set feature name alone or unset ("no" + feature name)

# The standard CPU names /set/ cpu_enabled.
CPU		8086	CPU_Priv
CPU		186	CPU_186|CPU_Priv
CPU_ALIAS	80186		186
CPU_ALIAS	i186		186
CPU		286	CPU_186|CPU_286|CPU_Priv
CPU_ALIAS	80286		286
CPU_ALIAS	i286		286
CPU		386	CPU_186|CPU_286|CPU_386|CPU_SMM|CPU_Prot|CPU_Priv
CPU_ALIAS	80386		386
CPU_ALIAS	i386		386
CPU		486	CPU_186|CPU_286|CPU_386|CPU_486|CPU_FPU|CPU_SMM|\
			CPU_Prot|CPU_Priv
CPU_ALIAS	80486		486
CPU_ALIAS	i486		486
CPU		586	CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_FPU|\
			CPU_SMM|CPU_Prot|CPU_Priv
CPU_ALIAS	i586		586
CPU_ALIAS	pentium		586
CPU_ALIAS	p5		586
CPU		686	CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_686|\
			CPU_FPU|CPU_SMM|CPU_Prot|CPU_Priv
CPU_ALIAS	i686		686
CPU_ALIAS	p6		686
CPU_ALIAS	ppro		686
CPU_ALIAS	pentiumpro	686
CPU		p2	CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_686|\
			CPU_FPU|CPU_MMX|CPU_SMM|CPU_Prot|CPU_Priv
CPU_ALIAS	pentium2	p2
CPU_ALIAS	pentium-2	p2
CPU_ALIAS	pentiumii	p2
CPU_ALIAS	pentium-ii	p2
CPU		p3	CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_686|\
			CPU_P3|CPU_FPU|CPU_MMX|CPU_SSE|CPU_SMM|CPU_Prot|\
			CPU_Priv
CPU_ALIAS	pentium3	p3
CPU_ALIAS	pentium-3	p3
CPU_ALIAS	pentiumiii	p3
CPU_ALIAS	pentium-iii	p3
CPU_ALIAS	katmai	p3
CPU		p4	CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_686|\
			CPU_P3|CPU_P4|CPU_FPU|CPU_MMX|CPU_SSE|CPU_SSE2|\
			CPU_SMM|CPU_Prot|CPU_Priv
CPU_ALIAS	pentium4	p4
CPU_ALIAS	pentium-4	p4
CPU_ALIAS	pentiumiv	p4
CPU_ALIAS	pentium-iv	p4
CPU_ALIAS	williamette	p4
CPU		ia64	CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_686|\
			CPU_P3|CPU_P4|CPU_IA64|CPU_FPU|CPU_MMX|CPU_SSE|\
			CPU_SSE2|CPU_SMM|CPU_Prot|CPU_Priv
CPU_ALIAS	ia-64		ia64
CPU_ALIAS	itanium		ia64
CPU		k6	CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_686|\
			CPU_K6|CPU_FPU|CPU_MMX|CPU_3DNow|CPU_SMM|CPU_Prot|\
			CPU_Priv
CPU		k7	CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_686|\
			CPU_K6|CPU_Athlon|CPU_FPU|CPU_MMX|CPU_SSE|CPU_3DNow|\
			CPU_SMM|CPU_Prot|CPU_Priv
CPU_ALIAS	athlon		k7
CPU		hammer	CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_686|\
			CPU_K6|CPU_Athlon|CPU_Hammer|CPU_FPU|CPU_MMX|\
			CPU_SSE|CPU_SSE2|CPU_3DNow|CPU_SMM|CPU_Prot|\
			CPU_Priv
CPU_ALIAS	sledgehammer	hammer
CPU_ALIAS	opteron		hammer
CPU_ALIAS	athlon64	hammer
CPU_ALIAS	athlon-64	hammer
CPU		prescott CPU_186|CPU_286|CPU_386|CPU_486|CPU_586|CPU_686|\
			CPU_K6|CPU_Athlon|CPU_Hammer|CPU_EM64T|CPU_FPU|CPU_MMX|\
			CPU_SSE|CPU_SSE2|CPU_SSE3|CPU_3DNow|CPU_SMM|\
			CPU_Prot|CPU_Priv

# Features have "no" versions to disable them, and only set/reset the
# specific feature being changed.  All other bits are left alone.

CPU_FEATURE	fpu	CPU_FPU
CPU_FEATURE	mmx	CPU_MMX
CPU_FEATURE	sse	CPU_SSE
CPU_FEATURE	sse2	CPU_SSE2
CPU_FEATURE	sse3	CPU_SSE3
#CPU_FEATURE	pni	CPU_PNI
CPU_FEATURE	3dnow	CPU_3DNow
CPU_FEATURE	cyrix	CPU_Cyrix
CPU_FEATURE	amd	CPU_AMD
CPU_FEATURE	smm	CPU_SMM
CPU_FEATURE	prot	CPU_Prot
CPU_FEATURE	undoc	CPU_Undoc
CPU_FEATURE	obs	CPU_Obs
CPU_FEATURE	priv	CPU_Priv
CPU_FEATURE	svm	CPU_SVM
CPU_FEATURE	padlock	CPU_PadLock
CPU_FEATURE	em64t	CPU_EM64T


# TARGETMOD parameters:
# - target modifier name
# - modifier to return

TARGETMOD	near	X86_NEAR
TARGETMOD	short	X86_SHORT
TARGETMOD	far	X86_FAR
TARGETMOD	to	X86_TO


# PREFIX parameters:
# - parser
# - prefix name
# - prefix type
# - prefix value

# operand size overrides
PREFIX	nasm	o16	X86_OPERSIZE	16
PREFIX	gas	data16	X86_OPERSIZE	16
PREFIX	gas	word	X86_OPERSIZE	16
PREFIX	nasm	o32	X86_OPERSIZE	32
PREFIX	gas	data32	X86_OPERSIZE	32
PREFIX	gas	dword	X86_OPERSIZE	32
PREFIX	nasm	o64	X86_OPERSIZE	64
PREFIX	gas	data64	X86_OPERSIZE	64
PREFIX	gas	qword	X86_OPERSIZE	64

# address size overrides
PREFIX	nasm	a16	X86_ADDRSIZE	16
PREFIX	gas	addr16	X86_ADDRSIZE	16
PREFIX	gas	aword	X86_ADDRSIZE	16
PREFIX	nasm	a32	X86_ADDRSIZE	32
PREFIX	gas	addr32	X86_ADDRSIZE	32
PREFIX	gas	adword	X86_ADDRSIZE	32
PREFIX	nasm	a64	X86_ADDRSIZE	64
PREFIX	gas	addr64	X86_ADDRSIZE	64
PREFIX	gas	aqword	X86_ADDRSIZE	64

# instruction prefixes
PREFIX	-	lock	X86_LOCKREP	0xF0
PREFIX	-	repne	X86_LOCKREP	0xF2
PREFIX	-	repnz	X86_LOCKREP	0xF2
PREFIX	-	rep	X86_LOCKREP	0xF3
PREFIX	-	repe	X86_LOCKREP	0xF3
PREFIX	-	repz	X86_LOCKREP	0xF3

# other prefixes, limited to GAS-only at the moment
# Hint taken/not taken for jumps
PREFIX	gas	ht	X86_SEGREG	0x3E
PREFIX	gas	hnt	X86_SEGREG	0x2E

# REX byte explicit prefixes
PREFIX	gas	rex	X86_REX		0x40
PREFIX	gas	rexz	X86_REX		0x41
PREFIX	gas	rexy	X86_REX		0x42
PREFIX	gas	rexyz	X86_REX		0x43
PREFIX	gas	rexx	X86_REX		0x44
PREFIX	gas	rexxz	X86_REX		0x45
PREFIX	gas	rexxy	X86_REX		0x46
PREFIX	gas	rexxyz	X86_REX		0x47
PREFIX	gas	rex64	X86_REX		0x48
PREFIX	gas	rex64z	X86_REX		0x49
PREFIX	gas	rex64y	X86_REX		0x4A
PREFIX	gas	rex64yz	X86_REX		0x4B
PREFIX	gas	rex64x	X86_REX		0x4C
PREFIX	gas	rex64xz	X86_REX		0x4D
PREFIX	gas	rex64xy	X86_REX		0x4E
PREFIX	gas	rex64xyz X86_REX	0x4F


# REG parameters:
# - register name
# - register type
# - register index
# - required BITS setting (0 for any)
#
# REGGROUP parameters:
# - register group name
# - register group type
#
# SEGREG parameters:
# - segment register name
# - prefix encoding
# - register encoding
# - BITS in which the segment is ignored

# control, debug, and test registers
REG	cr0	X86_CRREG	0	0
REG	cr2	X86_CRREG	2	0
REG	cr3	X86_CRREG	3	0
REG	cr4	X86_CRREG	4	0
REG	cr8	X86_CRREG	8	64

REG	dr0	X86_DRREG	0	0
REG	dr1	X86_DRREG	1	0
REG	dr2	X86_DRREG	2	0
REG	dr3	X86_DRREG	3	0
REG	dr4	X86_DRREG	4	0
REG	dr5	X86_DRREG	5	0
REG	dr6	X86_DRREG	6	0
REG	dr7	X86_DRREG	7	0

REG	tr0	X86_TRREG	0	0
REG	tr1	X86_TRREG	1	0
REG	tr2	X86_TRREG	2	0
REG	tr3	X86_TRREG	3	0
REG	tr4	X86_TRREG	4	0
REG	tr5	X86_TRREG	5	0
REG	tr6	X86_TRREG	6	0
REG	tr7	X86_TRREG	7	0

# floating point, MMX, and SSE/SSE2 registers
REG	st0	X86_FPUREG	0	0
REG	st1	X86_FPUREG	1	0
REG	st2	X86_FPUREG	2	0
REG	st3	X86_FPUREG	3	0
REG	st4	X86_FPUREG	4	0
REG	st5	X86_FPUREG	5	0
REG	st6	X86_FPUREG	6	0
REG	st7	X86_FPUREG	7	0

REG	mm0	X86_MMXREG	0	0
REG	mm1	X86_MMXREG	1	0
REG	mm2	X86_MMXREG	2	0
REG	mm3	X86_MMXREG	3	0
REG	mm4	X86_MMXREG	4	0
REG	mm5	X86_MMXREG	5	0
REG	mm6	X86_MMXREG	6	0
REG	mm7	X86_MMXREG	7	0

REG	xmm0	X86_XMMREG	0	0
REG	xmm1	X86_XMMREG	1	0
REG	xmm2	X86_XMMREG	2	0
REG	xmm3	X86_XMMREG	3	0
REG	xmm4	X86_XMMREG	4	0
REG	xmm5	X86_XMMREG	5	0
REG	xmm6	X86_XMMREG	6	0
REG	xmm7	X86_XMMREG	7	0
REG	xmm8	X86_XMMREG	8	64
REG	xmm9	X86_XMMREG	9	64
REG	xmm10	X86_XMMREG	10	64
REG	xmm11	X86_XMMREG	11	64
REG	xmm12	X86_XMMREG	12	64
REG	xmm13	X86_XMMREG	13	64
REG	xmm14	X86_XMMREG	14	64
REG	xmm15	X86_XMMREG	15	64

# integer registers
REG	rax	X86_REG64	0	64
REG	rcx	X86_REG64	1	64
REG	rdx	X86_REG64	2	64
REG	rbx	X86_REG64	3	64
REG	rsp	X86_REG64	4	64
REG	rbp	X86_REG64	5	64
REG	rsi	X86_REG64	6	64
REG	rdi	X86_REG64	7	64
REG	r8	X86_REG64	8	64
REG	r9	X86_REG64	9	64
REG	r10	X86_REG64	10	64
REG	r11	X86_REG64	11	64
REG	r12	X86_REG64	12	64
REG	r13	X86_REG64	13	64
REG	r14	X86_REG64	14	64
REG	r15	X86_REG64	15	64

REG	eax	X86_REG32	0	0
REG	ecx	X86_REG32	1	0
REG	edx	X86_REG32	2	0
REG	ebx	X86_REG32	3	0
REG	esp	X86_REG32	4	0
REG	ebp	X86_REG32	5	0
REG	esi	X86_REG32	6	0
REG	edi	X86_REG32	7	0
REG	r8d	X86_REG32	8	64
REG	r9d	X86_REG32	9	64
REG	r10d	X86_REG32	10	64
REG	r11d	X86_REG32	11	64
REG	r12d	X86_REG32	12	64
REG	r13d	X86_REG32	13	64
REG	r14d	X86_REG32	14	64
REG	r15d	X86_REG32	15	64

REG	ax	X86_REG16	0	0
REG	cx	X86_REG16	1	0
REG	dx	X86_REG16	2	0
REG	bx	X86_REG16	3	0
REG	sp	X86_REG16	4	0
REG	bp	X86_REG16	5	0
REG	si	X86_REG16	6	0
REG	di	X86_REG16	7	0
REG	r8w	X86_REG16	8	64
REG	r9w	X86_REG16	9	64
REG	r10w	X86_REG16	10	64
REG	r11w	X86_REG16	11	64
REG	r12w	X86_REG16	12	64
REG	r13w	X86_REG16	13	64
REG	r14w	X86_REG16	14	64
REG	r15w	X86_REG16	15	64

REG	al	X86_REG8	0	0
REG	cl	X86_REG8	1	0
REG	dl	X86_REG8	2	0
REG	bl	X86_REG8	3	0
REG	ah	X86_REG8	4	0
REG	ch	X86_REG8	5	0
REG	dh	X86_REG8	6	0
REG	bh	X86_REG8	7	0
REG	r8b	X86_REG8	8	64
REG	r9b	X86_REG8	9	64
REG	r10b	X86_REG8	10	64
REG	r11b	X86_REG8	11	64
REG	r12b	X86_REG8	12	64
REG	r13b	X86_REG8	13	64
REG	r14b	X86_REG8	14	64
REG	r15b	X86_REG8	15	64

REG	spl	X86_REG8X	4	64
REG	bpl	X86_REG8X	5	64
REG	sil	X86_REG8X	6	64
REG	dil	X86_REG8X	7	64

REG	rip	X86_RIP		0	64

# floating point, MMX, and SSE/SSE2 registers
REGGROUP	st	X86_FPUREG
REGGROUP	mm	X86_MMXREG
REGGROUP	xmm	X86_XMMREG

# segment registers
SEGREG	es	0x26	0x00	64
SEGREG	cs	0x2e	0x01	0
SEGREG	ss	0x36	0x02	64
SEGREG	ds	0x3e	0x03	64
SEGREG	fs	0x64	0x04	0
SEGREG	gs	0x65	0x05	0