symm/{chacha,salsa20}-{arm64,arm-neon}.S: Improve rotation code.
[catacomb] / symm / salsa20-arm-neon.S
index ce37948..519f8a3 100644 (file)
@@ -85,33 +85,29 @@ FUNC(salsa20_core_arm_neon)
        // b ^= (a + d) <<<  7
        vadd.u32 q0, q12, q15
        vshl.u32 q1, q0, #7
-       vshr.u32 q0, q0, #25
-       vorr    q0, q0, q1
-       veor    q9, q13, q0
+       vsri.u32 q1, q0, #25
+       veor    q9, q13, q1
 
        // c ^= (b + a) <<<  9
        vadd.u32 q0, q9, q12
        vshl.u32 q1, q0, #9
-       vshr.u32 q0, q0, #23
-       vorr    q0, q0, q1
-       veor    q10, q14, q0
+       vsri.u32 q1, q0, #23
+       veor    q10, q14, q1
 
        // d ^= (c + b) <<< 13
        vadd.u32 q0, q10, q9
         vext.32 q9, q9, q9, #3
        vshl.u32 q1, q0, #13
-       vshr.u32 q0, q0, #19
-       vorr    q0, q0, q1
-       veor    q11, q15, q0
+       vsri.u32 q1, q0, #19
+       veor    q11, q15, q1
 
        // a ^= (d + c) <<< 18
        vadd.u32 q0, q11, q10
         vext.32 q10, q10, q10, #2
         vext.32 q11, q11, q11, #1
        vshl.u32 q1, q0, #18
-       vshr.u32 q0, q0, #14
-       vorr    q0, q0, q1
-       veor    q8, q12, q0
+       vsri.u32 q1, q0, #14
+       veor    q8, q12, q1
 
 0:
        // The transpose conveniently only involves reordering elements of
@@ -132,33 +128,29 @@ FUNC(salsa20_core_arm_neon)
        // b ^= (a + d) <<<  7
        vadd.u32 q0, q8, q9
        vshl.u32 q1, q0, #7
-       vshr.u32 q0, q0, #25
-       vorr    q0, q0, q1
-       veor    q11, q11, q0
+       vsri.u32 q1, q0, #25
+       veor    q11, q11, q1
 
        // c ^= (b + a) <<<  9
        vadd.u32 q0, q11, q8
        vshl.u32 q1, q0, #9
-       vshr.u32 q0, q0, #23
-       vorr    q0, q0, q1
-       veor    q10, q10, q0
+       vsri.u32 q1, q0, #23
+       veor    q10, q10, q1
 
        // d ^= (c + b) <<< 13
        vadd.u32 q0, q10, q11
         vext.32 q11, q11, q11, #3
        vshl.u32 q1, q0, #13
-       vshr.u32 q0, q0, #19
-       vorr    q0, q0, q1
-       veor    q9, q9, q0
+       vsri.u32 q1, q0, #19
+       veor    q9, q9, q1
 
        // a ^= (d + c) <<< 18
        vadd.u32 q0, q9, q10
         vext.32 q10, q10, q10, #2
         vext.32 q9, q9, q9, #1
        vshl.u32 q1, q0, #18
-       vshr.u32 q0, q0, #14
-       vorr    q0, q0, q1
-       veor    q8, q8, q0
+       vsri.u32 q1, q0, #14
+       veor    q8, q8, q1
 
        // We had to undo the transpose ready for the next loop.  Again, push
        // back the reorderings to reduce latency.  Decrement the loop
@@ -171,33 +163,29 @@ FUNC(salsa20_core_arm_neon)
        // b ^= (a + d) <<<  7
        vadd.u32 q0, q8, q11
        vshl.u32 q1, q0, #7
-       vshr.u32 q0, q0, #25
-       vorr    q0, q0, q1
-       veor    q9, q9, q0
+       vsri.u32 q1, q0, #25
+       veor    q9, q9, q1
 
        // c ^= (b + a) <<<  9
        vadd.u32 q0, q9, q8
        vshl.u32 q1, q0, #9
-       vshr.u32 q0, q0, #23
-       vorr    q0, q0, q1
-       veor    q10, q10, q0
+       vsri.u32 q1, q0, #23
+       veor    q10, q10, q1
 
        // d ^= (c + b) <<< 13
        vadd.u32 q0, q10, q9
         vext.32 q9, q9, q9, #3
        vshl.u32 q1, q0, #13
-       vshr.u32 q0, q0, #19
-       vorr    q0, q0, q1
-       veor    q11, q11, q0
+       vsri.u32 q1, q0, #19
+       veor    q11, q11, q1
 
        // a ^= (d + c) <<< 18
        vadd.u32 q0, q11, q10
         vext.32 q10, q10, q10, #2
         vext.32 q11, q11, q11, #1
        vshl.u32 q1, q0, #18
-       vshr.u32 q0, q0, #14
-       vorr    q0, q0, q1
-       veor    q8, q8, q0
+       vsri.u32 q1, q0, #14
+       veor    q8, q8, q1
 
        b       0b