Skip to content

Commit 8948d9a

Browse files
authored
Update instructions and add new ISA extensions (#407)
1 parent 5acfd82 commit 8948d9a

23 files changed

+10781
-10320
lines changed

include/Zydis/Decoder.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,19 @@ typedef enum ZydisDecoderMode_
136136
* This mode is enabled by default.
137137
*/
138138
ZYDIS_DECODER_MODE_CLDEMOTE,
139+
/**
140+
* Enables the `IPREFETCH` mode.
141+
*
142+
* The `IPREFETCH` isa-extension reuses (overrides) some of the widenop instruction opcodes.
143+
*
144+
* This mode is enabled by default.
145+
*/
146+
ZYDIS_DECODER_MODE_IPREFETCH,
139147

140148
/**
141149
* Maximum value of this enum.
142150
*/
143-
ZYDIS_DECODER_MODE_MAX_VALUE = ZYDIS_DECODER_MODE_CLDEMOTE,
151+
ZYDIS_DECODER_MODE_MAX_VALUE = ZYDIS_DECODER_MODE_IPREFETCH,
144152
/**
145153
* The minimum number of bits required to represent all values of this enum.
146154
*/

include/Zydis/Generated/EnumISAExt.h

+8
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ typedef enum ZydisISAExt_
1010
ZYDIS_ISA_EXT_AMD3DNOW_PREFETCH,
1111
ZYDIS_ISA_EXT_AMD_INVLPGB,
1212
ZYDIS_ISA_EXT_AMX_BF16,
13+
ZYDIS_ISA_EXT_AMX_FP16,
1314
ZYDIS_ISA_EXT_AMX_INT8,
1415
ZYDIS_ISA_EXT_AMX_TILE,
1516
ZYDIS_ISA_EXT_AVX,
@@ -18,7 +19,10 @@ typedef enum ZydisISAExt_
1819
ZYDIS_ISA_EXT_AVX512EVEX,
1920
ZYDIS_ISA_EXT_AVX512VEX,
2021
ZYDIS_ISA_EXT_AVXAES,
22+
ZYDIS_ISA_EXT_AVX_IFMA,
23+
ZYDIS_ISA_EXT_AVX_NE_CONVERT,
2124
ZYDIS_ISA_EXT_AVX_VNNI,
25+
ZYDIS_ISA_EXT_AVX_VNNI_INT8,
2226
ZYDIS_ISA_EXT_BASE,
2327
ZYDIS_ISA_EXT_BMI1,
2428
ZYDIS_ISA_EXT_BMI2,
@@ -34,6 +38,7 @@ typedef enum ZydisISAExt_
3438
ZYDIS_ISA_EXT_FMA4,
3539
ZYDIS_ISA_EXT_GFNI,
3640
ZYDIS_ISA_EXT_HRESET,
41+
ZYDIS_ISA_EXT_ICACHE_PREFETCH,
3742
ZYDIS_ISA_EXT_INVPCID,
3843
ZYDIS_ISA_EXT_KEYLOCKER,
3944
ZYDIS_ISA_EXT_KEYLOCKER_WIDE,
@@ -49,13 +54,15 @@ typedef enum ZydisISAExt_
4954
ZYDIS_ISA_EXT_MOVBE,
5055
ZYDIS_ISA_EXT_MOVDIR,
5156
ZYDIS_ISA_EXT_MPX,
57+
ZYDIS_ISA_EXT_MSRLIST,
5258
ZYDIS_ISA_EXT_PADLOCK,
5359
ZYDIS_ISA_EXT_PAUSE,
5460
ZYDIS_ISA_EXT_PCLMULQDQ,
5561
ZYDIS_ISA_EXT_PCONFIG,
5662
ZYDIS_ISA_EXT_PKU,
5763
ZYDIS_ISA_EXT_PREFETCHWT1,
5864
ZYDIS_ISA_EXT_PT,
65+
ZYDIS_ISA_EXT_RAO_INT,
5966
ZYDIS_ISA_EXT_RDPID,
6067
ZYDIS_ISA_EXT_RDPRU,
6168
ZYDIS_ISA_EXT_RDRAND,
@@ -86,6 +93,7 @@ typedef enum ZydisISAExt_
8693
ZYDIS_ISA_EXT_VPCLMULQDQ,
8794
ZYDIS_ISA_EXT_VTX,
8895
ZYDIS_ISA_EXT_WAITPKG,
96+
ZYDIS_ISA_EXT_WRMSRNS,
8997
ZYDIS_ISA_EXT_X87,
9098
ZYDIS_ISA_EXT_XOP,
9199
ZYDIS_ISA_EXT_XSAVE,

include/Zydis/Generated/EnumISASet.h

+9
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ typedef enum ZydisISASet_
1010
ZYDIS_ISA_SET_AMD3DNOW,
1111
ZYDIS_ISA_SET_AMD_INVLPGB,
1212
ZYDIS_ISA_SET_AMX_BF16,
13+
ZYDIS_ISA_SET_AMX_FP16,
1314
ZYDIS_ISA_SET_AMX_INT8,
1415
ZYDIS_ISA_SET_AMX_TILE,
1516
ZYDIS_ISA_SET_AVX,
@@ -81,7 +82,10 @@ typedef enum ZydisISASet_
8182
ZYDIS_ISA_SET_AVX512_VPOPCNTDQ_512,
8283
ZYDIS_ISA_SET_AVXAES,
8384
ZYDIS_ISA_SET_AVX_GFNI,
85+
ZYDIS_ISA_SET_AVX_IFMA,
86+
ZYDIS_ISA_SET_AVX_NE_CONVERT,
8487
ZYDIS_ISA_SET_AVX_VNNI,
88+
ZYDIS_ISA_SET_AVX_VNNI_INT8,
8589
ZYDIS_ISA_SET_BMI1,
8690
ZYDIS_ISA_SET_BMI2,
8791
ZYDIS_ISA_SET_CET,
@@ -96,6 +100,7 @@ typedef enum ZydisISASet_
96100
ZYDIS_ISA_SET_F16C,
97101
ZYDIS_ISA_SET_FAT_NOP,
98102
ZYDIS_ISA_SET_FCMOV,
103+
ZYDIS_ISA_SET_FCOMI,
99104
ZYDIS_ISA_SET_FMA,
100105
ZYDIS_ISA_SET_FMA4,
101106
ZYDIS_ISA_SET_FXSAVE,
@@ -109,6 +114,7 @@ typedef enum ZydisISASet_
109114
ZYDIS_ISA_SET_I486,
110115
ZYDIS_ISA_SET_I486REAL,
111116
ZYDIS_ISA_SET_I86,
117+
ZYDIS_ISA_SET_ICACHE_PREFETCH,
112118
ZYDIS_ISA_SET_INVPCID,
113119
ZYDIS_ISA_SET_KEYLOCKER,
114120
ZYDIS_ISA_SET_KEYLOCKER_WIDE,
@@ -128,6 +134,7 @@ typedef enum ZydisISASet_
128134
ZYDIS_ISA_SET_MOVBE,
129135
ZYDIS_ISA_SET_MOVDIR,
130136
ZYDIS_ISA_SET_MPX,
137+
ZYDIS_ISA_SET_MSRLIST,
131138
ZYDIS_ISA_SET_PADLOCK_ACE,
132139
ZYDIS_ISA_SET_PADLOCK_PHE,
133140
ZYDIS_ISA_SET_PADLOCK_PMM,
@@ -143,6 +150,7 @@ typedef enum ZydisISASet_
143150
ZYDIS_ISA_SET_PREFETCHWT1,
144151
ZYDIS_ISA_SET_PREFETCH_NOP,
145152
ZYDIS_ISA_SET_PT,
153+
ZYDIS_ISA_SET_RAO_INT,
146154
ZYDIS_ISA_SET_RDPID,
147155
ZYDIS_ISA_SET_RDPMC,
148156
ZYDIS_ISA_SET_RDPRU,
@@ -180,6 +188,7 @@ typedef enum ZydisISASet_
180188
ZYDIS_ISA_SET_VPCLMULQDQ,
181189
ZYDIS_ISA_SET_VTX,
182190
ZYDIS_ISA_SET_WAITPKG,
191+
ZYDIS_ISA_SET_WRMSRNS,
183192
ZYDIS_ISA_SET_X87,
184193
ZYDIS_ISA_SET_XOP,
185194
ZYDIS_ISA_SET_XSAVE,

include/Zydis/Generated/EnumInstructionCategory.h

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ typedef enum ZydisInstructionCategory_
1717
ZYDIS_CATEGORY_AVX512_BITALG,
1818
ZYDIS_CATEGORY_AVX512_VBMI,
1919
ZYDIS_CATEGORY_AVX512_VP2INTERSECT,
20+
ZYDIS_CATEGORY_AVX_IFMA,
2021
ZYDIS_CATEGORY_BINARY,
2122
ZYDIS_CATEGORY_BITBYTE,
2223
ZYDIS_CATEGORY_BLEND,
@@ -63,6 +64,7 @@ typedef enum ZydisInstructionCategory_
6364
ZYDIS_CATEGORY_MMX,
6465
ZYDIS_CATEGORY_MOVDIR,
6566
ZYDIS_CATEGORY_MPX,
67+
ZYDIS_CATEGORY_MSRLIST,
6668
ZYDIS_CATEGORY_NOP,
6769
ZYDIS_CATEGORY_PADLOCK,
6870
ZYDIS_CATEGORY_PCLMULQDQ,
@@ -108,6 +110,7 @@ typedef enum ZydisInstructionCategory_
108110
ZYDIS_CATEGORY_VTX,
109111
ZYDIS_CATEGORY_WAITPKG,
110112
ZYDIS_CATEGORY_WIDENOP,
113+
ZYDIS_CATEGORY_WRMSRNS,
111114
ZYDIS_CATEGORY_X87_ALU,
112115
ZYDIS_CATEGORY_XOP,
113116
ZYDIS_CATEGORY_XSAVE,

include/Zydis/Generated/EnumMnemonic.h

+22
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ typedef enum ZydisMnemonic_
66
ZYDIS_MNEMONIC_INVALID,
77
ZYDIS_MNEMONIC_AAA,
88
ZYDIS_MNEMONIC_AAD,
9+
ZYDIS_MNEMONIC_AADD,
910
ZYDIS_MNEMONIC_AAM,
11+
ZYDIS_MNEMONIC_AAND,
1012
ZYDIS_MNEMONIC_AAS,
1113
ZYDIS_MNEMONIC_ADC,
1214
ZYDIS_MNEMONIC_ADCX,
@@ -38,7 +40,9 @@ typedef enum ZydisMnemonic_
3840
ZYDIS_MNEMONIC_ANDNPS,
3941
ZYDIS_MNEMONIC_ANDPD,
4042
ZYDIS_MNEMONIC_ANDPS,
43+
ZYDIS_MNEMONIC_AOR,
4144
ZYDIS_MNEMONIC_ARPL,
45+
ZYDIS_MNEMONIC_AXOR,
4246
ZYDIS_MNEMONIC_BEXTR,
4347
ZYDIS_MNEMONIC_BLCFILL,
4448
ZYDIS_MNEMONIC_BLCI,
@@ -615,6 +619,8 @@ typedef enum ZydisMnemonic_
615619
ZYDIS_MNEMONIC_POPFQ,
616620
ZYDIS_MNEMONIC_POR,
617621
ZYDIS_MNEMONIC_PREFETCH,
622+
ZYDIS_MNEMONIC_PREFETCHIT0,
623+
ZYDIS_MNEMONIC_PREFETCHIT1,
618624
ZYDIS_MNEMONIC_PREFETCHNTA,
619625
ZYDIS_MNEMONIC_PREFETCHT0,
620626
ZYDIS_MNEMONIC_PREFETCHT1,
@@ -675,6 +681,7 @@ typedef enum ZydisMnemonic_
675681
ZYDIS_MNEMONIC_RDFSBASE,
676682
ZYDIS_MNEMONIC_RDGSBASE,
677683
ZYDIS_MNEMONIC_RDMSR,
684+
ZYDIS_MNEMONIC_RDMSRLIST,
678685
ZYDIS_MNEMONIC_RDPID,
679686
ZYDIS_MNEMONIC_RDPKRU,
680687
ZYDIS_MNEMONIC_RDPMC,
@@ -788,6 +795,7 @@ typedef enum ZydisMnemonic_
788795
ZYDIS_MNEMONIC_TDPBSUD,
789796
ZYDIS_MNEMONIC_TDPBUSD,
790797
ZYDIS_MNEMONIC_TDPBUUD,
798+
ZYDIS_MNEMONIC_TDPFP16PS,
791799
ZYDIS_MNEMONIC_TEST,
792800
ZYDIS_MNEMONIC_TESTUI,
793801
ZYDIS_MNEMONIC_TILELOADD,
@@ -839,6 +847,8 @@ typedef enum ZydisMnemonic_
839847
ZYDIS_MNEMONIC_VANDNPS,
840848
ZYDIS_MNEMONIC_VANDPD,
841849
ZYDIS_MNEMONIC_VANDPS,
850+
ZYDIS_MNEMONIC_VBCSTNEBF162PS,
851+
ZYDIS_MNEMONIC_VBCSTNESH2PS,
842852
ZYDIS_MNEMONIC_VBLENDMPD,
843853
ZYDIS_MNEMONIC_VBLENDMPS,
844854
ZYDIS_MNEMONIC_VBLENDPD,
@@ -880,6 +890,10 @@ typedef enum ZydisMnemonic_
880890
ZYDIS_MNEMONIC_VCVTFXPNTPS2UDQ,
881891
ZYDIS_MNEMONIC_VCVTFXPNTUDQ2PS,
882892
ZYDIS_MNEMONIC_VCVTNE2PS2BF16,
893+
ZYDIS_MNEMONIC_VCVTNEEBF162PS,
894+
ZYDIS_MNEMONIC_VCVTNEEPH2PS,
895+
ZYDIS_MNEMONIC_VCVTNEOBF162PS,
896+
ZYDIS_MNEMONIC_VCVTNEOPH2PS,
883897
ZYDIS_MNEMONIC_VCVTNEPS2BF16,
884898
ZYDIS_MNEMONIC_VCVTPD2DQ,
885899
ZYDIS_MNEMONIC_VCVTPD2PH,
@@ -1341,8 +1355,14 @@ typedef enum ZydisMnemonic_
13411355
ZYDIS_MNEMONIC_VPCOMW,
13421356
ZYDIS_MNEMONIC_VPCONFLICTD,
13431357
ZYDIS_MNEMONIC_VPCONFLICTQ,
1358+
ZYDIS_MNEMONIC_VPDPBSSD,
1359+
ZYDIS_MNEMONIC_VPDPBSSDS,
1360+
ZYDIS_MNEMONIC_VPDPBSUD,
1361+
ZYDIS_MNEMONIC_VPDPBSUDS,
13441362
ZYDIS_MNEMONIC_VPDPBUSD,
13451363
ZYDIS_MNEMONIC_VPDPBUSDS,
1364+
ZYDIS_MNEMONIC_VPDPBUUD,
1365+
ZYDIS_MNEMONIC_VPDPBUUDS,
13461366
ZYDIS_MNEMONIC_VPDPWSSD,
13471367
ZYDIS_MNEMONIC_VPDPWSSDS,
13481368
ZYDIS_MNEMONIC_VPERM2F128,
@@ -1719,6 +1739,8 @@ typedef enum ZydisMnemonic_
17191739
ZYDIS_MNEMONIC_WRFSBASE,
17201740
ZYDIS_MNEMONIC_WRGSBASE,
17211741
ZYDIS_MNEMONIC_WRMSR,
1742+
ZYDIS_MNEMONIC_WRMSRLIST,
1743+
ZYDIS_MNEMONIC_WRMSRNS,
17221744
ZYDIS_MNEMONIC_WRPKRU,
17231745
ZYDIS_MNEMONIC_WRSSD,
17241746
ZYDIS_MNEMONIC_WRSSQ,

include/Zydis/Internal/DecoderData.h

+5-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,11 @@ enum ZydisDecoderTreeNodeTypes
173173
/**
174174
* Reference to a CLDEMOTE-mode filter.
175175
*/
176-
ZYDIS_NODETYPE_FILTER_MODE_CLDEMOTE = 0x1B
176+
ZYDIS_NODETYPE_FILTER_MODE_CLDEMOTE = 0x1B,
177+
/**
178+
* Reference to a IPREFETCH-mode filter.
179+
*/
180+
ZYDIS_NODETYPE_FILTER_MODE_IPREFETCH = 0x1C
177181
};
178182

