Module Name:    src
Committed By:   riastradh
Date:           Mon Jul 27 20:51:29 UTC 2020

Modified Files:
        src/sys/arch/arm/conf: files.arm
        src/sys/arch/arm/vfp: vfp_init.c
        src/sys/crypto/chacha/arch/arm: chacha_neon.c chacha_neon.h
            files.chacha_arm
        src/tests/sys/crypto/chacha: Makefile t_chacha.c

Log Message:
Enable ChaCha NEON code on armv7 too.

The 4-blocks-at-a-time assembly helper is disabled for now; adapting
it to armv7 is going to be a little annoying with only 16 128-bit
vector registers.

(Should also do a fifth block in the integer registers for 320 bytes
at a time.)


To generate a diff of this commit:
cvs rdiff -u -r1.159 -r1.160 src/sys/arch/arm/conf/files.arm
cvs rdiff -u -r1.69 -r1.70 src/sys/arch/arm/vfp/vfp_init.c
cvs rdiff -u -r1.2 -r1.3 src/sys/crypto/chacha/arch/arm/chacha_neon.c
cvs rdiff -u -r1.1 -r1.2 src/sys/crypto/chacha/arch/arm/chacha_neon.h \
    src/sys/crypto/chacha/arch/arm/files.chacha_arm
cvs rdiff -u -r1.1 -r1.2 src/tests/sys/crypto/chacha/Makefile \
    src/tests/sys/crypto/chacha/t_chacha.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/conf/files.arm
diff -u src/sys/arch/arm/conf/files.arm:1.159 src/sys/arch/arm/conf/files.arm:1.160
--- src/sys/arch/arm/conf/files.arm:1.159	Mon Jul 27 20:49:45 2020
+++ src/sys/arch/arm/conf/files.arm	Mon Jul 27 20:51:29 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: files.arm,v 1.159 2020/07/27 20:49:45 riastradh Exp $
+#	$NetBSD: files.arm,v 1.160 2020/07/27 20:51:29 riastradh Exp $
 
 # temporary define to allow easy moving to ../arch/arm/arm32
 defflag				ARM32
@@ -265,3 +265,6 @@ file	dev/tprof/tprof_armv7.c			tprof
 
 # vpaes with ARM NEON
 include "crypto/aes/arch/arm/files.aesneon"
+
+# ChaCha with ARM NEON
+include "crypto/chacha/arch/arm/files.chacha_arm"

