diff options
author | patrick <> | 2019-07-02 19:31:28 +0000 |
---|---|---|
committer | patrick <> | 2019-07-02 19:31:28 +0000 |
commit | 88ab3711341dea97a3118b0654ceab1679d5e0a1 (patch) | |
tree | 402e4d2faadaa1bec334a1353f0221180cea6aaf | |
parent | 2bfac65cc0bd40d261de39c1b0f01b8955de1d1f (diff) | |
download | openbsd-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.inc | 5 | ||||
-rw-r--r-- | src/lib/libcrypto/arm64cpuid.S | 47 | ||||
-rw-r--r-- | src/lib/libcrypto/arm_arch.h | 8 |
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 | |||
30 | CFLAGS+= -DOPENSSL_CPUID_OBJ | ||
31 | 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 @@ | |||
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 |