|
Packit Service |
5195f2 |
/* lzo1x_d.ash -- assembler implementation of the LZO1X 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 |
#if !defined(LZO1X) && !defined(LZO1Y)
|
|
Packit Service |
5195f2 |
# define LZO1X
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
#if defined(LZO_FAST)
|
|
Packit Service |
5195f2 |
# define NN 3
|
|
Packit Service |
5195f2 |
#else
|
|
Packit Service |
5195f2 |
# define NN 0
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/***********************************************************************
|
|
Packit Service |
5195f2 |
// init
|
|
Packit Service |
5195f2 |
************************************************************************/
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
xorl %eax,%eax
|
|
Packit Service |
5195f2 |
xorl %ebx,%ebx /* high bits 9-32 stay 0 */
|
|
Packit Service |
5195f2 |
lodsb
|
|
Packit Service |
5195f2 |
cmpb $17,%al
|
|
Packit Service |
5195f2 |
jbe .L01
|
|
Packit Service |
5195f2 |
subb $17-NN,%al
|
|
Packit Service |
5195f2 |
#if defined(LZO_FAST)
|
|
Packit Service |
5195f2 |
jmp .LFLR
|
|
Packit Service |
5195f2 |
#else
|
|
Packit Service |
5195f2 |
cmpb $4,%al
|
|
Packit Service |
5195f2 |
jae .LFLR
|
|
Packit Service |
5195f2 |
#if 1
|
|
Packit Service |
5195f2 |
TEST_OP((%edi,%eax),%edx)
|
|
Packit Service |
5195f2 |
TEST_IP((%esi,%eax),%edx)
|
|
Packit Service |
5195f2 |
movl %eax,%ecx
|
|
Packit Service |
5195f2 |
jmp .LFLR2
|
|
Packit Service |
5195f2 |
#else
|
|
Packit Service |
5195f2 |
jmp .LFLR3
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/***********************************************************************
|
|
Packit Service |
5195f2 |
// literal run
|
|
Packit Service |
5195f2 |
************************************************************************/
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
0: addl N_255,%eax
|
|
Packit Service |
5195f2 |
TEST_IP(18(%esi,%eax),%edx) /* minimum */
|
|
Packit Service |
5195f2 |
1: movb (%esi),%bl
|
|
Packit Service |
5195f2 |
incl %esi
|
|
Packit Service |
5195f2 |
orb %bl,%bl
|
|
Packit Service |
5195f2 |
jz 0b
|
|
Packit Service |
5195f2 |
leal 18+NN(%eax,%ebx),%eax
|
|
Packit Service |
5195f2 |
jmp 3f
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
ALIGN3
|
|
Packit Service |
5195f2 |
.L00:
|
|
Packit Service |
5195f2 |
#ifdef LZO_DEBUG
|
|
Packit Service |
5195f2 |
andl $0xffffff00,%eax ; jnz .L_assert_fail
|
|
Packit Service |
5195f2 |
andl $0xffffff00,%ebx ; jnz .L_assert_fail
|
|
Packit Service |
5195f2 |
xorl %eax,%eax ; xorl %ebx,%ebx
|
|
Packit Service |
5195f2 |
xorl %ecx,%ecx ; xorl %edx,%edx
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
TEST_IP_R(%esi)
|
|
Packit Service |
5195f2 |
LODSB
|
|
Packit Service |
5195f2 |
.L01:
|
|
Packit Service |
5195f2 |
cmpb $16,%al
|
|
Packit Service |
5195f2 |
jae .LMATCH
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/* a literal run */
|
|
Packit Service |
5195f2 |
orb %al,%al
|
|
Packit Service |
5195f2 |
jz 1b
|
|
Packit Service |
5195f2 |
addl $3+NN,%eax
|
|
Packit Service |
5195f2 |
3:
|
|
Packit Service |
5195f2 |
.LFLR:
|
|
Packit Service |
5195f2 |
TEST_OP(-NN(%edi,%eax),%edx)
|
|
Packit Service |
5195f2 |
TEST_IP(-NN(%esi,%eax),%edx)
|
|
Packit Service |
5195f2 |
#if defined(LZO_FAST)
|
|
Packit Service |
5195f2 |
movl %eax,%ecx
|
|
Packit Service |
5195f2 |
NOTL_3(%eax)
|
|
Packit Service |
5195f2 |
shrl $2,%ecx
|
|
Packit Service |
5195f2 |
andl N_3,%eax
|
|
Packit Service |
5195f2 |
COPYL(%esi,%edi,%edx)
|
|
Packit Service |
5195f2 |
subl %eax,%esi
|
|
Packit Service |
5195f2 |
subl %eax,%edi
|
|
Packit Service |
5195f2 |
#else
|
|
Packit Service |
5195f2 |
movl %eax,%ecx
|
|
Packit Service |
5195f2 |
shrl $2,%eax
|
|
Packit Service |
5195f2 |
andl N_3,%ecx
|
|
Packit Service |
5195f2 |
COPYL_C(%esi,%edi,%edx,%eax)
|
|
Packit Service |
5195f2 |
.LFLR2:
|
|
Packit Service |
5195f2 |
rep
|
|
Packit Service |
5195f2 |
movsb
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
#ifdef LZO_DEBUG
|
|
Packit Service |
5195f2 |
andl $0xffffff00,%eax ; jnz .L_assert_fail
|
|
Packit Service |
5195f2 |
andl $0xffffff00,%ebx ; jnz .L_assert_fail
|
|
Packit Service |
5195f2 |
xorl %eax,%eax ; xorl %ebx,%ebx
|
|
Packit Service |
5195f2 |
xorl %ecx,%ecx ; xorl %edx,%edx
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
LODSB
|
|
Packit Service |
5195f2 |
cmpb $16,%al
|
|
Packit Service |
5195f2 |
jae .LMATCH
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/***********************************************************************
|
|
Packit Service |
5195f2 |
// R1
|
|
Packit Service |
5195f2 |
************************************************************************/
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
TEST_OP(3(%edi),%edx)
|
|
Packit Service |
5195f2 |
shrl $2,%eax
|
|
Packit Service |
5195f2 |
movb (%esi),%bl
|
|
Packit Service |
5195f2 |
#if defined(LZO1X)
|
|
Packit Service |
5195f2 |
leal -0x801(%edi),%edx
|
|
Packit Service |
5195f2 |
#elif defined(LZO1Y)
|
|
Packit Service |
5195f2 |
leal -0x401(%edi),%edx
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
leal (%eax,%ebx,4),%eax
|
|
Packit Service |
5195f2 |
incl %esi
|
|
Packit Service |
5195f2 |
subl %eax,%edx
|
|
Packit Service |
5195f2 |
TEST_LOOKBEHIND(%edx)
|
|
Packit Service |
5195f2 |
#if defined(LZO_FAST)
|
|
Packit Service |
5195f2 |
movl (%edx),%ecx
|
|
Packit Service |
5195f2 |
movl %ecx,(%edi)
|
|
Packit Service |
5195f2 |
#else
|
|
Packit Service |
5195f2 |
movb (%edx),%al
|
|
Packit Service |
5195f2 |
movb %al,(%edi)
|
|
Packit Service |
5195f2 |
movb 1(%edx),%al
|
|
Packit Service |
5195f2 |
movb %al,1(%edi)
|
|
Packit Service |
5195f2 |
movb 2(%edx),%al
|
|
Packit Service |
5195f2 |
movb %al,2(%edi)
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
addl N_3,%edi
|
|
Packit Service |
5195f2 |
jmp .LMDONE
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/***********************************************************************
|
|
Packit Service |
5195f2 |
// M2
|
|
Packit Service |
5195f2 |
************************************************************************/
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
ALIGN3
|
|
Packit Service |
5195f2 |
.LMATCH:
|
|
Packit Service |
5195f2 |
cmpb $64,%al
|
|
Packit Service |
5195f2 |
jb .LM3MATCH
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/* a M2 match */
|
|
Packit Service |
5195f2 |
movl %eax,%ecx
|
|
Packit Service |
5195f2 |
shrl $2,%eax
|
|
Packit Service |
5195f2 |
leal -1(%edi),%edx
|
|
Packit Service |
5195f2 |
#if defined(LZO1X)
|
|
Packit Service |
5195f2 |
andl $7,%eax
|
|
Packit Service |
5195f2 |
movb (%esi),%bl
|
|
Packit Service |
5195f2 |
shrl $5,%ecx
|
|
Packit Service |
5195f2 |
leal (%eax,%ebx,8),%eax
|
|
Packit Service |
5195f2 |
#elif defined(LZO1Y)
|
|
Packit Service |
5195f2 |
andl N_3,%eax
|
|
Packit Service |
5195f2 |
movb (%esi),%bl
|
|
Packit Service |
5195f2 |
shrl $4,%ecx
|
|
Packit Service |
5195f2 |
leal (%eax,%ebx,4),%eax
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
incl %esi
|
|
Packit Service |
5195f2 |
subl %eax,%edx
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
#if defined(LZO_FAST)
|
|
Packit Service |
5195f2 |
#if defined(LZO1X)
|
|
Packit Service |
5195f2 |
addl $1+3,%ecx
|
|
Packit Service |
5195f2 |
#elif defined(LZO1Y)
|
|
Packit Service |
5195f2 |
addl $2,%ecx
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
#else
|
|
Packit Service |
5195f2 |
#if defined(LZO1X)
|
|
Packit Service |
5195f2 |
incl %ecx
|
|
Packit Service |
5195f2 |
#elif defined(LZO1Y)
|
|
Packit Service |
5195f2 |
decl %ecx
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
cmpl N_3,%eax
|
|
Packit Service |
5195f2 |
jae .LCOPYLONG
|
|
Packit Service |
5195f2 |
jmp .LCOPYBYTE
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/***********************************************************************
|
|
Packit Service |
5195f2 |
// M3
|
|
Packit Service |
5195f2 |
************************************************************************/
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
0: addl N_255,%eax
|
|
Packit Service |
5195f2 |
TEST_IP(3(%esi),%edx) /* minimum */
|
|
Packit Service |
5195f2 |
1: movb (%esi),%bl
|
|
Packit Service |
5195f2 |
incl %esi
|
|
Packit Service |
5195f2 |
orb %bl,%bl
|
|
Packit Service |
5195f2 |
jz 0b
|
|
Packit Service |
5195f2 |
leal 33+NN(%eax,%ebx),%ecx
|
|
Packit Service |
5195f2 |
xorl %eax,%eax
|
|
Packit Service |
5195f2 |
jmp 3f
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
ALIGN3
|
|
Packit Service |
5195f2 |
.LM3MATCH:
|
|
Packit Service |
5195f2 |
cmpb $32,%al
|
|
Packit Service |
5195f2 |
jb .LM4MATCH
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/* a M3 match */
|
|
Packit Service |
5195f2 |
andl $31,%eax
|
|
Packit Service |
5195f2 |
jz 1b
|
|
Packit Service |
5195f2 |
lea 2+NN(%eax),%ecx
|
|
Packit Service |
5195f2 |
3:
|
|
Packit Service |
5195f2 |
#ifdef LZO_DEBUG
|
|
Packit Service |
5195f2 |
andl $0xffff0000,%eax ; jnz .L_assert_fail
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
movw (%esi),%ax
|
|
Packit Service |
5195f2 |
leal -1(%edi),%edx
|
|
Packit Service |
5195f2 |
shrl $2,%eax
|
|
Packit Service |
5195f2 |
addl $2,%esi
|
|
Packit Service |
5195f2 |
subl %eax,%edx
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
cmpl N_3,%eax
|
|
Packit Service |
5195f2 |
jb .LCOPYBYTE
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/***********************************************************************
|
|
Packit Service |
5195f2 |
// copy match
|
|
Packit Service |
5195f2 |
************************************************************************/
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
ALIGN1
|
|
Packit Service |
5195f2 |
.LCOPYLONG: /* copy match using longwords */
|
|
Packit Service |
5195f2 |
TEST_LOOKBEHIND(%edx)
|
|
Packit Service |
5195f2 |
#if defined(LZO_FAST)
|
|
Packit Service |
5195f2 |
leal -3(%edi,%ecx),%eax
|
|
Packit Service |
5195f2 |
shrl $2,%ecx
|
|
Packit Service |
5195f2 |
TEST_OP_R(%eax)
|
|
Packit Service |
5195f2 |
COPYL(%edx,%edi,%ebx)
|
|
Packit Service |
5195f2 |
movl %eax,%edi
|
|
Packit Service |
5195f2 |
xorl %ebx,%ebx
|
|
Packit Service |
5195f2 |
#else
|
|
Packit Service |
5195f2 |
TEST_OP((%edi,%ecx),%eax)
|
|
Packit Service |
5195f2 |
movl %ecx,%ebx
|
|
Packit Service |
5195f2 |
shrl $2,%ebx
|
|
Packit Service |
5195f2 |
jz 2f
|
|
Packit Service |
5195f2 |
COPYL_C(%edx,%edi,%eax,%ebx)
|
|
Packit Service |
5195f2 |
andl N_3,%ecx
|
|
Packit Service |
5195f2 |
jz 1f
|
|
Packit Service |
5195f2 |
2: COPYB_C(%edx,%edi,%al,%ecx)
|
|
Packit Service |
5195f2 |
1:
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
.LMDONE:
|
|
Packit Service |
5195f2 |
movb -2(%esi),%al
|
|
Packit Service |
5195f2 |
andl N_3,%eax
|
|
Packit Service |
5195f2 |
jz .L00
|
|
Packit Service |
5195f2 |
.LFLR3:
|
|
Packit Service |
5195f2 |
TEST_OP((%edi,%eax),%edx)
|
|
Packit Service |
5195f2 |
TEST_IP((%esi,%eax),%edx)
|
|
Packit Service |
5195f2 |
#if defined(LZO_FAST)
|
|
Packit Service |
5195f2 |
movl (%esi),%edx
|
|
Packit Service |
5195f2 |
addl %eax,%esi
|
|
Packit Service |
5195f2 |
movl %edx,(%edi)
|
|
Packit Service |
5195f2 |
addl %eax,%edi
|
|
Packit Service |
5195f2 |
#else
|
|
Packit Service |
5195f2 |
COPYB_C(%esi,%edi,%cl,%eax)
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
#ifdef LZO_DEBUG
|
|
Packit Service |
5195f2 |
andl $0xffffff00,%eax ; jnz .L_assert_fail
|
|
Packit Service |
5195f2 |
andl $0xffffff00,%ebx ; jnz .L_assert_fail
|
|
Packit Service |
5195f2 |
xorl %eax,%eax ; xorl %ebx,%ebx
|
|
Packit Service |
5195f2 |
xorl %ecx,%ecx ; xorl %edx,%edx
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
LODSB
|
|
Packit Service |
5195f2 |
jmp .LMATCH
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
ALIGN3
|
|
Packit Service |
5195f2 |
.LCOPYBYTE: /* copy match using bytes */
|
|
Packit Service |
5195f2 |
TEST_LOOKBEHIND(%edx)
|
|
Packit Service |
5195f2 |
TEST_OP(-NN(%edi,%ecx),%eax)
|
|
Packit Service |
5195f2 |
xchgl %edx,%esi
|
|
Packit Service |
5195f2 |
#if defined(LZO_FAST)
|
|
Packit Service |
5195f2 |
subl N_3,%ecx
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
rep
|
|
Packit Service |
5195f2 |
movsb
|
|
Packit Service |
5195f2 |
movl %edx,%esi
|
|
Packit Service |
5195f2 |
jmp .LMDONE
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/***********************************************************************
|
|
Packit Service |
5195f2 |
// M4
|
|
Packit Service |
5195f2 |
************************************************************************/
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
0: addl N_255,%ecx
|
|
Packit Service |
5195f2 |
TEST_IP(3(%esi),%edx) /* minimum */
|
|
Packit Service |
5195f2 |
1: movb (%esi),%bl
|
|
Packit Service |
5195f2 |
incl %esi
|
|
Packit Service |
5195f2 |
orb %bl,%bl
|
|
Packit Service |
5195f2 |
jz 0b
|
|
Packit Service |
5195f2 |
leal 9+NN(%ebx,%ecx),%ecx
|
|
Packit Service |
5195f2 |
jmp 3f
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
ALIGN3
|
|
Packit Service |
5195f2 |
.LM4MATCH:
|
|
Packit Service |
5195f2 |
cmpb $16,%al
|
|
Packit Service |
5195f2 |
jb .LM1MATCH
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/* a M4 match */
|
|
Packit Service |
5195f2 |
movl %eax,%ecx
|
|
Packit Service |
5195f2 |
andl $8,%eax
|
|
Packit Service |
5195f2 |
shll $13,%eax /* save in bit 16 */
|
|
Packit Service |
5195f2 |
andl $7,%ecx
|
|
Packit Service |
5195f2 |
jz 1b
|
|
Packit Service |
5195f2 |
addl $2+NN,%ecx
|
|
Packit Service |
5195f2 |
3:
|
|
Packit Service |
5195f2 |
#ifdef LZO_DEBUG
|
|
Packit Service |
5195f2 |
movl %eax,%edx ; andl $0xfffe0000,%edx ; jnz .L_assert_fail
|
|
Packit Service |
5195f2 |
#endif
|
|
Packit Service |
5195f2 |
movw (%esi),%ax
|
|
Packit Service |
5195f2 |
addl $2,%esi
|
|
Packit Service |
5195f2 |
leal -0x4000(%edi),%edx
|
|
Packit Service |
5195f2 |
shrl $2,%eax
|
|
Packit Service |
5195f2 |
jz .LEOF
|
|
Packit Service |
5195f2 |
subl %eax,%edx
|
|
Packit Service |
5195f2 |
jmp .LCOPYLONG
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/***********************************************************************
|
|
Packit Service |
5195f2 |
// M1
|
|
Packit Service |
5195f2 |
************************************************************************/
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
ALIGN3
|
|
Packit Service |
5195f2 |
.LM1MATCH:
|
|
Packit Service |
5195f2 |
/* a M1 match */
|
|
Packit Service |
5195f2 |
TEST_OP(2(%edi),%edx)
|
|
Packit Service |
5195f2 |
shrl $2,%eax
|
|
Packit Service |
5195f2 |
movb (%esi),%bl
|
|
Packit Service |
5195f2 |
leal -1(%edi),%edx
|
|
Packit Service |
5195f2 |
leal (%eax,%ebx,4),%eax
|
|
Packit Service |
5195f2 |
incl %esi
|
|
Packit Service |
5195f2 |
subl %eax,%edx
|
|
Packit Service |
5195f2 |
TEST_LOOKBEHIND(%edx)
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
movb (%edx),%al /* we must use this because edx can be edi-1 */
|
|
Packit Service |
5195f2 |
movb %al,(%edi)
|
|
Packit Service |
5195f2 |
movb 1(%edx),%bl
|
|
Packit Service |
5195f2 |
movb %bl,1(%edi)
|
|
Packit Service |
5195f2 |
addl $2,%edi
|
|
Packit Service |
5195f2 |
jmp .LMDONE
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
/***********************************************************************
|
|
Packit Service |
5195f2 |
//
|
|
Packit Service |
5195f2 |
************************************************************************/
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
.LEOF:
|
|
Packit Service |
5195f2 |
/**** xorl %eax,%eax eax=0 from above */
|
|
Packit Service |
5195f2 |
|
|
Packit Service |
5195f2 |
cmpl $3+NN,%ecx /* ecx must be 3/6 */
|
|
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 |
|