diff --git a/docs/x86/optable.xml b/docs/x86/optable.xml
index 799564f..7461195 100644
--- a/docs/x86/optable.xml
+++ b/docs/x86/optable.xml
@@ -145,7 +145,7 @@
sse2
aso rexr rexx rexb
- sse66 0f 58
+ /sse=66 0f 58
V W
@@ -165,7 +165,7 @@
sse2
aso rexr rexx rexb
- ssef2 0f 58
+ /sse=f2 0f 58
V W
@@ -175,7 +175,7 @@
sse
aso rexr rexx rexb
- ssef3 0f 58
+ /sse=f3 0f 58
V W
@@ -238,7 +238,7 @@
andpd
aso rexr rexx rexb
- sse66 0f 54
+ /sse=66 0f 54
V W
@@ -256,7 +256,7 @@
andnpd
aso rexr rexx rexb
- sse66 0f 55
+ /sse=66 0f 55
V W
@@ -724,7 +724,7 @@
cmppd
aso rexr rexx rexb
- sse66 0f c2
+ /sse=66 0f c2
V W Ib
@@ -761,7 +761,7 @@
aso rexr rexx rexb
- ssef2 0f c2
+ /sse=f2 0f c2
V W Ib
@@ -778,7 +778,7 @@
cmpss
aso rexr rexx rexb
- ssef3 0f c2
+ /sse=f3 0f c2
V W Ib
@@ -810,7 +810,7 @@
comisd
aso rexr rexx rexb
- sse66 0f 2f
+ /sse=66 0f 2f
V W
@@ -835,7 +835,7 @@
cvtdq2pd
aso rexr rexx rexb
- ssef3 0f e6
+ /sse=f3 0f e6
V W
@@ -853,7 +853,7 @@
cvtpd2dq
aso rexr rexx rexb
- ssef2 0f e6
+ /sse=f2 0f e6
V W
@@ -862,7 +862,7 @@
cvtpd2pi
aso rexr rexx rexb
- sse66 0f 2d
+ /sse=66 0f 2d
P W
@@ -871,7 +871,7 @@
cvtpd2ps
aso rexr rexx rexb
- sse66 0f 5a
+ /sse=66 0f 5a
V W
@@ -889,7 +889,7 @@
cvtpi2pd
aso rexr rexx rexb
- sse66 0f 2a
+ /sse=66 0f 2a
V Q
@@ -898,7 +898,7 @@
cvtps2dq
aso rexr rexx rexb
- sse66 0f 5b
+ /sse=66 0f 5b
V W
@@ -925,7 +925,7 @@
cvtsd2si
aso rexw rexr rexx rexb
- ssef2 0f 2d
+ /sse=f2 0f 2d
Gy W
@@ -934,7 +934,7 @@
cvtsd2ss
aso rexr rexx rexb
- ssef2 0f 5a
+ /sse=f2 0f 5a
V W
@@ -943,7 +943,7 @@
cvtsi2ss
aso rexw rexr rexx rexb
- ssef3 0f 2a
+ /sse=f3 0f 2a
V Ey
@@ -952,7 +952,7 @@
cvtss2si
aso rexw rexr rexx rexb
- ssef3 0f 2d
+ /sse=f3 0f 2d
Gy W
@@ -961,7 +961,7 @@
cvtss2sd
aso rexr rexx rexb
- ssef3 0f 5a
+ /sse=f3 0f 5a
V W
@@ -970,7 +970,7 @@
cvttpd2pi
aso rexr rexx rexb
- sse66 0f 2c
+ /sse=66 0f 2c
P W
@@ -979,7 +979,7 @@
cvttpd2dq
aso rexr rexx rexb
- sse66 0f e6
+ /sse=66 0f e6
V W
@@ -988,7 +988,7 @@
cvttps2dq
aso rexr rexx rexb
- ssef3 0f 5b
+ /sse=f3 0f 5b
V W
@@ -1006,7 +1006,7 @@
cvttsd2si
aso rexw rexr rexx rexb
- ssef2 0f 2c
+ /sse=f2 0f 2c
Gy W
@@ -1015,7 +1015,7 @@
cvtsi2sd
aso rexw rexr rexx rexb
- ssef2 0f 2a
+ /sse=f2 0f 2a
V Ey
@@ -1024,7 +1024,7 @@
cvttss2si
aso rexw rexr rexx rexb
- ssef3 0f 2c
+ /sse=f3 0f 2c
Gy W
@@ -1141,7 +1141,7 @@
divpd
aso rexr rexx rexb
- sse66 0f 5e
+ /sse=66 0f 5e
V W
@@ -1159,7 +1159,7 @@
divsd
aso rexr rexx rexb
- ssef2 0f 5e
+ /sse=f2 0f 5e
V W
@@ -1168,7 +1168,7 @@
divss
aso rexr rexx rexb
- ssef3 0f 5e
+ /sse=f3 0f 5e
V W
@@ -3812,11 +3812,11 @@
invept
intel
- sse66 0f 38 80 /m=32
+ /sse=66 0f 38 80 /m=32
Gd Mo
- sse66 0f 38 80 /m=64
+ /sse=66 0f 38 80 /m=64
Gq Mo
@@ -3842,11 +3842,11 @@
invvpid
intel
- sse66 0f 38 81 /m=32
+ /sse=66 0f 38 81 /m=32
Gd Mo
- sse66 0f 38 81 /m=64
+ /sse=66 0f 38 81 /m=64
Gq Mo
@@ -4176,7 +4176,7 @@
lddqu
aso rexr rexx rexb
- ssef2 0f f0
+ /sse=f2 0f f0
V M
@@ -4414,7 +4414,7 @@
maxpd
aso rexr rexx rexb
- sse66 0f 5f
+ /sse=66 0f 5f
V W
@@ -4432,7 +4432,7 @@
maxsd
aso rexr rexx rexb
- ssef2 0f 5f
+ /sse=f2 0f 5f
V W
@@ -4441,7 +4441,7 @@
maxss
aso rexr rexx rexb
- ssef3 0f 5f
+ /sse=f3 0f 5f
V W
@@ -4478,7 +4478,7 @@
minpd
aso rexr rexx rexb
- sse66 0f 5d
+ /sse=66 0f 5d
V W
@@ -4496,7 +4496,7 @@
minsd
aso rexr rexx rexb
- ssef2 0f 5d
+ /sse=f2 0f 5d
V W
@@ -4505,7 +4505,7 @@
minss
aso rexr rexx rexb
- ssef3 0f 5d
+ /sse=f3 0f 5d
V W
@@ -4690,12 +4690,12 @@
movapd
aso rexr rexx rexb
- sse66 0f 28
+ /sse=66 0f 28
V W
aso rexr rexx rexb
- sse66 0f 29
+ /sse=66 0f 29
W V
@@ -4718,7 +4718,7 @@
movd
aso rexw rexr rexx rexb
- sse66 0f 6e
+ /sse=66 0f 6e
V Ey
@@ -4728,7 +4728,7 @@
aso rexw rexr rexx rexb
- sse66 0f 7e
+ /sse=66 0f 7e
Ey V
@@ -4742,12 +4742,12 @@
movhpd
aso rexr rexx rexb
- sse66 0f 16 /mod=!11
+ /sse=66 0f 16 /mod=!11
V M
aso rexr rexx rexb
- sse66 0f 17
+ /sse=66 0f 17
M V
@@ -4779,12 +4779,12 @@
movlpd
aso rexr rexx rexb
- sse66 0f 12 /mod=!11
+ /sse=66 0f 12 /mod=!11
V M
aso rexr rexx rexb
- sse66 0f 13
+ /sse=66 0f 13
M V
@@ -4816,7 +4816,7 @@
movmskpd
oso rexr rexb
- sse66 0f 50
+ /sse=66 0f 50
Gd U
@@ -4834,7 +4834,7 @@
movntdq
aso rexr rexx rexb
- sse66 0f e7
+ /sse=66 0f e7
M V
@@ -4852,7 +4852,7 @@
movntpd
aso rexr rexx rexb
- sse66 0f 2b
+ /sse=66 0f 2b
M V
@@ -4884,12 +4884,12 @@
aso rexr rexx rexb
- sse66 0f d6
+ /sse=66 0f d6
W V
aso rexr rexx rexb
- ssef3 0f 7e
+ /sse=f3 0f 7e
V W
@@ -4923,12 +4923,12 @@
aso rexr rexx rexb
- ssef2 0f 10
+ /sse=f2 0f 10
V W
aso rexr rexx rexb
- ssef2 0f 11
+ /sse=f2 0f 11
W V
@@ -4945,12 +4945,12 @@
movss
aso rexr rexx rexb
- ssef3 0f 10
+ /sse=f3 0f 10
V W
aso rexr rexx rexb
- ssef3 0f 11
+ /sse=f3 0f 11
W V
@@ -4973,12 +4973,12 @@
movupd
aso rexr rexx rexb
- sse66 0f 10
+ /sse=66 0f 10
V W
aso rexr rexx rexb
- sse66 0f 11
+ /sse=66 0f 11
W V
@@ -5029,7 +5029,7 @@
mulpd
aso rexr rexx rexb
- sse66 0f 59
+ /sse=66 0f 59
V W
@@ -5047,7 +5047,7 @@
mulsd
aso rexr rexx rexb
- ssef2 0f 59
+ /sse=f2 0f 59
V W
@@ -5056,7 +5056,7 @@
mulss
aso rexr rexx rexb
- ssef3 0f 59
+ /sse=f3 0f 59
V W
@@ -5195,7 +5195,7 @@
orpd
aso rexr rexx rexb
- sse66 0f 56
+ /sse=66 0f 56
V W
@@ -5266,7 +5266,7 @@
packsswb
aso rexr rexx rexb
- sse66 0f 63
+ /sse=66 0f 63
V W
@@ -5280,7 +5280,7 @@
packssdw
aso rexr rexx rexb
- sse66 0f 6b
+ /sse=66 0f 6b
V W
@@ -5294,7 +5294,7 @@
packuswb
aso rexr rexx rexb
- sse66 0f 67
+ /sse=66 0f 67
V W
@@ -5308,7 +5308,7 @@
paddb
aso rexr rexx rexb
- sse66 0f fc
+ /sse=66 0f fc
V W
@@ -5327,7 +5327,7 @@
aso rexr rexx rexb
- sse66 0f fd
+ /sse=66 0f fd
V W
@@ -5341,7 +5341,7 @@
aso rexr rexx rexb
- sse66 0f fe
+ /sse=66 0f fe
V W
@@ -5356,7 +5356,7 @@
aso rexr rexx rexb
- sse66 0f ec
+ /sse=66 0f ec
V W
@@ -5370,7 +5370,7 @@
aso rexr rexx rexb
- sse66 0f ed
+ /sse=66 0f ed
V W
@@ -5384,7 +5384,7 @@
aso rexr rexx rexb
- sse66 0f dc
+ /sse=66 0f dc
V W
@@ -5398,7 +5398,7 @@
aso rexr rexx rexb
- sse66 0f dd
+ /sse=66 0f dd
V W
@@ -5407,7 +5407,7 @@
pand
aso rexr rexx rexb
- sse66 0f db
+ /sse=66 0f db
V W
@@ -5421,7 +5421,7 @@
pandn
aso rexr rexx rexb
- sse66 0f df
+ /sse=66 0f df
V W
@@ -5435,7 +5435,7 @@
pavgb
aso rexr rexx rexb
- sse66 0f e0
+ /sse=66 0f e0
V W
@@ -5449,7 +5449,7 @@
pavgw
aso rexr rexx rexb
- sse66 0f e3
+ /sse=66 0f e3
V W
@@ -5468,7 +5468,7 @@
aso rexr rexx rexb
- sse66 0f 74
+ /sse=66 0f 74
V W
@@ -5482,7 +5482,7 @@
aso rexr rexx rexb
- sse66 0f 75
+ /sse=66 0f 75
V W
@@ -5496,7 +5496,7 @@
aso rexr rexx rexb
- sse66 0f 76
+ /sse=66 0f 76
V W
@@ -5505,7 +5505,7 @@
pcmpgtb
aso rexr rexx rexb
- sse66 0f 64
+ /sse=66 0f 64
V W
@@ -5519,7 +5519,7 @@
pcmpgtw
aso rexr rexx rexb
- sse66 0f 65
+ /sse=66 0f 65
V W
@@ -5533,7 +5533,7 @@
pcmpgtd
aso rexr rexx rexb
- sse66 0f 66
+ /sse=66 0f 66
V W
@@ -5547,7 +5547,7 @@
pextrb
aso rexx rexr rexb
- sse66 0f 3a 14
+ /sse=66 0f 3a 14
MbRv V Ib
def64
@@ -5557,12 +5557,12 @@
pextrd
aso rexr rexx rexw rexb
- sse66 0f 3a 16 /o=16
+ /sse=66 0f 3a 16 /o=16
Ed V Ib
aso rexr rexx rexw rexb
- sse66 0f 3a 16 /o=32
+ /sse=66 0f 3a 16 /o=32
Ed V Ib
@@ -5571,7 +5571,7 @@
pextrq
aso rexr rexw rexb
- sse66 0f 3a 16 /o=64
+ /sse=66 0f 3a 16 /o=64
Eq V Ib
def64
@@ -5581,7 +5581,7 @@
pextrw
aso rexr rexb
- sse66 0f c5
+ /sse=66 0f c5
Gd U Ib
@@ -5595,7 +5595,7 @@
pinsrb
aso rexw rexr rexx rexb
- sse66 0f 3a 20
+ /sse=66 0f 3a 20
V MbRd Ib
sse4.1
@@ -5611,7 +5611,7 @@
aso rexw rexr rexx rexb
- sse66 0f c4
+ /sse=66 0f c4
V MwRy Ib
def64
@@ -5621,14 +5621,14 @@
pinsrd
aso rexw rexr rexx rexb
- sse66 0f 3a 22 /o=16
+ /sse=66 0f 3a 22 /o=16
V Ed Ib
sse4.1
aso rexw rexr rexx rexb
- sse66 0f 3a 22 /o=32
+ /sse=66 0f 3a 22 /o=32
V Ed Ib
sse4.1
@@ -5638,7 +5638,7 @@
pinsrq
aso oso rexw rexr rexx rexb
- sse66 0f 3a 22 /o=64
+ /sse=66 0f 3a 22 /o=64
V Eq Ib
sse4.1
@@ -5653,7 +5653,7 @@
aso rexr rexx rexb
- sse66 0f f5
+ /sse=66 0f f5
V W
@@ -5662,7 +5662,7 @@
pmaxsw
aso rexr rexx rexb
- sse66 0f ee
+ /sse=66 0f ee
V W
@@ -5681,7 +5681,7 @@
aso rexr rexx rexb
- sse66 0f de
+ /sse=66 0f de
V W
@@ -5690,7 +5690,7 @@
pminsw
aso rexr rexx rexb
- sse66 0f ea
+ /sse=66 0f ea
V W
@@ -5704,7 +5704,7 @@
pminub
aso rexr rexx rexb
- sse66 0f da
+ /sse=66 0f da
V W
@@ -5718,7 +5718,7 @@
pmovmskb
rexr rexb
- sse66 0f d7
+ /sse=66 0f d7
Gd U
@@ -5737,7 +5737,7 @@
aso rexr rexx rexb
- sse66 0f e4
+ /sse=66 0f e4
V W
@@ -5746,7 +5746,7 @@
pmulhw
aso rexr rexx rexb
- sse66 0f e5
+ /sse=66 0f e5
V W
@@ -5765,7 +5765,7 @@
aso rexr rexx rexb
- sse66 0f d5
+ /sse=66 0f d5
V W
@@ -5903,7 +5903,7 @@
por
aso rexr rexx rexb
- sse66 0f eb
+ /sse=66 0f eb
V W
@@ -5997,7 +5997,7 @@
psadbw
aso rexr rexx rexb
- sse66 0f f6
+ /sse=66 0f f6
V W
@@ -6020,7 +6020,7 @@
psllw
aso rexr rexx rexb
- sse66 0f f1
+ /sse=66 0f f1
V W
@@ -6030,7 +6030,7 @@
rexb
- sse66 0f 71 /reg=6
+ /sse=66 0f 71 /reg=6
U Ib
@@ -6043,7 +6043,7 @@
pslld
aso rexr rexx rexb
- sse66 0f f2
+ /sse=66 0f f2
V W
@@ -6053,7 +6053,7 @@
rexb
- sse66 0f 72 /reg=6
+ /sse=66 0f 72 /reg=6
U Ib
@@ -6066,7 +6066,7 @@
psllq
aso rexr rexx rexb
- sse66 0f f3
+ /sse=66 0f f3
V W
@@ -6076,7 +6076,7 @@
rexb
- sse66 0f 73 /reg=6
+ /sse=66 0f 73 /reg=6
U Ib
@@ -6094,12 +6094,12 @@
aso rexr rexx rexb
- sse66 0f e1
+ /sse=66 0f e1
V W
rexb
- sse66 0f 71 /reg=4
+ /sse=66 0f 71 /reg=4
U Ib
@@ -6116,7 +6116,7 @@
aso rexr rexx rexb
- sse66 0f e2
+ /sse=66 0f e2
V W
@@ -6126,7 +6126,7 @@
rexb
- sse66 0f 72 /reg=4
+ /sse=66 0f 72 /reg=4
U Ib
@@ -6144,12 +6144,12 @@
aso rexr rexx rexb
- sse66 0f d1
+ /sse=66 0f d1
V W
rexb
- sse66 0f 71 /reg=2
+ /sse=66 0f 71 /reg=2
U Ib
@@ -6167,12 +6167,12 @@
aso rexr rexx rexb
- sse66 0f d2
+ /sse=66 0f d2
V W
rexb
- sse66 0f 72 /reg=2
+ /sse=66 0f 72 /reg=2
U Ib
@@ -6190,12 +6190,12 @@
aso rexr rexx rexb
- sse66 0f d3
+ /sse=66 0f d3
V W
rexb
- sse66 0f 73 /reg=2
+ /sse=66 0f 73 /reg=2
U Ib
@@ -6204,7 +6204,7 @@
psubb
aso rexr rexx rexb
- sse66 0f f8
+ /sse=66 0f f8
V W
@@ -6218,7 +6218,7 @@
psubw
aso rexr rexx rexb
- sse66 0f f9
+ /sse=66 0f f9
V W
@@ -6237,7 +6237,7 @@
aso rexr rexx rexb
- sse66 0f fa
+ /sse=66 0f fa
V W
@@ -6251,7 +6251,7 @@
aso rexr rexx rexb
- sse66 0f e8
+ /sse=66 0f e8
V W
@@ -6265,7 +6265,7 @@
aso rexr rexx rexb
- sse66 0f e9
+ /sse=66 0f e9
V W
@@ -6279,7 +6279,7 @@
aso rexr rexx rexb
- sse66 0f d8
+ /sse=66 0f d8
V W
@@ -6293,7 +6293,7 @@
aso rexr rexx rexb
- sse66 0f d9
+ /sse=66 0f d9
V W
@@ -6302,7 +6302,7 @@
punpckhbw
aso rexr rexx rexb
- sse66 0f 68
+ /sse=66 0f 68
V W
@@ -6316,7 +6316,7 @@
punpckhwd
aso rexr rexx rexb
- sse66 0f 69
+ /sse=66 0f 69
V W
@@ -6330,7 +6330,7 @@
punpckhdq
aso rexr rexx rexb
- sse66 0f 6a
+ /sse=66 0f 6a
V W
@@ -6344,7 +6344,7 @@
punpcklbw
aso rexr rexx rexb
- sse66 0f 60
+ /sse=66 0f 60
V W
@@ -6358,7 +6358,7 @@
punpcklwd
aso rexr rexx rexb
- sse66 0f 61
+ /sse=66 0f 61
V W
@@ -6372,7 +6372,7 @@
punpckldq
aso rexr rexx rexb
- sse66 0f 62
+ /sse=66 0f 62
V W
@@ -6753,7 +6753,7 @@
pxor
aso rexr rexx rexb
- sse66 0f ef
+ /sse=66 0f ef
V W
@@ -6912,7 +6912,7 @@
rcpss
aso rexr rexx rexb
- ssef3 0f 53
+ /sse=f3 0f 53
V W
@@ -7002,7 +7002,7 @@
rsqrtss
aso rexr rexx rexb
- ssef3 0f 52
+ /sse=f3 0f 52
V W
@@ -7456,7 +7456,7 @@
shufpd
aso rexr rexx rexb
- sse66 0f c6
+ /sse=66 0f c6
V W Ib
@@ -7515,7 +7515,7 @@
sqrtpd
aso rexr rexx rexb
- sse66 0f 51
+ /sse=66 0f 51
V W
@@ -7524,7 +7524,7 @@
sqrtsd
aso rexr rexx rexb
- ssef2 0f 51
+ /sse=f2 0f 51
V W
@@ -7533,7 +7533,7 @@
sqrtss
aso rexr rexx rexb
- ssef3 0f 51
+ /sse=f3 0f 51
V W
@@ -7683,7 +7683,7 @@
subpd
aso rexr rexx rexb
- sse66 0f 5c
+ /sse=66 0f 5c
V W
@@ -7701,7 +7701,7 @@
subsd
aso rexr rexx rexb
- ssef2 0f 5c
+ /sse=f2 0f 5c
V W
@@ -7710,7 +7710,7 @@
subss
aso rexr rexx rexb
- ssef3 0f 5c
+ /sse=f3 0f 5c
V W
@@ -7805,7 +7805,7 @@
ucomisd
aso rexr rexx rexb
- sse66 0f 2e
+ /sse=66 0f 2e
V W
@@ -7830,7 +7830,7 @@
unpckhpd
aso rexr rexx rexb
- sse66 0f 15
+ /sse=66 0f 15
V W
@@ -7857,7 +7857,7 @@
unpcklpd
aso rexr rexx rexb
- sse66 0f 14
+ /sse=66 0f 14
V W
@@ -7893,7 +7893,7 @@
intel
aso rexr rexx rexb
- sse66 0f c7 /reg=6
+ /sse=66 0f c7 /reg=6
Mq
@@ -7903,7 +7903,7 @@
intel
aso rexr rexx rexb
- ssef3 0f c7 /reg=6
+ /sse=f3 0f c7 /reg=6
Mq
@@ -8161,7 +8161,7 @@
xorpd
aso rexr rexx rexb
- sse66 0f 57
+ /sse=66 0f 57
V W
@@ -8243,12 +8243,12 @@
movdqa
aso rexr rexx rexb
- sse66 0f 7f
+ /sse=66 0f 7f
W V
aso rexr rexx rexb
- sse66 0f 6f
+ /sse=66 0f 6f
V W
@@ -8257,7 +8257,7 @@
movdq2q
aso rexb
- ssef2 0f d6
+ /sse=f2 0f d6
P U
@@ -8266,12 +8266,12 @@
movdqu
aso rexr rexx rexb
- ssef3 0f 6f
+ /sse=f3 0f 6f
V W
aso rexr rexx rexb
- ssef3 0f 7f
+ /sse=f3 0f 7f
W V
@@ -8280,7 +8280,7 @@
movq2dq
aso rexr
- ssef3 0f d6
+ /sse=f3 0f d6
V N
@@ -8294,7 +8294,7 @@
aso rexr rexx rexb
- sse66 0f d4
+ /sse=66 0f d4
V W
@@ -8303,7 +8303,7 @@
psubq
aso rexr rexx rexb
- sse66 0f fb
+ /sse=66 0f fb
V W
@@ -8322,7 +8322,7 @@
aso rexr rexx rexb
- sse66 0f f4
+ /sse=66 0f f4
V W
@@ -8331,7 +8331,7 @@
pshufhw
aso rexr rexx rexb
- ssef3 0f 70
+ /sse=f3 0f 70
V W Ib
@@ -8340,7 +8340,7 @@
pshuflw
aso rexr rexx rexb
- ssef2 0f 70
+ /sse=f2 0f 70
V W Ib
@@ -8349,7 +8349,7 @@
pshufd
aso rexr rexx rexb
- sse66 0f 70
+ /sse=66 0f 70
V W Ib
@@ -8358,7 +8358,7 @@
pslldq
rexb
- sse66 0f 73 /reg=7
+ /sse=66 0f 73 /reg=7
U Ib
@@ -8367,7 +8367,7 @@
psrldq
rexb
- sse66 0f 73 /reg=3
+ /sse=66 0f 73 /reg=3
U Ib
@@ -8376,7 +8376,7 @@
punpckhqdq
aso rexr rexx rexb
- sse66 0f 6d
+ /sse=66 0f 6d
V W
@@ -8385,7 +8385,7 @@
punpcklqdq
aso rexr rexx rexb
- sse66 0f 6c
+ /sse=66 0f 6c
V W
@@ -8399,7 +8399,7 @@
sse3
aso rexr rexx rexb
- sse66 0f d0
+ /sse=66 0f d0
V W
@@ -8408,7 +8408,7 @@
addsubps
aso rexr rexx rexb
- ssef2 0f d0
+ /sse=f2 0f d0
V W
@@ -8417,7 +8417,7 @@
haddpd
aso rexr rexx rexb
- sse66 0f 7c
+ /sse=66 0f 7c
V W
@@ -8426,7 +8426,7 @@
haddps
aso rexr rexx rexb
- ssef2 0f 7c
+ /sse=f2 0f 7c
V W
@@ -8435,7 +8435,7 @@
hsubpd
aso rexr rexx rexb
- sse66 0f 7d
+ /sse=66 0f 7d
V W
@@ -8444,7 +8444,7 @@
hsubps
aso rexr rexx rexb
- ssef2 0f 7d
+ /sse=f2 0f 7d
V W
@@ -8453,12 +8453,12 @@
movddup
aso rexr rexx rexb
- ssef2 0f 12 /mod=11
+ /sse=f2 0f 12 /mod=11
V W
aso rexr rexx rexb
- ssef2 0f 12 /mod=!11
+ /sse=f2 0f 12 /mod=!11
V W
@@ -8467,12 +8467,12 @@
movshdup
aso rexr rexx rexb
- ssef3 0f 16 /mod=11
+ /sse=f3 0f 16 /mod=11
V W
aso rexr rexx rexb
- ssef3 0f 16 /mod=!11
+ /sse=f3 0f 16 /mod=!11
V W
@@ -8481,12 +8481,12 @@
movsldup
aso rexr rexx rexb
- ssef3 0f 12 /mod=11
+ /sse=f3 0f 12 /mod=11
V W
aso rexr rexx rexb
- ssef3 0f 12 /mod=!11
+ /sse=f3 0f 12 /mod=!11
V W
@@ -8504,7 +8504,7 @@
aso rexr rexx rexb
- sse66 0f 38 1c
+ /sse=66 0f 38 1c
V W
@@ -8518,7 +8518,7 @@
aso rexr rexx rexb
- sse66 0f 38 1d
+ /sse=66 0f 38 1d
V W
@@ -8532,7 +8532,7 @@
aso rexr rexx rexb
- sse66 0f 38 1e
+ /sse=66 0f 38 1e
V W
@@ -8546,7 +8546,7 @@
aso rexr rexx rexb
- sse66 0f 38 00
+ /sse=66 0f 38 00
V W
@@ -8560,7 +8560,7 @@
aso rexr rexx rexb
- sse66 0f 38 01
+ /sse=66 0f 38 01
V W
@@ -8574,7 +8574,7 @@
aso rexr rexx rexb
- sse66 0f 38 02
+ /sse=66 0f 38 02
V W
@@ -8588,7 +8588,7 @@
aso rexr rexx rexb
- sse66 0f 38 03
+ /sse=66 0f 38 03
V W
@@ -8602,7 +8602,7 @@
aso rexr rexx rexb
- sse66 0f 38 04
+ /sse=66 0f 38 04
V W
@@ -8616,7 +8616,7 @@
aso rexr rexx rexb
- sse66 0f 38 05
+ /sse=66 0f 38 05
V W
@@ -8630,7 +8630,7 @@
aso rexr rexx rexb
- sse66 0f 38 06
+ /sse=66 0f 38 06
V W
@@ -8644,7 +8644,7 @@
aso rexr rexx rexb
- sse66 0f 38 07
+ /sse=66 0f 38 07
V W
@@ -8658,7 +8658,7 @@
aso rexr rexx rexb
- sse66 0f 38 08
+ /sse=66 0f 38 08
V W
@@ -8672,7 +8672,7 @@
aso rexr rexx rexb
- sse66 0f 38 0a
+ /sse=66 0f 38 0a
V W
@@ -8686,7 +8686,7 @@
aso rexr rexx rexb
- sse66 0f 38 09
+ /sse=66 0f 38 09
V W
@@ -8700,7 +8700,7 @@
aso rexr rexx rexb
- sse66 0f 38 0b
+ /sse=66 0f 38 0b
V W
@@ -8714,7 +8714,7 @@
aso rexr rexx rexb
- sse66 0f 3a 0f
+ /sse=66 0f 3a 0f
V W Ib
@@ -8727,7 +8727,7 @@
pblendvb
aso rexr rexx rexb
- sse66 0f 38 10
+ /sse=66 0f 38 10
V W
@@ -8736,7 +8736,7 @@
pmuldq
aso rexr rexx rexb
- sse66 0f 38 28
+ /sse=66 0f 38 28
V W
sse4.1
@@ -8746,7 +8746,7 @@
pminsb
aso rexr rexx rexb
- sse66 0f 38 38
+ /sse=66 0f 38 38
V W
@@ -8755,7 +8755,7 @@
pminsd
aso rexr rexx rexb
- sse66 0f 38 39
+ /sse=66 0f 38 39
V W
@@ -8764,7 +8764,7 @@
pminuw
aso rexr rexx rexb
- sse66 0f 38 3a
+ /sse=66 0f 38 3a
V W
@@ -8773,7 +8773,7 @@
pminud
aso rexr rexx rexb
- sse66 0f 38 3b
+ /sse=66 0f 38 3b
V W
@@ -8782,7 +8782,7 @@
pmaxsb
aso rexr rexx rexb
- sse66 0f 38 3c
+ /sse=66 0f 38 3c
V W
@@ -8791,7 +8791,7 @@
pmaxsd
aso rexr rexx rexb
- sse66 0f 38 3d
+ /sse=66 0f 38 3d
V W
@@ -8800,7 +8800,7 @@
pmaxud
aso rexr rexx rexb
- sse66 0f 38 3f
+ /sse=66 0f 38 3f
V W
@@ -8809,7 +8809,7 @@
pmaxuw
aso rexr rexx rexb
- sse66 0f 38 3e
+ /sse=66 0f 38 3e
V W
@@ -8818,7 +8818,7 @@
pmulld
aso rexr rexx rexb
- sse66 0f 38 40
+ /sse=66 0f 38 40
V W
sse4.1
@@ -8828,7 +8828,7 @@
phminposuw
aso rexr rexx rexb
- sse66 0f 38 41
+ /sse=66 0f 38 41
V W
@@ -8837,7 +8837,7 @@
roundps
aso rexr rexx rexb
- sse66 0f 3a 08
+ /sse=66 0f 3a 08
V W Ib
@@ -8846,7 +8846,7 @@
roundpd
aso rexr rexx rexb
- sse66 0f 3a 09
+ /sse=66 0f 3a 09
V W Ib
@@ -8855,7 +8855,7 @@
roundss
aso rexr rexx rexb
- sse66 0f 3a 0a
+ /sse=66 0f 3a 0a
V W Ib
@@ -8864,7 +8864,7 @@
roundsd
aso rexr rexx rexb
- sse66 0f 3a 0b
+ /sse=66 0f 3a 0b
V W Ib
@@ -8873,7 +8873,7 @@
blendpd
aso rexr rexx rexb
- sse66 0f 3a 0d
+ /sse=66 0f 3a 0d
V W Ib
@@ -8882,7 +8882,7 @@
pblendw
aso rexr rexx rexb
- sse66 0f 3a 0e
+ /sse=66 0f 3a 0e
V W Ib
@@ -8891,7 +8891,7 @@
blendps
aso rexr rexx rexb
- sse66 0f 3a 0c
+ /sse=66 0f 3a 0c
V W Ib
@@ -8900,7 +8900,7 @@
blendvpd
aso rexr rexx rexb
- sse66 0f 38 15
+ /sse=66 0f 38 15
V W
@@ -8909,7 +8909,7 @@
blendvps
aso rexr rexx rexb
- sse66 0f 38 14
+ /sse=66 0f 38 14
V W
@@ -8918,7 +8918,7 @@
dpps
aso rexr rexx rexb
- sse66 0f 3a 40
+ /sse=66 0f 3a 40
V W Ib
@@ -8927,7 +8927,7 @@
dppd
aso rexr rexx rexb
- sse66 0f 3a 41
+ /sse=66 0f 3a 41
V W Ib
@@ -8936,7 +8936,7 @@
mpsadbw
aso rexr rexx rexb
- sse66 0f 3a 42
+ /sse=66 0f 3a 42
V W Ib
@@ -8945,7 +8945,7 @@
extractps
aso rexr rexw rexx rexb
- sse66 0f 3a 17
+ /sse=66 0f 3a 17
MdRy V Ib
@@ -8954,7 +8954,7 @@
insertps
aso rexr rexw rexx rexb
- sse66 0f 3a 21
+ /sse=66 0f 3a 21
V Md Ib
@@ -8963,7 +8963,7 @@
movntdqa
aso rexr rexw rexx rexb
- sse66 0f 38 2a
+ /sse=66 0f 38 2a
V Mo
@@ -8972,7 +8972,7 @@
packusdw
aso rexr rexw rexx rexb
- sse66 0f 38 2b
+ /sse=66 0f 38 2b
V W
@@ -8981,7 +8981,7 @@
pmovsxbw
aso rexr rexw rexx rexb
- sse66 0f 38 20
+ /sse=66 0f 38 20
V MqU
sse4.1
@@ -8991,7 +8991,7 @@
pmovsxbd
aso rexr rexw rexx rexb
- sse66 0f 38 21
+ /sse=66 0f 38 21
V MdU
sse4.1
@@ -9001,7 +9001,7 @@
pmovsxbq
aso rexr rexw rexx rexb
- sse66 0f 38 22
+ /sse=66 0f 38 22
V MwU
sse4.1
@@ -9011,7 +9011,7 @@
pmovsxwd
aso rexr rexw rexx rexb
- sse66 0f 38 23
+ /sse=66 0f 38 23
V MqU
sse4.1
@@ -9021,7 +9021,7 @@
pmovsxwq
aso rexr rexw rexx rexb
- sse66 0f 38 24
+ /sse=66 0f 38 24
V MdU
sse4.1
@@ -9031,7 +9031,7 @@
pmovsxdq
aso rexr rexw rexx rexb
- sse66 0f 38 25
+ /sse=66 0f 38 25
V MqU
sse4.1
@@ -9041,7 +9041,7 @@
pmovzxbw
aso rexr rexw rexx rexb
- sse66 0f 38 30
+ /sse=66 0f 38 30
V MqU
sse4.1
@@ -9051,7 +9051,7 @@
pmovzxbd
aso rexr rexw rexx rexb
- sse66 0f 38 31
+ /sse=66 0f 38 31
V MdU
sse4.1
@@ -9061,7 +9061,7 @@
pmovzxbq
aso rexr rexw rexx rexb
- sse66 0f 38 32
+ /sse=66 0f 38 32
V MwU
sse4.1
@@ -9071,7 +9071,7 @@
pmovzxwd
aso rexr rexw rexx rexb
- sse66 0f 38 33
+ /sse=66 0f 38 33
V MqU
sse4.1
@@ -9081,7 +9081,7 @@
pmovzxwq
aso rexr rexw rexx rexb
- sse66 0f 38 34
+ /sse=66 0f 38 34
V MdU
sse4.1
@@ -9091,7 +9091,7 @@
pmovzxdq
aso rexr rexw rexx rexb
- sse66 0f 38 35
+ /sse=66 0f 38 35
V MqU
sse4.1
@@ -9101,7 +9101,7 @@
pcmpeqq
aso rexr rexw rexx rexb
- sse66 0f 38 29
+ /sse=66 0f 38 29
V W
sse4.1
@@ -9111,7 +9111,7 @@
ptest
aso rexr rexw rexx rexb
- sse66 0f 38 17
+ /sse=66 0f 38 17
V W
sse4.1
@@ -9121,7 +9121,7 @@
pcmpestri
aso rexr rexw rexx rexb
- sse66 0f 3a 61
+ /sse=66 0f 3a 61
V W Ib
sse4.2
@@ -9131,7 +9131,7 @@
pcmpestrm
aso rexr rexw rexx rexb
- sse66 0f 3a 60
+ /sse=66 0f 3a 60
V W Ib
sse4.2
@@ -9141,7 +9141,7 @@
pcmpgtq
aso rexr rexw rexx rexb
- sse66 0f 38 37
+ /sse=66 0f 38 37
V W
sse4.2
@@ -9151,7 +9151,7 @@
pcmpistri
aso rexr rexw rexx rexb
- sse66 0f 3a 63
+ /sse=66 0f 3a 63
V W Ib
sse4.2
@@ -9161,7 +9161,7 @@
pcmpistrm
aso rexr rexw rexx rexb
- sse66 0f 3a 62
+ /sse=66 0f 3a 62
V W Ib
sse4.2
@@ -9171,13 +9171,13 @@
crc32
aso oso rexr rexw rexx rexb
- ssef2 0f 38 f0
+ /sse=f2 0f 38 f0
Gy Eb
sse4.2
aso oso rexr rexw rexx rexb
- ssef2 0f 38 f1
+ /sse=f2 0f 38 f1
Gy Ev
sse4.2
diff --git a/scripts/ud_opcode.py b/scripts/ud_opcode.py
index defc5e2..70cd226 100644
--- a/scripts/ud_opcode.py
+++ b/scripts/ud_opcode.py
@@ -37,6 +37,8 @@ class UdOpcodeTables:
'/o' : { 'name' : 'UD_TAB__OPC_OSIZE', 'size' : 3 },
'/3dnow' : { 'name' : 'UD_TAB__OPC_3DNOW', 'size' : 256 },
'vendor' : { 'name' : 'UD_TAB__OPC_VENDOR', 'size' : 3 },
+ '/vex.p' : { 'name' : 'UD_TAB__OPC_VEX_P', 'size' : 4 },
+ '/vex.m' : { 'name' : 'UD_TAB__OPC_VEX_M', 'size' : 3 },
}
OpcodeTable0 = {
@@ -72,14 +74,27 @@ class UdOpcodeTables:
'amd' : '00',
'intel' : '01',
'any' : '02'
- }
+ },
+
+ 'vex.p': {
+ 'none' : '00',
+ 'f2' : '01',
+ 'f3' : '02',
+ '66' : '03'
+ },
+
+ 'vex.m': {
+ 'none' : '00',
+ '38' : '01',
+ '3a' : '02',
+ },
+
+
}
InsnTable = []
MnemonicsTable = []
- ThreeDNowTable = {}
-
def sizeOfTable( self, t ):
return self.TableInfo[ t ][ 'size' ]
@@ -96,7 +111,7 @@ class UdOpcodeTables:
table[ 'entries' ][ index ] = { 'type' : type, 'entries' : {}, 'meta' : meta }
if table[ 'entries' ][ index ][ 'type' ] != type:
raise NameError( "error: violation in opcode mapping (overwrite) %s with %s." %
- ( table[ 'entries' ][ index ][ 'type' ], type) )
+ ( table[ 'entries' ][ index ], type) )
return table[ 'entries' ][ index ]
class Insn:
@@ -118,73 +133,59 @@ class UdOpcodeTables:
'/o' : lambda v: "%02x" % (int(v) / 32),
'/a' : lambda v: "%02x" % (int(v) / 32),
'/m' : lambda v: '00' if v == '!64' else '01',
- '/sse' : lambda v: UdOpcodeTables.OpcExtIndex['sse'][v]
+ # SSE
+ '/sse' : lambda v: UdOpcodeTables.OpcExtIndex['sse'][v],
+ # AVX
+ '/vex.p' : lambda v: UdOpcodeTables.OpcExtIndex['vex.p'][v],
+ '/vex.m' : lambda v: UdOpcodeTables.OpcExtIndex['vex.m'][v]
}
def __init__(self, prefixes, mnemonic, opcodes, operands, vendor):
- self.opcodes = opcodes
+ self.opcodes = []
self.prefixes = prefixes
self.mnemonic = mnemonic
self.operands = operands
self.vendor = vendor
self.opcext = {}
- ssePrefix = None
- if self.opcodes[0] in ('ssef2', 'ssef3', 'sse66'):
- ssePrefix = self.opcodes[0][3:]
- self.opcodes.pop(0)
+ # artificially add a /sse=none for 2 byte opcodes
+ if opcodes[0] == '0f' and opcodes[1] != '0f':
+ opcodes.append('/sse=none')
- # do some preliminary decoding of the instruction type
- # 1byte, 2byte or 3byte instruction?
- self.nByteInsn = 1
- if self.opcodes[0] == '0f': # 2byte
- # 2+ byte opcodes are always disambiguated by an
- # sse prefix, unless it is a 3d now instruction
- # which is 0f 0f ...
- if self.opcodes[1] != '0f' and ssePrefix is None:
- ssePrefix = 'none'
- if self.opcodes[1] in ('38', '3a'): # 3byte
- self.nByteInsn = 3
- else:
- self.nByteInsn = 2
-
- # The opcode that indexes into the opcode table.
- self.opcode = self.opcodes[self.nByteInsn - 1]
-
- # Record opcode extensions
- for opcode in self.opcodes[self.nByteInsn:]:
- arg, val = opcode.split('=')
- self.opcext[arg] = self.OpcExtMap[arg](val)
+ # begin the list with all plain opcodes
+ for opc in opcodes:
+ if not opc.startswith('/'):
+ self.opcodes.append(opc)
- # Record sse extension: the reason sse extension is handled
- # separately is that historically sse was handled as a first
- # class opcode, not as an extension. Now that sse is handled
- # as an extension, we do the manual conversion here, as opposed
- # to modifying the opcode xml file.
- if ssePrefix is not None:
- self.opcext['/sse'] = self.OpcExtMap['/sse'](ssePrefix)
+ # re-order vex/xop prefixes to follow vex opcode
+ if self.opcodes[0] == 'c4' or self.opcodes[0] == 'c5':
+ for opc in opcodes:
+ if opc.startswith('/vex'):
+ self.opcodes.insert(1, opc)
+
+ # Add extensions. The order is important, and determines how
+ # well the opcode table is packed. Also note, /sse must be
+ # before /o, because /sse may consume operand size prefix
+ # affect the outcome of /o.
+ for ext in ('/mod', '/x87', '/reg', '/rm', '/sse',
+ '/o', '/a', '/m', '/3dnow'):
+ for opc in opcodes:
+ if opc.startswith(ext):
+ self.opcodes.append(opc)
def parse(self, table, insn):
+ # Walk down the tree, create levels as needed
+ assert not insn.opcodes[0].startswith("/")
index = insn.opcodes[0];
- if insn.nByteInsn > 1:
- assert index == '0f'
- table = self.updateTable(table, index, 'opctbl', '0f')
- index = insn.opcodes[1]
-
- if insn.nByteInsn == 3:
- table = self.updateTable(table, index, 'opctbl', index)
- index = insn.opcodes[2]
-
- # Walk down the tree, create levels as needed, for opcode
- # extensions. The order is important, and determines how
- # well the opcode table is packed. Also note, /sse must be
- # before /o, because /sse may consume operand size prefix
- # affect the outcome of /o.
- for ext in ('/mod', '/x87', '/reg', '/rm', '/sse',
- '/o', '/a', '/m', '/3dnow'):
- if ext in insn.opcext:
+ for opc in insn.opcodes[1:]:
+ if opc.startswith('/'):
+ ext, v= opc.split('=')
table = self.updateTable(table, index, ext, ext)
- index = insn.opcext[ext]
+ index = insn.OpcExtMap[ext](v)
+ insn.opcext[ext] = index
+ else:
+ table = self.updateTable(table, index, 'opctbl', index)
+ index = opc
# additional table for disambiguating vendor
if len(insn.vendor):
@@ -200,10 +201,11 @@ class UdOpcodeTables:
# add instruction to linear table of instruction forms
self.InsnTable.append({ 'prefixes' : insn.prefixes,
- 'opcext' : insn.opcext,
'mnemonic' : insn.mnemonic,
'operands' : insn.operands,
- 'vendor' : insn.vendor })
+ 'vendor' : insn.vendor,
+ 'opcext' : insn.opcext,
+ 'opcodes' : insn.opcodes })
# add mnemonic to mnemonic table
if not insn.mnemonic in self.MnemonicsTable:
@@ -217,7 +219,11 @@ class UdOpcodeTables:
opcodes=opcodes,
operands=operands,
vendor=vendor)
- self.parse(self.OpcodeTable0, insn)
+ try:
+ self.parse(self.OpcodeTable0, insn)
+ except:
+ self.print_tree()
+ raise
def print_table( self, table, pfxs ):
print("%s |" % pfxs)
@@ -227,7 +233,7 @@ class UdOpcodeTables:
for idx in keys:
e = table[ 'entries' ][ idx ]
if e[ 'type' ] == 'insn':
- print("%s |-<%s>" % ( pfxs, idx ),)
+ print("%s |-<%s>" % ( pfxs, idx )),
print("%s %s" % ( e[ 'mnemonic' ], ' '.join( e[ 'operands'] ) ))
else:
print("%s |-<%s> %s" % ( pfxs, idx, e['type'] ))