From 7919117219bc50273b55024d706df41d833ca0ba Mon Sep 17 00:00:00 2001 From: weihsu996 Date: Tue, 29 Sep 2026 10:27:13 -0700 Subject: [PATCH] fix(ndk_compat): detect ANDROID_CPU_ARM_FEATURE_ARMv7 on ARMv8+ kernels (info.architecture >= 7) When a 32-bit `armeabi-v7a` Android process runs on a 64-bit ARMv8+ Linux kernel (common on Android TV / Google TV devices with 64-bit kernels and 32-bit userspace), `/proc/cpuinfo` reports `CPU architecture: 8`, so `GetArmInfo()` sets `info.architecture = 8`. Previously, `android_cpuInit()` checked `if (info.architecture == 7)`, leaving `ANDROID_CPU_ARM_FEATURE_ARMv7` unset (`0`) on ARMv8+ kernels. Callers checking `(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_ARMv7)` before dispatching to NEON routines silently fell back to scalar code. Use `if (info.architecture >= 7)` (matching `if (info.architecture >= 6)` on line 117) so 32-bit ARMv7+ processes on ARMv8+ kernels properly report `ANDROID_CPU_ARM_FEATURE_ARMv7`. --- ndk_compat/cpu-features.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ndk_compat/cpu-features.c b/ndk_compat/cpu-features.c index c7d11be9..8ca82f01 100644 --- a/ndk_compat/cpu-features.c +++ b/ndk_compat/cpu-features.c @@ -103,7 +103,7 @@ static void android_cpuInit(void) { } #if defined(CPU_FEATURES_ARCH_ARM) ArmInfo info = GetArmInfo(); - if (info.architecture == 7) g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_ARMv7; + if (info.architecture >= 7) g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_ARMv7; if (info.features.vfpv3) g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_VFPv3; if (info.features.neon) { g_cpuFeatures |= ANDROID_CPU_ARM_FEATURE_NEON;