⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lzo_asm.h

📁 lzo 压缩源程序!
💻 H
字号:
/* lzo_asm.h -- LZO assembler stuff   This file is part of the LZO real-time data compression library.   Copyright (C) 1996-2002 Markus Franz Xaver Johannes Oberhumer   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.,   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.   Markus F.X.J. Oberhumer   <markus@oberhumer.com> *//***********************************************************************// <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/***********************************************************************// 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(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/***********************************************************************// .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*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -