]>
Commit | Line | Data |
---|---|---|
1 | ; crc_lcc.asm, optimized CRC calculation function for Zip and UnZip, not | |
2 | ; copyrighted by Paul Kienitz and Christian Spieler. Last revised 25 Mar 98. | |
3 | ; | |
4 | ; The code in this file has been copied verbatim from crc_i386.{asm|S}; | |
5 | ; only the assembler syntax and metacommands have been adapted to | |
6 | ; the habits of the free LCC-Win32 C compiler package. | |
7 | ; This version of the code uses the "optimized for i686" variant of | |
8 | ; crc_i386.{asm|S}. | |
9 | ; | |
10 | ; For more information (and a revision log), look into the original | |
11 | ; source files. | |
12 | ; | |
13 | .text | |
14 | .file "crc32.c" | |
15 | .text | |
16 | .type _crc32,function | |
17 | _crc32: | |
18 | pushl %ebp | |
19 | movl %esp,%ebp | |
20 | pushl %ecx | |
21 | pushl %ebx | |
22 | pushl %esi | |
23 | pushl %edi | |
24 | .line 34 | |
25 | .line 37 | |
26 | movl 12(%ebp),%esi | |
27 | subl %eax,%eax | |
28 | testl %esi,%esi | |
29 | jz _$3 | |
30 | .line 39 | |
31 | call _get_crc_table | |
32 | movl %eax,%edi | |
33 | .line 41 | |
34 | movl 8(%ebp),%eax | |
35 | movl 16(%ebp),%ecx | |
36 | notl %eax | |
37 | testl %ecx,%ecx | |
38 | jz _$4 | |
39 | _$5: | |
40 | testl $3,%esi | |
41 | jz _$6 | |
42 | xorb (%esi),%al | |
43 | incl %esi | |
44 | movzbl %al,%ebx | |
45 | shrl $8,%eax | |
46 | xorl (%edi,%ebx,4),%eax | |
47 | decl %ecx | |
48 | jnz _$5 | |
49 | _$6: | |
50 | movl %ecx,%edx | |
51 | andl $7,%edx | |
52 | shrl $3,%ecx | |
53 | jz _$8 | |
54 | _$7: | |
55 | xorl (%esi),%eax | |
56 | addl $4,%esi | |
57 | movzbl %al,%ebx | |
58 | shrl $8,%eax | |
59 | xorl (%edi,%ebx,4),%eax | |
60 | movzbl %al,%ebx | |
61 | shrl $8,%eax | |
62 | xorl (%edi,%ebx,4),%eax | |
63 | movzbl %al,%ebx | |
64 | shrl $8,%eax | |
65 | xorl (%edi,%ebx,4),%eax | |
66 | movzbl %al,%ebx | |
67 | shrl $8,%eax | |
68 | xorl (%edi,%ebx,4),%eax | |
69 | xorl (%esi),%eax | |
70 | addl $4,%esi | |
71 | movzbl %al,%ebx | |
72 | shrl $8,%eax | |
73 | xorl (%edi,%ebx,4),%eax | |
74 | movzbl %al,%ebx | |
75 | shrl $8,%eax | |
76 | xorl (%edi,%ebx,4),%eax | |
77 | movzbl %al,%ebx | |
78 | shrl $8,%eax | |
79 | xorl (%edi,%ebx,4),%eax | |
80 | movzbl %al,%ebx | |
81 | shrl $8,%eax | |
82 | xorl (%edi,%ebx,4),%eax | |
83 | decl %ecx | |
84 | jnz _$7 | |
85 | _$8: | |
86 | movl %edx,%ecx | |
87 | jecxz _$4 | |
88 | _$9: | |
89 | xorb (%esi),%al | |
90 | incl %esi | |
91 | movzbl %al,%ebx | |
92 | shrl $8,%eax | |
93 | xorl (%edi,%ebx,4),%eax | |
94 | decl %ecx | |
95 | jnz _$9 | |
96 | _$4: | |
97 | xorl $0xffffffff,%eax | |
98 | _$3: | |
99 | .line 52 | |
100 | popl %edi | |
101 | popl %esi | |
102 | popl %ebx | |
103 | leave | |
104 | ret | |
105 | _$34: | |
106 | .size _crc32,_$34-_crc32 | |
107 | .globl _crc32 | |
108 | .extern _get_crc_table |