Blame asm/i386/src/lzo1c_d.ash

Packit Service 5195f2
/* lzo1c_d.ash -- assembler implementation of the LZO1C 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
.L1:
Packit Service 5195f2
        xorl    %eax,%eax
Packit Service 5195f2
        movb    (%esi),%al
Packit Service 5195f2
        incl    %esi
Packit Service 5195f2
        cmpb    $32,%al
Packit Service 5195f2
        jnb     .LMATCH
Packit Service 5195f2
Packit Service 5195f2
        orb     %al,%al
Packit Service 5195f2
        jz      .L12
Packit Service 5195f2
        movl    %eax,%ecx
Packit Service 5195f2
.LIT:
Packit Service 5195f2
        TEST_OP((%edi,%ecx),%ebx)
Packit Service 5195f2
        TEST_IP((%esi,%ecx),%ebx)
Packit Service 5195f2
        rep
Packit Service 5195f2
        movsb
Packit Service 5195f2
.LM1:
Packit Service 5195f2
        movb    (%esi),%al
Packit Service 5195f2
        incl    %esi
Packit Service 5195f2
Packit Service 5195f2
        cmpb    $32,%al
Packit Service 5195f2
        jb      .LM2
Packit Service 5195f2
.LMATCH:
Packit Service 5195f2
        cmpb    $64,%al
Packit Service 5195f2
        jb      .LN3
Packit Service 5195f2
Packit Service 5195f2
        movl    %eax,%ecx
Packit Service 5195f2
        andb    $31,%al
Packit Service 5195f2
        leal    -1(%edi),%edx
Packit Service 5195f2
        shrl    $5,%ecx
Packit Service 5195f2
        subl    %eax,%edx
Packit Service 5195f2
        movb    (%esi),%al
Packit Service 5195f2
        incl    %esi
Packit Service 5195f2
Packit Service 5195f2
        shll    $5,%eax
Packit Service 5195f2
        subl    %eax,%edx
Packit Service 5195f2
        incl    %ecx
Packit Service 5195f2
        xchgl   %esi,%edx
Packit Service 5195f2
        TEST_LOOKBEHIND(%esi)
Packit Service 5195f2
        TEST_OP((%edi,%ecx),%ebx)
Packit Service 5195f2
        rep
Packit Service 5195f2
        movsb
Packit Service 5195f2
        movl    %edx,%esi
Packit Service 5195f2
        jmp     .L1
Packit Service 5195f2
Packit Service 5195f2
        ALIGN3
Packit Service 5195f2
.L12:
Packit Service 5195f2
        LODSB
Packit Service 5195f2
        leal    32(%eax),%ecx
Packit Service 5195f2
        cmpb    $248,%al
Packit Service 5195f2
        jb      .LIT
Packit Service 5195f2
Packit Service 5195f2
        movl    $280,%ecx
Packit Service 5195f2
        subb    $248,%al
Packit Service 5195f2
        jz      .L11
Packit Service 5195f2
        xchgl   %eax,%ecx
Packit Service 5195f2
        xorb    %al,%al
Packit Service 5195f2
        shll    %cl,%eax
Packit Service 5195f2
        xchgl   %eax,%ecx
Packit Service 5195f2
.L11:
Packit Service 5195f2
        TEST_OP((%edi,%ecx),%ebx)
Packit Service 5195f2
        TEST_IP((%esi,%ecx),%ebx)
Packit Service 5195f2
        rep
Packit Service 5195f2
        movsb
Packit Service 5195f2
        jmp     .L1
Packit Service 5195f2
Packit Service 5195f2
        ALIGN3
Packit Service 5195f2
.LM2:
Packit Service 5195f2
        leal    -1(%edi),%edx
Packit Service 5195f2
        subl    %eax,%edx
Packit Service 5195f2
        LODSB
Packit Service 5195f2
        shll    $5,%eax
Packit Service 5195f2
        subl    %eax,%edx
Packit Service 5195f2
        xchgl   %esi,%edx
Packit Service 5195f2
        TEST_LOOKBEHIND(%esi)
Packit Service 5195f2
        TEST_OP(4(%edi),%ebx)
Packit Service 5195f2
        movsb
Packit Service 5195f2
        movsb
Packit Service 5195f2
        movsb
Packit Service 5195f2
        movl    %edx,%esi
Packit Service 5195f2
        movsb
Packit Service 5195f2
        xorl    %eax,%eax
Packit Service 5195f2
        jmp     .LM1
Packit Service 5195f2
.LN3:
Packit Service 5195f2
        andb    $31,%al
Packit Service 5195f2
        movl    %eax,%ecx
Packit Service 5195f2
        jnz     .LN6
Packit Service 5195f2
        movb    $31,%cl
Packit Service 5195f2
.LN4:
Packit Service 5195f2
        LODSB
Packit Service 5195f2
        orb     %al,%al
Packit Service 5195f2
        jnz     .LN5
Packit Service 5195f2
        addl    N_255,%ecx
Packit Service 5195f2
        jmp     .LN4
Packit Service 5195f2
Packit Service 5195f2
        ALIGN3
Packit Service 5195f2
.LN5:
Packit Service 5195f2
        addl    %eax,%ecx
Packit Service 5195f2
.LN6:
Packit Service 5195f2
        movb    (%esi),%al
Packit Service 5195f2
        incl    %esi
Packit Service 5195f2
Packit Service 5195f2
        movl    %eax,%ebx
Packit Service 5195f2
        andb    $63,%al
Packit Service 5195f2
        movl    %edi,%edx
Packit Service 5195f2
        subl    %eax,%edx
Packit Service 5195f2
Packit Service 5195f2
        movb    (%esi),%al
Packit Service 5195f2
        incl    %esi
Packit Service 5195f2
Packit Service 5195f2
        shll    $6,%eax
Packit Service 5195f2
        subl    %eax,%edx
Packit Service 5195f2
        cmpl    %edi,%edx
Packit Service 5195f2
        jz      .LEOF
Packit Service 5195f2
Packit Service 5195f2
        xchgl   %edx,%esi
Packit Service 5195f2
        leal    3(%ecx),%ecx
Packit Service 5195f2
        TEST_LOOKBEHIND(%esi)
Packit Service 5195f2
        TEST_OP((%edi,%ecx),%eax)
Packit Service 5195f2
        rep
Packit Service 5195f2
        movsb
Packit Service 5195f2
Packit Service 5195f2
        movl    %edx,%esi
Packit Service 5195f2
        xorl    %eax,%eax
Packit Service 5195f2
        shrl    $6,%ebx
Packit Service 5195f2
        movl    %ebx,%ecx
Packit Service 5195f2
        jnz     .LIT
Packit Service 5195f2
        jmp     .L1
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