summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatrick <>2019-07-02 19:31:28 +0000
committerpatrick <>2019-07-02 19:31:28 +0000
commit88ab3711341dea97a3118b0654ceab1679d5e0a1 (patch)
tree402e4d2faadaa1bec334a1353f0221180cea6aaf
parent2bfac65cc0bd40d261de39c1b0f01b8955de1d1f (diff)
downloadopenbsd-88ab3711341dea97a3118b0654ceab1679d5e0a1.tar.gz
openbsd-88ab3711341dea97a3118b0654ceab1679d5e0a1.tar.bz2
openbsd-88ab3711341dea97a3118b0654ceab1679d5e0a1.zip
Add cpuid support for arm64 so that we can recognize which
hardware crypto features are available. "no objections" kettenis@
-rw-r--r--src/lib/libcrypto/arch/aarch64/Makefile.inc5
-rw-r--r--src/lib/libcrypto/arm64cpuid.S47
-rw-r--r--src/lib/libcrypto/arm_arch.h8
3 files changed, 57 insertions, 3 deletions
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 @@
1# $OpenBSD: Makefile.inc,v 1.1 2017/01/11 18:11:01 patrick Exp $ 1# $OpenBSD: Makefile.inc,v 1.2 2019/07/02 19:31:28 patrick Exp $
2 2
3# aarch64-specific libcrypto build rules 3# aarch64-specific libcrypto build rules
4 4
@@ -26,3 +26,6 @@ ${f}.S: ${LCRYPTO_SRC}/${dir}/asm/${f}.pl
26 /usr/bin/perl \ 26 /usr/bin/perl \
27 ${LCRYPTO_SRC}/${dir}/asm/${f}.pl void ${.TARGET} > ${.TARGET} 27 ${LCRYPTO_SRC}/${dir}/asm/${f}.pl void ${.TARGET} > ${.TARGET}
28.endfor 28.endfor
29
30CFLAGS+= -DOPENSSL_CPUID_OBJ
31SRCS+= 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 @@
1#include "arm_arch.h"
2
3.text
4.arch armv8-a+crypto+sha3
5
6.align 5
7.globl _armv7_neon_probe
8.type _armv7_neon_probe,%function
9_armv7_neon_probe:
10 orr v15.16b, v15.16b, v15.16b
11 ret
12.size _armv7_neon_probe,.-_armv7_neon_probe
13
14.globl _armv8_aes_probe
15.type _armv8_aes_probe,%function
16_armv8_aes_probe:
17 aese v0.16b, v0.16b
18 ret
19.size _armv8_aes_probe,.-_armv8_aes_probe
20
21.globl _armv8_sha1_probe
22.type _armv8_sha1_probe,%function
23_armv8_sha1_probe:
24 sha1h s0, s0
25 ret
26.size _armv8_sha1_probe,.-_armv8_sha1_probe
27
28.globl _armv8_sha256_probe
29.type _armv8_sha256_probe,%function
30_armv8_sha256_probe:
31 sha256su0 v0.4s, v0.4s
32 ret
33.size _armv8_sha256_probe,.-_armv8_sha256_probe
34
35.globl _armv8_pmull_probe
36.type _armv8_pmull_probe,%function
37_armv8_pmull_probe:
38 pmull v0.1q, v0.1d, v0.1d
39 ret
40.size _armv8_pmull_probe,.-_armv8_pmull_probe
41
42.globl _armv8_sha512_probe
43.type _armv8_sha512_probe,%function
44_armv8_sha512_probe:
45 sha512su0 v0.2d,v0.2d
46 ret
47.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 @@
1/* $OpenBSD: arm_arch.h,v 1.9 2019/03/13 10:18:30 patrick Exp $ */ 1/* $OpenBSD: arm_arch.h,v 1.10 2019/07/02 19:31:28 patrick Exp $ */
2#ifndef __ARM_ARCH_H__ 2#ifndef __ARM_ARCH_H__
3#define __ARM_ARCH_H__ 3#define __ARM_ARCH_H__
4 4
@@ -17,7 +17,11 @@
17 * gcc/config/arm/arm.c. On a side note it defines 17 * gcc/config/arm/arm.c. On a side note it defines
18 * __ARMEL__/__ARMEB__ for little-/big-endian. 18 * __ARMEL__/__ARMEB__ for little-/big-endian.
19 */ 19 */
20# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \ 20# if defined(__ARM_ARCH)
21# define __ARM_ARCH__ __ARM_ARCH
22# elif defined(__ARM_ARCH_8A__)
23# define __ARM_ARCH__ 8
24# elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \
21 defined(__ARM_ARCH_7R__)|| defined(__ARM_ARCH_7M__) || \ 25 defined(__ARM_ARCH_7R__)|| defined(__ARM_ARCH_7M__) || \
22 defined(__ARM_ARCH_7EM__) 26 defined(__ARM_ARCH_7EM__)
23# define __ARM_ARCH__ 7 27# define __ARM_ARCH__ 7