From 154e31023af7e0be306e0968992087fe0a23f907 Mon Sep 17 00:00:00 2001 From: patrick <> Date: Tue, 2 Jul 2019 19:31:28 +0000 Subject: Add cpuid support for arm64 so that we can recognize which hardware crypto features are available. "no objections" kettenis@ --- src/lib/libcrypto/arch/aarch64/Makefile.inc | 5 ++- src/lib/libcrypto/arm64cpuid.S | 47 +++++++++++++++++++++++++++++ src/lib/libcrypto/arm_arch.h | 8 +++-- 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/lib/libcrypto/arm64cpuid.S (limited to 'src') diff --git a/src/lib/libcrypto/arch/aarch64/Makefile.inc b/src/lib/libcrypto/arch/aarch64/Makefile.inc index 8742504f2d..d3d33e5941 100644 --- a/src/lib/libcrypto/arch/aarch64/Makefile.inc +++ b/src/lib/libcrypto/arch/aarch64/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.1 2017/01/11 18:11:01 patrick Exp $ +# $OpenBSD: Makefile.inc,v 1.2 2019/07/02 19:31:28 patrick Exp $ # aarch64-specific libcrypto build rules @@ -26,3 +26,6 @@ ${f}.S: ${LCRYPTO_SRC}/${dir}/asm/${f}.pl /usr/bin/perl \ ${LCRYPTO_SRC}/${dir}/asm/${f}.pl void ${.TARGET} > ${.TARGET} .endfor + +CFLAGS+= -DOPENSSL_CPUID_OBJ +SRCS+= arm64cpuid.S armcap.c diff --git a/src/lib/libcrypto/arm64cpuid.S b/src/lib/libcrypto/arm64cpuid.S new file mode 100644 index 0000000000..5eeff91c6e --- /dev/null +++ b/src/lib/libcrypto/arm64cpuid.S @@ -0,0 +1,47 @@ +#include "arm_arch.h" + +.text +.arch armv8-a+crypto+sha3 + +.align 5 +.globl _armv7_neon_probe +.type _armv7_neon_probe,%function +_armv7_neon_probe: + orr v15.16b, v15.16b, v15.16b + ret +.size _armv7_neon_probe,.-_armv7_neon_probe + +.globl _armv8_aes_probe +.type _armv8_aes_probe,%function +_armv8_aes_probe: + aese v0.16b, v0.16b + ret +.size _armv8_aes_probe,.-_armv8_aes_probe + +.globl _armv8_sha1_probe +.type _armv8_sha1_probe,%function +_armv8_sha1_probe: + sha1h s0, s0 + ret +.size _armv8_sha1_probe,.-_armv8_sha1_probe + +.globl _armv8_sha256_probe +.type _armv8_sha256_probe,%function +_armv8_sha256_probe: + sha256su0 v0.4s, v0.4s + ret +.size _armv8_sha256_probe,.-_armv8_sha256_probe + +.globl _armv8_pmull_probe +.type _armv8_pmull_probe,%function +_armv8_pmull_probe: + pmull v0.1q, v0.1d, v0.1d + ret +.size _armv8_pmull_probe,.-_armv8_pmull_probe + +.globl _armv8_sha512_probe +.type _armv8_sha512_probe,%function +_armv8_sha512_probe: + sha512su0 v0.2d,v0.2d + ret +.size _armv8_sha512_probe,.-_armv8_sha512_probe diff --git a/src/lib/libcrypto/arm_arch.h b/src/lib/libcrypto/arm_arch.h index a64c6da46e..8c5115ea44 100644 --- a/src/lib/libcrypto/arm_arch.h +++ b/src/lib/libcrypto/arm_arch.h @@ -1,4 +1,4 @@ -/* $OpenBSD: arm_arch.h,v 1.9 2019/03/13 10:18:30 patrick Exp $ */ +/* $OpenBSD: arm_arch.h,v 1.10 2019/07/02 19:31:28 patrick Exp $ */ #ifndef __ARM_ARCH_H__ #define __ARM_ARCH_H__ @@ -17,7 +17,11 @@ * gcc/config/arm/arm.c. On a side note it defines * __ARMEL__/__ARMEB__ for little-/big-endian. */ -# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \ +# if defined(__ARM_ARCH) +# define __ARM_ARCH__ __ARM_ARCH +# elif defined(__ARM_ARCH_8A__) +# define __ARM_ARCH__ 8 +# elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \ defined(__ARM_ARCH_7R__)|| defined(__ARM_ARCH_7M__) || \ defined(__ARM_ARCH_7EM__) # define __ARM_ARCH__ 7 -- cgit v1.2.3-55-g6feb