/* lzo1f_d.ash -- assembler implementation of the LZO1F decompression algorithm

   This file is part of the LZO real-time data compression library.

   Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 1996 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


/*
vi:ts=4
*/

