Index: hwy/targets.cc
--- hwy/targets.cc.orig
+++ hwy/targets.cc
@@ -29,7 +29,7 @@
 
 #elif (HWY_ARCH_ARM || HWY_ARCH_PPC || HWY_ARCH_S390X || HWY_ARCH_RISCV || \
        HWY_ARCH_LOONGARCH) &&                                              \
-    HWY_OS_LINUX
+    (HWY_OS_LINUX || HWY_OS_FREEBSD || defined(__OpenBSD__))
 // sys/auxv.h does not always include asm/hwcap.h, or define HWCAP*, hence we
 // still include this directly. See #1199.
 #if HWY_HAVE_ASM_HWCAP
@@ -47,6 +47,26 @@
 #endif  // HWY_OS_APPLE
 
 namespace hwy {
+
+#if (HWY_ARCH_ARM || HWY_ARCH_PPC || HWY_ARCH_S390X || HWY_ARCH_RISCV || \
+       HWY_ARCH_LOONGARCH) &&                                            \
+       (HWY_OS_FREEBSD || defined(__OpenBSD__))
+#if HWY_HAVE_AUXV
+// Implement getauxval using elf_aux_info
+// XXX getauxval and elf_aux_info should be autodetected
+static HWY_INLINE HWY_MAYBE_UNUSED unsigned long getauxval(unsigned long type) {
+  unsigned long hwcap = 0;
+  switch (type) {
+  case AT_HWCAP:
+  case AT_HWCAP2:
+    elf_aux_info((int)type, &hwcap, sizeof(hwcap));
+    return hwcap;
+  default:
+    return 0;
+  }
+}
+#endif // HWY_HAVE_AUXV
+#endif // HWY_ARCH_*
 
 #if HWY_OS_APPLE
 static HWY_INLINE HWY_MAYBE_UNUSED bool HasCpuFeature(
