HostRunner: Support checking for SERIALIZE

This commit is contained in:
Ryan Houdek committed 2026-10-19 14:29:03 -07:00
1 parent 47de7e352d
commit 25eb85f80e
5 files changed
+66 -52

No files matched your search

+53 -51
View File
@@ -62,32 +62,33 @@ class Mode(Flag) :
MODE_64 = 1
class HostFeatures(Flag) :
FEATURE_ANY = 0
FEATURE_3DNOW = (1 << 0)
FEATURE_SSE4A = (1 << 1)
FEATURE_AVX = (1 << 2)
FEATURE_RAND = (1 << 3)
FEATURE_SHA = (1 << 4)
FEATURE_CLZERO = (1 << 5)
FEATURE_BMI1 = (1 << 6)
FEATURE_BMI2 = (1 << 7)
FEATURE_CLWB = (1 << 8)
FEATURE_LINUX = (1 << 9)
FEATURE_AES256 = (1 << 10)
FEATURE_AFP = (1 << 11)
FEATURE_SSSE3 = (1 << 12)
FEATURE_SSE4_1 = (1 << 13)
FEATURE_SSE4_2 = (1 << 14)
FEATURE_AES = (1 << 15)
FEATURE_PCLMUL = (1 << 16)
FEATURE_MOVBE = (1 << 17)
FEATURE_ADX = (1 << 18)
FEATURE_XSAVE = (1 << 19)
FEATURE_RDPID = (1 << 20)
FEATURE_CLFLOPT = (1 << 21)
FEATURE_FSGSBASE = (1 << 22)
FEATURE_EMMI = (1 << 23)
FEATURE_AVX_VNNI = (1 << 24)
FEATURE_ANY = 0
FEATURE_3DNOW = (1 << 0)
FEATURE_SSE4A = (1 << 1)
FEATURE_AVX = (1 << 2)
FEATURE_RAND = (1 << 3)
FEATURE_SHA = (1 << 4)
FEATURE_CLZERO = (1 << 5)
FEATURE_BMI1 = (1 << 6)
FEATURE_BMI2 = (1 << 7)
FEATURE_CLWB = (1 << 8)
FEATURE_LINUX = (1 << 9)
FEATURE_AES256 = (1 << 10)
FEATURE_AFP = (1 << 11)
FEATURE_SSSE3 = (1 << 12)
FEATURE_SSE4_1 = (1 << 13)
FEATURE_SSE4_2 = (1 << 14)
FEATURE_AES = (1 << 15)
FEATURE_PCLMUL = (1 << 16)
FEATURE_MOVBE = (1 << 17)
FEATURE_ADX = (1 << 18)
FEATURE_XSAVE = (1 << 19)
FEATURE_RDPID = (1 << 20)
FEATURE_CLFLOPT = (1 << 21)
FEATURE_FSGSBASE = (1 << 22)
FEATURE_EMMI = (1 << 23)
FEATURE_AVX_VNNI = (1 << 24)
FEATURE_SERIALIZE = (1 << 25)
RegStringLookup = {
"NONE": Regs.REG_NONE,
@@ -150,31 +151,32 @@ ModeStringLookup = {
}
HostFeaturesLookup = {
"3DNOW" : HostFeatures.FEATURE_3DNOW,
"SSE4A" : HostFeatures.FEATURE_SSE4A,
"AVX" : HostFeatures.FEATURE_AVX,
"RAND" : HostFeatures.FEATURE_RAND,
"SHA" : HostFeatures.FEATURE_SHA,
"CLZERO" : HostFeatures.FEATURE_CLZERO,
"BMI1" : HostFeatures.FEATURE_BMI1,
"BMI2" : HostFeatures.FEATURE_BMI2,
"CLWB" : HostFeatures.FEATURE_CLWB,
"LINUX" : HostFeatures.FEATURE_LINUX,
"AES256" : HostFeatures.FEATURE_AES256,
"AFP" : HostFeatures.FEATURE_AFP,
"SSSE3" : HostFeatures.FEATURE_SSSE3,
"SSE4.1" : HostFeatures.FEATURE_SSE4_1,
"SSE4.2" : HostFeatures.FEATURE_SSE4_2,
"AES" : HostFeatures.FEATURE_AES,
"PCLMUL" : HostFeatures.FEATURE_PCLMUL,
"MOVBE" : HostFeatures.FEATURE_MOVBE,
"ADX" : HostFeatures.FEATURE_ADX,
"XSAVE" : HostFeatures.FEATURE_XSAVE,
"RDPID" : HostFeatures.FEATURE_RDPID,
"CLFLOPT" : HostFeatures.FEATURE_CLFLOPT,
"FSGSBASE" : HostFeatures.FEATURE_FSGSBASE,
"EMMI" : HostFeatures.FEATURE_EMMI,
"AVX_VNNI" : HostFeatures.FEATURE_AVX_VNNI,
"3DNOW" : HostFeatures.FEATURE_3DNOW,
"SSE4A" : HostFeatures.FEATURE_SSE4A,
"AVX" : HostFeatures.FEATURE_AVX,
"RAND" : HostFeatures.FEATURE_RAND,
"SHA" : HostFeatures.FEATURE_SHA,
"CLZERO" : HostFeatures.FEATURE_CLZERO,
"BMI1" : HostFeatures.FEATURE_BMI1,
"BMI2" : HostFeatures.FEATURE_BMI2,
"CLWB" : HostFeatures.FEATURE_CLWB,
"LINUX" : HostFeatures.FEATURE_LINUX,
"AES256" : HostFeatures.FEATURE_AES256,
"AFP" : HostFeatures.FEATURE_AFP,
"SSSE3" : HostFeatures.FEATURE_SSSE3,
"SSE4.1" : HostFeatures.FEATURE_SSE4_1,
"SSE4.2" : HostFeatures.FEATURE_SSE4_2,
"AES" : HostFeatures.FEATURE_AES,
"PCLMUL" : HostFeatures.FEATURE_PCLMUL,
"MOVBE" : HostFeatures.FEATURE_MOVBE,
"ADX" : HostFeatures.FEATURE_ADX,
"XSAVE" : HostFeatures.FEATURE_XSAVE,
"RDPID" : HostFeatures.FEATURE_RDPID,
"CLFLOPT" : HostFeatures.FEATURE_CLFLOPT,
"FSGSBASE" : HostFeatures.FEATURE_FSGSBASE,
"EMMI" : HostFeatures.FEATURE_EMMI,
"AVX_VNNI" : HostFeatures.FEATURE_AVX_VNNI,
"SERIALIZE" : HostFeatures.FEATURE_SERIALIZE,
}
def parse_hexstring(s):
+2
View File
@@ -40,6 +40,7 @@ public:
Feat_vaes = data_7.ecx & (1U << 9);
Feat_pclmulqdq = Feat_pclmulqdq && (data_7.ecx & (1U << 10));
Feat_rdpid = data_7.ecx & (1U << 22);
Feat_serialize = data_7.edx & (1U << 14);
if (data_7.eax >= 1) {
auto data_7_1 = cpuid(0x7, 0x1);
@@ -85,6 +86,7 @@ public:
bool Feat_clflopt {};
bool Feat_fsgsbase {};
bool Feat_avx_vnni {};
bool Feat_serialize {};
private:
struct cpuid_data {
@@ -322,6 +322,7 @@ public:
FEATURE_FSGSBASE = (1 << 22),
FEATURE_EMMI = (1 << 23),
FEATURE_AVX_VNNI = (1 << 24),
FEATURE_SERIALIZE = (1 << 25),
};
bool Requires3DNow() const {
@@ -399,6 +400,9 @@ public:
bool RequiresAVXVNNI() const {
return BaseConfig.OptionHostFeatures & HostFeatures::FEATURE_AVX_VNNI;
}
bool RequiresSerialize() const {
return BaseConfig.OptionHostFeatures & HostFeatures::FEATURE_SERIALIZE;
}
private:
FEX_CONFIG_OPT(ConfigDumpGPRs, DUMPGPRS);
@@ -609,6 +613,9 @@ public:
bool RequiresAVXVNNI() const {
return Config.RequiresAVXVNNI();
}
bool RequiresSerialize() const {
return Config.RequiresSerialize();
}
private:
constexpr static uint64_t STACK_OFFSET = 0xc000'0000;
@@ -288,6 +288,7 @@ int main(int argc, char** argv, char** const envp) {
const bool SupportsCLFLOPT = Feature.Feat_clflopt;
const bool SupportsFSGSBase = Feature.Feat_fsgsbase;
const bool SupportsAVXVNNI = Feature.Feat_avx_vnni;
const bool SupportsSerialize = Feature.Feat_serialize;
TestUnsupported |=
(!Supports3DNow && Loader.Requires3DNow()) || (!SupportsSSE4A && Loader.RequiresSSE4A()) || (!SupportsBMI1 && Loader.RequiresBMI1()) ||
@@ -297,6 +298,7 @@ int main(int argc, char** argv, char** const envp) {
(!SupportsADX && Loader.RequiresADX()) || (!SupportsXSAVE && Loader.RequiresXSAVE()) || (!SupportsRDPID && Loader.RequiresRDPID()) ||
(!SupportsCLFLOPT && Loader.RequiresCLFLOPT()) || (!SupportsFSGSBase && Loader.RequiresFSGSBase()) || Loader.RequiresEMMI();
TestUnsupported |= !SupportsAVXVNNI && Loader.RequiresAVXVNNI();
TestUnsupported |= !SupportsSerialize && Loader.RequiresSerialize();
#endif
#ifdef _WIN32
+2 -1
View File
@@ -2,7 +2,8 @@
{
"RegData": {
"RAX": "1"
}
},
"HostFeatures": ["SERIALIZE"]
}
%endif