179183
/* ---------------------------------------------------------------------------------------------- */

include/Zydis/Internal/SharedData.h

+3
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,12 @@ typedef enum ZydisInternalElementType_
116116
ZYDIS_IELEMENT_TYPE_UINT,
117117
ZYDIS_IELEMENT_TYPE_INT1,
118118
ZYDIS_IELEMENT_TYPE_INT8,
119+
ZYDIS_IELEMENT_TYPE_INT8X4,
119120
ZYDIS_IELEMENT_TYPE_INT16,
120121
ZYDIS_IELEMENT_TYPE_INT32,
121122
ZYDIS_IELEMENT_TYPE_INT64,
122123
ZYDIS_IELEMENT_TYPE_UINT8,
124+
ZYDIS_IELEMENT_TYPE_UINT8X4,
123125
ZYDIS_IELEMENT_TYPE_UINT16,
124126
ZYDIS_IELEMENT_TYPE_UINT32,
125127
ZYDIS_IELEMENT_TYPE_UINT64,
@@ -130,6 +132,7 @@ typedef enum ZydisInternalElementType_
130132
ZYDIS_IELEMENT_TYPE_FLOAT32,
131133
ZYDIS_IELEMENT_TYPE_FLOAT64,
132134
ZYDIS_IELEMENT_TYPE_FLOAT80,
135+
ZYDIS_IELEMENT_TYPE_BFLOAT16X2,
133136
ZYDIS_IELEMENT_TYPE_BCD80,
134137
ZYDIS_IELEMENT_TYPE_CC3,
135138
ZYDIS_IELEMENT_TYPE_CC5,

