mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-25 18:00:49 +01:00
HostRunner: Support checking for SERIALIZE
This commit is contained in:
5 files changed
+66
-52
No files matched your search
@@ -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):
|
||||
|
||||
@@ -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,7 +2,8 @@
|
||||
{
|
||||
"RegData": {
|
||||
"RAX": "1"
|
||||
}
|
||||
},
|
||||
"HostFeatures": ["SERIALIZE"]
|
||||
}
|
||||
%endif
|
||||
|
||||
|
||||
Reference in new issue
Block a user