mirror of
https://github.com/google/cpu_features.git
synced 2025-04-28 07:23:37 +02:00
parent
51693b8b3e
commit
5911e96bbd
@ -24,6 +24,7 @@ typedef struct {
|
|||||||
// https://www.mips.com/products/architectures/ase/simd/
|
// https://www.mips.com/products/architectures/ase/simd/
|
||||||
int eva : 1; // Enhanced Virtual Addressing
|
int eva : 1; // Enhanced Virtual Addressing
|
||||||
// https://www.mips.com/products/architectures/mips64/
|
// https://www.mips.com/products/architectures/mips64/
|
||||||
|
int r6 : 1; // True if is release 6 of the processor.
|
||||||
|
|
||||||
// Make sure to update MipsFeaturesEnum below if you add a field here.
|
// Make sure to update MipsFeaturesEnum below if you add a field here.
|
||||||
} MipsFeatures;
|
} MipsFeatures;
|
||||||
@ -40,6 +41,7 @@ MipsInfo GetMipsInfo(void);
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
MIPS_MSA,
|
MIPS_MSA,
|
||||||
MIPS_EVA,
|
MIPS_EVA,
|
||||||
|
MIPS_R6,
|
||||||
MIPS_LAST_,
|
MIPS_LAST_,
|
||||||
} MipsFeaturesEnum;
|
} MipsFeaturesEnum;
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ static void android_cpuInit(void) {
|
|||||||
// if (info.features.) g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SHA_NI;
|
// if (info.features.) g_cpuFeatures |= ANDROID_CPU_X86_FEATURE_SHA_NI;
|
||||||
#elif defined(CPU_FEATURES_ARCH_MIPS)
|
#elif defined(CPU_FEATURES_ARCH_MIPS)
|
||||||
MipsInfo info = GetMipsInfo();
|
MipsInfo info = GetMipsInfo();
|
||||||
// if (info.features.) g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_R6;
|
if (info.features.r6) g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_R6;
|
||||||
if (info.features.msa) g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_MSA;
|
if (info.features.msa) g_cpuFeatures |= ANDROID_CPU_MIPS_FEATURE_MSA;
|
||||||
#elif defined(CPU_FEATURES_ARCH_AARCH64)
|
#elif defined(CPU_FEATURES_ARCH_AARCH64)
|
||||||
Aarch64Info info = GetAarch64Info();
|
Aarch64Info info = GetAarch64Info();
|
||||||
|
@ -21,10 +21,12 @@
|
|||||||
|
|
||||||
DECLARE_SETTER(MipsFeatures, msa)
|
DECLARE_SETTER(MipsFeatures, msa)
|
||||||
DECLARE_SETTER(MipsFeatures, eva)
|
DECLARE_SETTER(MipsFeatures, eva)
|
||||||
|
DECLARE_SETTER(MipsFeatures, r6)
|
||||||
|
|
||||||
static const CapabilityConfig kConfigs[] = {
|
static const CapabilityConfig kConfigs[] = {
|
||||||
{{MIPS_HWCAP_MSA, 0}, "msa", &set_msa}, //
|
{{MIPS_HWCAP_MSA, 0}, "msa", &set_msa}, //
|
||||||
{{0, 0}, "eva", &set_eva}, //
|
{{0, 0}, "eva", &set_eva}, //
|
||||||
|
{{MIPS_HWCAP_R6, 0}, "r6", &set_r6}, //
|
||||||
};
|
};
|
||||||
static const size_t kConfigsSize = sizeof(kConfigs) / sizeof(CapabilityConfig);
|
static const size_t kConfigsSize = sizeof(kConfigs) / sizeof(CapabilityConfig);
|
||||||
|
|
||||||
@ -79,6 +81,8 @@ int GetMipsFeaturesEnumValue(const MipsFeatures* features,
|
|||||||
return features->msa;
|
return features->msa;
|
||||||
case MIPS_EVA:
|
case MIPS_EVA:
|
||||||
return features->eva;
|
return features->eva;
|
||||||
|
case MIPS_R6:
|
||||||
|
return features->r6;
|
||||||
case MIPS_LAST_:
|
case MIPS_LAST_:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -91,6 +95,8 @@ const char* GetMipsFeaturesEnumName(MipsFeaturesEnum value) {
|
|||||||
return "msa";
|
return "msa";
|
||||||
case MIPS_EVA:
|
case MIPS_EVA:
|
||||||
return "eva";
|
return "eva";
|
||||||
|
case MIPS_R6:
|
||||||
|
return "r6";
|
||||||
case MIPS_LAST_:
|
case MIPS_LAST_:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,15 @@ namespace {
|
|||||||
|
|
||||||
void DisableHardwareCapabilities() { SetHardwareCapabilities(0, 0); }
|
void DisableHardwareCapabilities() { SetHardwareCapabilities(0, 0); }
|
||||||
|
|
||||||
|
TEST(CpuinfoMipsTest, FromHardwareCapBoth) {
|
||||||
|
SetHardwareCapabilities(MIPS_HWCAP_MSA | MIPS_HWCAP_R6, 0);
|
||||||
|
GetEmptyFilesystem(); // disabling /proc/cpuinfo
|
||||||
|
const auto info = GetMipsInfo();
|
||||||
|
EXPECT_TRUE(info.features.msa);
|
||||||
|
EXPECT_FALSE(info.features.eva);
|
||||||
|
EXPECT_TRUE(info.features.r6);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(CpuinfoMipsTest, FromHardwareCapOnlyOne) {
|
TEST(CpuinfoMipsTest, FromHardwareCapOnlyOne) {
|
||||||
SetHardwareCapabilities(MIPS_HWCAP_MSA, 0);
|
SetHardwareCapabilities(MIPS_HWCAP_MSA, 0);
|
||||||
GetEmptyFilesystem(); // disabling /proc/cpuinfo
|
GetEmptyFilesystem(); // disabling /proc/cpuinfo
|
||||||
|
Loading…
x
Reference in New Issue
Block a user