1 /* $FreeBSD: src/lib/libmd/i386/sha.S,v 1.3 2007/05/14 05:00:37 cperciva Exp $ */
2 /* $DragonFly: src/lib/libmd/i386/sha.S,v 1.2 2008/09/11 20:25:34 swildner Exp $
3 /* -*- Fundamental -*- Emacs' assembler mode hoses this file */
5 /* Run the C pre-processor over this file with one of the following defined
6 * ELF - elf object files,
7 * OUT - a.out object files,
8 * BSDI - BSDI style a.out object files
9 * SOL - Solaris style elf
12 #define TYPE(a,b) .type a,b
13 #define SIZE(a,b) .size a,b
15 #if defined(OUT) || defined(BSDI)
16 #define sha1_block_x86 _sha1_block_x86
34 #if defined(ELF) || defined(SOL)
40 You need to define one of
41 ELF - elf systems - linux-elf, NetBSD and DG-UX
42 OUT - a.out systems - linux-a.out and FreeBSD
43 SOL - solaris systems, which are elf with strange comment lines
44 BSDI - a.out with a very primative version of as.
47 /* Let the Assembler begin :-) */
48 /* Don't even think of reading this code */
49 /* It was automatically generated by sha1-586.pl */
50 /* Which is a perl program used to generate the x86 assember for */
51 /* any of elf, a.out, BSDI,Win32, or Solaris */
52 /* eric <eay@cryptsoft.com> */
60 TYPE(sha1_block_x86,@function)
77 /* First we need to setup the X array */
80 /* First, load the words onto the stack in network byte order */
82 .byte 200 /* bswapl %eax */
86 .byte 200 /* bswapl %eax */
90 .byte 200 /* bswapl %eax */
94 .byte 200 /* bswapl %eax */
98 .byte 200 /* bswapl %eax */
102 .byte 200 /* bswapl %eax */
106 .byte 200 /* bswapl %eax */
110 .byte 200 /* bswapl %eax */
114 .byte 200 /* bswapl %eax */
118 .byte 200 /* bswapl %eax */
122 .byte 200 /* bswapl %eax */
126 .byte 200 /* bswapl %eax */
130 .byte 200 /* bswapl %eax */
134 .byte 200 /* bswapl %eax */
138 .byte 200 /* bswapl %eax */
142 .byte 200 /* bswapl %eax */
144 /* We now have the X array on the stack */
145 /* starting at sp-4 */
148 /* Start processing */
158 .byte 203 /* rorl $1 %ebx */
161 .byte 203 /* rorl $1 %ebx */
163 leal 1518500249(%ebp,%edi,1),%ebp
173 .byte 200 /* rorl $1 %eax */
176 .byte 200 /* rorl $1 %eax */
177 leal 1518500249(%ebp,%edx,1),%ebp
187 .byte 206 /* rorl $1 %esi */
190 .byte 206 /* rorl $1 %esi */
192 leal 1518500249(%ebp,%ecx,1),%ebp
202 .byte 207 /* rorl $1 %edi */
205 .byte 207 /* rorl $1 %edi */
206 leal 1518500249(%ebp,%ebx,1),%ebp
216 .byte 202 /* rorl $1 %edx */
219 .byte 202 /* rorl $1 %edx */
221 leal 1518500249(%ebp,%eax,1),%ebp
231 .byte 201 /* rorl $1 %ecx */
234 .byte 201 /* rorl $1 %ecx */
235 leal 1518500249(%ebp,%esi,1),%ebp
245 .byte 203 /* rorl $1 %ebx */
248 .byte 203 /* rorl $1 %ebx */
250 leal 1518500249(%ebp,%edi,1),%ebp
260 .byte 200 /* rorl $1 %eax */
263 .byte 200 /* rorl $1 %eax */
264 leal 1518500249(%ebp,%edx,1),%ebp
274 .byte 206 /* rorl $1 %esi */
277 .byte 206 /* rorl $1 %esi */
279 leal 1518500249(%ebp,%ecx,1),%ebp
289 .byte 207 /* rorl $1 %edi */
292 .byte 207 /* rorl $1 %edi */
293 leal 1518500249(%ebp,%ebx,1),%ebp
303 .byte 202 /* rorl $1 %edx */
306 .byte 202 /* rorl $1 %edx */
308 leal 1518500249(%ebp,%eax,1),%ebp
318 .byte 201 /* rorl $1 %ecx */
321 .byte 201 /* rorl $1 %ecx */
322 leal 1518500249(%ebp,%esi,1),%ebp
332 .byte 203 /* rorl $1 %ebx */
335 .byte 203 /* rorl $1 %ebx */
337 leal 1518500249(%ebp,%edi,1),%ebp
347 .byte 200 /* rorl $1 %eax */
350 .byte 200 /* rorl $1 %eax */
351 leal 1518500249(%ebp,%edx,1),%ebp
361 .byte 206 /* rorl $1 %esi */
364 .byte 206 /* rorl $1 %esi */
366 leal 1518500249(%ebp,%ecx,1),%ebp
376 .byte 207 /* rorl $1 %edi */
379 .byte 207 /* rorl $1 %edi */
380 leal 1518500249(%ebp,%ebx,1),%ebp
393 .byte 195 /* roll $1 %ebx */
397 leal 1518500249(%ebx,%eax,1),%ebx
403 .byte 202 /* rorl $1 %edx */
412 .byte 202 /* rorl $1 %edx */
415 .byte 192 /* roll $1 %eax */
420 leal 1518500249(%eax,%esi,1),%eax
425 .byte 201 /* rorl $1 %ecx */
428 .byte 201 /* rorl $1 %ecx */
440 .byte 198 /* roll $1 %esi */
444 leal 1518500249(%esi,%edi,1),%esi
450 .byte 203 /* rorl $1 %ebx */
459 .byte 203 /* rorl $1 %ebx */
462 .byte 199 /* roll $1 %edi */
467 leal 1518500249(%edi,%edx,1),%edi
472 .byte 200 /* rorl $1 %eax */
475 .byte 200 /* rorl $1 %eax */
487 .byte 194 /* roll $1 %edx */
491 leal 1859775393(%edx,%ecx,1),%edx
495 .byte 206 /* rorl $1 %esi */
498 .byte 206 /* rorl $1 %esi */
510 .byte 193 /* roll $1 %ecx */
514 leal 1859775393(%ecx,%ebx,1),%ecx
518 .byte 207 /* rorl $1 %edi */
521 .byte 207 /* rorl $1 %edi */
533 .byte 195 /* roll $1 %ebx */
537 leal 1859775393(%ebx,%eax,1),%ebx
541 .byte 202 /* rorl $1 %edx */
544 .byte 202 /* rorl $1 %edx */
556 .byte 192 /* roll $1 %eax */
560 leal 1859775393(%eax,%esi,1),%eax
564 .byte 201 /* rorl $1 %ecx */
567 .byte 201 /* rorl $1 %ecx */
579 .byte 198 /* roll $1 %esi */
583 leal 1859775393(%esi,%edi,1),%esi
587 .byte 203 /* rorl $1 %ebx */
590 .byte 203 /* rorl $1 %ebx */
602 .byte 199 /* roll $1 %edi */
606 leal 1859775393(%edi,%edx,1),%edi
610 .byte 200 /* rorl $1 %eax */
613 .byte 200 /* rorl $1 %eax */
625 .byte 194 /* roll $1 %edx */
629 leal 1859775393(%edx,%ecx,1),%edx
633 .byte 206 /* rorl $1 %esi */
636 .byte 206 /* rorl $1 %esi */
648 .byte 193 /* roll $1 %ecx */
652 leal 1859775393(%ecx,%ebx,1),%ecx
656 .byte 207 /* rorl $1 %edi */
659 .byte 207 /* rorl $1 %edi */
671 .byte 195 /* roll $1 %ebx */
675 leal 1859775393(%ebx,%eax,1),%ebx
679 .byte 202 /* rorl $1 %edx */
682 .byte 202 /* rorl $1 %edx */
694 .byte 192 /* roll $1 %eax */
698 leal 1859775393(%eax,%esi,1),%eax
702 .byte 201 /* rorl $1 %ecx */
705 .byte 201 /* rorl $1 %ecx */
717 .byte 198 /* roll $1 %esi */
721 leal 1859775393(%esi,%edi,1),%esi
725 .byte 203 /* rorl $1 %ebx */
728 .byte 203 /* rorl $1 %ebx */
740 .byte 199 /* roll $1 %edi */
744 leal 1859775393(%edi,%edx,1),%edi
748 .byte 200 /* rorl $1 %eax */
751 .byte 200 /* rorl $1 %eax */
763 .byte 194 /* roll $1 %edx */
767 leal 1859775393(%edx,%ecx,1),%edx
771 .byte 206 /* rorl $1 %esi */
774 .byte 206 /* rorl $1 %esi */
786 .byte 193 /* roll $1 %ecx */
790 leal 1859775393(%ecx,%ebx,1),%ecx
794 .byte 207 /* rorl $1 %edi */
797 .byte 207 /* rorl $1 %edi */
809 .byte 195 /* roll $1 %ebx */
813 leal 1859775393(%ebx,%eax,1),%ebx
817 .byte 202 /* rorl $1 %edx */
820 .byte 202 /* rorl $1 %edx */
832 .byte 192 /* roll $1 %eax */
836 leal 1859775393(%eax,%esi,1),%eax
840 .byte 201 /* rorl $1 %ecx */
843 .byte 201 /* rorl $1 %ecx */
855 .byte 198 /* roll $1 %esi */
859 leal 1859775393(%esi,%edi,1),%esi
863 .byte 203 /* rorl $1 %ebx */
866 .byte 203 /* rorl $1 %ebx */
878 .byte 199 /* roll $1 %edi */
882 leal 1859775393(%edi,%edx,1),%edi
886 .byte 200 /* rorl $1 %eax */
889 .byte 200 /* rorl $1 %eax */
901 .byte 194 /* roll $1 %edx */
905 leal 1859775393(%edx,%ecx,1),%edx
909 .byte 206 /* rorl $1 %esi */
912 .byte 206 /* rorl $1 %esi */
924 .byte 193 /* roll $1 %ecx */
928 leal 1859775393(%ecx,%ebx,1),%ecx
932 .byte 207 /* rorl $1 %edi */
935 .byte 207 /* rorl $1 %edi */
947 .byte 195 /* roll $1 %ebx */
951 leal 2400959708(%ebx,%eax,1),%ebx
954 .byte 202 /* rorl $1 %edx */
968 .byte 202 /* rorl $1 %edx */
971 .byte 192 /* roll $1 %eax */
975 leal 2400959708(%eax,%esi,1),%eax
983 .byte 201 /* rorl $1 %ecx */
986 .byte 201 /* rorl $1 %ecx */
999 .byte 198 /* roll $1 %esi */
1003 leal 2400959708(%esi,%edi,1),%esi
1006 .byte 203 /* rorl $1 %ebx */
1020 .byte 203 /* rorl $1 %ebx */
1023 .byte 199 /* roll $1 %edi */
1027 leal 2400959708(%edi,%edx,1),%edi
1035 .byte 200 /* rorl $1 %eax */
1038 .byte 200 /* rorl $1 %eax */
1051 .byte 194 /* roll $1 %edx */
1055 leal 2400959708(%edx,%ecx,1),%edx
1058 .byte 206 /* rorl $1 %esi */
1072 .byte 206 /* rorl $1 %esi */
1075 .byte 193 /* roll $1 %ecx */
1079 leal 2400959708(%ecx,%ebx,1),%ecx
1087 .byte 207 /* rorl $1 %edi */
1090 .byte 207 /* rorl $1 %edi */
1103 .byte 195 /* roll $1 %ebx */
1107 leal 2400959708(%ebx,%eax,1),%ebx
1110 .byte 202 /* rorl $1 %edx */
1124 .byte 202 /* rorl $1 %edx */
1127 .byte 192 /* roll $1 %eax */
1131 leal 2400959708(%eax,%esi,1),%eax
1139 .byte 201 /* rorl $1 %ecx */
1142 .byte 201 /* rorl $1 %ecx */
1155 .byte 198 /* roll $1 %esi */
1159 leal 2400959708(%esi,%edi,1),%esi
1162 .byte 203 /* rorl $1 %ebx */
1176 .byte 203 /* rorl $1 %ebx */
1179 .byte 199 /* roll $1 %edi */
1183 leal 2400959708(%edi,%edx,1),%edi
1191 .byte 200 /* rorl $1 %eax */
1194 .byte 200 /* rorl $1 %eax */
1207 .byte 194 /* roll $1 %edx */
1211 leal 2400959708(%edx,%ecx,1),%edx
1214 .byte 206 /* rorl $1 %esi */
1228 .byte 206 /* rorl $1 %esi */
1231 .byte 193 /* roll $1 %ecx */
1235 leal 2400959708(%ecx,%ebx,1),%ecx
1243 .byte 207 /* rorl $1 %edi */
1246 .byte 207 /* rorl $1 %edi */
1259 .byte 195 /* roll $1 %ebx */
1263 leal 2400959708(%ebx,%eax,1),%ebx
1266 .byte 202 /* rorl $1 %edx */
1280 .byte 202 /* rorl $1 %edx */
1283 .byte 192 /* roll $1 %eax */
1287 leal 2400959708(%eax,%esi,1),%eax
1295 .byte 201 /* rorl $1 %ecx */
1298 .byte 201 /* rorl $1 %ecx */
1311 .byte 198 /* roll $1 %esi */
1315 leal 2400959708(%esi,%edi,1),%esi
1318 .byte 203 /* rorl $1 %ebx */
1332 .byte 203 /* rorl $1 %ebx */
1335 .byte 199 /* roll $1 %edi */
1339 leal 2400959708(%edi,%edx,1),%edi
1347 .byte 200 /* rorl $1 %eax */
1350 .byte 200 /* rorl $1 %eax */
1363 .byte 194 /* roll $1 %edx */
1367 leal 2400959708(%edx,%ecx,1),%edx
1370 .byte 206 /* rorl $1 %esi */
1384 .byte 206 /* rorl $1 %esi */
1387 .byte 193 /* roll $1 %ecx */
1391 leal 2400959708(%ecx,%ebx,1),%ecx
1399 .byte 207 /* rorl $1 %edi */
1402 .byte 207 /* rorl $1 %edi */
1415 .byte 195 /* roll $1 %ebx */
1419 leal 2400959708(%ebx,%eax,1),%ebx
1422 .byte 202 /* rorl $1 %edx */
1436 .byte 202 /* rorl $1 %edx */
1439 .byte 192 /* roll $1 %eax */
1443 leal 2400959708(%eax,%esi,1),%eax
1451 .byte 201 /* rorl $1 %ecx */
1454 .byte 201 /* rorl $1 %ecx */
1467 .byte 198 /* roll $1 %esi */
1471 leal 3395469782(%esi,%edi,1),%esi
1475 .byte 203 /* rorl $1 %ebx */
1478 .byte 203 /* rorl $1 %ebx */
1490 .byte 199 /* roll $1 %edi */
1494 leal 3395469782(%edi,%edx,1),%edi
1498 .byte 200 /* rorl $1 %eax */
1501 .byte 200 /* rorl $1 %eax */
1513 .byte 194 /* roll $1 %edx */
1517 leal 3395469782(%edx,%ecx,1),%edx
1521 .byte 206 /* rorl $1 %esi */
1524 .byte 206 /* rorl $1 %esi */
1536 .byte 193 /* roll $1 %ecx */
1540 leal 3395469782(%ecx,%ebx,1),%ecx
1544 .byte 207 /* rorl $1 %edi */
1547 .byte 207 /* rorl $1 %edi */
1559 .byte 195 /* roll $1 %ebx */
1563 leal 3395469782(%ebx,%eax,1),%ebx
1567 .byte 202 /* rorl $1 %edx */
1570 .byte 202 /* rorl $1 %edx */
1582 .byte 192 /* roll $1 %eax */
1586 leal 3395469782(%eax,%esi,1),%eax
1590 .byte 201 /* rorl $1 %ecx */
1593 .byte 201 /* rorl $1 %ecx */
1605 .byte 198 /* roll $1 %esi */
1609 leal 3395469782(%esi,%edi,1),%esi
1613 .byte 203 /* rorl $1 %ebx */
1616 .byte 203 /* rorl $1 %ebx */
1628 .byte 199 /* roll $1 %edi */
1632 leal 3395469782(%edi,%edx,1),%edi
1636 .byte 200 /* rorl $1 %eax */
1639 .byte 200 /* rorl $1 %eax */
1651 .byte 194 /* roll $1 %edx */
1655 leal 3395469782(%edx,%ecx,1),%edx
1659 .byte 206 /* rorl $1 %esi */
1662 .byte 206 /* rorl $1 %esi */
1674 .byte 193 /* roll $1 %ecx */
1678 leal 3395469782(%ecx,%ebx,1),%ecx
1682 .byte 207 /* rorl $1 %edi */
1685 .byte 207 /* rorl $1 %edi */
1697 .byte 195 /* roll $1 %ebx */
1701 leal 3395469782(%ebx,%eax,1),%ebx
1705 .byte 202 /* rorl $1 %edx */
1708 .byte 202 /* rorl $1 %edx */
1720 .byte 192 /* roll $1 %eax */
1724 leal 3395469782(%eax,%esi,1),%eax
1728 .byte 201 /* rorl $1 %ecx */
1731 .byte 201 /* rorl $1 %ecx */
1743 .byte 198 /* roll $1 %esi */
1747 leal 3395469782(%esi,%edi,1),%esi
1751 .byte 203 /* rorl $1 %ebx */
1754 .byte 203 /* rorl $1 %ebx */
1766 .byte 199 /* roll $1 %edi */
1770 leal 3395469782(%edi,%edx,1),%edi
1774 .byte 200 /* rorl $1 %eax */
1777 .byte 200 /* rorl $1 %eax */
1789 .byte 194 /* roll $1 %edx */
1793 leal 3395469782(%edx,%ecx,1),%edx
1797 .byte 206 /* rorl $1 %esi */
1800 .byte 206 /* rorl $1 %esi */
1812 .byte 193 /* roll $1 %ecx */
1816 leal 3395469782(%ecx,%ebx,1),%ecx
1820 .byte 207 /* rorl $1 %edi */
1823 .byte 207 /* rorl $1 %edi */
1835 .byte 195 /* roll $1 %ebx */
1839 leal 3395469782(%ebx,%eax,1),%ebx
1843 .byte 202 /* rorl $1 %edx */
1846 .byte 202 /* rorl $1 %edx */
1858 .byte 192 /* roll $1 %eax */
1862 leal 3395469782(%eax,%esi,1),%eax
1866 .byte 201 /* rorl $1 %ecx */
1869 .byte 201 /* rorl $1 %ecx */
1881 .byte 198 /* roll $1 %esi */
1885 leal 3395469782(%esi,%edi,1),%esi
1889 .byte 203 /* rorl $1 %ebx */
1892 .byte 203 /* rorl $1 %ebx */
1904 .byte 199 /* roll $1 %edi */
1908 leal 3395469782(%edi,%edx,1),%edi
1914 .byte 200 /* rorl $1 %eax */
1917 .byte 200 /* rorl $1 %eax */
1918 /* End processing */
1950 .sha1_block_x86_end:
1951 SIZE(sha1_block_x86,.sha1_block_x86_end-sha1_block_x86)