Blame asm/i386/src/lzo1c_d.ash

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