• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/* lzo1c_d.ash -- assembler implementation of the LZO1C decompression algorithm
2
3   This file is part of the LZO real-time data compression library.
4
5   Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer
6   All Rights Reserved.
7
8   The LZO library is free software; you can redistribute it and/or
9   modify it under the terms of the GNU General Public License as
10   published by the Free Software Foundation; either version 2 of
11   the License, or (at your option) any later version.
12
13   The LZO library is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with the LZO library; see the file COPYING.
20   If not, write to the Free Software Foundation, Inc.,
21   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22
23   Markus F.X.J. Oberhumer
24   <markus@oberhumer.com>
25   http://www.oberhumer.com/opensource/lzo/
26 */
27
28
29/***********************************************************************
30//
31************************************************************************/
32
33        ALIGN3
34.L1:
35        xorl    %eax,%eax
36        movb    (%esi),%al
37        incl    %esi
38        cmpb    $32,%al
39        jnb     .LMATCH
40
41        orb     %al,%al
42        jz      .L12
43        movl    %eax,%ecx
44.LIT:
45        TEST_OP((%edi,%ecx),%ebx)
46        TEST_IP((%esi,%ecx),%ebx)
47        rep
48        movsb
49.LM1:
50        movb    (%esi),%al
51        incl    %esi
52
53        cmpb    $32,%al
54        jb      .LM2
55.LMATCH:
56        cmpb    $64,%al
57        jb      .LN3
58
59        movl    %eax,%ecx
60        andb    $31,%al
61        leal    -1(%edi),%edx
62        shrl    $5,%ecx
63        subl    %eax,%edx
64        movb    (%esi),%al
65        incl    %esi
66
67        shll    $5,%eax
68        subl    %eax,%edx
69        incl    %ecx
70        xchgl   %esi,%edx
71        TEST_LOOKBEHIND(%esi)
72        TEST_OP((%edi,%ecx),%ebx)
73        rep
74        movsb
75        movl    %edx,%esi
76        jmp     .L1
77
78        ALIGN3
79.L12:
80        LODSB
81        leal    32(%eax),%ecx
82        cmpb    $248,%al
83        jb      .LIT
84
85        movl    $280,%ecx
86        subb    $248,%al
87        jz      .L11
88        xchgl   %eax,%ecx
89        xorb    %al,%al
90        shll    %cl,%eax
91        xchgl   %eax,%ecx
92.L11:
93        TEST_OP((%edi,%ecx),%ebx)
94        TEST_IP((%esi,%ecx),%ebx)
95        rep
96        movsb
97        jmp     .L1
98
99        ALIGN3
100.LM2:
101        leal    -1(%edi),%edx
102        subl    %eax,%edx
103        LODSB
104        shll    $5,%eax
105        subl    %eax,%edx
106        xchgl   %esi,%edx
107        TEST_LOOKBEHIND(%esi)
108        TEST_OP(4(%edi),%ebx)
109        movsb
110        movsb
111        movsb
112        movl    %edx,%esi
113        movsb
114        xorl    %eax,%eax
115        jmp     .LM1
116.LN3:
117        andb    $31,%al
118        movl    %eax,%ecx
119        jnz     .LN6
120        movb    $31,%cl
121.LN4:
122        LODSB
123        orb     %al,%al
124        jnz     .LN5
125        addl    N_255,%ecx
126        jmp     .LN4
127
128        ALIGN3
129.LN5:
130        addl    %eax,%ecx
131.LN6:
132        movb    (%esi),%al
133        incl    %esi
134
135        movl    %eax,%ebx
136        andb    $63,%al
137        movl    %edi,%edx
138        subl    %eax,%edx
139
140        movb    (%esi),%al
141        incl    %esi
142
143        shll    $6,%eax
144        subl    %eax,%edx
145        cmpl    %edi,%edx
146        jz      .LEOF
147
148        xchgl   %edx,%esi
149        leal    3(%ecx),%ecx
150        TEST_LOOKBEHIND(%esi)
151        TEST_OP((%edi,%ecx),%eax)
152        rep
153        movsb
154
155        movl    %edx,%esi
156        xorl    %eax,%eax
157        shrl    $6,%ebx
158        movl    %ebx,%ecx
159        jnz     .LIT
160        jmp     .L1
161
162.LEOF:
163/****   xorl    %eax,%eax          eax=0 from above */
164
165        cmpl    $1,%ecx         /* ecx must be 1 */
166        setnz   %al
167
168
169/*
170vi:ts=4
171*/
172
173