]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
accelerated: aarch64: add OpenBSD/aarch64 support
authorBrad Smith <brad@comstyle.com>
Sat, 16 Jul 2022 02:44:03 +0000 (22:44 -0400)
committerBrad Smith <brad@comstyle.com>
Sat, 16 Jul 2022 02:44:03 +0000 (22:44 -0400)
Signed-off-by: Brad Smith <brad@comstyle.com>
lib/accelerated/aarch64/aarch64-common.c

index 82cd8715fed2ad710c12b3d7a4326b467b80ef8e..cadb436bb73623bf66b827b11939a737e0485559 100644 (file)
 # 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
 }