aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2022-01-03 17:02:48 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2022-01-03 17:02:48 +0100
commit7abb2bb96e0cd584f44dd8b219ad16d0232a6485 (patch)
treead82336b536d4e74cbf0929029525c13ca33d51d
parent4387077f8e69c26ce5ce4a8119c225cc1c461f88 (diff)
downloadbusybox-w32-7abb2bb96e0cd584f44dd8b219ad16d0232a6485.tar.gz
busybox-w32-7abb2bb96e0cd584f44dd8b219ad16d0232a6485.tar.bz2
busybox-w32-7abb2bb96e0cd584f44dd8b219ad16d0232a6485.zip
libbb/sha1: x86_64 version: tidying up, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--libbb/hash_md5_sha_x86-64.S32
-rwxr-xr-xlibbb/hash_md5_sha_x86-64.S.sh33
2 files changed, 36 insertions, 29 deletions
diff --git a/libbb/hash_md5_sha_x86-64.S b/libbb/hash_md5_sha_x86-64.S
index ec4e63765..95b85d80a 100644
--- a/libbb/hash_md5_sha_x86-64.S
+++ b/libbb/hash_md5_sha_x86-64.S
@@ -60,7 +60,7 @@ sha1_process_block64:
60 xorl %edx, %edi # ^d 60 xorl %edx, %edi # ^d
61 andl %ebx, %edi # &b 61 andl %ebx, %edi # &b
62 xorl %edx, %edi # (((c ^ d) & b) ^ d) 62 xorl %edx, %edi # (((c ^ d) & b) ^ d)
63 leal 0x5A827999(%rbp,%rsi),%ebp # e += RCONST + W[n] 63 leal 0x5A827999(%rbp,%rsi), %ebp # e += RCONST + W[n]
64 addl %edi, %ebp # e += (((c ^ d) & b) ^ d) 64 addl %edi, %ebp # e += (((c ^ d) & b) ^ d)
65 movl %eax, %esi # 65 movl %eax, %esi #
66 roll $5, %esi # rotl32(a,5) 66 roll $5, %esi # rotl32(a,5)
@@ -72,7 +72,7 @@ sha1_process_block64:
72 xorl %ecx, %edi # ^d 72 xorl %ecx, %edi # ^d
73 andl %eax, %edi # &b 73 andl %eax, %edi # &b
74 xorl %ecx, %edi # (((c ^ d) & b) ^ d) 74 xorl %ecx, %edi # (((c ^ d) & b) ^ d)
75 leal 0x5A827999(%rdx,%rsi),%edx # e += RCONST + W[n] 75 leal 0x5A827999(%rdx,%rsi), %edx # e += RCONST + W[n]
76 addl %edi, %edx # e += (((c ^ d) & b) ^ d) 76 addl %edi, %edx # e += (((c ^ d) & b) ^ d)
77 movl %ebp, %esi # 77 movl %ebp, %esi #
78 roll $5, %esi # rotl32(a,5) 78 roll $5, %esi # rotl32(a,5)
@@ -84,7 +84,7 @@ sha1_process_block64:
84 xorl %ebx, %edi # ^d 84 xorl %ebx, %edi # ^d
85 andl %ebp, %edi # &b 85 andl %ebp, %edi # &b
86 xorl %ebx, %edi # (((c ^ d) & b) ^ d) 86 xorl %ebx, %edi # (((c ^ d) & b) ^ d)
87 leal 0x5A827999(%rcx,%rsi),%ecx # e += RCONST + W[n] 87 leal 0x5A827999(%rcx,%rsi), %ecx # e += RCONST + W[n]
88 addl %edi, %ecx # e += (((c ^ d) & b) ^ d) 88 addl %edi, %ecx # e += (((c ^ d) & b) ^ d)
89 movl %edx, %esi # 89 movl %edx, %esi #
90 roll $5, %esi # rotl32(a,5) 90 roll $5, %esi # rotl32(a,5)
@@ -96,7 +96,7 @@ sha1_process_block64:
96 xorl %eax, %edi # ^d 96 xorl %eax, %edi # ^d
97 andl %edx, %edi # &b 97 andl %edx, %edi # &b
98 xorl %eax, %edi # (((c ^ d) & b) ^ d) 98 xorl %eax, %edi # (((c ^ d) & b) ^ d)
99 leal 0x5A827999(%rbx,%rsi),%ebx # e += RCONST + W[n] 99 leal 0x5A827999(%rbx,%rsi), %ebx # e += RCONST + W[n]
100 addl %edi, %ebx # e += (((c ^ d) & b) ^ d) 100 addl %edi, %ebx # e += (((c ^ d) & b) ^ d)
101 movl %ecx, %esi # 101 movl %ecx, %esi #
102 roll $5, %esi # rotl32(a,5) 102 roll $5, %esi # rotl32(a,5)
@@ -108,7 +108,7 @@ sha1_process_block64:
108 xorl %ebp, %edi # ^d 108 xorl %ebp, %edi # ^d
109 andl %ecx, %edi # &b 109 andl %ecx, %edi # &b
110 xorl %ebp, %edi # (((c ^ d) & b) ^ d) 110 xorl %ebp, %edi # (((c ^ d) & b) ^ d)
111 leal 0x5A827999(%rax,%rsi),%eax # e += RCONST + W[n] 111 leal 0x5A827999(%rax,%rsi), %eax # e += RCONST + W[n]
112 addl %edi, %eax # e += (((c ^ d) & b) ^ d) 112 addl %edi, %eax # e += (((c ^ d) & b) ^ d)
113 movl %ebx, %esi # 113 movl %ebx, %esi #
114 roll $5, %esi # rotl32(a,5) 114 roll $5, %esi # rotl32(a,5)
@@ -120,7 +120,7 @@ sha1_process_block64:
120 xorl %edx, %edi # ^d 120 xorl %edx, %edi # ^d
121 andl %ebx, %edi # &b 121 andl %ebx, %edi # &b
122 xorl %edx, %edi # (((c ^ d) & b) ^ d) 122 xorl %edx, %edi # (((c ^ d) & b) ^ d)
123 leal 0x5A827999(%rbp,%rsi),%ebp # e += RCONST + W[n] 123 leal 0x5A827999(%rbp,%rsi), %ebp # e += RCONST + W[n]
124 addl %edi, %ebp # e += (((c ^ d) & b) ^ d) 124 addl %edi, %ebp # e += (((c ^ d) & b) ^ d)
125 movl %eax, %esi # 125 movl %eax, %esi #
126 roll $5, %esi # rotl32(a,5) 126 roll $5, %esi # rotl32(a,5)
@@ -132,7 +132,7 @@ sha1_process_block64:
132 xorl %ecx, %edi # ^d 132 xorl %ecx, %edi # ^d
133 andl %eax, %edi # &b 133 andl %eax, %edi # &b
134 xorl %ecx, %edi # (((c ^ d) & b) ^ d) 134 xorl %ecx, %edi # (((c ^ d) & b) ^ d)
135 leal 0x5A827999(%rdx,%rsi),%edx # e += RCONST + W[n] 135 leal 0x5A827999(%rdx,%rsi), %edx # e += RCONST + W[n]
136 addl %edi, %edx # e += (((c ^ d) & b) ^ d) 136 addl %edi, %edx # e += (((c ^ d) & b) ^ d)
137 movl %ebp, %esi # 137 movl %ebp, %esi #
138 roll $5, %esi # rotl32(a,5) 138 roll $5, %esi # rotl32(a,5)
@@ -144,7 +144,7 @@ sha1_process_block64:
144 xorl %ebx, %edi # ^d 144 xorl %ebx, %edi # ^d
145 andl %ebp, %edi # &b 145 andl %ebp, %edi # &b
146 xorl %ebx, %edi # (((c ^ d) & b) ^ d) 146 xorl %ebx, %edi # (((c ^ d) & b) ^ d)
147 leal 0x5A827999(%rcx,%rsi),%ecx # e += RCONST + W[n] 147 leal 0x5A827999(%rcx,%rsi), %ecx # e += RCONST + W[n]
148 addl %edi, %ecx # e += (((c ^ d) & b) ^ d) 148 addl %edi, %ecx # e += (((c ^ d) & b) ^ d)
149 movl %edx, %esi # 149 movl %edx, %esi #
150 roll $5, %esi # rotl32(a,5) 150 roll $5, %esi # rotl32(a,5)
@@ -156,7 +156,7 @@ sha1_process_block64:
156 xorl %eax, %edi # ^d 156 xorl %eax, %edi # ^d
157 andl %edx, %edi # &b 157 andl %edx, %edi # &b
158 xorl %eax, %edi # (((c ^ d) & b) ^ d) 158 xorl %eax, %edi # (((c ^ d) & b) ^ d)
159 leal 0x5A827999(%rbx,%r8),%ebx # e += RCONST + W[n] 159 leal 0x5A827999(%rbx,%r8), %ebx # e += RCONST + W[n]
160 addl %edi, %ebx # e += (((c ^ d) & b) ^ d) 160 addl %edi, %ebx # e += (((c ^ d) & b) ^ d)
161 movl %ecx, %esi # 161 movl %ecx, %esi #
162 roll $5, %esi # rotl32(a,5) 162 roll $5, %esi # rotl32(a,5)
@@ -168,7 +168,7 @@ sha1_process_block64:
168 xorl %ebp, %edi # ^d 168 xorl %ebp, %edi # ^d
169 andl %ecx, %edi # &b 169 andl %ecx, %edi # &b
170 xorl %ebp, %edi # (((c ^ d) & b) ^ d) 170 xorl %ebp, %edi # (((c ^ d) & b) ^ d)
171 leal 0x5A827999(%rax,%r9),%eax # e += RCONST + W[n] 171 leal 0x5A827999(%rax,%r9), %eax # e += RCONST + W[n]
172 addl %edi, %eax # e += (((c ^ d) & b) ^ d) 172 addl %edi, %eax # e += (((c ^ d) & b) ^ d)
173 movl %ebx, %esi # 173 movl %ebx, %esi #
174 roll $5, %esi # rotl32(a,5) 174 roll $5, %esi # rotl32(a,5)
@@ -180,7 +180,7 @@ sha1_process_block64:
180 xorl %edx, %edi # ^d 180 xorl %edx, %edi # ^d
181 andl %ebx, %edi # &b 181 andl %ebx, %edi # &b
182 xorl %edx, %edi # (((c ^ d) & b) ^ d) 182 xorl %edx, %edi # (((c ^ d) & b) ^ d)
183 leal 0x5A827999(%rbp,%r10),%ebp # e += RCONST + W[n] 183 leal 0x5A827999(%rbp,%r10), %ebp # e += RCONST + W[n]
184 addl %edi, %ebp # e += (((c ^ d) & b) ^ d) 184 addl %edi, %ebp # e += (((c ^ d) & b) ^ d)
185 movl %eax, %esi # 185 movl %eax, %esi #
186 roll $5, %esi # rotl32(a,5) 186 roll $5, %esi # rotl32(a,5)
@@ -192,7 +192,7 @@ sha1_process_block64:
192 xorl %ecx, %edi # ^d 192 xorl %ecx, %edi # ^d
193 andl %eax, %edi # &b 193 andl %eax, %edi # &b
194 xorl %ecx, %edi # (((c ^ d) & b) ^ d) 194 xorl %ecx, %edi # (((c ^ d) & b) ^ d)
195 leal 0x5A827999(%rdx,%r11),%edx # e += RCONST + W[n] 195 leal 0x5A827999(%rdx,%r11), %edx # e += RCONST + W[n]
196 addl %edi, %edx # e += (((c ^ d) & b) ^ d) 196 addl %edi, %edx # e += (((c ^ d) & b) ^ d)
197 movl %ebp, %esi # 197 movl %ebp, %esi #
198 roll $5, %esi # rotl32(a,5) 198 roll $5, %esi # rotl32(a,5)
@@ -204,7 +204,7 @@ sha1_process_block64:
204 xorl %ebx, %edi # ^d 204 xorl %ebx, %edi # ^d
205 andl %ebp, %edi # &b 205 andl %ebp, %edi # &b
206 xorl %ebx, %edi # (((c ^ d) & b) ^ d) 206 xorl %ebx, %edi # (((c ^ d) & b) ^ d)
207 leal 0x5A827999(%rcx,%r12),%ecx # e += RCONST + W[n] 207 leal 0x5A827999(%rcx,%r12), %ecx # e += RCONST + W[n]
208 addl %edi, %ecx # e += (((c ^ d) & b) ^ d) 208 addl %edi, %ecx # e += (((c ^ d) & b) ^ d)
209 movl %edx, %esi # 209 movl %edx, %esi #
210 roll $5, %esi # rotl32(a,5) 210 roll $5, %esi # rotl32(a,5)
@@ -216,7 +216,7 @@ sha1_process_block64:
216 xorl %eax, %edi # ^d 216 xorl %eax, %edi # ^d
217 andl %edx, %edi # &b 217 andl %edx, %edi # &b
218 xorl %eax, %edi # (((c ^ d) & b) ^ d) 218 xorl %eax, %edi # (((c ^ d) & b) ^ d)
219 leal 0x5A827999(%rbx,%r13),%ebx # e += RCONST + W[n] 219 leal 0x5A827999(%rbx,%r13), %ebx # e += RCONST + W[n]
220 addl %edi, %ebx # e += (((c ^ d) & b) ^ d) 220 addl %edi, %ebx # e += (((c ^ d) & b) ^ d)
221 movl %ecx, %esi # 221 movl %ecx, %esi #
222 roll $5, %esi # rotl32(a,5) 222 roll $5, %esi # rotl32(a,5)
@@ -228,7 +228,7 @@ sha1_process_block64:
228 xorl %ebp, %edi # ^d 228 xorl %ebp, %edi # ^d
229 andl %ecx, %edi # &b 229 andl %ecx, %edi # &b
230 xorl %ebp, %edi # (((c ^ d) & b) ^ d) 230 xorl %ebp, %edi # (((c ^ d) & b) ^ d)
231 leal 0x5A827999(%rax,%r14),%eax # e += RCONST + W[n] 231 leal 0x5A827999(%rax,%r14), %eax # e += RCONST + W[n]
232 addl %edi, %eax # e += (((c ^ d) & b) ^ d) 232 addl %edi, %eax # e += (((c ^ d) & b) ^ d)
233 movl %ebx, %esi # 233 movl %ebx, %esi #
234 roll $5, %esi # rotl32(a,5) 234 roll $5, %esi # rotl32(a,5)
@@ -240,7 +240,7 @@ sha1_process_block64:
240 xorl %edx, %edi # ^d 240 xorl %edx, %edi # ^d
241 andl %ebx, %edi # &b 241 andl %ebx, %edi # &b
242 xorl %edx, %edi # (((c ^ d) & b) ^ d) 242 xorl %edx, %edi # (((c ^ d) & b) ^ d)
243 leal 0x5A827999(%rbp,%r15),%ebp # e += RCONST + W[n] 243 leal 0x5A827999(%rbp,%r15), %ebp # e += RCONST + W[n]
244 addl %edi, %ebp # e += (((c ^ d) & b) ^ d) 244 addl %edi, %ebp # e += (((c ^ d) & b) ^ d)
245 movl %eax, %esi # 245 movl %eax, %esi #
246 roll $5, %esi # rotl32(a,5) 246 roll $5, %esi # rotl32(a,5)
diff --git a/libbb/hash_md5_sha_x86-64.S.sh b/libbb/hash_md5_sha_x86-64.S.sh
index 5f09546b2..c5f0ef504 100755
--- a/libbb/hash_md5_sha_x86-64.S.sh
+++ b/libbb/hash_md5_sha_x86-64.S.sh
@@ -74,22 +74,24 @@ test "$1" -ge 8 && echo "%r${1}d"
74RD1A() { 74RD1A() {
75local a=$1;local b=$2;local c=$3;local d=$4;local e=$5 75local a=$1;local b=$2;local c=$3;local d=$4;local e=$5
76local n=$(($6)) 76local n=$(($6))
77echo "# $n" 77local n0=$(((n+0) & 15))
78test $n = 0 && echo " 78echo "
79# $n
80";test $n0 = 0 && echo "
79 # W[0], already in %esi 81 # W[0], already in %esi
80";test $n != 0 && test $n -lt 8 && echo " 82";test $n0 != 0 && test $n0 -lt 8 && echo "
81 movl `W32 $n`, %esi # W[n] 83 movl `W32 $n0`, %esi # W[n]
82";test $n -ge 8 && echo " 84";test $n0 -ge 8 && echo "
83 # W[n], in %r$n 85 # W[n], in %r$n0
84";echo " 86";echo "
85 movl %e$c, %edi # c 87 movl %e$c, %edi # c
86 xorl %e$d, %edi # ^d 88 xorl %e$d, %edi # ^d
87 andl %e$b, %edi # &b 89 andl %e$b, %edi # &b
88 xorl %e$d, %edi # (((c ^ d) & b) ^ d) 90 xorl %e$d, %edi # (((c ^ d) & b) ^ d)
89";test $n -lt 8 && echo " 91";test $n0 -lt 8 && echo "
90 leal $RCONST(%r$e,%rsi),%e$e # e += RCONST + W[n] 92 leal $RCONST(%r$e,%rsi), %e$e # e += RCONST + W[n]
91";test $n -ge 8 && echo " 93";test $n0 -ge 8 && echo "
92 leal $RCONST(%r$e,%r$n),%e$e # e += RCONST + W[n] 94 leal $RCONST(%r$e,%r$n0), %e$e # e += RCONST + W[n]
93";echo " 95";echo "
94 addl %edi, %e$e # e += (((c ^ d) & b) ^ d) 96 addl %edi, %e$e # e += (((c ^ d) & b) ^ d)
95 movl %e$a, %esi # 97 movl %e$a, %esi #
@@ -119,7 +121,7 @@ echo "
119 xorl `W32 $n8`, `W32 $n0` # ^W[(n+8) & 15] 121 xorl `W32 $n8`, `W32 $n0` # ^W[(n+8) & 15]
120 xorl `W32 $n2`, `W32 $n0` # ^W[(n+2) & 15] 122 xorl `W32 $n2`, `W32 $n0` # ^W[(n+2) & 15]
121 roll `W32 $n0` # 123 roll `W32 $n0` #
122"; echo " 124";echo "
123 movl %e$c, %edi # c 125 movl %e$c, %edi # c
124 xorl %e$d, %edi # ^d 126 xorl %e$d, %edi # ^d
125 andl %e$b, %edi # &b 127 andl %e$b, %edi # &b
@@ -165,7 +167,7 @@ echo "
165 xorl `W32 $n8`, `W32 $n0` # ^W[(n+8) & 15] 167 xorl `W32 $n8`, `W32 $n0` # ^W[(n+8) & 15]
166 xorl `W32 $n2`, `W32 $n0` # ^W[(n+2) & 15] 168 xorl `W32 $n2`, `W32 $n0` # ^W[(n+2) & 15]
167 roll `W32 $n0` # 169 roll `W32 $n0` #
168"; echo " 170";echo "
169 movl %e$c, %edi # c 171 movl %e$c, %edi # c
170 xorl %e$d, %edi # ^d 172 xorl %e$d, %edi # ^d
171 xorl %e$b, %edi # ^b 173 xorl %e$b, %edi # ^b
@@ -216,7 +218,7 @@ echo "
216 xorl `W32 $n8`, `W32 $n0` # ^W[(n+8) & 15] 218 xorl `W32 $n8`, `W32 $n0` # ^W[(n+8) & 15]
217 xorl `W32 $n2`, `W32 $n0` # ^W[(n+2) & 15] 219 xorl `W32 $n2`, `W32 $n0` # ^W[(n+2) & 15]
218 roll `W32 $n0` # 220 roll `W32 $n0` #
219"; echo " 221";echo "
220 addl %edi, %e$e # += ((b | c) & d) | (b & c) 222 addl %edi, %e$e # += ((b | c) & d) | (b & c)
221";test $n0 -lt 8 && echo " 223";test $n0 -lt 8 && echo "
222 leal $RCONST(%r$e,%rsi), %e$e # e += RCONST + W[n & 15] 224 leal $RCONST(%r$e,%rsi), %e$e # e += RCONST + W[n & 15]
@@ -246,6 +248,11 @@ RD2 ax bx cx dx bp 60; RD2 bp ax bx cx dx 61; RD2 dx bp ax bx cx 62; RD2 cx dx b
246RD2 ax bx cx dx bp 65; RD2 bp ax bx cx dx 66; RD2 dx bp ax bx cx 67; RD2 cx dx bp ax bx 68; RD2 bx cx dx bp ax 69 248RD2 ax bx cx dx bp 65; RD2 bp ax bx cx dx 66; RD2 dx bp ax bx cx 67; RD2 cx dx bp ax bx 68; RD2 bx cx dx bp ax 69
247RD2 ax bx cx dx bp 70; RD2 bp ax bx cx dx 71; RD2 dx bp ax bx cx 72; RD2 cx dx bp ax bx 73; RD2 bx cx dx bp ax 74 249RD2 ax bx cx dx bp 70; RD2 bp ax bx cx dx 71; RD2 dx bp ax bx cx 72; RD2 cx dx bp ax bx 73; RD2 bx cx dx bp ax 74
248RD2 ax bx cx dx bp 75; RD2 bp ax bx cx dx 76; RD2 dx bp ax bx cx 77; RD2 cx dx bp ax bx 78; RD2 bx cx dx bp ax 79 250RD2 ax bx cx dx bp 75; RD2 bp ax bx cx dx 76; RD2 dx bp ax bx cx 77; RD2 cx dx bp ax bx 78; RD2 bx cx dx bp ax 79
251# Note: new W[n&15] values generated in last 3 iterations
252# (W[13,14,15]) are unused after each of these iterations.
253# Since we use r8..r15 for W[8..15], this does not matter.
254# If we switch to e.g. using r8..r15 for W[0..7], then saving of W[13,14,15]
255# (the "movl %esi, `W32 $n0`" insn) is a dead store and can be removed.
249} | grep -v '^$' 256} | grep -v '^$'
250 257
251echo " 258echo "