| Index: src/platform-linux.cc
 | 
| diff --git a/src/platform-linux.cc b/src/platform-linux.cc
 | 
| index 2c6a36c37e15b0239e93ac3c1e577602d7504078..007b1e7737077a82575169c9b3e96d4c3af5fc5e 100644
 | 
| --- a/src/platform-linux.cc
 | 
| +++ b/src/platform-linux.cc
 | 
| @@ -146,6 +146,9 @@ bool OS::ArmCpuHasFeature(CpuFeature feature) {
 | 
|      case VFP3:
 | 
|        search_string = "vfpv3";
 | 
|        break;
 | 
| +    case NEON:
 | 
| +      search_string = "neon";
 | 
| +      break;
 | 
|      case ARMv7:
 | 
|        search_string = "ARMv7";
 | 
|        break;
 | 
| @@ -200,6 +203,36 @@ CpuImplementer OS::GetCpuImplementer() {
 | 
|  }
 | 
|  
 | 
|  
 | 
| +CpuPart OS::GetCpuPart(CpuImplementer implementer) {
 | 
| +  static bool use_cached_value = false;
 | 
| +  static CpuPart cached_value = CPU_UNKNOWN;
 | 
| +  if (use_cached_value) {
 | 
| +    return cached_value;
 | 
| +  }
 | 
| +  if (implementer == ARM_IMPLEMENTER) {
 | 
| +    if (CPUInfoContainsString("CPU part\t: 0xc0f")) {
 | 
| +      cached_value = CORTEX_A15;
 | 
| +    } else if (CPUInfoContainsString("CPU part\t: 0xc0c")) {
 | 
| +      cached_value = CORTEX_A12;
 | 
| +    } else if (CPUInfoContainsString("CPU part\t: 0xc09")) {
 | 
| +      cached_value = CORTEX_A9;
 | 
| +    } else if (CPUInfoContainsString("CPU part\t: 0xc08")) {
 | 
| +      cached_value = CORTEX_A8;
 | 
| +    } else if (CPUInfoContainsString("CPU part\t: 0xc07")) {
 | 
| +      cached_value = CORTEX_A7;
 | 
| +    } else if (CPUInfoContainsString("CPU part\t: 0xc05")) {
 | 
| +      cached_value = CORTEX_A5;
 | 
| +    } else {
 | 
| +      cached_value = CPU_UNKNOWN;
 | 
| +    }
 | 
| +  } else {
 | 
| +    cached_value = CPU_UNKNOWN;
 | 
| +  }
 | 
| +  use_cached_value = true;
 | 
| +  return cached_value;
 | 
| +}
 | 
| +
 | 
| +
 | 
|  bool OS::ArmUsingHardFloat() {
 | 
|    // GCC versions 4.6 and above define __ARM_PCS or __ARM_PCS_VFP to specify
 | 
|    // the Floating Point ABI used (PCS stands for Procedure Call Standard).
 | 
| 
 |