summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg V <greg@unrelenting.technology>2020-11-14 14:29:17 +0300
committerHans Kristian Rosbach <hk-github@circlestorm.org>2020-11-21 16:45:10 +0100
commited88b15de28855f0506959b4ec0a38713844d756 (patch)
tree9630055201e6abcd2521631b82a5dc17ea62455d
parentdbf55b1a83cbfd0f6a4e1748ada416bff8465668 (diff)
downloadProject-Tick-ed88b15de28855f0506959b4ec0a38713844d756.tar.gz
Project-Tick-ed88b15de28855f0506959b4ec0a38713844d756.zip
Add AArch64 feature detection support for FreeBSD
-rw-r--r--arch/arm/armfeature.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/arm/armfeature.c b/arch/arm/armfeature.c
index 27e06b8d54..f3764fd1db 100644
--- a/arch/arm/armfeature.c
+++ b/arch/arm/armfeature.c
@@ -3,6 +3,11 @@
#if defined(__linux__)
# include <sys/auxv.h>
# include <asm/hwcap.h>
+#elif defined(__FreeBSD__) && defined(__aarch64__)
+# include <machine/armreg.h>
+# ifndef ID_AA64ISAR0_CRC32_VAL
+# define ID_AA64ISAR0_CRC32_VAL ID_AA64ISAR0_CRC32
+# endif
#elif defined(_WIN32)
# include <winapifamily.h>
#endif
@@ -10,6 +15,9 @@
static int arm_has_crc32() {
#if defined(__linux__) && defined(HWCAP2_CRC32)
return (getauxval(AT_HWCAP2) & HWCAP2_CRC32) != 0 ? 1 : 0;
+#elif defined(__FreeBSD__) && defined(__aarch64__)
+ return getenv("QEMU_EMULATING") == NULL
+ && ID_AA64ISAR0_CRC32_VAL(READ_SPECIALREG(id_aa64isar0_el1)) >= ID_AA64ISAR0_CRC32_BASE;
#elif defined(ARM_NOCHECK_ACLE)
return 1;
#else