Blame asm/i386/src/lzo1f_d.ash

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