/* lzo_asm.h -- LZO assembler stuff

   This file is part of the LZO real-time data compression library.

   Copyright (C) 1996-2014 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 1
#    define MFX_ASM_NAME_NO_UNDERSCORES 1
#  elif defined(__linux__)              /* Linux a.out */
#    define MFX_ASM_ALIGN_PTWO 1
#  elif defined(__DJGPP__)
#    define MFX_ASM_ALIGN_PTWO 1
#  elif defined(__GO32__)               /* djgpp v1 */
#    define MFX_ASM_CANNOT_USE_EBP 1
#  elif defined(__EMX__)
#    define MFX_ASM_ALIGN_PTWO 1
#    define MFX_ASM_CANNOT_USE_EBP 1
#  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 1
#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 1
#  endif
#  if 0 && !defined(N_3_EBP) && !defined(N_255_EBP)
#    define N_255_EBP 1
#  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
*/

