mirror of
https://github.com/google/cpu_features.git
synced 2025-04-28 07:23:37 +02:00
Merge pull request #53 from google/export_GetArmCpuId
Export GetArmCpuId function
This commit is contained in:
commit
b1fa492d8f
@ -15,6 +15,7 @@
|
|||||||
#ifndef CPU_FEATURES_INCLUDE_CPUINFO_ARM_H_
|
#ifndef CPU_FEATURES_INCLUDE_CPUINFO_ARM_H_
|
||||||
#define CPU_FEATURES_INCLUDE_CPUINFO_ARM_H_
|
#define CPU_FEATURES_INCLUDE_CPUINFO_ARM_H_
|
||||||
|
|
||||||
|
#include <stdint.h> // uint32_t
|
||||||
#include "cpu_features_macros.h"
|
#include "cpu_features_macros.h"
|
||||||
|
|
||||||
CPU_FEATURES_START_CPP_NAMESPACE
|
CPU_FEATURES_START_CPP_NAMESPACE
|
||||||
@ -51,6 +52,9 @@ typedef struct {
|
|||||||
|
|
||||||
ArmInfo GetArmInfo(void);
|
ArmInfo GetArmInfo(void);
|
||||||
|
|
||||||
|
// Compute CpuId from ArmInfo.
|
||||||
|
uint32_t GetArmCpuId(const ArmInfo* const info);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Introspection functions
|
// Introspection functions
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ static bool HandleArmLine(const LineResult result, ArmInfo* const info,
|
|||||||
return !result.eof;
|
return !result.eof;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t GetCpuId(const ArmInfo* const info) {
|
uint32_t GetArmCpuId(const ArmInfo* const info) {
|
||||||
return (ExtractBitRange(info->implementer, 7, 0) << 24) |
|
return (ExtractBitRange(info->implementer, 7, 0) << 24) |
|
||||||
(ExtractBitRange(info->variant, 3, 0) << 20) |
|
(ExtractBitRange(info->variant, 3, 0) << 20) |
|
||||||
(ExtractBitRange(info->part, 11, 0) << 4) |
|
(ExtractBitRange(info->part, 11, 0) << 4) |
|
||||||
@ -118,7 +118,7 @@ static void FixErrors(ArmInfo* const info,
|
|||||||
|
|
||||||
// Handle kernel configuration bugs that prevent the correct reporting of CPU
|
// Handle kernel configuration bugs that prevent the correct reporting of CPU
|
||||||
// features.
|
// features.
|
||||||
switch (GetCpuId(info)) {
|
switch (GetArmCpuId(info)) {
|
||||||
case 0x4100C080:
|
case 0x4100C080:
|
||||||
// Special case: The emulator-specific Android 4.2 kernel fails to report
|
// Special case: The emulator-specific Android 4.2 kernel fails to report
|
||||||
// support for the 32-bit ARM IDIV instruction. Technically, this is a
|
// support for the 32-bit ARM IDIV instruction. Technically, this is a
|
||||||
|
@ -82,17 +82,17 @@ TEST(CpuinfoArmTest, InvalidArmv7) {
|
|||||||
DisableHardwareCapabilities();
|
DisableHardwareCapabilities();
|
||||||
auto& fs = GetEmptyFilesystem();
|
auto& fs = GetEmptyFilesystem();
|
||||||
fs.CreateFile("/proc/cpuinfo",
|
fs.CreateFile("/proc/cpuinfo",
|
||||||
R"(Processor : ARMv6-compatible processor rev 6 (v6l)
|
R"(Processor : ARMv6-compatible processor rev 6 (v6l)
|
||||||
BogoMIPS : 199.47
|
BogoMIPS : 199.47
|
||||||
Features : swp half thumb fastmult vfp edsp java
|
Features : swp half thumb fastmult vfp edsp java
|
||||||
CPU implementer : 0x41
|
CPU implementer : 0x41
|
||||||
CPU architecture: 7
|
CPU architecture: 7
|
||||||
CPU variant : 0x0
|
CPU variant : 0x0
|
||||||
CPU part : 0xb76
|
CPU part : 0xb76
|
||||||
CPU revision : 6
|
CPU revision : 6
|
||||||
|
|
||||||
Hardware : SPICA
|
Hardware : SPICA
|
||||||
Revision : 0020
|
Revision : 0020
|
||||||
Serial : 33323613546d00ec )");
|
Serial : 33323613546d00ec )");
|
||||||
const auto info = GetArmInfo();
|
const auto info = GetArmInfo();
|
||||||
EXPECT_EQ(info.architecture, 6);
|
EXPECT_EQ(info.architecture, 6);
|
||||||
@ -137,6 +137,8 @@ CPU revision : 2)");
|
|||||||
const auto info = GetArmInfo();
|
const auto info = GetArmInfo();
|
||||||
EXPECT_TRUE(info.features.idiva);
|
EXPECT_TRUE(info.features.idiva);
|
||||||
EXPECT_TRUE(info.features.idivt);
|
EXPECT_TRUE(info.features.idivt);
|
||||||
|
|
||||||
|
EXPECT_EQ(GetArmCpuId(&info), 0x510006f2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The Nexus 4 (Qualcomm Krait) kernel configuration forgets to report IDIV
|
// The Nexus 4 (Qualcomm Krait) kernel configuration forgets to report IDIV
|
||||||
@ -153,6 +155,8 @@ CPU revision : 3)");
|
|||||||
const auto info = GetArmInfo();
|
const auto info = GetArmInfo();
|
||||||
EXPECT_TRUE(info.features.idiva);
|
EXPECT_TRUE(info.features.idiva);
|
||||||
EXPECT_TRUE(info.features.idivt);
|
EXPECT_TRUE(info.features.idivt);
|
||||||
|
|
||||||
|
EXPECT_EQ(GetArmCpuId(&info), 0x510006f3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The emulator-specific Android 4.2 kernel fails to report support for the
|
// The emulator-specific Android 4.2 kernel fails to report support for the
|
||||||
|
Loading…
x
Reference in New Issue
Block a user