aboutsummaryrefslogtreecommitdiffstats
path: root/asm/i386/src
diff options
context:
space:
mode:
Diffstat (limited to 'asm/i386/src')
-rw-r--r--asm/i386/src/enter.ash89
-rw-r--r--asm/i386/src/leave.ash114
-rw-r--r--asm/i386/src/lzo1c_d.ash184
-rw-r--r--asm/i386/src/lzo1c_s1.S61
-rw-r--r--asm/i386/src/lzo1c_s2.S65
-rw-r--r--asm/i386/src/lzo1f_d.ash176
-rw-r--r--asm/i386/src/lzo1f_f1.S61
-rw-r--r--asm/i386/src/lzo1f_f2.S65
-rw-r--r--asm/i386/src/lzo1x_d.ash401
-rw-r--r--asm/i386/src/lzo1x_f1.S63
-rw-r--r--asm/i386/src/lzo1x_f2.S67
-rw-r--r--asm/i386/src/lzo1x_s1.S61
-rw-r--r--asm/i386/src/lzo1x_s2.S65
-rw-r--r--asm/i386/src/lzo1y_f1.S65
-rw-r--r--asm/i386/src/lzo1y_f2.S69
-rw-r--r--asm/i386/src/lzo1y_s1.S63
-rw-r--r--asm/i386/src/lzo1y_s2.S67
-rw-r--r--asm/i386/src/lzo_asm.h287
18 files changed, 2023 insertions, 0 deletions
diff --git a/asm/i386/src/enter.ash b/asm/i386/src/enter.ash
new file mode 100644
index 0000000..49c455d
--- /dev/null
+++ b/asm/i386/src/enter.ash
@@ -0,0 +1,89 @@
+/* enter.ash -- LZO assembler stuff
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+ pushl %ebp
+ pushl %edi
+ pushl %esi
+ pushl %ebx
+ pushl %ecx
+ pushl %edx
+ subl $12,%esp
+
+ cld
+
+ movl INP,%esi
+ movl OUTP,%edi
+#if defined(N_3_EBP)
+ movl $3,%ebp
+#endif
+#if defined(N_255_EBP)
+ movl $255,%ebp
+#endif
+
+#if defined(LZO_TEST_DECOMPRESS_OVERRUN_INPUT)
+#if defined(INIT_OVERRUN)
+ INIT_OVERRUN
+# undef INIT_OVERRUN
+#endif
+ leal -3(%esi),%eax /* 3 == length of EOF code */
+ addl INS,%eax
+ movl %eax,INEND
+#endif
+
+#if defined(LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT)
+#if defined(INIT_OVERRUN)
+ INIT_OVERRUN
+# undef INIT_OVERRUN
+#endif
+ movl %edi,%eax
+ movl OUTS,%edx
+ addl (%edx),%eax
+ movl %eax,OUTEND
+#endif
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/leave.ash b/asm/i386/src/leave.ash
new file mode 100644
index 0000000..9550b46
--- /dev/null
+++ b/asm/i386/src/leave.ash
@@ -0,0 +1,114 @@
+/* leave.ash -- LZO assembler stuff
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+/* check uncompressed size */
+#if defined(LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT)
+ cmpl OUTEND,%edi
+ ja .L_output_overrun
+#endif
+
+/* check compressed size */
+ movl INP,%edx
+ addl INS,%edx
+ cmpl %edx,%esi /* check compressed size */
+ ja .L_input_overrun
+ jb .L_input_not_consumed
+
+.L_leave:
+ subl OUTP,%edi /* write back the uncompressed size */
+ movl OUTS,%edx
+ movl %edi,(%edx)
+
+ negl %eax
+ addl $12,%esp
+ popl %edx
+ popl %ecx
+ popl %ebx
+ popl %esi
+ popl %edi
+ popl %ebp
+#if 1
+ ret
+#else
+ jmp .L_end
+#endif
+
+
+.L_error:
+ movl $1,%eax /* LZO_E_ERROR */
+ jmp .L_leave
+
+.L_input_not_consumed:
+ movl $8,%eax /* LZO_E_INPUT_NOT_CONSUMED */
+ jmp .L_leave
+
+.L_input_overrun:
+ movl $4,%eax /* LZO_E_INPUT_OVERRUN */
+ jmp .L_leave
+
+#if defined(LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT)
+.L_output_overrun:
+ movl $5,%eax /* LZO_E_OUTPUT_OVERRUN */
+ jmp .L_leave
+#endif
+
+#if defined(LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND)
+.L_lookbehind_overrun:
+ movl $6,%eax /* LZO_E_LOOKBEHIND_OVERRUN */
+ jmp .L_leave
+#endif
+
+#if defined(LZO_DEBUG)
+.L_assert_fail:
+ movl $99,%eax
+ jmp .L_leave
+#endif
+
+.L_end:
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1c_d.ash b/asm/i386/src/lzo1c_d.ash
new file mode 100644
index 0000000..9969c86
--- /dev/null
+++ b/asm/i386/src/lzo1c_d.ash
@@ -0,0 +1,184 @@
+/* lzo1c_d.ash -- assembler implementation of the LZO1C 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
+.L1:
+ xorl %eax,%eax
+ movb (%esi),%al
+ incl %esi
+ cmpb $32,%al
+ jnb .LMATCH
+
+ orb %al,%al
+ jz .L12
+ movl %eax,%ecx
+.LIT:
+ TEST_OP((%edi,%ecx),%ebx)
+ TEST_IP((%esi,%ecx),%ebx)
+ rep
+ movsb
+.LM1:
+ movb (%esi),%al
+ incl %esi
+
+ cmpb $32,%al
+ jb .LM2
+.LMATCH:
+ cmpb $64,%al
+ jb .LN3
+
+ movl %eax,%ecx
+ andb $31,%al
+ leal -1(%edi),%edx
+ shrl $5,%ecx
+ subl %eax,%edx
+ movb (%esi),%al
+ incl %esi
+
+ shll $5,%eax
+ subl %eax,%edx
+ incl %ecx
+ xchgl %esi,%edx
+ TEST_LOOKBEHIND(%esi)
+ TEST_OP((%edi,%ecx),%ebx)
+ rep
+ movsb
+ movl %edx,%esi
+ jmp .L1
+
+ ALIGN3
+.L12:
+ LODSB
+ leal 32(%eax),%ecx
+ cmpb $248,%al
+ jb .LIT
+
+ movl $280,%ecx
+ subb $248,%al
+ jz .L11
+ xchgl %eax,%ecx
+ xorb %al,%al
+ shll %cl,%eax
+ xchgl %eax,%ecx
+.L11:
+ TEST_OP((%edi,%ecx),%ebx)
+ TEST_IP((%esi,%ecx),%ebx)
+ rep
+ movsb
+ jmp .L1
+
+ ALIGN3
+.LM2:
+ leal -1(%edi),%edx
+ subl %eax,%edx
+ LODSB
+ shll $5,%eax
+ subl %eax,%edx
+ xchgl %esi,%edx
+ TEST_LOOKBEHIND(%esi)
+ TEST_OP(4(%edi),%ebx)
+ movsb
+ movsb
+ movsb
+ movl %edx,%esi
+ movsb
+ xorl %eax,%eax
+ jmp .LM1
+.LN3:
+ andb $31,%al
+ movl %eax,%ecx
+ jnz .LN6
+ movb $31,%cl
+.LN4:
+ LODSB
+ orb %al,%al
+ jnz .LN5
+ addl N_255,%ecx
+ jmp .LN4
+
+ ALIGN3
+.LN5:
+ addl %eax,%ecx
+.LN6:
+ movb (%esi),%al
+ incl %esi
+
+ movl %eax,%ebx
+ andb $63,%al
+ movl %edi,%edx
+ subl %eax,%edx
+
+ movb (%esi),%al
+ incl %esi
+
+ shll $6,%eax
+ subl %eax,%edx
+ cmpl %edi,%edx
+ jz .LEOF
+
+ xchgl %edx,%esi
+ leal 3(%ecx),%ecx
+ TEST_LOOKBEHIND(%esi)
+ TEST_OP((%edi,%ecx),%eax)
+ rep
+ movsb
+
+ movl %edx,%esi
+ xorl %eax,%eax
+ shrl $6,%ebx
+ movl %ebx,%ecx
+ jnz .LIT
+ jmp .L1
+
+.LEOF:
+/**** xorl %eax,%eax eax=0 from above */
+
+ cmpl $1,%ecx /* ecx must be 1 */
+ setnz %al
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1c_s1.S b/asm/i386/src/lzo1c_s1.S
new file mode 100644
index 0000000..59a7441
--- /dev/null
+++ b/asm/i386/src/lzo1c_s1.S
@@ -0,0 +1,61 @@
+/* lzo1c_s1.S -- LZO1C decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1c_decompress_asm)
+
+#include "enter.ash"
+#include "lzo1c_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1c_decompress_asm)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1c_s2.S b/asm/i386/src/lzo1c_s2.S
new file mode 100644
index 0000000..e74d3f9
--- /dev/null
+++ b/asm/i386/src/lzo1c_s2.S
@@ -0,0 +1,65 @@
+/* lzo1c_s2.S -- LZO1C decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LZO_TEST_DECOMPRESS_OVERRUN_INPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1c_decompress_asm_safe)
+
+#include "enter.ash"
+#include "lzo1c_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1c_decompress_asm_safe)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1f_d.ash b/asm/i386/src/lzo1f_d.ash
new file mode 100644
index 0000000..aa9279e
--- /dev/null
+++ b/asm/i386/src/lzo1f_d.ash
@@ -0,0 +1,176 @@
+/* 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
+*/
+
diff --git a/asm/i386/src/lzo1f_f1.S b/asm/i386/src/lzo1f_f1.S
new file mode 100644
index 0000000..7a4c2f9
--- /dev/null
+++ b/asm/i386/src/lzo1f_f1.S
@@ -0,0 +1,61 @@
+/* lzo1f_f1.S -- fast LZO1F decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1f_decompress_asm_fast)
+
+#include "enter.ash"
+#include "lzo1f_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1f_decompress_asm_fast)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1f_f2.S b/asm/i386/src/lzo1f_f2.S
new file mode 100644
index 0000000..876769e
--- /dev/null
+++ b/asm/i386/src/lzo1f_f2.S
@@ -0,0 +1,65 @@
+/* lzo1f_f2.S -- fast LZO1F decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LZO_TEST_DECOMPRESS_OVERRUN_INPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1f_decompress_asm_fast_safe)
+
+#include "enter.ash"
+#include "lzo1f_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1f_decompress_asm_fast_safe)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1x_d.ash b/asm/i386/src/lzo1x_d.ash
new file mode 100644
index 0000000..aa13835
--- /dev/null
+++ b/asm/i386/src/lzo1x_d.ash
@@ -0,0 +1,401 @@
+/* lzo1x_d.ash -- assembler implementation of the LZO1X 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/
+ */
+
+
+#if !defined(LZO1X) && !defined(LZO1Y)
+# define LZO1X
+#endif
+
+#if defined(LZO_FAST)
+# define NN 3
+#else
+# define NN 0
+#endif
+
+
+/***********************************************************************
+// init
+************************************************************************/
+
+ xorl %eax,%eax
+ xorl %ebx,%ebx /* high bits 9-32 stay 0 */
+ lodsb
+ cmpb $17,%al
+ jbe .L01
+ subb $17-NN,%al
+#if defined(LZO_FAST)
+ jmp .LFLR
+#else
+ cmpb $4,%al
+ jae .LFLR
+#if 1
+ TEST_OP((%edi,%eax),%edx)
+ TEST_IP((%esi,%eax),%edx)
+ movl %eax,%ecx
+ jmp .LFLR2
+#else
+ jmp .LFLR3
+#endif
+#endif
+
+
+/***********************************************************************
+// literal run
+************************************************************************/
+
+0: addl N_255,%eax
+ TEST_IP(18(%esi,%eax),%edx) /* minimum */
+1: movb (%esi),%bl
+ incl %esi
+ orb %bl,%bl
+ jz 0b
+ leal 18+NN(%eax,%ebx),%eax
+ jmp 3f
+
+
+ ALIGN3
+.L00:
+#ifdef LZO_DEBUG
+ andl $0xffffff00,%eax ; jnz .L_assert_fail
+ andl $0xffffff00,%ebx ; jnz .L_assert_fail
+ xorl %eax,%eax ; xorl %ebx,%ebx
+ xorl %ecx,%ecx ; xorl %edx,%edx
+#endif
+ TEST_IP_R(%esi)
+ LODSB
+.L01:
+ cmpb $16,%al
+ jae .LMATCH
+
+/* a literal run */
+ orb %al,%al
+ jz 1b
+ addl $3+NN,%eax
+3:
+.LFLR:
+ TEST_OP(-NN(%edi,%eax),%edx)
+ TEST_IP(-NN(%esi,%eax),%edx)
+#if defined(LZO_FAST)
+ movl %eax,%ecx
+ NOTL_3(%eax)
+ shrl $2,%ecx
+ andl N_3,%eax
+ COPYL(%esi,%edi,%edx)
+ subl %eax,%esi
+ subl %eax,%edi
+#else
+ movl %eax,%ecx
+ shrl $2,%eax
+ andl N_3,%ecx
+ COPYL_C(%esi,%edi,%edx,%eax)
+.LFLR2:
+ rep
+ movsb
+#endif
+
+#ifdef LZO_DEBUG
+ andl $0xffffff00,%eax ; jnz .L_assert_fail
+ andl $0xffffff00,%ebx ; jnz .L_assert_fail
+ xorl %eax,%eax ; xorl %ebx,%ebx
+ xorl %ecx,%ecx ; xorl %edx,%edx
+#endif
+ LODSB
+ cmpb $16,%al
+ jae .LMATCH
+
+
+/***********************************************************************
+// R1
+************************************************************************/
+
+ TEST_OP(3(%edi),%edx)
+ shrl $2,%eax
+ movb (%esi),%bl
+#if defined(LZO1X)
+ leal -0x801(%edi),%edx
+#elif defined(LZO1Y)
+ leal -0x401(%edi),%edx
+#endif
+ leal (%eax,%ebx,4),%eax
+ incl %esi
+ subl %eax,%edx
+ TEST_LOOKBEHIND(%edx)
+#if defined(LZO_FAST)
+ movl (%edx),%ecx
+ movl %ecx,(%edi)
+#else
+ movb (%edx),%al
+ movb %al,(%edi)
+ movb 1(%edx),%al
+ movb %al,1(%edi)
+ movb 2(%edx),%al
+ movb %al,2(%edi)
+#endif
+ addl N_3,%edi
+ jmp .LMDONE
+
+
+/***********************************************************************
+// M2
+************************************************************************/
+
+ ALIGN3
+.LMATCH:
+ cmpb $64,%al
+ jb .LM3MATCH
+
+/* a M2 match */
+ movl %eax,%ecx
+ shrl $2,%eax
+ leal -1(%edi),%edx
+#if defined(LZO1X)
+ andl $7,%eax
+ movb (%esi),%bl
+ shrl $5,%ecx
+ leal (%eax,%ebx,8),%eax
+#elif defined(LZO1Y)
+ andl N_3,%eax
+ movb (%esi),%bl
+ shrl $4,%ecx
+ leal (%eax,%ebx,4),%eax
+#endif
+ incl %esi
+ subl %eax,%edx
+
+#if defined(LZO_FAST)
+#if defined(LZO1X)
+ addl $1+3,%ecx
+#elif defined(LZO1Y)
+ addl $2,%ecx
+#endif
+#else
+#if defined(LZO1X)
+ incl %ecx
+#elif defined(LZO1Y)
+ decl %ecx
+#endif
+#endif
+
+ cmpl N_3,%eax
+ jae .LCOPYLONG
+ jmp .LCOPYBYTE
+
+
+/***********************************************************************
+// M3
+************************************************************************/
+
+0: addl N_255,%eax
+ TEST_IP(3(%esi),%edx) /* minimum */
+1: movb (%esi),%bl
+ incl %esi
+ orb %bl,%bl
+ jz 0b
+ leal 33+NN(%eax,%ebx),%ecx
+ xorl %eax,%eax
+ jmp 3f
+
+
+ ALIGN3
+.LM3MATCH:
+ cmpb $32,%al
+ jb .LM4MATCH
+
+/* a M3 match */
+ andl $31,%eax
+ jz 1b
+ lea 2+NN(%eax),%ecx
+3:
+#ifdef LZO_DEBUG
+ andl $0xffff0000,%eax ; jnz .L_assert_fail
+#endif
+ movw (%esi),%ax
+ leal -1(%edi),%edx
+ shrl $2,%eax
+ addl $2,%esi
+ subl %eax,%edx
+
+ cmpl N_3,%eax
+ jb .LCOPYBYTE
+
+
+/***********************************************************************
+// copy match
+************************************************************************/
+
+ ALIGN1
+.LCOPYLONG: /* copy match using longwords */
+ TEST_LOOKBEHIND(%edx)
+#if defined(LZO_FAST)
+ leal -3(%edi,%ecx),%eax
+ shrl $2,%ecx
+ TEST_OP_R(%eax)
+ COPYL(%edx,%edi,%ebx)
+ movl %eax,%edi
+ xorl %ebx,%ebx
+#else
+ TEST_OP((%edi,%ecx),%eax)
+ movl %ecx,%ebx
+ shrl $2,%ebx
+ jz 2f
+ COPYL_C(%edx,%edi,%eax,%ebx)
+ andl N_3,%ecx
+ jz 1f
+2: COPYB_C(%edx,%edi,%al,%ecx)
+1:
+#endif
+
+.LMDONE:
+ movb -2(%esi),%al
+ andl N_3,%eax
+ jz .L00
+.LFLR3:
+ TEST_OP((%edi,%eax),%edx)
+ TEST_IP((%esi,%eax),%edx)
+#if defined(LZO_FAST)
+ movl (%esi),%edx
+ addl %eax,%esi
+ movl %edx,(%edi)
+ addl %eax,%edi
+#else
+ COPYB_C(%esi,%edi,%cl,%eax)
+#endif
+
+#ifdef LZO_DEBUG
+ andl $0xffffff00,%eax ; jnz .L_assert_fail
+ andl $0xffffff00,%ebx ; jnz .L_assert_fail
+ xorl %eax,%eax ; xorl %ebx,%ebx
+ xorl %ecx,%ecx ; xorl %edx,%edx
+#endif
+ LODSB
+ jmp .LMATCH
+
+
+ ALIGN3
+.LCOPYBYTE: /* copy match using bytes */
+ TEST_LOOKBEHIND(%edx)
+ TEST_OP(-NN(%edi,%ecx),%eax)
+ xchgl %edx,%esi
+#if defined(LZO_FAST)
+ subl N_3,%ecx
+#endif
+ rep
+ movsb
+ movl %edx,%esi
+ jmp .LMDONE
+
+
+/***********************************************************************
+// M4
+************************************************************************/
+
+0: addl N_255,%ecx
+ TEST_IP(3(%esi),%edx) /* minimum */
+1: movb (%esi),%bl
+ incl %esi
+ orb %bl,%bl
+ jz 0b
+ leal 9+NN(%ebx,%ecx),%ecx
+ jmp 3f
+
+
+ ALIGN3
+.LM4MATCH:
+ cmpb $16,%al
+ jb .LM1MATCH
+
+/* a M4 match */
+ movl %eax,%ecx
+ andl $8,%eax
+ shll $13,%eax /* save in bit 16 */
+ andl $7,%ecx
+ jz 1b
+ addl $2+NN,%ecx
+3:
+#ifdef LZO_DEBUG
+ movl %eax,%edx ; andl $0xfffe0000,%edx ; jnz .L_assert_fail
+#endif
+ movw (%esi),%ax
+ addl $2,%esi
+ leal -0x4000(%edi),%edx
+ shrl $2,%eax
+ jz .LEOF
+ subl %eax,%edx
+ jmp .LCOPYLONG
+
+
+/***********************************************************************
+// M1
+************************************************************************/
+
+ ALIGN3
+.LM1MATCH:
+/* a M1 match */
+ TEST_OP(2(%edi),%edx)
+ shrl $2,%eax
+ movb (%esi),%bl
+ leal -1(%edi),%edx
+ leal (%eax,%ebx,4),%eax
+ incl %esi
+ subl %eax,%edx
+ TEST_LOOKBEHIND(%edx)
+
+ movb (%edx),%al /* we must use this because edx can be edi-1 */
+ movb %al,(%edi)
+ movb 1(%edx),%bl
+ movb %bl,1(%edi)
+ addl $2,%edi
+ jmp .LMDONE
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+.LEOF:
+/**** xorl %eax,%eax eax=0 from above */
+
+ cmpl $3+NN,%ecx /* ecx must be 3/6 */
+ setnz %al
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1x_f1.S b/asm/i386/src/lzo1x_f1.S
new file mode 100644
index 0000000..8cb07f2
--- /dev/null
+++ b/asm/i386/src/lzo1x_f1.S
@@ -0,0 +1,63 @@
+/* lzo1x_f1.S -- fast LZO1X decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LZO_FAST
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1x_decompress_asm_fast)
+
+#include "enter.ash"
+#include "lzo1x_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1x_decompress_asm_fast)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1x_f2.S b/asm/i386/src/lzo1x_f2.S
new file mode 100644
index 0000000..e8b2b59
--- /dev/null
+++ b/asm/i386/src/lzo1x_f2.S
@@ -0,0 +1,67 @@
+/* lzo1x_f2.S -- fast LZO1X decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LZO_FAST
+
+#define LZO_TEST_DECOMPRESS_OVERRUN_INPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1x_decompress_asm_fast_safe)
+
+#include "enter.ash"
+#include "lzo1x_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1x_decompress_asm_fast_safe)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1x_s1.S b/asm/i386/src/lzo1x_s1.S
new file mode 100644
index 0000000..6cb90ec
--- /dev/null
+++ b/asm/i386/src/lzo1x_s1.S
@@ -0,0 +1,61 @@
+/* lzo1x_s1.S -- LZO1X decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1x_decompress_asm)
+
+#include "enter.ash"
+#include "lzo1x_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1x_decompress_asm)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1x_s2.S b/asm/i386/src/lzo1x_s2.S
new file mode 100644
index 0000000..e4e98ea
--- /dev/null
+++ b/asm/i386/src/lzo1x_s2.S
@@ -0,0 +1,65 @@
+/* lzo1x_s2.S -- LZO1X decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LZO_TEST_DECOMPRESS_OVERRUN_INPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1x_decompress_asm_safe)
+
+#include "enter.ash"
+#include "lzo1x_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1x_decompress_asm_safe)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1y_f1.S b/asm/i386/src/lzo1y_f1.S
new file mode 100644
index 0000000..7d9db26
--- /dev/null
+++ b/asm/i386/src/lzo1y_f1.S
@@ -0,0 +1,65 @@
+/* lzo1y_f1.S -- fast LZO1Y decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LZO_FAST
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1y_decompress_asm_fast)
+
+#define LZO1Y
+
+#include "enter.ash"
+#include "lzo1x_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1y_decompress_asm_fast)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1y_f2.S b/asm/i386/src/lzo1y_f2.S
new file mode 100644
index 0000000..09aa3af
--- /dev/null
+++ b/asm/i386/src/lzo1y_f2.S
@@ -0,0 +1,69 @@
+/* lzo1y_f2.S -- fast LZO1Y decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LZO_FAST
+
+#define LZO_TEST_DECOMPRESS_OVERRUN_INPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1y_decompress_asm_fast_safe)
+
+#define LZO1Y
+
+#include "enter.ash"
+#include "lzo1x_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1y_decompress_asm_fast_safe)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1y_s1.S b/asm/i386/src/lzo1y_s1.S
new file mode 100644
index 0000000..97b568e
--- /dev/null
+++ b/asm/i386/src/lzo1y_s1.S
@@ -0,0 +1,63 @@
+/* lzo1y_s1.S -- LZO1Y decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1y_decompress_asm)
+
+#define LZO1Y
+
+#include "enter.ash"
+#include "lzo1x_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1y_decompress_asm)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo1y_s2.S b/asm/i386/src/lzo1y_s2.S
new file mode 100644
index 0000000..808107f
--- /dev/null
+++ b/asm/i386/src/lzo1y_s2.S
@@ -0,0 +1,67 @@
+/* lzo1y_s2.S -- LZO1Y decompression in assembler (i386 + gcc)
+
+ 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/
+ */
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LZO_TEST_DECOMPRESS_OVERRUN_INPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT
+#define LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND
+
+#include "lzo_asm.h"
+
+ .text
+
+ LZO_PUBLIC(lzo1y_decompress_asm_safe)
+
+#define LZO1Y
+
+#include "enter.ash"
+#include "lzo1x_d.ash"
+#include "leave.ash"
+
+ LZO_PUBLIC_END(lzo1y_decompress_asm_safe)
+
+
+/*
+vi:ts=4
+*/
+
diff --git a/asm/i386/src/lzo_asm.h b/asm/i386/src/lzo_asm.h
new file mode 100644
index 0000000..55fdf6d
--- /dev/null
+++ b/asm/i386/src/lzo_asm.h
@@ -0,0 +1,287 @@
+/* lzo_asm.h -- LZO assembler stuff
+
+ 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/
+ */
+
+
+/***********************************************************************
+// <asmconfig.h>
+************************************************************************/
+
+#if !defined(__i386__)
+# error
+#endif
+
+#if !defined(IN_CONFIGURE)
+#if defined(LZO_HAVE_CONFIG_H)
+# include <config.h>
+#else
+ /* manual configuration - see defaults below */
+# if defined(__ELF__)
+# define MFX_ASM_HAVE_TYPE
+# define MFX_ASM_NAME_NO_UNDERSCORES
+# elif defined(__linux__) /* Linux a.out */
+# define MFX_ASM_ALIGN_PTWO
+# elif defined(__DJGPP__)
+# define MFX_ASM_ALIGN_PTWO
+# elif defined(__GO32__) /* djgpp v1 */
+# define MFX_ASM_CANNOT_USE_EBP
+# elif defined(__EMX__)
+# define MFX_ASM_ALIGN_PTWO
+# define MFX_ASM_CANNOT_USE_EBP
+# endif
+#endif
+#endif
+
+#if 1 && defined(__ELF__)
+.section .note.GNU-stack,"",@progbits
+#endif
+#if 0 && defined(__ELF__)
+#undef i386
+.arch i386
+.code32
+#endif
+
+
+/***********************************************************************
+// name always uses underscores
+// [ OLD: name (default: with underscores) ]
+************************************************************************/
+
+#if !defined(LZO_ASM_NAME)
+# define LZO_ASM_NAME(n) _ ## n
+#if 0
+# if defined(MFX_ASM_NAME_NO_UNDERSCORES)
+# define LZO_ASM_NAME(n) n
+# else
+# define LZO_ASM_NAME(n) _ ## n
+# endif
+#endif
+#endif
+
+
+/***********************************************************************
+// .type (default: do not use)
+************************************************************************/
+
+#if !defined(LZO_PUBLIC)
+#if defined(__LZO_DB__)
+# define LZO_PUBLIC(func) \
+ .p2align 4 ; .byte 0,0,0,0,0,0,0 ; .ascii "LZO_START"
+# define LZO_PUBLIC_END(func) \
+ .p2align 4,0x90 ; .ascii "LZO_END"
+#elif defined(MFX_ASM_HAVE_TYPE)
+# define LZO_PUBLIC(func) \
+ ALIGN3 ; .type LZO_ASM_NAME(func),@function ; \
+ .globl LZO_ASM_NAME(func) ; LZO_ASM_NAME(func):
+# define LZO_PUBLIC_END(func) \
+ .size LZO_ASM_NAME(func),.-LZO_ASM_NAME(func)
+#else
+# define LZO_PUBLIC(func) \
+ ALIGN3 ; .globl LZO_ASM_NAME(func) ; LZO_ASM_NAME(func):
+# define LZO_PUBLIC_END(func)
+#endif
+#endif
+
+
+/***********************************************************************
+// .align (default: bytes)
+************************************************************************/
+
+#if !defined(MFX_ASM_ALIGN_BYTES) && !defined(MFX_ASM_ALIGN_PTWO)
+# define MFX_ASM_ALIGN_BYTES
+#endif
+
+#if !defined(LZO_ASM_ALIGN)
+# if defined(MFX_ASM_ALIGN_PTWO)
+# define LZO_ASM_ALIGN(x) .align x
+# else
+# define LZO_ASM_ALIGN(x) .align (1 << (x))
+# endif
+#endif
+
+#define ALIGN1 LZO_ASM_ALIGN(1)
+#define ALIGN2 LZO_ASM_ALIGN(2)
+#define ALIGN3 LZO_ASM_ALIGN(3)
+
+
+/***********************************************************************
+// ebp usage (default: can use)
+************************************************************************/
+
+#if !defined(MFX_ASM_CANNOT_USE_EBP)
+# if 1 && !defined(N_3_EBP) && !defined(N_255_EBP)
+# define N_3_EBP
+# endif
+# if 0 && !defined(N_3_EBP) && !defined(N_255_EBP)
+# define N_255_EBP
+# endif
+#endif
+
+#if defined(N_3_EBP) && defined(N_255_EBP)
+# error
+#endif
+#if defined(MFX_ASM_CANNOT_USE_EBP)
+# if defined(N_3_EBP) || defined(N_255_EBP)
+# error
+# endif
+#endif
+
+#if !defined(N_3)
+# if defined(N_3_EBP)
+# define N_3 %ebp
+# else
+# define N_3 $3
+# endif
+#endif
+
+#if !defined(N_255)
+# if defined(N_255_EBP)
+# define N_255 %ebp
+# define NOTL_3(r) xorl %ebp,r
+# else
+# define N_255 $255
+# endif
+#endif
+
+#if !defined(NOTL_3)
+# define NOTL_3(r) xorl N_3,r
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#ifndef INP
+#define INP 4+36(%esp)
+#define INS 8+36(%esp)
+#define OUTP 12+36(%esp)
+#define OUTS 16+36(%esp)
+#endif
+
+#define INEND 4(%esp)
+#define OUTEND (%esp)
+
+
+#if defined(LZO_TEST_DECOMPRESS_OVERRUN_INPUT)
+# define TEST_IP_R(r) cmpl r,INEND ; jb .L_input_overrun
+# define TEST_IP(addr,r) leal addr,r ; TEST_IP_R(r)
+#else
+# define TEST_IP_R(r)
+# define TEST_IP(addr,r)
+#endif
+
+#if defined(LZO_TEST_DECOMPRESS_OVERRUN_OUTPUT)
+# define TEST_OP_R(r) cmpl r,OUTEND ; jb .L_output_overrun
+# define TEST_OP(addr,r) leal addr,r ; TEST_OP_R(r)
+#else
+# define TEST_OP_R(r)
+# define TEST_OP(addr,r)
+#endif
+
+#if defined(LZO_TEST_DECOMPRESS_OVERRUN_LOOKBEHIND)
+# define TEST_LOOKBEHIND(r) cmpl OUTP,r ; jb .L_lookbehind_overrun
+#else
+# define TEST_LOOKBEHIND(r)
+#endif
+
+
+/***********************************************************************
+//
+************************************************************************/
+
+#define LODSB movb (%esi),%al ; incl %esi
+
+#define MOVSB(r1,r2,x) movb (r1),x ; incl r1 ; movb x,(r2) ; incl r2
+#define MOVSW(r1,r2,x) movb (r1),x ; movb x,(r2) ; \
+ movb 1(r1),x ; addl $2,r1 ; \
+ movb x,1(r2) ; addl $2,r2
+#define MOVSL(r1,r2,x) movl (r1),x ; addl $4,r1 ; movl x,(r2) ; addl $4,r2
+
+#if defined(LZO_DEBUG)
+#define COPYB_C(r1,r2,x,rc) \
+ cmpl $0,rc ; jz .L_assert_fail; \
+ 9: MOVSB(r1,r2,x) ; decl rc ; jnz 9b
+#define COPYL_C(r1,r2,x,rc) \
+ cmpl $0,rc ; jz .L_assert_fail; \
+ 9: MOVSL(r1,r2,x) ; decl rc ; jnz 9b
+#else
+#define COPYB_C(r1,r2,x,rc) \
+ 9: MOVSB(r1,r2,x) ; decl rc ; jnz 9b
+#define COPYL_C(r1,r2,x,rc) \
+ 9: MOVSL(r1,r2,x) ; decl rc ; jnz 9b
+#endif
+
+#define COPYB(r1,r2,x) COPYB_C(r1,r2,x,%ecx)
+#define COPYL(r1,r2,x) COPYL_C(r1,r2,x,%ecx)
+
+
+/***********************************************************************
+// not used
+************************************************************************/
+
+#if 0
+
+#if 0
+#define REP_MOVSB(x) rep ; movsb
+#define REP_MOVSL(x) shrl $2,%ecx ; rep ; movsl
+#elif 1
+#define REP_MOVSB(x) COPYB(%esi,%edi,x)
+#define REP_MOVSL(x) shrl $2,%ecx ; COPYL(%esi,%edi,x)
+#else
+#define REP_MOVSB(x) rep ; movsb
+#define REP_MOVSL(x) jmp 9f ; 8: movsb ; decl %ecx ; \
+ 9: testl $3,%edi ; jnz 8b ; \
+ movl %ecx,x ; shrl $2,%ecx ; andl $3,x ; \
+ rep ; movsl ; movl x,%ecx ; rep ; movsb
+#endif
+
+#if 1
+#define NEGL(x) negl x
+#else
+#define NEGL(x) xorl $-1,x ; incl x
+#endif
+
+#endif
+
+
+
+/*
+vi:ts=4
+*/
+