diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2022-01-03 17:02:48 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2022-01-03 17:02:48 +0100 |
commit | 7abb2bb96e0cd584f44dd8b219ad16d0232a6485 (patch) | |
tree | ad82336b536d4e74cbf0929029525c13ca33d51d | |
parent | 4387077f8e69c26ce5ce4a8119c225cc1c461f88 (diff) | |
download | busybox-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.S | 32 | ||||
-rwxr-xr-x | libbb/hash_md5_sha_x86-64.S.sh | 33 |
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" | |||
74 | RD1A() { | 74 | RD1A() { |
75 | local a=$1;local b=$2;local c=$3;local d=$4;local e=$5 | 75 | local a=$1;local b=$2;local c=$3;local d=$4;local e=$5 |
76 | local n=$(($6)) | 76 | local n=$(($6)) |
77 | echo "# $n" | 77 | local n0=$(((n+0) & 15)) |
78 | test $n = 0 && echo " | 78 | echo " |
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 | |||
246 | RD2 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 | 248 | RD2 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 |
247 | RD2 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 | 249 | RD2 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 |
248 | RD2 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 | 250 | RD2 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 | ||
251 | echo " | 258 | echo " |