1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
;===========================================================================
; Copyright (c) 1990-2005 Info-ZIP. All rights reserved.
;
; See the accompanying file LICENSE, version 2004-May-22 or later
; (the contents of which are also included in zip.h) for terms of use.
; If, for some reason, both of these files are missing, the Info-ZIP license
; also may be found at: ftp://ftp.info-zip.org/pub/infozip/licen; Copyright (c) 1990-1999 Info-ZIP. All rights reserved.
;===========================================================================
; crc_lcc.asm, optimized CRC calculation function for Zip and UnZip,
; created by Paul Kienitz and Christian Spieler. Last revised 24 Dec 98.
;
; The code in this file has been copied verbatim from crc_i386.{asm|S};
; only the assembler syntax and metacommands have been adapted to
; the habits of the free LCC-Win32 C compiler package.
; This version of the code uses the "optimized for i686" variant of
; crc_i386.{asm|S}.
; IMPORTANT NOTE to the Info-ZIP editors:
; The TAB characters in this source file are required by the parser of
; the LCC-Win32 assembler program and MUST NOT be removed!!
;
; For more information (and a revision log), look into the original
; source files.
;
.text
.file "crc32.c"
.text
.type _crc32,function
_crc32:
pushl %ebp
movl %esp,%ebp
pushl %ecx
pushl %ebx
pushl %esi
pushl %edi
.line 34
.line 37
movl 12(%ebp),%esi
subl %eax,%eax
testl %esi,%esi
jz _$3
.line 39
call _get_crc_table
movl %eax,%edi
.line 41
movl 8(%ebp),%eax
movl 16(%ebp),%ecx
notl %eax
testl %ecx,%ecx
jz _$4
_$5:
testl $3,%esi
jz _$6
xorb (%esi),%al
incl %esi
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
decl %ecx
jnz _$5
_$6:
movl %ecx,%edx
shrl $3,%ecx
jz _$8
_$7:
xorl (%esi),%eax
addl $4,%esi
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
xorl (%esi),%eax
addl $4,%esi
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
decl %ecx
jnz _$7
_$8:
movl %edx,%ecx
andl $7,%ecx
jz _$4
_$9:
xorb (%esi),%al
incl %esi
movzbl %al,%ebx
shrl $8,%eax
xorl (%edi,%ebx,4),%eax
decl %ecx
jnz _$9
_$4:
xorl $0xffffffff,%eax
_$3:
.line 52
popl %edi
popl %esi
popl %ebx
leave
ret
_$34:
.size _crc32,_$34-_crc32
.globl _crc32
.extern _get_crc_table
|