diff options
author | Marat Dukhan <marat@fb.com> | 2017-11-30 16:59:44 -0800 |
---|---|---|
committer | Marat Dukhan <marat@fb.com> | 2017-11-30 16:59:44 -0800 |
commit | 2f69d6ffc432fc0f2632ba4b658de36f708f9e34 (patch) | |
tree | 0093b9f152dd79c0463bef5f33478c66c04da3d4 /src/arm/linux/aarch32-isa.c | |
parent | 7fcd441dfa5017727cd008c20f6a403dad202b90 (diff) | |
download | cpuinfo-2f69d6ffc432fc0f2632ba4b658de36f708f9e34.tar.gz |
Avoid MRC FPSID instruction when building for ARMv7+
Diffstat (limited to 'src/arm/linux/aarch32-isa.c')
-rw-r--r-- | src/arm/linux/aarch32-isa.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/arm/linux/aarch32-isa.c b/src/arm/linux/aarch32-isa.c index 2d36182..b72a3c6 100644 --- a/src/arm/linux/aarch32-isa.c +++ b/src/arm/linux/aarch32-isa.c @@ -148,7 +148,7 @@ void cpuinfo_arm_linux_decode_isa_from_proc_cpuinfo( if (features & vfp_mask) { const uint32_t vfpv3_mask = CPUINFO_ARM_LINUX_FEATURE_VFPV3 | CPUINFO_ARM_LINUX_FEATURE_VFPV3D16 | \ CPUINFO_ARM_LINUX_FEATURE_VFPD32 | CPUINFO_ARM_LINUX_FEATURE_VFPV4 | CPUINFO_ARM_LINUX_FEATURE_NEON; - if ((architecture_version >= 7) | (features & vfpv3_mask)) { + if ((architecture_version >= 7) || (features & vfpv3_mask)) { isa->vfpv3 = true; const uint32_t d32_mask = CPUINFO_ARM_LINUX_FEATURE_VFPD32 | CPUINFO_ARM_LINUX_FEATURE_NEON; @@ -156,12 +156,16 @@ void cpuinfo_arm_linux_decode_isa_from_proc_cpuinfo( isa->d32 = true; } } else { - const uint32_t fpsid = read_fpsid(); - cpuinfo_log_debug("FPSID = 0x%08"PRIx32, fpsid); - const uint32_t subarchitecture = (fpsid >> 16) & UINT32_C(0x7F); - if (subarchitecture >= 0x01) { - isa->vfpv2 = true; - } + #if defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_8A__) || defined(__ARM_ARCH) && (__ARM_ARCH >= 7) + isa->vfpv3 = true; + #else + const uint32_t fpsid = read_fpsid(); + cpuinfo_log_debug("FPSID = 0x%08"PRIx32, fpsid); + const uint32_t subarchitecture = (fpsid >> 16) & UINT32_C(0x7F); + if (subarchitecture >= 0x01) { + isa->vfpv2 = true; + } + #endif } } if (features & CPUINFO_ARM_LINUX_FEATURE_NEON) { |