~mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
progs/perftest.c: Use from Glibc syscall numbers.
[catacomb]
/
symm
/
chacha-arm-neon.S
diff --git
a/symm/chacha-arm-neon.S
b/symm/chacha-arm-neon.S
index
2160def
..
2188576
100644
(file)
--- a/
symm/chacha-arm-neon.S
+++ b/
symm/chacha-arm-neon.S
@@
-61,16
+61,13
@@
FUNC(chacha_core_arm_neon)
// a += b; d ^= a; d <<<= 16
vadd.u32 q8, q12, q13
veor q11, q15, q8
// a += b; d ^= a; d <<<= 16
vadd.u32 q8, q12, q13
veor q11, q15, q8
- vshl.u32 q0, q11, #16
- vshr.u32 q11, q11, #16
- vorr q11, q11, q0
+ vrev32.16 q11, q11
// c += d; b ^= c; b <<<= 12
vadd.u32 q10, q14, q11
// c += d; b ^= c; b <<<= 12
vadd.u32 q10, q14, q11
- veor q9, q13, q10
- vshl.u32 q0, q9, #12
- vshr.u32 q9, q9, #20
- vorr q9, q9, q0
+ veor q0, q13, q10
+ vshl.u32 q9, q0, #12
+ vsri.u32 q9, q0, #20
0:
// Apply (the rest of) a column quarterround to each of the columns
0:
// Apply (the rest of) a column quarterround to each of the columns
@@
-79,19
+76,17
@@
FUNC(chacha_core_arm_neon)
// a += b; d ^= a; d <<<= 8
vadd.u32 q8, q8, q9
// a += b; d ^= a; d <<<= 8
vadd.u32 q8, q8, q9
- veor q11, q11, q8
- vshl.u32 q0, q11, #8
- vshr.u32 q11, q11, #24
- vorr q11, q11, q0
+ veor q0, q11, q8
+ vshl.u32 q11, q0, #8
+ vsri.u32 q11, q0, #24
// c += d; b ^= c; b <<<= 7
vadd.u32 q10, q10, q11
vext.32 q11, q11, q11, #3
// c += d; b ^= c; b <<<= 7
vadd.u32 q10, q10, q11
vext.32 q11, q11, q11, #3
- veor q
9
, q9, q10
+ veor q
0
, q9, q10
vext.32 q10, q10, q10, #2
vext.32 q10, q10, q10, #2
- vshl.u32 q0, q9, #7
- vshr.u32 q9, q9, #25
- vorr q9, q9, q0
+ vshl.u32 q9, q0, #7
+ vsri.u32 q9, q0, #25
// The not-quite-transpose conveniently only involves reordering
// elements of individual rows, which can be done quite easily. It
// The not-quite-transpose conveniently only involves reordering
// elements of individual rows, which can be done quite easily. It
@@
-113,32
+108,27
@@
FUNC(chacha_core_arm_neon)
// a += b; d ^= a; d <<<= 16
vadd.u32 q8, q8, q9
veor q11, q11, q8
// a += b; d ^= a; d <<<= 16
vadd.u32 q8, q8, q9
veor q11, q11, q8
- vshl.u32 q0, q11, #16
- vshr.u32 q11, q11, #16
- vorr q11, q11, q0
+ vrev32.16 q11, q11
// c += d; b ^= c; b <<<= 12
vadd.u32 q10, q10, q11
// c += d; b ^= c; b <<<= 12
vadd.u32 q10, q10, q11
- veor q9, q9, q10
- vshl.u32 q0, q9, #12
- vshr.u32 q9, q9, #20
- vorr q9, q9, q0
+ veor q0, q9, q10
+ vshl.u32 q9, q0, #12
+ vsri.u32 q9, q0, #20
// a += b; d ^= a; d <<<= 8
vadd.u32 q8, q8, q9
// a += b; d ^= a; d <<<= 8
vadd.u32 q8, q8, q9
- veor q11, q11, q8
- vshl.u32 q0, q11, #8
- vshr.u32 q11, q11, #24
- vorr q11, q11, q0
+ veor q0, q11, q8
+ vshl.u32 q11, q0, #8
+ vsri.u32 q11, q0, #24
// c += d; b ^= c; b <<<= 7
vadd.u32 q10, q10, q11
vext.32 q11, q11, q11, #1
// c += d; b ^= c; b <<<= 7
vadd.u32 q10, q10, q11
vext.32 q11, q11, q11, #1
- veor q
9
, q9, q10
+ veor q
0
, q9, q10
vext.32 q10, q10, q10, #2
vext.32 q10, q10, q10, #2
- vshl.u32 q0, q9, #7
- vshr.u32 q9, q9, #25
- vorr q9, q9, q0
+ vshl.u32 q9, q0, #7
+ vsri.u32 q9, q0, #25
// Finally finish off undoing the transpose, and we're done for this
// doubleround. Again, most of this was done above so we don't have
// Finally finish off undoing the transpose, and we're done for this
// doubleround. Again, most of this was done above so we don't have
@@
-154,16
+144,13
@@
FUNC(chacha_core_arm_neon)
// a += b; d ^= a; d <<<= 16
vadd.u32 q8, q8, q9
veor q11, q11, q8
// a += b; d ^= a; d <<<= 16
vadd.u32 q8, q8, q9
veor q11, q11, q8
- vshl.u32 q0, q11, #16
- vshr.u32 q11, q11, #16
- vorr q11, q11, q0
+ vrev32.16 q11, q11
// c += d; b ^= c; b <<<= 12
vadd.u32 q10, q10, q11
// c += d; b ^= c; b <<<= 12
vadd.u32 q10, q10, q11
- veor q9, q9, q10
- vshl.u32 q0, q9, #12
- vshr.u32 q9, q9, #20
- vorr q9, q9, q0
+ veor q0, q9, q10
+ vshl.u32 q9, q0, #12
+ vsri.u32 q9, q0, #20
b 0b
b 0b