kusano 7d535a
/* lzo1f_d.ash -- assembler implementation of the LZO1F decompression algorithm
kusano 7d535a
kusano 7d535a
   This file is part of the LZO real-time data compression library.
kusano 7d535a
kusano 7d535a
   Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
kusano 7d535a
   All Rights Reserved.
kusano 7d535a
kusano 7d535a
   The LZO library is free software; you can redistribute it and/or
kusano 7d535a
   modify it under the terms of the GNU General Public License as
kusano 7d535a
   published by the Free Software Foundation; either version 2 of
kusano 7d535a
   the License, or (at your option) any later version.
kusano 7d535a
kusano 7d535a
   The LZO library is distributed in the hope that it will be useful,
kusano 7d535a
   but WITHOUT ANY WARRANTY; without even the implied warranty of
kusano 7d535a
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
kusano 7d535a
   GNU General Public License for more details.
kusano 7d535a
kusano 7d535a
   You should have received a copy of the GNU General Public License
kusano 7d535a
   along with the LZO library; see the file COPYING.
kusano 7d535a
   If not, write to the Free Software Foundation, Inc.,
kusano 7d535a
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
kusano 7d535a
kusano 7d535a
   Markus F.X.J. Oberhumer
kusano 7d535a
   <markus@oberhumer.com></markus@oberhumer.com>
kusano 7d535a
   http://www.oberhumer.com/opensource/lzo/
kusano 7d535a
 */
kusano 7d535a
kusano 7d535a
kusano 7d535a
/***********************************************************************
kusano 7d535a
//
kusano 7d535a
************************************************************************/
kusano 7d535a
kusano 7d535a
        ALIGN3
kusano 7d535a
.L0:
kusano 7d535a
        xorl    %eax,%eax
kusano 7d535a
        movb    (%esi),%al
kusano 7d535a
        incl    %esi
kusano 7d535a
        cmpb    $31,%al
kusano 7d535a
        ja      .LM2
kusano 7d535a
kusano 7d535a
        orb     %al,%al
kusano 7d535a
        movl    %eax,%ecx
kusano 7d535a
        jnz     .L2
kusano 7d535a
1:
kusano 7d535a
        LODSB
kusano 7d535a
        orb     %al,%al
kusano 7d535a
        jnz     2f
kusano 7d535a
        addl    N_255,%ecx
kusano 7d535a
        jmp     1b
kusano 7d535a
2:
kusano 7d535a
        lea     31(%eax,%ecx),%ecx
kusano 7d535a
.L2:
kusano 7d535a
        TEST_OP((%edi,%ecx),%ebx)
kusano 7d535a
        TEST_IP((%esi,%ecx),%ebx)
kusano 7d535a
        movb    %cl,%al
kusano 7d535a
        shrl    $2,%ecx
kusano 7d535a
        rep
kusano 7d535a
        movsl
kusano 7d535a
        andb    $3,%al
kusano 7d535a
        jz      1f
kusano 7d535a
        movl    (%esi),%ebx
kusano 7d535a
        addl    %eax,%esi
kusano 7d535a
        movl    %ebx,(%edi)
kusano 7d535a
        addl    %eax,%edi
kusano 7d535a
1:
kusano 7d535a
        movb    (%esi),%al
kusano 7d535a
        incl    %esi
kusano 7d535a
.LM1:
kusano 7d535a
        cmpb    $31,%al
kusano 7d535a
        jbe     .LM21
kusano 7d535a
kusano 7d535a
.LM2:
kusano 7d535a
        cmpb    $223,%al
kusano 7d535a
        ja      .LM3
kusano 7d535a
kusano 7d535a
        movl    %eax,%ecx
kusano 7d535a
        shrl    $2,%eax
kusano 7d535a
        lea     -1(%edi),%edx
kusano 7d535a
        andb    $7,%al
kusano 7d535a
        shrl    $5,%ecx
kusano 7d535a
        movl    %eax,%ebx
