summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Smith <brad@comstyle.com>2022-07-15 22:44:03 -0400
committerBrad Smith <brad@comstyle.com>2022-07-15 22:44:03 -0400
commita7516cb32f356ea18dca6889105a47fa9265905e (patch)
treed51ca02fba4432d4e27d0e6f235501a22bea2643
parent6ddd649ae3e587cd4fd51852b5eacfa2294124b8 (diff)
downloadgnutls-a7516cb32f356ea18dca6889105a47fa9265905e.tar.gz
accelerated: aarch64: add OpenBSD/aarch64 support
Signed-off-by: Brad Smith <brad@comstyle.com>
-rw-r--r--lib/accelerated/aarch64/aarch64-common.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/accelerated/aarch64/aarch64-common.c b/lib/accelerated/aarch64/aarch64-common.c
index 82cd8715fe..cadb436bb7 100644
--- a/lib/accelerated/aarch64/aarch64-common.c
+++ b/lib/accelerated/aarch64/aarch64-common.c
@@ -41,6 +41,10 @@
# ifdef AT_HWCAP
# define USE_AUXVAL
# endif
+#elif defined(__OpenBSD__)
+# include <sys/sysctl.h>
+# include <machine/cpu.h>
+# include <machine/armreg.h>
#endif
#if defined(__GNUC__)
@@ -94,6 +98,24 @@ static void discover_caps(unsigned int *caps)
*caps |= ARMV8_SHA256;
if (c & HWCAP_SHA512)
*caps |= ARMV8_SHA512;
+#elif defined(__OpenBSD__) && defined(CPU_ID_AA64ISAR0)
+ const int isar0_mib[] = { CTL_MACHDEP, CPU_ID_AA64ISAR0 };
+ uint64_t isar0;
+ size_t len = sizeof(isar0);
+
+ *caps |= ARMV7_NEON;
+ if (sysctl(isar0_mib, 2, &isar0, &len, NULL, 0) < 0)
+ return;
+ if (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_BASE)
+ *caps |= ARMV8_AES;
+ if (ID_AA64ISAR0_AES(isar0) >= ID_AA64ISAR0_AES_PMULL)
+ *caps |= ARMV8_PMULL;
+ if (ID_AA64ISAR0_SHA1(isar0) >= ID_AA64ISAR0_SHA1_BASE)
+ *caps |= ARMV8_SHA1;
+ if (ID_AA64ISAR0_SHA2(isar0) >= ID_AA64ISAR0_SHA2_BASE)
+ *caps |= ARMV8_SHA256;
+ if (ID_AA64ISAR0_SHA2(isar0) >= ID_AA64ISAR0_SHA2_512)
+ *caps |= ARMV8_SHA512;
#endif
}