.arch armv7-a
.fpu neon
- .section .text
+ .text
FUNC(salsa20_core_arm_neon)
// d ^= (c + b) <<< 13
vadd.u32 q0, q10, q11
- vext.32 q11, q11, q11, #3
+ vext.32 q11, q11, q11, #3
vshl.u32 q1, q0, #13
vshr.u32 q0, q0, #19
vorr q0, q0, q1
// a ^= (d + c) <<< 18
vadd.u32 q0, q9, q10
- vext.32 q10, q10, q10, #2
- vext.32 q9, q9, q9, #1
+ 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
// d ^= (c + b) <<< 13
vadd.u32 q0, q10, q9
- vext.32 q9, q9, q9, #3
+ vext.32 q9, q9, q9, #3
vshl.u32 q1, q0, #13
vshr.u32 q0, q0, #19
vorr q0, q0, q1
// a ^= (d + c) <<< 18
vadd.u32 q0, q11, q10
- vext.32 q10, q10, q10, #2
- vext.32 q11, q11, q11, #1
+ 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
vadd.u32 q10, q10, q14
vadd.u32 q11, q11, q15
- vst1.32 {d16[0]}, [r2]!
- vst1.32 {d22[1]}, [r2]!
- vst1.32 {d21[0]}, [r2]!
- vst1.32 {d19[1]}, [r2]!
-
- vst1.32 {d18[0]}, [r2]!
- vst1.32 {d16[1]}, [r2]!
- vst1.32 {d23[0]}, [r2]!
- vst1.32 {d21[1]}, [r2]!
-
- vst1.32 {d20[0]}, [r2]!
- vst1.32 {d18[1]}, [r2]!
- vst1.32 {d17[0]}, [r2]!
- vst1.32 {d23[1]}, [r2]!
-
- vst1.32 {d22[0]}, [r2]!
- vst1.32 {d20[1]}, [r2]!
- vst1.32 {d19[0]}, [r2]!
- vst1.32 {d17[1]}, [r2]!
+ vst1.32 {d16[0]}, [r2 :32]!
+ vst1.32 {d22[1]}, [r2 :32]!
+ vst1.32 {d21[0]}, [r2 :32]!
+ vst1.32 {d19[1]}, [r2 :32]!
+
+ vst1.32 {d18[0]}, [r2 :32]!
+ vst1.32 {d16[1]}, [r2 :32]!
+ vst1.32 {d23[0]}, [r2 :32]!
+ vst1.32 {d21[1]}, [r2 :32]!
+
+ vst1.32 {d20[0]}, [r2 :32]!
+ vst1.32 {d18[1]}, [r2 :32]!
+ vst1.32 {d17[0]}, [r2 :32]!
+ vst1.32 {d23[1]}, [r2 :32]!
+
+ vst1.32 {d22[0]}, [r2 :32]!
+ vst1.32 {d20[1]}, [r2 :32]!
+ vst1.32 {d19[0]}, [r2 :32]!
+ vst1.32 {d17[1]}, [r2 :32]!
// And with that, we're done.
bx r14