kusano 7d535a
kusano 7d535a
        movb    (%esi),%al
kusano 7d535a
        leal    (%ebx,%eax,8),%eax
kusano 7d535a
        incl    %esi
kusano 7d535a
.LM5:
kusano 7d535a
        subl    %eax,%edx
kusano 7d535a
        addl    $2,%ecx
kusano 7d535a
        xchgl   %edx,%esi
kusano 7d535a
        TEST_LOOKBEHIND(%esi)
kusano 7d535a
        TEST_OP((%edi,%ecx),%ebx)
kusano 7d535a
        cmpl    $6,%ecx
kusano 7d535a
        jb      1f
kusano 7d535a
        cmpl    $4,%eax
kusano 7d535a
        jb      1f
kusano 7d535a
        movb    %cl,%al
kusano 7d535a
        shrl    $2,%ecx
kusano 7d535a
        rep
kusano 7d535a
        movsl
kusano 7d535a
        andb    $3,%al
kusano 7d535a
        movb    %al,%cl
kusano 7d535a
1:
kusano 7d535a
        rep
kusano 7d535a
        movsb
kusano 7d535a
        movl    %edx,%esi
kusano 7d535a
.LN1:
kusano 7d535a
        movb    -2(%esi),%cl
kusano 7d535a
        andl    $3,%ecx
kusano 7d535a
        jz      .L0
kusano 7d535a
        movl    (%esi),%eax
kusano 7d535a
        addl    %ecx,%esi
kusano 7d535a
        movl    %eax,(%edi)
kusano 7d535a
        addl    %ecx,%edi
kusano 7d535a
        xorl    %eax,%eax
kusano 7d535a
        movb    (%esi),%al
kusano 7d535a
        incl    %esi
kusano 7d535a
        jmp     .LM1
kusano 7d535a
.LM21:
kusano 7d535a
        TEST_OP(3(%edi),%edx)
kusano 7d535a
        shrl    $2,%eax
kusano 7d535a
        leal    -0x801(%edi),%edx
kusano 7d535a
        movl    %eax,%ecx
kusano 7d535a
        movb    (%esi),%al
kusano 7d535a
        incl    %esi
kusano 7d535a
        leal    (%ecx,%eax,8),%eax
kusano 7d535a
        subl    %eax,%edx
kusano 7d535a
        TEST_LOOKBEHIND(%edx)
kusano 7d535a
        movl    (%edx),%eax
kusano 7d535a
        movl    %eax,(%edi)
kusano 7d535a
        addl    $3,%edi
kusano 7d535a
        jmp     .LN1
kusano 7d535a
1:
kusano 7d535a
        LODSB
kusano 7d535a
        orb     %al,%al
kusano 7d535a
        jnz     2f
kusano 7d535a
        addl    N_255,%ecx
kusano 7d535a
        jmp     1b
kusano 7d535a
2:
kusano 7d535a
        lea     31(%eax,%ecx),%ecx
kusano 7d535a
        jmp     .LM4
kusano 7d535a
kusano 7d535a
        ALIGN3
kusano 7d535a
.LM3:
kusano 7d535a
        andb    $31,%al
kusano 7d535a
        movl    %eax,%ecx
kusano 7d535a
        jz      1b
kusano 7d535a
.LM4:
kusano 7d535a
        movl    %edi,%edx
kusano 7d535a
        movw    (%esi),%ax
kusano 7d535a
        addl    $2,%esi
kusano 7d535a
        shrl    $2,%eax
kusano 7d535a
        jnz     .LM5
kusano 7d535a
kusano 7d535a
.LEOF:
kusano 7d535a
/****   xorl    %eax,%eax          eax=0 from above */
kusano 7d535a
kusano 7d535a
        cmpl    $1,%ecx         /* ecx must be 1 */
kusano 7d535a
        setnz   %al
kusano 7d535a
kusano 7d535a
kusano 7d535a
/*
kusano 7d535a
vi:ts=4
kusano 7d535a
*/
kusano 7d535a