include/Zydis/SharedTypes.h

+4
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,10 @@ typedef enum ZydisElementType_
161161
* 80-bit floating point value (`extended`).
162162
*/
163163
ZYDIS_ELEMENT_TYPE_FLOAT80,
164+
/**
165+
* 16-bit brain floating point value.
166+
*/
167+
ZYDIS_ELEMENT_TYPE_BFLOAT16,
164168
/**
165169
* Binary coded decimal value.
166170
*/

src/Decoder.c

+5-1
Original file line numberDiff line numberDiff line change
@@ -4800,6 +4800,9 @@ static ZyanStatus ZydisDecodeInstruction(ZydisDecoderState* state,
48004800
case ZYDIS_NODETYPE_FILTER_MODE_CLDEMOTE:
48014801
index = state->decoder->decoder_mode[ZYDIS_DECODER_MODE_CLDEMOTE] ? 1 : 0;
48024802
break;
4803+
case ZYDIS_NODETYPE_FILTER_MODE_IPREFETCH:
4804+
index = state->decoder->decoder_mode[ZYDIS_DECODER_MODE_IPREFETCH] ? 1 : 0;
4805+
break;
48034806
default:
48044807
if (node_type & ZYDIS_NODETYPE_DEFINITION_MASK)
48054808
{
@@ -4910,7 +4913,8 @@ ZyanStatus ZydisDecoderInit(ZydisDecoder* decoder, ZydisMachineMode machine_mode
49104913
ZYAN_TRUE , // ZYDIS_DECODER_MODE_LZCNT
49114914
ZYAN_TRUE , // ZYDIS_DECODER_MODE_TZCNT
49124915
ZYAN_FALSE, // ZYDIS_DECODER_MODE_WBNOINVD
4913-
ZYAN_TRUE // ZYDIS_DECODER_MODE_CLDEMOTE
4916+
ZYAN_TRUE, // ZYDIS_DECODER_MODE_CLDEMOTE
4917+
ZYAN_FALSE // ZYDIS_DECODER_MODE_IPREFETCH
49144918
};
49154919

49164920
if (!decoder)

src/DecoderData.c

+3
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ const ZydisDecoderTreeNode* ZydisDecoderTreeGetChildNode(const ZydisDecoderTreeN
155155
case ZYDIS_NODETYPE_FILTER_MODE_CLDEMOTE:
156156
ZYAN_ASSERT(index < 2);
157157
return &FILTERS_MODE_CLDEMOTE[parent->value][index];
158+
case ZYDIS_NODETYPE_FILTER_MODE_IPREFETCH:
159+
ZYAN_ASSERT(index < 2);
160+
return &FILTERS_MODE_IPREFETCH[parent->value][index];
158161
default:
159162
ZYAN_UNREACHABLE;
160163
}

src/Generated/DecoderTables.inc

+2,703-2,586
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)