From 87aff0576e435062421455d37b0efd522feb6479 Mon Sep 17 00:00:00 2001 From: nihuini Date: Fri, 2 Feb 2024 17:26:10 +0800 Subject: [PATCH] always report neon and vfpv4 for arm64 --- src/cpu.cpp | 45 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/src/cpu.cpp b/src/cpu.cpp index e56cd67098f..d97206c39d1 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -125,9 +125,6 @@ static ncnn::CpuSet g_cpu_affinity_mask_big; // isa info #if defined _WIN32 -#if __arm__ -static int g_cpu_support_arm_neon; -static int g_cpu_support_arm_vfpv4; #if __aarch64__ static int g_cpu_support_arm_asimdhp; static int g_cpu_support_arm_cpuid; @@ -140,10 +137,11 @@ static int g_cpu_support_arm_sve2; static int g_cpu_support_arm_svebf16; static int g_cpu_support_arm_svei8mm; static int g_cpu_support_arm_svef32mm; -#else // __aarch64__ +#elif // __arm__ static int g_cpu_support_arm_edsp; -#endif // __aarch64__ -#endif // __arm__ +static int g_cpu_support_arm_neon; +static int g_cpu_support_arm_vfpv4; +#endif // __aarch64__ || __arm__ #elif defined __ANDROID__ || defined __linux__ static unsigned int g_hwcaps; static unsigned int g_hwcaps2; @@ -1965,9 +1963,6 @@ static void initialize_global_cpu_info() initialize_cpu_thread_affinity_mask(g_cpu_affinity_mask_all, g_cpu_affinity_mask_little, g_cpu_affinity_mask_big); #if defined _WIN32 -#if __arm__ - g_cpu_support_arm_neon = detectisa(some_neon); - g_cpu_support_arm_vfpv4 = detectisa(some_vfpv4); #if __aarch64__ g_cpu_support_arm_cpuid = detectisa(some_cpuid); g_cpu_support_arm_asimdhp = detectisa(some_asimdhp); @@ -1980,10 +1975,11 @@ static void initialize_global_cpu_info() g_cpu_support_arm_svebf16 = detectisa(some_svebf16); g_cpu_support_arm_svei8mm = detectisa(some_svei8mm); g_cpu_support_arm_svef32mm = detectisa(some_svef32mm); -#else // __aarch64__ +#elif // __arm__ g_cpu_support_arm_edsp = detectisa(some_edsp); -#endif // __aarch64__ -#endif // __arm__ + g_cpu_support_arm_neon = detectisa(some_neon); + g_cpu_support_arm_vfpv4 = detectisa(some_vfpv4); +#endif // __aarch64__ || __arm__ #elif defined __ANDROID__ || defined __linux__ g_hwcaps = get_elf_hwcap(AT_HWCAP); g_hwcaps2 = get_elf_hwcap(AT_HWCAP2); @@ -2196,21 +2192,15 @@ int cpu_support_arm_edsp() int cpu_support_arm_neon() { try_initialize_global_cpu_info(); -#if __arm__ +#if __aarch64__ + return 1; +#elif __arm__ #if defined _WIN32 return g_cpu_support_arm_neon; #elif defined __ANDROID__ || defined __linux__ -#if __aarch64__ - return g_hwcaps & HWCAP_ASIMD; -#else return g_hwcaps & HWCAP_NEON; -#endif #elif __APPLE__ -#if __aarch64__ - return g_hw_cputype == CPU_TYPE_ARM64; -#else return g_hw_cputype == CPU_TYPE_ARM && g_hw_cpusubtype > CPU_SUBTYPE_ARM_V7; -#endif #else return 0; #endif @@ -2222,22 +2212,15 @@ int cpu_support_arm_neon() int cpu_support_arm_vfpv4() { try_initialize_global_cpu_info(); -#if __arm__ +#if __aarch64__ + return 1; +#elif __arm__ #if defined _WIN32 return g_cpu_support_arm_vfpv4; #elif defined __ANDROID__ || defined __linux__ -#if __aarch64__ - // neon always enable fma and fp16 - return g_hwcaps & HWCAP_ASIMD; -#else return g_hwcaps & HWCAP_VFPv4; -#endif #elif __APPLE__ -#if __aarch64__ - return g_hw_cputype == CPU_TYPE_ARM64; -#else return g_hw_cputype == CPU_TYPE_ARM && g_hw_cpusubtype > CPU_SUBTYPE_ARM_V7S; -#endif #else return 0; #endif