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'] ))