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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
/* lzo1f_d.ash -- assembler implementation of the LZO1F decompression algorithm
This file is part of the LZO real-time data compression library.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
All Rights Reserved.
The LZO library is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
The LZO library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with the LZO library; see the file COPYING.
If not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Markus F.X.J. Oberhumer
<markus@oberhumer.com>
http://www.oberhumer.com/opensource/lzo/
*/
/***********************************************************************
//
************************************************************************/
ALIGN3
.L0:
xorl %eax,%eax
movb (%esi),%al
incl %esi
cmpb $31,%al
ja .LM2
orb %al,%al
movl %eax,%ecx
jnz .L2
1:
LODSB
orb %al,%al
jnz 2f
addl N_255,%ecx
jmp 1b
2:
lea 31(%eax,%ecx),%ecx
.L2:
TEST_OP((%edi,%ecx),%ebx)
TEST_IP((%esi,%ecx),%ebx)
movb %cl,%al
shrl $2,%ecx
rep
movsl
andb $3,%al
jz 1f
movl (%esi),%ebx
addl %eax,%esi
movl %ebx,(%edi)
addl %eax,%edi
1:
movb (%esi),%al
incl %esi
.LM1:
cmpb $31,%al
jbe .LM21
.LM2:
cmpb $223,%al
ja .LM3
movl %eax,%ecx
shrl $2,%eax
lea -1(%edi),%edx
andb $7,%al
shrl $5,%ecx
movl %eax,%ebx
movb (%esi),%al
leal (%ebx,%eax,8),%eax
incl %esi
.LM5:
subl %eax,%edx
addl $2,%ecx
xchgl %edx,%esi
TEST_LOOKBEHIND(%esi)
TEST_OP((%edi,%ecx),%ebx)
cmpl $6,%ecx
jb 1f
cmpl $4,%eax
jb 1f
movb %cl,%al
shrl $2,%ecx
rep
movsl
andb $3,%al
movb %al,%cl
1:
rep
movsb
movl %edx,%esi
.LN1:
movb -2(%esi),%cl
andl $3,%ecx
jz .L0
movl (%esi),%eax
addl %ecx,%esi
movl %eax,(%edi)
addl %ecx,%edi
xorl %eax,%eax
movb (%esi),%al
incl %esi
jmp .LM1
.LM21:
TEST_OP(3(%edi),%edx)
shrl $2,%eax
leal -0x801(%edi),%edx
movl %eax,%ecx
movb (%esi),%al
incl %esi
leal (%ecx,%eax,8),%eax
subl %eax,%edx
TEST_LOOKBEHIND(%edx)
movl (%edx),%eax
movl %eax,(%edi)
addl $3,%edi
jmp .LN1
1:
LODSB
orb %al,%al
jnz 2f
addl N_255,%ecx
jmp 1b
2:
lea 31(%eax,%ecx),%ecx
jmp .LM4
ALIGN3
.LM3:
andb $31,%al
movl %eax,%ecx
jz 1b
.LM4:
movl %edi,%edx
movw (%esi),%ax
addl $2,%esi
shrl $2,%eax
jnz .LM5
.LEOF:
/**** xorl %eax,%eax eax=0 from above */
cmpl $1,%ecx /* ecx must be 1 */
setnz %al
/* vim:set ts=4 sw=4 et: */
|