blob: 5ed2c2b9a39150aa0e67747b7a23fd109a864611 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
--- third_party/libaom/source/libaom/aom_ports/aarch64_cpudetect.c.orig 2023-09-17 18:22:45 UTC
+++ third_party/libaom/source/libaom/aom_ports/aarch64_cpudetect.c
@@ -85,13 +85,35 @@ static int arm_get_cpu_caps(void) {
return flags;
}
-#elif defined(ANDROID_USE_CPU_FEATURES_LIB)
+#elif defined(ANDROID_USE_CPU_FEATURES_LIB) || defined(__FreeBSD__)
static int arm_get_cpu_caps(void) {
int flags = 0;
#if HAVE_NEON
flags |= HAS_NEON; // Neon is mandatory in Armv8.0-A.
#endif // HAVE_NEON
+ return flags;
+}
+
+#elif defined(__OpenBSD__)
+#include <sys/sysctl.h>
+#include <machine/cpu.h>
+#include <machine/armreg.h>
+
+static int arm_get_cpu_caps(void) {
+ int flags = 0;
+ int isar0_mib[] = { CTL_MACHDEP, CPU_ID_AA64ISAR0 };
+ uint64_t cpu_id = 0;
+ size_t len = sizeof(cpu_id);
+
+ flags |= HAS_NEON; // Neon is mandatory in Armv8.0-A.
+
+ if (sysctl(isar0_mib, 2, &cpu_id, &len, NULL, 0) < 0)
+ return flags;
+
+ if (ID_AA64ISAR0_AES(cpu_id) >= ID_AA64ISAR0_CRC32_BASE)
+ flags |= HAS_ARM_CRC32;
+
return flags;
}
|