Module Name: src
Committed By: riastradh
Date: Sun Aug 16 18:02:03 UTC 2020
Modified Files:
src/sys/crypto/aes/arch/arm: aes_neon_32.S files.aesneon
Log Message:
Fix AES NEON code for big-endian softfp ARM.
...which is how the kernel runs. Switch to using __SOFTFP__ for
consistency with how it gets exposed to C, although I'm not sure how
to get it defined automagically in the toolchain for .S files so
that's set manually in files.aesneon for now.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/crypto/aes/arch/arm/aes_neon_32.S
cvs rdiff -u -r1.3 -r1.4 src/sys/crypto/aes/arch/arm/files.aesneon
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/crypto/aes/arch/arm/aes_neon_32.S
diff -u src/sys/crypto/aes/arch/arm/aes_neon_32.S:1.5 src/sys/crypto/aes/arch/arm/aes_neon_32.S:1.6
--- src/sys/crypto/aes/arch/arm/aes_neon_32.S:1.5 Sat Aug 8 14:47:01 2020
+++ src/sys/crypto/aes/arch/arm/aes_neon_32.S Sun Aug 16 18:02:03 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: aes_neon_32.S,v 1.5 2020/08/08 14:47:01 riastradh Exp $ */
+/* $NetBSD: aes_neon_32.S,v 1.6 2020/08/16 18:02:03 riastradh Exp $ */
/*-
* Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -28,7 +28,7 @@
#include <arm/asm.h>
-RCSID("$NetBSD: aes_neon_32.S,v 1.5 2020/08/08 14:47:01 riastradh Exp $")
+RCSID("$NetBSD: aes_neon_32.S,v 1.6 2020/08/16 18:02:03 riastradh Exp $")
.fpu neon
@@ -228,15 +228,19 @@ END(dsbo_1)
* aes_neon_enc1(const struct aesenc *enc@r0, uint8x16_t x@q0,
* unsigned nrounds@r1)
*
- * With -mfloat-abi=soft(fp) (here spelled `#ifdef _KERNEL'):
+ * With -mfloat-abi=soft(fp) (i.e., __SOFTFP__):
*
* uint8x16_t@(r0,r1,r2,r3)
* aes_neon_enc1(const struct aesenc *enc@r0,
* uint8x16_t x@(r2,r3,sp[0],sp[4]), nrounds@sp[8])
*/
ENTRY(aes_neon_enc1)
-#ifdef _KERNEL
+#ifdef __SOFTFP__
+#ifdef __ARM_BIG_ENDIAN
+ vmov d0, r3, r2 /* d0 := x lo */
+#else
vmov d0, r2, r3 /* d0 := x lo */
+#endif
vldr d1, [sp] /* d1 := x hi */
ldr r1, [sp, #8] /* r1 := nrounds */
#endif
@@ -434,10 +438,15 @@ ENTRY(aes_neon_enc1)
vpop {d8-d15}
pop {r4, r5, r6, r7, r8, r10, r11, lr}
-#ifdef _KERNEL
+#ifdef __SOFTFP__
+#ifdef __ARM_BIG_ENDIAN
+ vmov r1, r0, d0
+ vmov r3, r2, d1
+#else
vmov r0, r1, d0
vmov r2, r3, d1
#endif
+#endif
bx lr
END(aes_neon_enc1)
@@ -457,8 +466,12 @@ END(aes_neon_enc1)
* uint8x16_t x@(r2,r3,sp[0],sp[4]), nrounds@sp[8])
*/
ENTRY(aes_neon_dec1)
-#ifdef _KERNEL
+#ifdef __SOFTFP__
+#ifdef __ARM_BIG_ENDIAN
+ vmov d0, r3, r2 /* d0 := x lo */
+#else
vmov d0, r2, r3 /* d0 := x lo */
+#endif
vldr d1, [sp] /* d1 := x hi */
ldr r1, [sp, #8] /* r1 := nrounds */
#endif
@@ -669,9 +682,14 @@ ENTRY(aes_neon_dec1)
vpop {d8-d15}
pop {r4, r5, r6, r7, r8, r10, r11, lr}
-#ifdef _KERNEL
+#ifdef __SOFTFP__
+#ifdef __ARM_BIG_ENDIAN
+ vmov r1, r0, d0
+ vmov r3, r2, d1
+#else
vmov r0, r1, d0
vmov r2, r3, d1
#endif
+#endif
bx lr
END(aes_neon_dec1)
Index: src/sys/crypto/aes/arch/arm/files.aesneon
diff -u src/sys/crypto/aes/arch/arm/files.aesneon:1.3 src/sys/crypto/aes/arch/arm/files.aesneon:1.4
--- src/sys/crypto/aes/arch/arm/files.aesneon:1.3 Tue Jun 30 17:03:13 2020
+++ src/sys/crypto/aes/arch/arm/files.aesneon Sun Aug 16 18:02:03 2020
@@ -1,4 +1,4 @@
-# $NetBSD: files.aesneon,v 1.3 2020/06/30 17:03:13 riastradh Exp $
+# $NetBSD: files.aesneon,v 1.4 2020/08/16 18:02:03 riastradh Exp $
ifdef aarch64
makeoptions aes "COPTS.aes_neon.c"+="-march=armv8-a"
@@ -8,6 +8,8 @@ makeoptions aes "COPTS.aes_neon.c"+="-mf
makeoptions aes "COPTS.aes_neon_subr.c"+="-mfloat-abi=softfp -mfpu=neon"
endif
+makeoptions aes "AOPTS.aes_neon_32.S"+="-D__SOFTFP__"
+
file crypto/aes/arch/arm/aes_neon.c aes & (cpu_cortex | aarch64)
file crypto/aes/arch/arm/aes_neon_impl.c aes & (cpu_cortex | aarch64)
file crypto/aes/arch/arm/aes_neon_subr.c aes & (cpu_cortex | aarch64)