Skip to content

Commit 00fe73b

Browse files
authored
Merge pull request wolfSSL#10484 from SparkiDev/arm32_neon_chacha20_align_fix
ARM32 NEON ChaCha20: alignment fix
2 parents 81cce39 + e1840c6 commit 00fe73b

2 files changed

Lines changed: 32 additions & 16 deletions

File tree

wolfcrypt/src/port/arm/armv8-32-chacha-asm.S

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -812,24 +812,30 @@ L_chacha_crypt_bytes_arm32_round_start_256:
812812
# Load and XOR in message
813813
ldr lr, [sp, #32]
814814
ldr r3, [sp, #36]
815-
vldm lr!, {q8-q11}
815+
vld1.8 {q8-q9}, [lr]!
816+
vld1.8 {q10-q11}, [lr]!
816817
veor q12, q12, q8
817818
veor q13, q13, q9
818819
veor q14, q14, q10
819820
veor q15, q15, q11
820-
vstm r3!, {q12-q15}
821-
vldm lr!, {q8-q11}
821+
vst1.8 {q12-q13}, [r3]!
822+
vst1.8 {q14-q15}, [r3]!
823+
vld1.8 {q8-q9}, [lr]!
824+
vld1.8 {q10-q11}, [lr]!
822825
veor q0, q0, q8
823826
veor q1, q1, q9
824827
veor q2, q2, q10
825828
veor q3, q3, q11
826-
vstm r3!, {q0-q3}
827-
vldm lr!, {q8-q11}
829+
vst1.8 {q0-q1}, [r3]!
830+
vst1.8 {q2-q3}, [r3]!
831+
vld1.8 {q8-q9}, [lr]!
832+
vld1.8 {q10-q11}, [lr]!
828833
veor q4, q4, q8
829834
veor q5, q5, q9
830835
veor q6, q6, q10
831836
veor q7, q7, q11
832-
vstm r3!, {q4-q7}
837+
vst1.8 {q4-q5}, [r3]!
838+
vst1.8 {q6-q7}, [r3]!
833839
str r3, [sp, #36]
834840
ldr r3, [sp, #24]
835841
add r10, r10, #3
@@ -849,7 +855,8 @@ L_chacha_crypt_bytes_arm32_round_start_256:
849855
vmov d7, r12, lr
850856
ldr r3, [sp, #40]
851857
vldm r0, {q12-q15}
852-
vldm r2!, {q4-q7}
858+
vld1.8 {q4-q5}, [r2]!
859+
vld1.8 {q6-q7}, [r2]!
853860
vadd.i32 q0, q0, q12
854861
vadd.i32 q1, q1, q13
855862
vadd.i32 q2, q2, q14
@@ -860,7 +867,8 @@ L_chacha_crypt_bytes_arm32_round_start_256:
860867
add lr, lr, #4
861868
veor q2, q2, q6
862869
veor q3, q3, q7
863-
vstm r1!, {q0-q3}
870+
vst1.8 {q0-q1}, [r1]!
871+
vst1.8 {q2-q3}, [r1]!
864872
vmov d30[0], lr
865873
str lr, [r0, #48]
866874
sub r3, r3, #0x100

wolfcrypt/src/port/arm/armv8-32-chacha-asm_c.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -928,24 +928,30 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
928928
/* Load and XOR in message */
929929
"ldr lr, [sp, #32]\n\t"
930930
"ldr %[len], [sp, #36]\n\t"
931-
"vldm lr!, {q8-q11}\n\t"
931+
"vld1.8 {q8-q9}, [lr]!\n\t"
932+
"vld1.8 {q10-q11}, [lr]!\n\t"
932933
"veor q12, q12, q8\n\t"
933934
"veor q13, q13, q9\n\t"
934935
"veor q14, q14, q10\n\t"
935936
"veor q15, q15, q11\n\t"
936-
"vstm %[len]!, {q12-q15}\n\t"
937-
"vldm lr!, {q8-q11}\n\t"
937+
"vst1.8 {q12-q13}, [%[len]]!\n\t"
938+
"vst1.8 {q14-q15}, [%[len]]!\n\t"
939+
"vld1.8 {q8-q9}, [lr]!\n\t"
940+
"vld1.8 {q10-q11}, [lr]!\n\t"
938941
"veor q0, q0, q8\n\t"
939942
"veor q1, q1, q9\n\t"
940943
"veor q2, q2, q10\n\t"
941944
"veor q3, q3, q11\n\t"
942-
"vstm %[len]!, {q0-q3}\n\t"
943-
"vldm lr!, {q8-q11}\n\t"
945+
"vst1.8 {q0-q1}, [%[len]]!\n\t"
946+
"vst1.8 {q2-q3}, [%[len]]!\n\t"
947+
"vld1.8 {q8-q9}, [lr]!\n\t"
948+
"vld1.8 {q10-q11}, [lr]!\n\t"
944949
"veor q4, q4, q8\n\t"
945950
"veor q5, q5, q9\n\t"
946951
"veor q6, q6, q10\n\t"
947952
"veor q7, q7, q11\n\t"
948-
"vstm %[len]!, {q4-q7}\n\t"
953+
"vst1.8 {q4-q5}, [%[len]]!\n\t"
954+
"vst1.8 {q6-q7}, [%[len]]!\n\t"
949955
"str %[len], [sp, #36]\n\t"
950956
"ldr %[len], [sp, #24]\n\t"
951957
"add r10, r10, #3\n\t"
@@ -965,7 +971,8 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
965971
"vmov d7, r12, lr\n\t"
966972
"ldr %[len], [sp, #40]\n\t"
967973
"vldm %[ctx], {q12-q15}\n\t"
968-
"vldm %[m]!, {q4-q7}\n\t"
974+
"vld1.8 {q4-q5}, [%[m]]!\n\t"
975+
"vld1.8 {q6-q7}, [%[m]]!\n\t"
969976
"vadd.i32 q0, q0, q12\n\t"
970977
"vadd.i32 q1, q1, q13\n\t"
971978
"vadd.i32 q2, q2, q14\n\t"
@@ -976,7 +983,8 @@ WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
976983
"add lr, lr, #4\n\t"
977984
"veor q2, q2, q6\n\t"
978985
"veor q3, q3, q7\n\t"
979-
"vstm %[c]!, {q0-q3}\n\t"
986+
"vst1.8 {q0-q1}, [%[c]]!\n\t"
987+
"vst1.8 {q2-q3}, [%[c]]!\n\t"
980988
"vmov d30[0], lr\n\t"
981989
"str lr, [%[ctx], #48]\n\t"
982990
"sub %[len], %[len], #0x100\n\t"

0 commit comments

Comments
 (0)