]> git.proxmox.com Git - mirror_zfs-debian.git/blob - module/icp/asm-x86_64/sha1/sha1-x86_64.S
New upstream version 0.7.2
[mirror_zfs-debian.git] / module / icp / asm-x86_64 / sha1 / sha1-x86_64.S
1 /*
2 * !/usr/bin/env perl
3 *
4 * ====================================================================
5 * Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
6 * project. The module is, however, dual licensed under OpenSSL and
7 * CRYPTOGAMS licenses depending on where you obtain it. For further
8 * details see http://www.openssl.org/~appro/cryptogams/.
9 * ====================================================================
10 *
11 * sha1_block procedure for x86_64.
12 *
13 * It was brought to my attention that on EM64T compiler-generated code
14 * was far behind 32-bit assembler implementation. This is unlike on
15 * Opteron where compiler-generated code was only 15% behind 32-bit
16 * assembler, which originally made it hard to motivate the effort.
17 * There was suggestion to mechanically translate 32-bit code, but I
18 * dismissed it, reasoning that x86_64 offers enough register bank
19 * capacity to fully utilize SHA-1 parallelism. Therefore this fresh
20 * implementation:-) However! While 64-bit code does performs better
21 * on Opteron, I failed to beat 32-bit assembler on EM64T core. Well,
22 * x86_64 does offer larger *addressable* bank, but out-of-order core
23 * reaches for even more registers through dynamic aliasing, and EM64T
24 * core must have managed to run-time optimize even 32-bit code just as
25 * good as 64-bit one. Performance improvement is summarized in the
26 * following table:
27 *
28 * gcc 3.4 32-bit asm cycles/byte
29 * Opteron +45% +20% 6.8
30 * Xeon P4 +65% +0% 9.9
31 * Core2 +60% +10% 7.0
32 *
33 *
34 * OpenSolaris OS modifications
35 *
36 * Sun elects to use this software under the BSD license.
37 *
38 * This source originates from OpenSSL file sha1-x86_64.pl at
39 * ftp://ftp.openssl.org/snapshot/openssl-0.9.8-stable-SNAP-20080131.tar.gz
40 * (presumably for future OpenSSL release 0.9.8h), with these changes:
41 *
42 * 1. Added perl "use strict" and declared variables.
43 *
44 * 2. Added OpenSolaris ENTRY_NP/SET_SIZE macros from
45 * /usr/include/sys/asm_linkage.h, .ident keywords, and lint(1B) guards.
46 *
47 * 3. Removed x86_64-xlate.pl script (not needed for as(1) or gas(1)
48 * assemblers).
49 *
50 */
51
52 /*
53 * This file was generated by a perl script (sha1-x86_64.pl). The comments from
54 * the original file have been pasted above.
55 */
56
57 #if defined(lint) || defined(__lint)
58 #include <sys/stdint.h>
59 #include <sys/sha1.h>
60
61
62 /* ARGSUSED */
63 void
64 sha1_block_data_order(SHA1_CTX *ctx, const void *inpp, size_t blocks)
65 {
66 }
67
68 #else
69 #define _ASM
70 #include <sys/asm_linkage.h>
71 ENTRY_NP(sha1_block_data_order)
72 push %rbx
73 push %rbp
74 push %r12
75 mov %rsp,%rax
76 mov %rdi,%r8 # reassigned argument
77 sub $72,%rsp
78 mov %rsi,%r9 # reassigned argument
79 and $-64,%rsp
80 mov %rdx,%r10 # reassigned argument
81 mov %rax,64(%rsp)
82
83 mov 0(%r8),%edx
84 mov 4(%r8),%esi
85 mov 8(%r8),%edi
86 mov 12(%r8),%ebp
87 mov 16(%r8),%r11d
88 .align 4
89 .Lloop:
90 mov 0(%r9),%eax
91 bswap %eax
92 mov %eax,0(%rsp)
93 lea 0x5a827999(%eax,%r11d),%r12d
94 mov %edi,%ebx
95 mov 4(%r9),%eax
96 mov %edx,%r11d
97 xor %ebp,%ebx
98 bswap %eax
99 rol $5,%r11d
100 and %esi,%ebx
101 mov %eax,4(%rsp)
102 add %r11d,%r12d
103 xor %ebp,%ebx
104 rol $30,%esi
105 add %ebx,%r12d
106 lea 0x5a827999(%eax,%ebp),%r11d
107 mov %esi,%ebx
108 mov 8(%r9),%eax
109 mov %r12d,%ebp
110 xor %edi,%ebx
111 bswap %eax
112 rol $5,%ebp
113 and %edx,%ebx
114 mov %eax,8(%rsp)
115 add %ebp,%r11d
116 xor %edi,%ebx
117 rol $30,%edx
118 add %ebx,%r11d
119 lea 0x5a827999(%eax,%edi),%ebp
120 mov %edx,%ebx
121 mov 12(%r9),%eax
122 mov %r11d,%edi
123 xor %esi,%ebx
124 bswap %eax
125 rol $5,%edi
126 and %r12d,%ebx
127 mov %eax,12(%rsp)
128 add %edi,%ebp
129 xor %esi,%ebx
130 rol $30,%r12d
131 add %ebx,%ebp
132 lea 0x5a827999(%eax,%esi),%edi
133 mov %r12d,%ebx
134 mov 16(%r9),%eax
135 mov %ebp,%esi
136 xor %edx,%ebx
137 bswap %eax
138 rol $5,%esi
139 and %r11d,%ebx
140 mov %eax,16(%rsp)
141 add %esi,%edi
142 xor %edx,%ebx
143 rol $30,%r11d
144 add %ebx,%edi
145 lea 0x5a827999(%eax,%edx),%esi
146 mov %r11d,%ebx
147 mov 20(%r9),%eax
148 mov %edi,%edx
149 xor %r12d,%ebx
150 bswap %eax
151 rol $5,%edx
152 and %ebp,%ebx
153 mov %eax,20(%rsp)
154 add %edx,%esi
155 xor %r12d,%ebx
156 rol $30,%ebp
157 add %ebx,%esi
158 lea 0x5a827999(%eax,%r12d),%edx
159 mov %ebp,%ebx
160 mov 24(%r9),%eax
161 mov %esi,%r12d
162 xor %r11d,%ebx
163 bswap %eax
164 rol $5,%r12d
165 and %edi,%ebx
166 mov %eax,24(%rsp)
167 add %r12d,%edx
168 xor %r11d,%ebx
169 rol $30,%edi
170 add %ebx,%edx
171 lea 0x5a827999(%eax,%r11d),%r12d
172 mov %edi,%ebx
173 mov 28(%r9),%eax
174 mov %edx,%r11d
175 xor %ebp,%ebx
176 bswap %eax
177 rol $5,%r11d
178 and %esi,%ebx
179 mov %eax,28(%rsp)
180 add %r11d,%r12d
181 xor %ebp,%ebx
182 rol $30,%esi
183 add %ebx,%r12d
184 lea 0x5a827999(%eax,%ebp),%r11d
185 mov %esi,%ebx
186 mov 32(%r9),%eax
187 mov %r12d,%ebp
188 xor %edi,%ebx
189 bswap %eax
190 rol $5,%ebp
191 and %edx,%ebx
192 mov %eax,32(%rsp)
193 add %ebp,%r11d
194 xor %edi,%ebx
195 rol $30,%edx
196 add %ebx,%r11d
197 lea 0x5a827999(%eax,%edi),%ebp
198 mov %edx,%ebx
199 mov 36(%r9),%eax
200 mov %r11d,%edi
201 xor %esi,%ebx
202 bswap %eax
203 rol $5,%edi
204 and %r12d,%ebx
205 mov %eax,36(%rsp)
206 add %edi,%ebp
207 xor %esi,%ebx
208 rol $30,%r12d
209 add %ebx,%ebp
210 lea 0x5a827999(%eax,%esi),%edi
211 mov %r12d,%ebx
212 mov 40(%r9),%eax
213 mov %ebp,%esi
214 xor %edx,%ebx
215 bswap %eax
216 rol $5,%esi
217 and %r11d,%ebx
218 mov %eax,40(%rsp)
219 add %esi,%edi
220 xor %edx,%ebx
221 rol $30,%r11d
222 add %ebx,%edi
223 lea 0x5a827999(%eax,%edx),%esi
224 mov %r11d,%ebx
225 mov 44(%r9),%eax
226 mov %edi,%edx
227 xor %r12d,%ebx
228 bswap %eax
229 rol $5,%edx
230 and %ebp,%ebx
231 mov %eax,44(%rsp)
232 add %edx,%esi
233 xor %r12d,%ebx
234 rol $30,%ebp
235 add %ebx,%esi
236 lea 0x5a827999(%eax,%r12d),%edx
237 mov %ebp,%ebx
238 mov 48(%r9),%eax
239 mov %esi,%r12d
240 xor %r11d,%ebx
241 bswap %eax
242 rol $5,%r12d
243 and %edi,%ebx
244 mov %eax,48(%rsp)
245 add %r12d,%edx
246 xor %r11d,%ebx
247 rol $30,%edi
248 add %ebx,%edx
249 lea 0x5a827999(%eax,%r11d),%r12d
250 mov %edi,%ebx
251 mov 52(%r9),%eax
252 mov %edx,%r11d
253 xor %ebp,%ebx
254 bswap %eax
255 rol $5,%r11d
256 and %esi,%ebx
257 mov %eax,52(%rsp)
258 add %r11d,%r12d
259 xor %ebp,%ebx
260 rol $30,%esi
261 add %ebx,%r12d
262 lea 0x5a827999(%eax,%ebp),%r11d
263 mov %esi,%ebx
264 mov 56(%r9),%eax
265 mov %r12d,%ebp
266 xor %edi,%ebx
267 bswap %eax
268 rol $5,%ebp
269 and %edx,%ebx
270 mov %eax,56(%rsp)
271 add %ebp,%r11d
272 xor %edi,%ebx
273 rol $30,%edx
274 add %ebx,%r11d
275 lea 0x5a827999(%eax,%edi),%ebp
276 mov %edx,%ebx
277 mov 60(%r9),%eax
278 mov %r11d,%edi
279 xor %esi,%ebx
280 bswap %eax
281 rol $5,%edi
282 and %r12d,%ebx
283 mov %eax,60(%rsp)
284 add %edi,%ebp
285 xor %esi,%ebx
286 rol $30,%r12d
287 add %ebx,%ebp
288 lea 0x5a827999(%eax,%esi),%edi
289 mov 0(%rsp),%eax
290 mov %r12d,%ebx
291 mov %ebp,%esi
292 xor 8(%rsp),%eax
293 xor %edx,%ebx
294 rol $5,%esi
295 xor 32(%rsp),%eax
296 and %r11d,%ebx
297 add %esi,%edi
298 xor 52(%rsp),%eax
299 xor %edx,%ebx
300 rol $30,%r11d
301 add %ebx,%edi
302 rol $1,%eax
303 mov %eax,0(%rsp)
304 lea 0x5a827999(%eax,%edx),%esi
305 mov 4(%rsp),%eax
306 mov %r11d,%ebx
307 mov %edi,%edx
308 xor 12(%rsp),%eax
309 xor %r12d,%ebx
310 rol $5,%edx
311 xor 36(%rsp),%eax
312 and %ebp,%ebx
313 add %edx,%esi
314 xor 56(%rsp),%eax
315 xor %r12d,%ebx
316 rol $30,%ebp
317 add %ebx,%esi
318 rol $1,%eax
319 mov %eax,4(%rsp)
320 lea 0x5a827999(%eax,%r12d),%edx
321 mov 8(%rsp),%eax
322 mov %ebp,%ebx
323 mov %esi,%r12d
324 xor 16(%rsp),%eax
325 xor %r11d,%ebx
326 rol $5,%r12d
327 xor 40(%rsp),%eax
328 and %edi,%ebx
329 add %r12d,%edx
330 xor 60(%rsp),%eax
331 xor %r11d,%ebx
332 rol $30,%edi
333 add %ebx,%edx
334 rol $1,%eax
335 mov %eax,8(%rsp)
336 lea 0x5a827999(%eax,%r11d),%r12d
337 mov 12(%rsp),%eax
338 mov %edi,%ebx
339 mov %edx,%r11d
340 xor 20(%rsp),%eax
341 xor %ebp,%ebx
342 rol $5,%r11d
343 xor 44(%rsp),%eax
344 and %esi,%ebx
345 add %r11d,%r12d
346 xor 0(%rsp),%eax
347 xor %ebp,%ebx
348 rol $30,%esi
349 add %ebx,%r12d
350 rol $1,%eax
351 mov %eax,12(%rsp)
352 lea 0x5a827999(%eax,%ebp),%r11d
353 mov 16(%rsp),%eax
354 mov %esi,%ebx
355 mov %r12d,%ebp
356 xor 24(%rsp),%eax
357 xor %edi,%ebx
358 rol $5,%ebp
359 xor 48(%rsp),%eax
360 and %edx,%ebx
361 add %ebp,%r11d
362 xor 4(%rsp),%eax
363 xor %edi,%ebx
364 rol $30,%edx
365 add %ebx,%r11d
366 rol $1,%eax
367 mov %eax,16(%rsp)
368 lea 0x6ed9eba1(%eax,%edi),%ebp
369 mov 20(%rsp),%eax
370 mov %edx,%ebx
371 mov %r11d,%edi
372 xor 28(%rsp),%eax
373 xor %r12d,%ebx
374 rol $5,%edi
375 xor 52(%rsp),%eax
376 xor %esi,%ebx
377 add %edi,%ebp
378 xor 8(%rsp),%eax
379 rol $30,%r12d
380 add %ebx,%ebp
381 rol $1,%eax
382 mov %eax,20(%rsp)
383 lea 0x6ed9eba1(%eax,%esi),%edi
384 mov 24(%rsp),%eax
385 mov %r12d,%ebx
386 mov %ebp,%esi
387 xor 32(%rsp),%eax
388 xor %r11d,%ebx
389 rol $5,%esi
390 xor 56(%rsp),%eax
391 xor %edx,%ebx
392 add %esi,%edi
393 xor 12(%rsp),%eax
394 rol $30,%r11d
395 add %ebx,%edi
396 rol $1,%eax
397 mov %eax,24(%rsp)
398 lea 0x6ed9eba1(%eax,%edx),%esi
399 mov 28(%rsp),%eax
400 mov %r11d,%ebx
401 mov %edi,%edx
402 xor 36(%rsp),%eax
403 xor %ebp,%ebx
404 rol $5,%edx
405 xor 60(%rsp),%eax
406 xor %r12d,%ebx
407 add %edx,%esi
408 xor 16(%rsp),%eax
409 rol $30,%ebp
410 add %ebx,%esi
411 rol $1,%eax
412 mov %eax,28(%rsp)
413 lea 0x6ed9eba1(%eax,%r12d),%edx
414 mov 32(%rsp),%eax
415 mov %ebp,%ebx
416 mov %esi,%r12d
417 xor 40(%rsp),%eax
418 xor %edi,%ebx
419 rol $5,%r12d
420 xor 0(%rsp),%eax
421 xor %r11d,%ebx
422 add %r12d,%edx
423 xor 20(%rsp),%eax
424 rol $30,%edi
425 add %ebx,%edx
426 rol $1,%eax
427 mov %eax,32(%rsp)
428 lea 0x6ed9eba1(%eax,%r11d),%r12d
429 mov 36(%rsp),%eax
430 mov %edi,%ebx
431 mov %edx,%r11d
432 xor 44(%rsp),%eax
433 xor %esi,%ebx
434 rol $5,%r11d
435 xor 4(%rsp),%eax
436 xor %ebp,%ebx
437 add %r11d,%r12d
438 xor 24(%rsp),%eax
439 rol $30,%esi
440 add %ebx,%r12d
441 rol $1,%eax
442 mov %eax,36(%rsp)
443 lea 0x6ed9eba1(%eax,%ebp),%r11d
444 mov 40(%rsp),%eax
445 mov %esi,%ebx
446 mov %r12d,%ebp
447 xor 48(%rsp),%eax
448 xor %edx,%ebx
449 rol $5,%ebp
450 xor 8(%rsp),%eax
451 xor %edi,%ebx
452 add %ebp,%r11d
453 xor 28(%rsp),%eax
454 rol $30,%edx
455 add %ebx,%r11d
456 rol $1,%eax
457 mov %eax,40(%rsp)
458 lea 0x6ed9eba1(%eax,%edi),%ebp
459 mov 44(%rsp),%eax
460 mov %edx,%ebx
461 mov %r11d,%edi
462 xor 52(%rsp),%eax
463 xor %r12d,%ebx
464 rol $5,%edi
465 xor 12(%rsp),%eax
466 xor %esi,%ebx
467 add %edi,%ebp
468 xor 32(%rsp),%eax
469 rol $30,%r12d
470 add %ebx,%ebp
471 rol $1,%eax
472 mov %eax,44(%rsp)
473 lea 0x6ed9eba1(%eax,%esi),%edi
474 mov 48(%rsp),%eax
475 mov %r12d,%ebx
476 mov %ebp,%esi
477 xor 56(%rsp),%eax
478 xor %r11d,%ebx
479 rol $5,%esi
480 xor 16(%rsp),%eax
481 xor %edx,%ebx
482 add %esi,%edi
483 xor 36(%rsp),%eax
484 rol $30,%r11d
485 add %ebx,%edi
486 rol $1,%eax
487 mov %eax,48(%rsp)
488 lea 0x6ed9eba1(%eax,%edx),%esi
489 mov 52(%rsp),%eax
490 mov %r11d,%ebx
491 mov %edi,%edx
492 xor 60(%rsp),%eax
493 xor %ebp,%ebx
494 rol $5,%edx
495 xor 20(%rsp),%eax
496 xor %r12d,%ebx
497 add %edx,%esi
498 xor 40(%rsp),%eax
499 rol $30,%ebp
500 add %ebx,%esi
501 rol $1,%eax
502 mov %eax,52(%rsp)
503 lea 0x6ed9eba1(%eax,%r12d),%edx
504 mov 56(%rsp),%eax
505 mov %ebp,%ebx
506 mov %esi,%r12d
507 xor 0(%rsp),%eax
508 xor %edi,%ebx
509 rol $5,%r12d
510 xor 24(%rsp),%eax
511 xor %r11d,%ebx
512 add %r12d,%edx
513 xor 44(%rsp),%eax
514 rol $30,%edi
515 add %ebx,%edx
516 rol $1,%eax
517 mov %eax,56(%rsp)
518 lea 0x6ed9eba1(%eax,%r11d),%r12d
519 mov 60(%rsp),%eax
520 mov %edi,%ebx
521 mov %edx,%r11d
522 xor 4(%rsp),%eax
523 xor %esi,%ebx
524 rol $5,%r11d
525 xor 28(%rsp),%eax
526 xor %ebp,%ebx
527 add %r11d,%r12d
528 xor 48(%rsp),%eax
529 rol $30,%esi
530 add %ebx,%r12d
531 rol $1,%eax
532 mov %eax,60(%rsp)
533 lea 0x6ed9eba1(%eax,%ebp),%r11d
534 mov 0(%rsp),%eax
535 mov %esi,%ebx
536 mov %r12d,%ebp
537 xor 8(%rsp),%eax
538 xor %edx,%ebx
539 rol $5,%ebp
540 xor 32(%rsp),%eax
541 xor %edi,%ebx
542 add %ebp,%r11d
543 xor 52(%rsp),%eax
544 rol $30,%edx
545 add %ebx,%r11d
546 rol $1,%eax
547 mov %eax,0(%rsp)
548 lea 0x6ed9eba1(%eax,%edi),%ebp
549 mov 4(%rsp),%eax
550 mov %edx,%ebx
551 mov %r11d,%edi
552 xor 12(%rsp),%eax
553 xor %r12d,%ebx
554 rol $5,%edi
555 xor 36(%rsp),%eax
556 xor %esi,%ebx
557 add %edi,%ebp
558 xor 56(%rsp),%eax
559 rol $30,%r12d
560 add %ebx,%ebp
561 rol $1,%eax
562 mov %eax,4(%rsp)
563 lea 0x6ed9eba1(%eax,%esi),%edi
564 mov 8(%rsp),%eax
565 mov %r12d,%ebx
566 mov %ebp,%esi
567 xor 16(%rsp),%eax
568 xor %r11d,%ebx
569 rol $5,%esi
570 xor 40(%rsp),%eax
571 xor %edx,%ebx
572 add %esi,%edi
573 xor 60(%rsp),%eax
574 rol $30,%r11d
575 add %ebx,%edi
576 rol $1,%eax
577 mov %eax,8(%rsp)
578 lea 0x6ed9eba1(%eax,%edx),%esi
579 mov 12(%rsp),%eax
580 mov %r11d,%ebx
581 mov %edi,%edx
582 xor 20(%rsp),%eax
583 xor %ebp,%ebx
584 rol $5,%edx
585 xor 44(%rsp),%eax
586 xor %r12d,%ebx
587 add %edx,%esi
588 xor 0(%rsp),%eax
589 rol $30,%ebp
590 add %ebx,%esi
591 rol $1,%eax
592 mov %eax,12(%rsp)
593 lea 0x6ed9eba1(%eax,%r12d),%edx
594 mov 16(%rsp),%eax
595 mov %ebp,%ebx
596 mov %esi,%r12d
597 xor 24(%rsp),%eax
598 xor %edi,%ebx
599 rol $5,%r12d
600 xor 48(%rsp),%eax
601 xor %r11d,%ebx
602 add %r12d,%edx
603 xor 4(%rsp),%eax
604 rol $30,%edi
605 add %ebx,%edx
606 rol $1,%eax
607 mov %eax,16(%rsp)
608 lea 0x6ed9eba1(%eax,%r11d),%r12d
609 mov 20(%rsp),%eax
610 mov %edi,%ebx
611 mov %edx,%r11d
612 xor 28(%rsp),%eax
613 xor %esi,%ebx
614 rol $5,%r11d
615 xor 52(%rsp),%eax
616 xor %ebp,%ebx
617 add %r11d,%r12d
618 xor 8(%rsp),%eax
619 rol $30,%esi
620 add %ebx,%r12d
621 rol $1,%eax
622 mov %eax,20(%rsp)
623 lea 0x6ed9eba1(%eax,%ebp),%r11d
624 mov 24(%rsp),%eax
625 mov %esi,%ebx
626 mov %r12d,%ebp
627 xor 32(%rsp),%eax
628 xor %edx,%ebx
629 rol $5,%ebp
630 xor 56(%rsp),%eax
631 xor %edi,%ebx
632 add %ebp,%r11d
633 xor 12(%rsp),%eax
634 rol $30,%edx
635 add %ebx,%r11d
636 rol $1,%eax
637 mov %eax,24(%rsp)
638 lea 0x6ed9eba1(%eax,%edi),%ebp
639 mov 28(%rsp),%eax
640 mov %edx,%ebx
641 mov %r11d,%edi
642 xor 36(%rsp),%eax
643 xor %r12d,%ebx
644 rol $5,%edi
645 xor 60(%rsp),%eax
646 xor %esi,%ebx
647 add %edi,%ebp
648 xor 16(%rsp),%eax
649 rol $30,%r12d
650 add %ebx,%ebp
651 rol $1,%eax
652 mov %eax,28(%rsp)
653 lea 0x6ed9eba1(%eax,%esi),%edi
654 mov 32(%rsp),%eax
655 mov %r12d,%ebx
656 mov %ebp,%esi
657 xor 40(%rsp),%eax
658 xor %r11d,%ebx
659 rol $5,%esi
660 xor 0(%rsp),%eax
661 xor %edx,%ebx
662 add %esi,%edi
663 xor 20(%rsp),%eax
664 rol $30,%r11d
665 add %ebx,%edi
666 rol $1,%eax
667 mov %eax,32(%rsp)
668 lea -0x70e44324(%eax,%edx),%esi
669 mov 36(%rsp),%eax
670 mov %ebp,%ebx
671 mov %ebp,%ecx
672 xor 44(%rsp),%eax
673 mov %edi,%edx
674 and %r11d,%ebx
675 xor 4(%rsp),%eax
676 or %r11d,%ecx
677 rol $5,%edx
678 xor 24(%rsp),%eax
679 and %r12d,%ecx
680 add %edx,%esi
681 rol $1,%eax
682 or %ecx,%ebx
683 rol $30,%ebp
684 mov %eax,36(%rsp)
685 add %ebx,%esi
686 lea -0x70e44324(%eax,%r12d),%edx
687 mov 40(%rsp),%eax
688 mov %edi,%ebx
689 mov %edi,%ecx
690 xor 48(%rsp),%eax
691 mov %esi,%r12d
692 and %ebp,%ebx
693 xor 8(%rsp),%eax
694 or %ebp,%ecx
695 rol $5,%r12d
696 xor 28(%rsp),%eax
697 and %r11d,%ecx
698 add %r12d,%edx
699 rol $1,%eax
700 or %ecx,%ebx
701 rol $30,%edi
702 mov %eax,40(%rsp)
703 add %ebx,%edx
704 lea -0x70e44324(%eax,%r11d),%r12d
705 mov 44(%rsp),%eax
706 mov %esi,%ebx
707 mov %esi,%ecx
708 xor 52(%rsp),%eax
709 mov %edx,%r11d
710 and %edi,%ebx
711 xor 12(%rsp),%eax
712 or %edi,%ecx
713 rol $5,%r11d
714 xor 32(%rsp),%eax
715 and %ebp,%ecx
716 add %r11d,%r12d
717 rol $1,%eax
718 or %ecx,%ebx
719 rol $30,%esi
720 mov %eax,44(%rsp)
721 add %ebx,%r12d
722 lea -0x70e44324(%eax,%ebp),%r11d
723 mov 48(%rsp),%eax
724 mov %edx,%ebx
725 mov %edx,%ecx
726 xor 56(%rsp),%eax
727 mov %r12d,%ebp
728 and %esi,%ebx
729 xor 16(%rsp),%eax
730 or %esi,%ecx
731 rol $5,%ebp
732 xor 36(%rsp),%eax
733 and %edi,%ecx
734 add %ebp,%r11d
735 rol $1,%eax
736 or %ecx,%ebx
737 rol $30,%edx
738 mov %eax,48(%rsp)
739 add %ebx,%r11d
740 lea -0x70e44324(%eax,%edi),%ebp
741 mov 52(%rsp),%eax
742 mov %r12d,%ebx
743 mov %r12d,%ecx
744 xor 60(%rsp),%eax
745 mov %r11d,%edi
746 and %edx,%ebx
747 xor 20(%rsp),%eax
748 or %edx,%ecx
749 rol $5,%edi
750 xor 40(%rsp),%eax
751 and %esi,%ecx
752 add %edi,%ebp
753 rol $1,%eax
754 or %ecx,%ebx
755 rol $30,%r12d
756 mov %eax,52(%rsp)
757 add %ebx,%ebp
758 lea -0x70e44324(%eax,%esi),%edi
759 mov 56(%rsp),%eax
760 mov %r11d,%ebx
761 mov %r11d,%ecx
762 xor 0(%rsp),%eax
763 mov %ebp,%esi
764 and %r12d,%ebx
765 xor 24(%rsp),%eax
766 or %r12d,%ecx
767 rol $5,%esi
768 xor 44(%rsp),%eax
769 and %edx,%ecx
770 add %esi,%edi
771 rol $1,%eax
772 or %ecx,%ebx
773 rol $30,%r11d
774 mov %eax,56(%rsp)
775 add %ebx,%edi
776 lea -0x70e44324(%eax,%edx),%esi
777 mov 60(%rsp),%eax
778 mov %ebp,%ebx
779 mov %ebp,%ecx
780 xor 4(%rsp),%eax
781 mov %edi,%edx
782 and %r11d,%ebx
783 xor 28(%rsp),%eax
784 or %r11d,%ecx
785 rol $5,%edx
786 xor 48(%rsp),%eax
787 and %r12d,%ecx
788 add %edx,%esi
789 rol $1,%eax
790 or %ecx,%ebx
791 rol $30,%ebp
792 mov %eax,60(%rsp)
793 add %ebx,%esi
794 lea -0x70e44324(%eax,%r12d),%edx
795 mov 0(%rsp),%eax
796 mov %edi,%ebx
797 mov %edi,%ecx
798 xor 8(%rsp),%eax
799 mov %esi,%r12d
800 and %ebp,%ebx
801 xor 32(%rsp),%eax
802 or %ebp,%ecx
803 rol $5,%r12d
804 xor 52(%rsp),%eax
805 and %r11d,%ecx
806 add %r12d,%edx
807 rol $1,%eax
808 or %ecx,%ebx
809 rol $30,%edi
810 mov %eax,0(%rsp)
811 add %ebx,%edx
812 lea -0x70e44324(%eax,%r11d),%r12d
813 mov 4(%rsp),%eax
814 mov %esi,%ebx
815 mov %esi,%ecx
816 xor 12(%rsp),%eax
817 mov %edx,%r11d
818 and %edi,%ebx
819 xor 36(%rsp),%eax
820 or %edi,%ecx
821 rol $5,%r11d
822 xor 56(%rsp),%eax
823 and %ebp,%ecx
824 add %r11d,%r12d
825 rol $1,%eax
826 or %ecx,%ebx
827 rol $30,%esi
828 mov %eax,4(%rsp)
829 add %ebx,%r12d
830 lea -0x70e44324(%eax,%ebp),%r11d
831 mov 8(%rsp),%eax
832 mov %edx,%ebx
833 mov %edx,%ecx
834 xor 16(%rsp),%eax
835 mov %r12d,%ebp
836 and %esi,%ebx
837 xor 40(%rsp),%eax
838 or %esi,%ecx
839 rol $5,%ebp
840 xor 60(%rsp),%eax
841 and %edi,%ecx
842 add %ebp,%r11d
843 rol $1,%eax
844 or %ecx,%ebx
845 rol $30,%edx
846 mov %eax,8(%rsp)
847 add %ebx,%r11d
848 lea -0x70e44324(%eax,%edi),%ebp
849 mov 12(%rsp),%eax
850 mov %r12d,%ebx
851 mov %r12d,%ecx
852 xor 20(%rsp),%eax
853 mov %r11d,%edi
854 and %edx,%ebx
855 xor 44(%rsp),%eax
856 or %edx,%ecx
857 rol $5,%edi
858 xor 0(%rsp),%eax
859 and %esi,%ecx
860 add %edi,%ebp
861 rol $1,%eax
862 or %ecx,%ebx
863 rol $30,%r12d
864 mov %eax,12(%rsp)
865 add %ebx,%ebp
866 lea -0x70e44324(%eax,%esi),%edi
867 mov 16(%rsp),%eax
868 mov %r11d,%ebx
869 mov %r11d,%ecx
870 xor 24(%rsp),%eax
871 mov %ebp,%esi
872 and %r12d,%ebx
873 xor 48(%rsp),%eax
874 or %r12d,%ecx
875 rol $5,%esi
876 xor 4(%rsp),%eax
877 and %edx,%ecx
878 add %esi,%edi
879 rol $1,%eax
880 or %ecx,%ebx
881 rol $30,%r11d
882 mov %eax,16(%rsp)
883 add %ebx,%edi
884 lea -0x70e44324(%eax,%edx),%esi
885 mov 20(%rsp),%eax
886 mov %ebp,%ebx
887 mov %ebp,%ecx
888 xor 28(%rsp),%eax
889 mov %edi,%edx
890 and %r11d,%ebx
891 xor 52(%rsp),%eax
892 or %r11d,%ecx
893 rol $5,%edx
894 xor 8(%rsp),%eax
895 and %r12d,%ecx
896 add %edx,%esi
897 rol $1,%eax
898 or %ecx,%ebx
899 rol $30,%ebp
900 mov %eax,20(%rsp)
901 add %ebx,%esi
902 lea -0x70e44324(%eax,%r12d),%edx
903 mov 24(%rsp),%eax
904 mov %edi,%ebx
905 mov %edi,%ecx
906 xor 32(%rsp),%eax
907 mov %esi,%r12d
908 and %ebp,%ebx
909 xor 56(%rsp),%eax
910 or %ebp,%ecx
911 rol $5,%r12d
912 xor 12(%rsp),%eax
913 and %r11d,%ecx
914 add %r12d,%edx
915 rol $1,%eax
916 or %ecx,%ebx
917 rol $30,%edi
918 mov %eax,24(%rsp)
919 add %ebx,%edx
920 lea -0x70e44324(%eax,%r11d),%r12d
921 mov 28(%rsp),%eax
922 mov %esi,%ebx
923 mov %esi,%ecx
924 xor 36(%rsp),%eax
925 mov %edx,%r11d
926 and %edi,%ebx
927 xor 60(%rsp),%eax
928 or %edi,%ecx
929 rol $5,%r11d
930 xor 16(%rsp),%eax
931 and %ebp,%ecx
932 add %r11d,%r12d
933 rol $1,%eax
934 or %ecx,%ebx
935 rol $30,%esi
936 mov %eax,28(%rsp)
937 add %ebx,%r12d
938 lea -0x70e44324(%eax,%ebp),%r11d
939 mov 32(%rsp),%eax
940 mov %edx,%ebx
941 mov %edx,%ecx
942 xor 40(%rsp),%eax
943 mov %r12d,%ebp
944 and %esi,%ebx
945 xor 0(%rsp),%eax
946 or %esi,%ecx
947 rol $5,%ebp
948 xor 20(%rsp),%eax
949 and %edi,%ecx
950 add %ebp,%r11d
951 rol $1,%eax
952 or %ecx,%ebx
953 rol $30,%edx
954 mov %eax,32(%rsp)
955 add %ebx,%r11d
956 lea -0x70e44324(%eax,%edi),%ebp
957 mov 36(%rsp),%eax
958 mov %r12d,%ebx
959 mov %r12d,%ecx
960 xor 44(%rsp),%eax
961 mov %r11d,%edi
962 and %edx,%ebx
963 xor 4(%rsp),%eax
964 or %edx,%ecx
965 rol $5,%edi
966 xor 24(%rsp),%eax
967 and %esi,%ecx
968 add %edi,%ebp
969 rol $1,%eax
970 or %ecx,%ebx
971 rol $30,%r12d
972 mov %eax,36(%rsp)
973 add %ebx,%ebp
974 lea -0x70e44324(%eax,%esi),%edi
975 mov 40(%rsp),%eax
976 mov %r11d,%ebx
977 mov %r11d,%ecx
978 xor 48(%rsp),%eax
979 mov %ebp,%esi
980 and %r12d,%ebx
981 xor 8(%rsp),%eax
982 or %r12d,%ecx
983 rol $5,%esi
984 xor 28(%rsp),%eax
985 and %edx,%ecx
986 add %esi,%edi
987 rol $1,%eax
988 or %ecx,%ebx
989 rol $30,%r11d
990 mov %eax,40(%rsp)
991 add %ebx,%edi
992 lea -0x70e44324(%eax,%edx),%esi
993 mov 44(%rsp),%eax
994 mov %ebp,%ebx
995 mov %ebp,%ecx
996 xor 52(%rsp),%eax
997 mov %edi,%edx
998 and %r11d,%ebx
999 xor 12(%rsp),%eax
1000 or %r11d,%ecx
1001 rol $5,%edx
1002 xor 32(%rsp),%eax
1003 and %r12d,%ecx
1004 add %edx,%esi
1005 rol $1,%eax
1006 or %ecx,%ebx
1007 rol $30,%ebp
1008 mov %eax,44(%rsp)
1009 add %ebx,%esi
1010 lea -0x70e44324(%eax,%r12d),%edx
1011 mov 48(%rsp),%eax
1012 mov %edi,%ebx
1013 mov %edi,%ecx
1014 xor 56(%rsp),%eax
1015 mov %esi,%r12d
1016 and %ebp,%ebx
1017 xor 16(%rsp),%eax
1018 or %ebp,%ecx
1019 rol $5,%r12d
1020 xor 36(%rsp),%eax
1021 and %r11d,%ecx
1022 add %r12d,%edx
1023 rol $1,%eax
1024 or %ecx,%ebx
1025 rol $30,%edi
1026 mov %eax,48(%rsp)
1027 add %ebx,%edx
1028 lea -0x359d3e2a(%eax,%r11d),%r12d
1029 mov 52(%rsp),%eax
1030 mov %edi,%ebx
1031 mov %edx,%r11d
1032 xor 60(%rsp),%eax
1033 xor %esi,%ebx
1034 rol $5,%r11d
1035 xor 20(%rsp),%eax
1036 xor %ebp,%ebx
1037 add %r11d,%r12d
1038 xor 40(%rsp),%eax
1039 rol $30,%esi
1040 add %ebx,%r12d
1041 rol $1,%eax
1042 mov %eax,52(%rsp)
1043 lea -0x359d3e2a(%eax,%ebp),%r11d
1044 mov 56(%rsp),%eax
1045 mov %esi,%ebx
1046 mov %r12d,%ebp
1047 xor 0(%rsp),%eax
1048 xor %edx,%ebx
1049 rol $5,%ebp
1050 xor 24(%rsp),%eax
1051 xor %edi,%ebx
1052 add %ebp,%r11d
1053 xor 44(%rsp),%eax
1054 rol $30,%edx
1055 add %ebx,%r11d
1056 rol $1,%eax
1057 mov %eax,56(%rsp)
1058 lea -0x359d3e2a(%eax,%edi),%ebp
1059 mov 60(%rsp),%eax
1060 mov %edx,%ebx
1061 mov %r11d,%edi
1062 xor 4(%rsp),%eax
1063 xor %r12d,%ebx
1064 rol $5,%edi
1065 xor 28(%rsp),%eax
1066 xor %esi,%ebx
1067 add %edi,%ebp
1068 xor 48(%rsp),%eax
1069 rol $30,%r12d
1070 add %ebx,%ebp
1071 rol $1,%eax
1072 mov %eax,60(%rsp)
1073 lea -0x359d3e2a(%eax,%esi),%edi
1074 mov 0(%rsp),%eax
1075 mov %r12d,%ebx
1076 mov %ebp,%esi
1077 xor 8(%rsp),%eax
1078 xor %r11d,%ebx
1079 rol $5,%esi
1080 xor 32(%rsp),%eax
1081 xor %edx,%ebx
1082 add %esi,%edi
1083 xor 52(%rsp),%eax
1084 rol $30,%r11d
1085 add %ebx,%edi
1086 rol $1,%eax
1087 mov %eax,0(%rsp)
1088 lea -0x359d3e2a(%eax,%edx),%esi
1089 mov 4(%rsp),%eax
1090 mov %r11d,%ebx
1091 mov %edi,%edx
1092 xor 12(%rsp),%eax
1093 xor %ebp,%ebx
1094 rol $5,%edx
1095 xor 36(%rsp),%eax
1096 xor %r12d,%ebx
1097 add %edx,%esi
1098 xor 56(%rsp),%eax
1099 rol $30,%ebp
1100 add %ebx,%esi
1101 rol $1,%eax
1102 mov %eax,4(%rsp)
1103 lea -0x359d3e2a(%eax,%r12d),%edx
1104 mov 8(%rsp),%eax
1105 mov %ebp,%ebx
1106 mov %esi,%r12d
1107 xor 16(%rsp),%eax
1108 xor %edi,%ebx
1109 rol $5,%r12d
1110 xor 40(%rsp),%eax
1111 xor %r11d,%ebx
1112 add %r12d,%edx
1113 xor 60(%rsp),%eax
1114 rol $30,%edi
1115 add %ebx,%edx
1116 rol $1,%eax
1117 mov %eax,8(%rsp)
1118 lea -0x359d3e2a(%eax,%r11d),%r12d
1119 mov 12(%rsp),%eax
1120 mov %edi,%ebx
1121 mov %edx,%r11d
1122 xor 20(%rsp),%eax
1123 xor %esi,%ebx
1124 rol $5,%r11d
1125 xor 44(%rsp),%eax
1126 xor %ebp,%ebx
1127 add %r11d,%r12d
1128 xor 0(%rsp),%eax
1129 rol $30,%esi
1130 add %ebx,%r12d
1131 rol $1,%eax
1132 mov %eax,12(%rsp)
1133 lea -0x359d3e2a(%eax,%ebp),%r11d
1134 mov 16(%rsp),%eax
1135 mov %esi,%ebx
1136 mov %r12d,%ebp
1137 xor 24(%rsp),%eax
1138 xor %edx,%ebx
1139 rol $5,%ebp
1140 xor 48(%rsp),%eax
1141 xor %edi,%ebx
1142 add %ebp,%r11d
1143 xor 4(%rsp),%eax
1144 rol $30,%edx
1145 add %ebx,%r11d
1146 rol $1,%eax
1147 mov %eax,16(%rsp)
1148 lea -0x359d3e2a(%eax,%edi),%ebp
1149 mov 20(%rsp),%eax
1150 mov %edx,%ebx
1151 mov %r11d,%edi
1152 xor 28(%rsp),%eax
1153 xor %r12d,%ebx
1154 rol $5,%edi
1155 xor 52(%rsp),%eax
1156 xor %esi,%ebx
1157 add %edi,%ebp
1158 xor 8(%rsp),%eax
1159 rol $30,%r12d
1160 add %ebx,%ebp
1161 rol $1,%eax
1162 mov %eax,20(%rsp)
1163 lea -0x359d3e2a(%eax,%esi),%edi
1164 mov 24(%rsp),%eax
1165 mov %r12d,%ebx
1166 mov %ebp,%esi
1167 xor 32(%rsp),%eax
1168 xor %r11d,%ebx
1169 rol $5,%esi
1170 xor 56(%rsp),%eax
1171 xor %edx,%ebx
1172 add %esi,%edi
1173 xor 12(%rsp),%eax
1174 rol $30,%r11d
1175 add %ebx,%edi
1176 rol $1,%eax
1177 mov %eax,24(%rsp)
1178 lea -0x359d3e2a(%eax,%edx),%esi
1179 mov 28(%rsp),%eax
1180 mov %r11d,%ebx
1181 mov %edi,%edx
1182 xor 36(%rsp),%eax
1183 xor %ebp,%ebx
1184 rol $5,%edx
1185 xor 60(%rsp),%eax
1186 xor %r12d,%ebx
1187 add %edx,%esi
1188 xor 16(%rsp),%eax
1189 rol $30,%ebp
1190 add %ebx,%esi
1191 rol $1,%eax
1192 mov %eax,28(%rsp)
1193 lea -0x359d3e2a(%eax,%r12d),%edx
1194 mov 32(%rsp),%eax
1195 mov %ebp,%ebx
1196 mov %esi,%r12d
1197 xor 40(%rsp),%eax
1198 xor %edi,%ebx
1199 rol $5,%r12d
1200 xor 0(%rsp),%eax
1201 xor %r11d,%ebx
1202 add %r12d,%edx
1203 xor 20(%rsp),%eax
1204 rol $30,%edi
1205 add %ebx,%edx
1206 rol $1,%eax
1207 mov %eax,32(%rsp)
1208 lea -0x359d3e2a(%eax,%r11d),%r12d
1209 mov 36(%rsp),%eax
1210 mov %edi,%ebx
1211 mov %edx,%r11d
1212 xor 44(%rsp),%eax
1213 xor %esi,%ebx
1214 rol $5,%r11d
1215 xor 4(%rsp),%eax
1216 xor %ebp,%ebx
1217 add %r11d,%r12d
1218 xor 24(%rsp),%eax
1219 rol $30,%esi
1220 add %ebx,%r12d
1221 rol $1,%eax
1222 mov %eax,36(%rsp)
1223 lea -0x359d3e2a(%eax,%ebp),%r11d
1224 mov 40(%rsp),%eax
1225 mov %esi,%ebx
1226 mov %r12d,%ebp
1227 xor 48(%rsp),%eax
1228 xor %edx,%ebx
1229 rol $5,%ebp
1230 xor 8(%rsp),%eax
1231 xor %edi,%ebx
1232 add %ebp,%r11d
1233 xor 28(%rsp),%eax
1234 rol $30,%edx
1235 add %ebx,%r11d
1236 rol $1,%eax
1237 mov %eax,40(%rsp)
1238 lea -0x359d3e2a(%eax,%edi),%ebp
1239 mov 44(%rsp),%eax
1240 mov %edx,%ebx
1241 mov %r11d,%edi
1242 xor 52(%rsp),%eax
1243 xor %r12d,%ebx
1244 rol $5,%edi
1245 xor 12(%rsp),%eax
1246 xor %esi,%ebx
1247 add %edi,%ebp
1248 xor 32(%rsp),%eax
1249 rol $30,%r12d
1250 add %ebx,%ebp
1251 rol $1,%eax
1252 mov %eax,44(%rsp)
1253 lea -0x359d3e2a(%eax,%esi),%edi
1254 mov 48(%rsp),%eax
1255 mov %r12d,%ebx
1256 mov %ebp,%esi
1257 xor 56(%rsp),%eax
1258 xor %r11d,%ebx
1259 rol $5,%esi
1260 xor 16(%rsp),%eax
1261 xor %edx,%ebx
1262 add %esi,%edi
1263 xor 36(%rsp),%eax
1264 rol $30,%r11d
1265 add %ebx,%edi
1266 rol $1,%eax
1267 mov %eax,48(%rsp)
1268 lea -0x359d3e2a(%eax,%edx),%esi
1269 mov 52(%rsp),%eax
1270 mov %r11d,%ebx
1271 mov %edi,%edx
1272 xor 60(%rsp),%eax
1273 xor %ebp,%ebx
1274 rol $5,%edx
1275 xor 20(%rsp),%eax
1276 xor %r12d,%ebx
1277 add %edx,%esi
1278 xor 40(%rsp),%eax
1279 rol $30,%ebp
1280 add %ebx,%esi
1281 rol $1,%eax
1282 lea -0x359d3e2a(%eax,%r12d),%edx
1283 mov 56(%rsp),%eax
1284 mov %ebp,%ebx
1285 mov %esi,%r12d
1286 xor 0(%rsp),%eax
1287 xor %edi,%ebx
1288 rol $5,%r12d
1289 xor 24(%rsp),%eax
1290 xor %r11d,%ebx
1291 add %r12d,%edx
1292 xor 44(%rsp),%eax
1293 rol $30,%edi
1294 add %ebx,%edx
1295 rol $1,%eax
1296 lea -0x359d3e2a(%eax,%r11d),%r12d
1297 mov 60(%rsp),%eax
1298 mov %edi,%ebx
1299 mov %edx,%r11d
1300 xor 4(%rsp),%eax
1301 xor %esi,%ebx
1302 rol $5,%r11d
1303 xor 28(%rsp),%eax
1304 xor %ebp,%ebx
1305 add %r11d,%r12d
1306 xor 48(%rsp),%eax
1307 rol $30,%esi
1308 add %ebx,%r12d
1309 rol $1,%eax
1310 lea -0x359d3e2a(%eax,%ebp),%r11d
1311 mov %esi,%ebx
1312 mov %r12d,%ebp
1313 xor %edx,%ebx
1314 rol $5,%ebp
1315 xor %edi,%ebx
1316 add %ebp,%r11d
1317 rol $30,%edx
1318 add %ebx,%r11d
1319 // Update and save state information in SHA-1 context
1320 add 0(%r8),%r11d
1321 add 4(%r8),%r12d
1322 add 8(%r8),%edx
1323 add 12(%r8),%esi
1324 add 16(%r8),%edi
1325 mov %r11d,0(%r8)
1326 mov %r12d,4(%r8)
1327 mov %edx,8(%r8)
1328 mov %esi,12(%r8)
1329 mov %edi,16(%r8)
1330
1331 xchg %r11d,%edx # mov %r11d,%edx
1332 xchg %r12d,%esi # mov %r12d,%esi
1333 xchg %r11d,%edi # mov %edx,%edi
1334 xchg %r12d,%ebp # mov %esi,%ebp
1335 # mov %edi,%r11d
1336 lea 64(%r9),%r9
1337 sub $1,%r10
1338 jnz .Lloop
1339 mov 64(%rsp),%rsp
1340 pop %r12
1341 pop %rbp
1342 pop %rbx
1343 ret
1344 SET_SIZE(sha1_block_data_order)
1345
1346 .data
1347 .asciz "SHA1 block transform for x86_64, CRYPTOGAMS by <appro@openssl.org>"
1348
1349 #endif /* lint || __lint */
1350
1351 #ifdef __ELF__
1352 .section .note.GNU-stack,"",%progbits
1353 #endif