Skip to content

Commit c8b0aac

Browse files
committed
SHA-256 Aarch64: fix alignments on loads and stores
Input buffer must be loaded with a byte alignment. Fix other loads and stores to be consistent.
1 parent f9bf96d commit c8b0aac

1 file changed

Lines changed: 11 additions & 11 deletions

File tree

wolfcrypt/src/port/arm/armv8-sha256.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ static WC_INLINE void Sha256Transform(wc_Sha256* sha256, const byte* data,
281281
"CBZ w8, 2f \n"
282282

283283
"#load in message and schedule updates \n"
284-
"LD1 {v0.2d-v3.2d}, [%[dataIn]], #64 \n"
284+
"LD1 {v0.16b-v3.16b}, [%[dataIn]], #64 \n"
285285
"MOV v14.16b, v12.16b \n"
286286
"MOV v15.16b, v13.16b \n"
287287
"REV32 v0.16b, v0.16b \n"
@@ -291,7 +291,7 @@ static WC_INLINE void Sha256Transform(wc_Sha256* sha256, const byte* data,
291291
"B 1b \n" /* do another block */
292292

293293
"2:\n"
294-
"STP q12, q13, %[out] \n"
294+
"ST1 {v12.2d-v13.2d}, %[out] \n"
295295

296296
: [out] "=m" (sha256->digest), "=m" (sha256->buffer), "=r" (numBlocks),
297297
"=r" (data), "=r" (k)
@@ -378,7 +378,7 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
378378
"MOV v16.16b, v20.16b \n"
379379
"MOV v17.16b, v21.16b \n"
380380

381-
"LD1 {v22.16b-v25.16b}, [%[k]], #64 \n"
381+
"LD1 {v22.4s-v25.4s}, [%[k]], #64 \n"
382382
"SHA256SU0 v4.4s, v1.4s \n"
383383
"ADD v0.4s, v0.4s, v22.4s \n"
384384
"MOV v6.16b, v2.16b \n"
@@ -411,7 +411,7 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
411411
"SHA256H q16, q17, v3.4s \n"
412412
"SHA256H2 q17, q18, v3.4s \n"
413413

414-
"LD1 {v22.16b-v25.16b}, [%[k]], #64 \n"
414+
"LD1 {v22.4s-v25.4s}, [%[k]], #64 \n"
415415
"SHA256SU0 v8.4s, v5.4s \n"
416416
"ADD v4.4s, v4.4s, v22.4s \n"
417417
"MOV v18.16b, v16.16b \n"
@@ -444,7 +444,7 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
444444
"SHA256H q16, q17, v7.4s \n"
445445
"SHA256H2 q17, q18, v7.4s \n"
446446

447-
"LD1 {v22.16b-v25.16b}, [%[k]], #64 \n"
447+
"LD1 {v22.4s-v25.4s}, [%[k]], #64 \n"
448448
"SHA256SU0 v12.4s, v9.4s \n"
449449
"ADD v8.4s, v8.4s, v22.4s \n"
450450
"MOV v18.16b, v16.16b \n"
@@ -475,7 +475,7 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
475475
"SHA256H q16, q17, v11.4s \n"
476476
"SHA256H2 q17, q18, v11.4s \n"
477477

478-
"LD1 {v22.16b-v25.16b}, [%[k]] \n"
478+
"LD1 {v22.4s-v25.4s}, [%[k]] \n"
479479
"ADD v12.4s, v12.4s, v22.4s \n"
480480
"MOV v18.16b, v16.16b \n"
481481
"SHA256H q16, q17, v12.4s \n"
@@ -499,7 +499,7 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
499499
"#Add working vars back into digest state \n"
500500
"ADD v16.4s, v16.4s, v20.4s \n"
501501
"ADD v17.4s, v17.4s, v21.4s \n"
502-
"STP q16, q17, %[out] \n"
502+
"ST1 {v16.2d-v17.2d}, %[out] \n"
503503

504504
: [out] "=m" (sha256->digest), [k] "+r" (k)
505505
: [digest] "m" (sha256->digest),
@@ -549,7 +549,7 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
549549

550550
"MOV v16.16b, v20.16b \n"
551551
"MOV v17.16b, v21.16b \n"
552-
"LD1 {v22.16b-v25.16b}, [%[k]], #64 \n"
552+
"LD1 {v22.4s-v25.4s}, [%[k]], #64 \n"
553553
"SHA256SU0 v4.4s, v1.4s \n"
554554
"ADD v0.4s, v0.4s, v22.4s \n"
555555
"MOV v6.16b, v2.16b \n"
@@ -582,7 +582,7 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
582582
"SHA256H q16, q17, v3.4s \n"
583583
"SHA256H2 q17, q18, v3.4s \n"
584584

585-
"LD1 {v22.16b-v25.16b}, [%[k]], #64 \n"
585+
"LD1 {v22.4s-v25.4s}, [%[k]], #64 \n"
586586
"SHA256SU0 v8.4s, v5.4s \n"
587587
"ADD v4.4s, v4.4s, v22.4s \n"
588588
"MOV v18.16b, v16.16b \n"
@@ -615,7 +615,7 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
615615
"SHA256H q16, q17, v7.4s \n"
616616
"SHA256H2 q17, q18, v7.4s \n"
617617

618-
"LD1 {v22.16b-v25.16b}, [%[k]], #64 \n"
618+
"LD1 {v22.4s-v25.4s}, [%[k]], #64 \n"
619619
"SHA256SU0 v12.4s, v9.4s \n"
620620
"ADD v8.4s, v8.4s, v22.4s \n"
621621
"MOV v18.16b, v16.16b \n"
@@ -646,7 +646,7 @@ static WC_INLINE int Sha256Final(wc_Sha256* sha256, byte* hash)
646646
"SHA256H q16, q17, v11.4s \n"
647647
"SHA256H2 q17, q18, v11.4s \n"
648648

649-
"LD1 {v22.16b-v25.16b}, [%[k]] \n"
649+
"LD1 {v22.4s-v25.4s}, [%[k]] \n"
650650
"ADD v12.4s, v12.4s, v22.4s \n"
651651
"MOV v18.16b, v16.16b \n"
652652
"SHA256H q16, q17, v12.4s \n"

0 commit comments

Comments
 (0)