Skip to content

Commit

Permalink
always report neon and vfpv4 for arm64
Browse files Browse the repository at this point in the history
  • Loading branch information
nihui committed Feb 2, 2024
1 parent 26bf43b commit 87aff05
Showing 1 changed file with 14 additions and 31 deletions.
45 changes: 14 additions & 31 deletions src/cpu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit 87aff05

Please sign in to comment.