Index: src/sys/arch/arm/vfp/vfp_init.c
diff -u src/sys/arch/arm/vfp/vfp_init.c:1.69 src/sys/arch/arm/vfp/vfp_init.c:1.70
--- src/sys/arch/arm/vfp/vfp_init.c:1.69	Sat Jul 25 22:12:56 2020
+++ src/sys/arch/arm/vfp/vfp_init.c	Mon Jul 27 20:51:29 2020
@@ -1,4 +1,4 @@
-/*      $NetBSD: vfp_init.c,v 1.69 2020/07/25 22:12:56 riastradh Exp $ */
+/*      $NetBSD: vfp_init.c,v 1.70 2020/07/27 20:51:29 riastradh Exp $ */
 
 /*
  * Copyright (c) 2008 ARM Ltd
@@ -32,7 +32,7 @@
 #include "opt_cputypes.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfp_init.c,v 1.69 2020/07/25 22:12:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfp_init.c,v 1.70 2020/07/27 20:51:29 riastradh Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -52,6 +52,8 @@ __KERNEL_RCSID(0, "$NetBSD: vfp_init.c,v
 
 #include <crypto/aes/aes_impl.h>
 #include <crypto/aes/arch/arm/aes_neon.h>
+#include <crypto/chacha/arch/arm/chacha_neon.h>
+#include <crypto/chacha/chacha_impl.h>
 
 #ifdef FPU_VFP
 
@@ -409,6 +411,7 @@ vfp_attach(struct cpu_info *ci)
 			install_coproc_handler(CORE_UNKNOWN_HANDLER,
 			    neon_handler);
 			aes_md_init(&aes_neon_impl);
+			chacha_md_init(&chacha_neon_impl);
 		}
 #endif
 	}

Index: src/sys/crypto/chacha/arch/arm/chacha_neon.c
diff -u src/sys/crypto/chacha/arch/arm/chacha_neon.c:1.2 src/sys/crypto/chacha/arch/arm/chacha_neon.c:1.3
--- src/sys/crypto/chacha/arch/arm/chacha_neon.c:1.2	Mon Jul 27 20:48:18 2020
+++ src/sys/crypto/chacha/arch/arm/chacha_neon.c	Mon Jul 27 20:51:29 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: chacha_neon.c,v 1.2 2020/07/27 20:48:18 riastradh Exp $	*/
+/*	$NetBSD: chacha_neon.c,v 1.3 2020/07/27 20:51:29 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -150,8 +150,10 @@ chacha_stream_neon(uint8_t *restrict s, 
     unsigned nr)
 {
 
+#ifdef __aarch64__
 	for (; n >= 256; s += 256, n -= 256, blkno += 4)
 		chacha_stream256_neon(s, blkno, nonce, k, chacha_const32, nr);
+#endif
 
 	if (n) {
 		const uint32x4_t blkno_inc = {1,0,0,0};
@@ -208,9 +210,11 @@ chacha_stream_xor_neon(uint8_t *s, const
     unsigned nr)
 {
 
+#ifdef __aarch64__
 	for (; n >= 256; s += 256, p += 256, n -= 256, blkno += 4)
 		chacha_stream_xor256_neon(s, p, blkno, nonce, k,
 		    chacha_const32, nr);
+#endif
 
 	if (n) {
 		const uint32x4_t blkno_inc = {1,0,0,0};

Index: src/sys/crypto/chacha/arch/arm/chacha_neon.h
diff -u src/sys/crypto/chacha/arch/arm/chacha_neon.h:1.1 src/sys/crypto/chacha/arch/arm/chacha_neon.h:1.2
--- src/sys/crypto/chacha/arch/arm/chacha_neon.h:1.1	Sat Jul 25 22:51:57 2020
+++ src/sys/crypto/chacha/arch/arm/chacha_neon.h	Mon Jul 27 20:51:29 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: chacha_neon.h,v 1.1 2020/07/25 22:51:57 riastradh Exp $	*/
+/*	$NetBSD: chacha_neon.h,v 1.2 2020/07/27 20:51:29 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -64,7 +64,8 @@ void	xchacha_stream_xor_neon(uint8_t *, 
 	    const uint8_t[static 32],
 	    unsigned);
 
-/* Assembly helpers */
+#ifdef __aarch64__
+/* Assembly helpers -- aarch64 only for now */
 void	chacha_stream256_neon(uint8_t[restrict static 256], uint32_t,
 	    const uint8_t[static 12],
 	    const uint8_t[static 32],
@@ -77,6 +78,7 @@ void	chacha_stream_xor256_neon(uint8_t[r
 	    const uint8_t[static 32],
 	    const uint8_t[static 16],
 	    unsigned);
+#endif	/* __aarch64__ */
 
 extern const struct chacha_impl chacha_neon_impl;
 
Index: src/sys/crypto/chacha/arch/arm/files.chacha_arm
diff -u src/sys/crypto/chacha/arch/arm/files.chacha_arm:1.1 src/sys/crypto/chacha/arch/arm/files.chacha_arm:1.2
--- src/sys/crypto/chacha/arch/arm/files.chacha_arm:1.1	Sat Jul 25 22:51:57 2020
+++ src/sys/crypto/chacha/arch/arm/files.chacha_arm	Mon Jul 27 20:51:29 2020
@@ -1,9 +1,11 @@
-#	$NetBSD: files.chacha_arm,v 1.1 2020/07/25 22:51:57 riastradh Exp $
+#	$NetBSD: files.chacha_arm,v 1.2 2020/07/27 20:51:29 riastradh Exp $
 
 ifdef aarch64
 makeoptions	chacha	"COPTS.chacha_neon.c"+="-march=armv8-a"
+else
+makeoptions	aes	"COPTS.chacha_neon.c"+="-mfloat-abi=softfp -mfpu=neon"
 endif
 
-file	crypto/chacha/arch/arm/chacha_neon.c		chacha
-file	crypto/chacha/arch/arm/chacha_neon_64.S		chacha & aarch64
-file	crypto/chacha/arch/arm/chacha_neon_impl.c	chacha
+file	crypto/chacha/arch/arm/chacha_neon.c	chacha & (cpu_cortex | aarch64)
+file	crypto/chacha/arch/arm/chacha_neon_64.S	chacha & aarch64
+file	crypto/chacha/arch/arm/chacha_neon_impl.c chacha & (cpu_cortex | aarch64)

Index: src/tests/sys/crypto/chacha/Makefile
diff -u src/tests/sys/crypto/chacha/Makefile:1.1 src/tests/sys/crypto/chacha/Makefile:1.2
--- src/tests/sys/crypto/chacha/Makefile:1.1	Sat Jul 25 22:53:38 2020
+++ src/tests/sys/crypto/chacha/Makefile	Mon Jul 27 20:51:29 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile,v 1.1 2020/07/25 22:53:38 riastradh Exp $
+#	$NetBSD: Makefile,v 1.2 2020/07/27 20:51:29 riastradh Exp $
 
 .include <bsd.own.mk>
 
@@ -16,16 +16,18 @@ SRCS.t_chacha+=	t_chacha.c
 SRCS.t_chacha+=	chacha_ref.c
 SRCS.t_chacha+=	chacha_selftest.c
 
-.if !empty(MACHINE_ARCH:Maarch64*)
+.if !empty(MACHINE_ARCH:Mearmv7*) || !empty(MACHINE_ARCH:Maarch64*)
 
 .PATH:	${NETBSDSRCDIR}/sys/crypto/chacha/arch/arm
 CPPFLAGS+=	-I${NETBSDSRCDIR}/sys/crypto/chacha/arch/arm
 
 SRCS.t_chacha+=	chacha_neon.c
+.if !empty(MACHINE_ARCH:Maarch64*)
 SRCS.t_chacha+=	chacha_neon_64.S
+.endif
 SRCS.t_chacha+=	chacha_neon_impl.c
 
-.endif				# aarch64
+.endif				# earmv7 or aarch64
 
 .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
 
Index: src/tests/sys/crypto/chacha/t_chacha.c
diff -u src/tests/sys/crypto/chacha/t_chacha.c:1.1 src/tests/sys/crypto/chacha/t_chacha.c:1.2
--- src/tests/sys/crypto/chacha/t_chacha.c:1.1	Sat Jul 25 22:53:38 2020
+++ src/tests/sys/crypto/chacha/t_chacha.c	Mon Jul 27 20:51:29 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_chacha.c,v 1.1 2020/07/25 22:53:38 riastradh Exp $	*/
+/*	$NetBSD: t_chacha.c,v 1.2 2020/07/27 20:51:29 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 #include <crypto/chacha/arch/x86/chacha_sse2.h>
 #endif
 
-#ifdef __aarch64__
+#ifdef __ARM_NEON__
 #include <crypto/chacha/arch/arm/chacha_neon.h>
 #endif
 
@@ -81,7 +81,7 @@ ATF_TC_BODY(name, tc)							      \
 		atf_tc_fail("%s self-test failed", (impl)->ci_name);	      \
 }
 
-#ifdef __aarch64__
+#ifdef __ARM_NEON__
 CHACHA_SELFTEST(chacha_neon_selftest, &chacha_neon_impl,
     "ARM NEON ChaCha self-test")
 #endif
@@ -96,7 +96,7 @@ ATF_TP_ADD_TCS(tp)
 
 	ATF_TP_ADD_TC(tp, chacha_ref_selftest);
 
-#ifdef __aarch64__
+#ifdef __ARM_NEON__
 	ATF_TP_ADD_TC(tp, chacha_neon_selftest);
 #endif
 

Reply via email to