dump1090-fa/starch/example/support.c

54 lines
958 B
C

#ifdef __arm__
#include <asm/hwcap.h>
#include <sys/auxv.h>
int supports_neon_vfpv3(void)
{
long hwcaps = getauxval(AT_HWCAP);
return (hwcaps & HWCAP_ARM_NEON) && (hwcaps & HWCAP_ARM_VFPv3);
}
int supports_neon_vfpv4(void)
{
long hwcaps = getauxval(AT_HWCAP);
return (hwcaps & HWCAP_ARM_NEON) && (hwcaps & HWCAP_ARM_VFPv4);
}
#endif /* __arm__ */
#ifdef __x86_64__
#include <cpuid.h>
#include <stdio.h>
int supports_x86_avx(void)
{
unsigned int maxlevel = __get_cpuid_max (0, 0);
if (maxlevel < 1)
return 0;
unsigned eax, ebx, ecx, edx;
__cpuid(1, eax, ebx, ecx, edx);
if (!(ecx & bit_AVX))
return 0;
return 1;
}
int supports_x86_avx2(void)
{
unsigned int maxlevel = __get_cpuid_max (0, 0);
if (maxlevel < 7)
return 0;
unsigned eax, ebx, ecx, edx;
__cpuid_count(7, 0, eax, ebx, ecx, edx);
if (!(ebx & bit_AVX2))
return 0;
return 1;
}
#endif