Blame src/lzo_func.h

Packit 679830
/* lzo_func.h -- functions
Packit 679830
Packit 679830
   This file is part of the LZO real-time data compression library.
Packit 679830
Packit 679830
   Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer
Packit 679830
   All Rights Reserved.
Packit 679830
Packit 679830
   The LZO library is free software; you can redistribute it and/or
Packit 679830
   modify it under the terms of the GNU General Public License as
Packit 679830
   published by the Free Software Foundation; either version 2 of
Packit 679830
   the License, or (at your option) any later version.
Packit 679830
Packit 679830
   The LZO library is distributed in the hope that it will be useful,
Packit 679830
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 679830
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 679830
   GNU General Public License for more details.
Packit 679830
Packit 679830
   You should have received a copy of the GNU General Public License
Packit 679830
   along with the LZO library; see the file COPYING.
Packit 679830
   If not, write to the Free Software Foundation, Inc.,
Packit 679830
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Packit 679830
Packit 679830
   Markus F.X.J. Oberhumer
Packit 679830
   <markus@oberhumer.com>
Packit 679830
   http://www.oberhumer.com/opensource/lzo/
Packit 679830
 */
Packit 679830
Packit 679830
Packit 679830
/* WARNING: this file should *not* be used by applications. It is
Packit 679830
   part of the implementation of the library and is subject
Packit 679830
   to change.
Packit 679830
 */
Packit 679830
Packit 679830
Packit 679830
#ifndef __LZO_FUNC_H
Packit 679830
#define __LZO_FUNC_H 1
Packit 679830
Packit 679830
Packit 679830
/***********************************************************************
Packit 679830
// bitops
Packit 679830
************************************************************************/
Packit 679830
Packit 679830
#if !defined(LZO_BITOPS_USE_ASM_BITSCAN) && !defined(LZO_BITOPS_USE_GNUC_BITSCAN) && !defined(LZO_BITOPS_USE_MSC_BITSCAN)
Packit 679830
#if 1 && (LZO_ARCH_AMD64) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_ASM_SYNTAX_GNUC)
Packit 679830
#define LZO_BITOPS_USE_ASM_BITSCAN 1
Packit 679830
#elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1000)) || (LZO_CC_LLVM && (!defined(__llvm_tools_version__) || (__llvm_tools_version__+0 >= 0x010500ul))))
Packit 679830
#define LZO_BITOPS_USE_GNUC_BITSCAN 1
Packit 679830
#elif (LZO_OS_WIN32 || LZO_OS_WIN64) && ((LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 1010)) || (LZO_CC_MSC && (_MSC_VER >= 1400)))
Packit 679830
#define LZO_BITOPS_USE_MSC_BITSCAN 1
Packit 679830
#if (LZO_CC_MSC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
Packit 679830
#include <intrin.h>
Packit 679830
#endif
Packit 679830
#if (LZO_CC_MSC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
Packit 679830
#pragma intrinsic(_BitScanReverse)
Packit 679830
#pragma intrinsic(_BitScanForward)
Packit 679830
#endif
Packit 679830
#if (LZO_CC_MSC) && (LZO_ARCH_AMD64)
Packit 679830
#pragma intrinsic(_BitScanReverse64)
Packit 679830
#pragma intrinsic(_BitScanForward64)
Packit 679830
#endif
Packit 679830
#endif
Packit 679830
#endif
Packit 679830
Packit 679830
__lzo_static_forceinline unsigned lzo_bitops_ctlz32_func(lzo_uint32_t v)
Packit 679830
{
Packit 679830
#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
Packit 679830
    unsigned long r; (void) _BitScanReverse(&r, v); return (unsigned) r ^ 31;
Packit 679830
#define lzo_bitops_ctlz32(v)    lzo_bitops_ctlz32_func(v)
Packit 679830
#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
Packit 679830
    lzo_uint32_t r;
Packit 679830
    __asm__("bsr %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC);
Packit 679830
    return (unsigned) r ^ 31;
Packit 679830
#define lzo_bitops_ctlz32(v)    lzo_bitops_ctlz32_func(v)
Packit 679830
#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_INT == 4)
Packit 679830
    unsigned r; r = (unsigned) __builtin_clz(v); return r;
Packit 679830
#define lzo_bitops_ctlz32(v)    ((unsigned) __builtin_clz(v))
Packit 679830
#else
Packit 679830
    LZO_UNUSED(v); return 0;
Packit 679830
#endif
Packit 679830
}
Packit 679830
Packit 679830
#if defined(lzo_uint64_t)
Packit 679830
__lzo_static_forceinline unsigned lzo_bitops_ctlz64_func(lzo_uint64_t v)
Packit 679830
{
Packit 679830
#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64)
Packit 679830
    unsigned long r; (void) _BitScanReverse64(&r, v); return (unsigned) r ^ 63;
Packit 679830
#define lzo_bitops_ctlz64(v)    lzo_bitops_ctlz64_func(v)
Packit 679830
#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC)
Packit 679830
    lzo_uint64_t r;
Packit 679830
    __asm__("bsr %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC);
Packit 679830
    return (unsigned) r ^ 63;
Packit 679830
#define lzo_bitops_ctlz64(v)    lzo_bitops_ctlz64_func(v)
Packit 679830
#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG == 8) && (LZO_WORDSIZE >= 8)
Packit 679830
    unsigned r; r = (unsigned) __builtin_clzl(v); return r;
Packit 679830
#define lzo_bitops_ctlz64(v)    ((unsigned) __builtin_clzl(v))
Packit 679830
#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG_LONG == 8) && (LZO_WORDSIZE >= 8)
Packit 679830
    unsigned r; r = (unsigned) __builtin_clzll(v); return r;
Packit 679830
#define lzo_bitops_ctlz64(v)    ((unsigned) __builtin_clzll(v))
Packit 679830
#else
Packit 679830
    LZO_UNUSED(v); return 0;
Packit 679830
#endif
Packit 679830
}
Packit 679830
#endif
Packit 679830
Packit 679830
__lzo_static_forceinline unsigned lzo_bitops_cttz32_func(lzo_uint32_t v)
Packit 679830
{
Packit 679830
#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386)
Packit 679830
    unsigned long r; (void) _BitScanForward(&r, v); return (unsigned) r;
Packit 679830
#define lzo_bitops_cttz32(v)    lzo_bitops_cttz32_func(v)
Packit 679830
#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC)
Packit 679830
    lzo_uint32_t r;
Packit 679830
    __asm__("bsf %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC);
Packit 679830
    return (unsigned) r;
Packit 679830
#define lzo_bitops_cttz32(v)    lzo_bitops_cttz32_func(v)
Packit 679830
#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_INT >= 4)
Packit 679830
    unsigned r; r = (unsigned) __builtin_ctz(v); return r;
Packit 679830
#define lzo_bitops_cttz32(v)    ((unsigned) __builtin_ctz(v))
Packit 679830
#else
Packit 679830
    LZO_UNUSED(v); return 0;
Packit 679830
#endif
Packit 679830
}
Packit 679830
Packit 679830
#if defined(lzo_uint64_t)
Packit 679830
__lzo_static_forceinline unsigned lzo_bitops_cttz64_func(lzo_uint64_t v)
Packit 679830
{
Packit 679830
#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64)
Packit 679830
    unsigned long r; (void) _BitScanForward64(&r, v); return (unsigned) r;
Packit 679830
#define lzo_bitops_cttz64(v)    lzo_bitops_cttz64_func(v)
Packit 679830
#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC)
Packit 679830
    lzo_uint64_t r;
Packit 679830
    __asm__("bsf %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC);
Packit 679830
    return (unsigned) r;
Packit 679830
#define lzo_bitops_cttz64(v)    lzo_bitops_cttz64_func(v)
Packit 679830
#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG >= 8) && (LZO_WORDSIZE >= 8)
Packit 679830
    unsigned r; r = (unsigned) __builtin_ctzl(v); return r;
Packit 679830
#define lzo_bitops_cttz64(v)    ((unsigned) __builtin_ctzl(v))
Packit 679830
#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG_LONG >= 8) && (LZO_WORDSIZE >= 8)
Packit 679830
    unsigned r; r = (unsigned) __builtin_ctzll(v); return r;
Packit 679830
#define lzo_bitops_cttz64(v)    ((unsigned) __builtin_ctzll(v))
Packit 679830
#else
Packit 679830
    LZO_UNUSED(v); return 0;
Packit 679830
#endif
Packit 679830
}
Packit 679830
#endif
Packit 679830
Packit 679830
#if 1 && (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
Packit 679830
static void __attribute__((__unused__))
Packit 679830
#else
Packit 679830
__lzo_static_forceinline void
Packit 679830
#endif
Packit 679830
lzo_bitops_unused_funcs(void)
Packit 679830
{
Packit 679830
    LZO_UNUSED_FUNC(lzo_bitops_ctlz32_func);
Packit 679830
    LZO_UNUSED_FUNC(lzo_bitops_cttz32_func);
Packit 679830
#if defined(lzo_uint64_t)
Packit 679830
    LZO_UNUSED_FUNC(lzo_bitops_ctlz64_func);
Packit 679830
    LZO_UNUSED_FUNC(lzo_bitops_cttz64_func);
Packit 679830
#endif
Packit 679830
    LZO_UNUSED_FUNC(lzo_bitops_unused_funcs);
Packit 679830
}
Packit 679830
Packit 679830
Packit 679830
/***********************************************************************
Packit 679830
// memops
Packit 679830
************************************************************************/
Packit 679830
Packit 679830
#if defined(__lzo_alignof) && !(LZO_CFG_NO_UNALIGNED)
Packit 679830
#ifndef __lzo_memops_tcheck
Packit 679830
#define __lzo_memops_tcheck(t,a,b) ((void)0, sizeof(t) == (a) && __lzo_alignof(t) == (b))
Packit 679830
#endif
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_TU0p
Packit 679830
#define lzo_memops_TU0p void __LZO_MMODEL *
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_TU1p
Packit 679830
#define lzo_memops_TU1p unsigned char __LZO_MMODEL *
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_TU2p
Packit 679830
#if (LZO_OPT_UNALIGNED16)
Packit 679830
typedef lzo_uint16_t __lzo_may_alias lzo_memops_TU2;
Packit 679830
#define lzo_memops_TU2p volatile lzo_memops_TU2 *
Packit 679830
#elif defined(__lzo_byte_struct)
Packit 679830
__lzo_byte_struct(lzo_memops_TU2_struct,2)
Packit 679830
typedef struct lzo_memops_TU2_struct lzo_memops_TU2;
Packit 679830
#else
Packit 679830
struct lzo_memops_TU2_struct { unsigned char a[2]; } __lzo_may_alias;
Packit 679830
typedef struct lzo_memops_TU2_struct lzo_memops_TU2;
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_TU2p
Packit 679830
#define lzo_memops_TU2p lzo_memops_TU2 *
Packit 679830
#endif
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_TU4p
Packit 679830
#if (LZO_OPT_UNALIGNED32)
Packit 679830
typedef lzo_uint32_t __lzo_may_alias lzo_memops_TU4;
Packit 679830
#define lzo_memops_TU4p volatile lzo_memops_TU4 __LZO_MMODEL *
Packit 679830
#elif defined(__lzo_byte_struct)
Packit 679830
__lzo_byte_struct(lzo_memops_TU4_struct,4)
Packit 679830
typedef struct lzo_memops_TU4_struct lzo_memops_TU4;
Packit 679830
#else
Packit 679830
struct lzo_memops_TU4_struct { unsigned char a[4]; } __lzo_may_alias;
Packit 679830
typedef struct lzo_memops_TU4_struct lzo_memops_TU4;
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_TU4p
Packit 679830
#define lzo_memops_TU4p lzo_memops_TU4 __LZO_MMODEL *
Packit 679830
#endif
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_TU8p
Packit 679830
#if (LZO_OPT_UNALIGNED64)
Packit 679830
typedef lzo_uint64_t __lzo_may_alias lzo_memops_TU8;
Packit 679830
#define lzo_memops_TU8p volatile lzo_memops_TU8 __LZO_MMODEL *
Packit 679830
#elif defined(__lzo_byte_struct)
Packit 679830
__lzo_byte_struct(lzo_memops_TU8_struct,8)
Packit 679830
typedef struct lzo_memops_TU8_struct lzo_memops_TU8;
Packit 679830
#else
Packit 679830
struct lzo_memops_TU8_struct { unsigned char a[8]; } __lzo_may_alias;
Packit 679830
typedef struct lzo_memops_TU8_struct lzo_memops_TU8;
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_TU8p
Packit 679830
#define lzo_memops_TU8p lzo_memops_TU8 __LZO_MMODEL *
Packit 679830
#endif
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_set_TU1p
Packit 679830
#define lzo_memops_set_TU1p     volatile lzo_memops_TU1p
Packit 679830
#endif
Packit 679830
#ifndef lzo_memops_move_TU1p
Packit 679830
#define lzo_memops_move_TU1p    lzo_memops_TU1p
Packit 679830
#endif
Packit 679830
#define LZO_MEMOPS_SET1(dd,cc) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_set_TU1p d__1 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    d__1[0] = LZO_BYTE(cc); \
Packit 679830
    LZO_BLOCK_END
Packit 679830
#define LZO_MEMOPS_SET2(dd,cc) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_set_TU1p d__2 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    d__2[0] = LZO_BYTE(cc); d__2[1] = LZO_BYTE(cc); \
Packit 679830
    LZO_BLOCK_END
Packit 679830
#define LZO_MEMOPS_SET3(dd,cc) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_set_TU1p d__3 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    d__3[0] = LZO_BYTE(cc); d__3[1] = LZO_BYTE(cc); d__3[2] = LZO_BYTE(cc); \
Packit 679830
    LZO_BLOCK_END
Packit 679830
#define LZO_MEMOPS_SET4(dd,cc) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_set_TU1p d__4 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    d__4[0] = LZO_BYTE(cc); d__4[1] = LZO_BYTE(cc); d__4[2] = LZO_BYTE(cc); d__4[3] = LZO_BYTE(cc); \
Packit 679830
    LZO_BLOCK_END
Packit 679830
#define LZO_MEMOPS_MOVE1(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_move_TU1p d__1 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    const lzo_memops_move_TU1p s__1 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
Packit 679830
    d__1[0] = s__1[0]; \
Packit 679830
    LZO_BLOCK_END
Packit 679830
#define LZO_MEMOPS_MOVE2(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_move_TU1p d__2 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    const lzo_memops_move_TU1p s__2 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
Packit 679830
    d__2[0] = s__2[0]; d__2[1] = s__2[1]; \
Packit 679830
    LZO_BLOCK_END
Packit 679830
#define LZO_MEMOPS_MOVE3(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_move_TU1p d__3 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    const lzo_memops_move_TU1p s__3 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
Packit 679830
    d__3[0] = s__3[0]; d__3[1] = s__3[1]; d__3[2] = s__3[2]; \
Packit 679830
    LZO_BLOCK_END
Packit 679830
#define LZO_MEMOPS_MOVE4(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_move_TU1p d__4 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    const lzo_memops_move_TU1p s__4 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
Packit 679830
    d__4[0] = s__4[0]; d__4[1] = s__4[1]; d__4[2] = s__4[2]; d__4[3] = s__4[3]; \
Packit 679830
    LZO_BLOCK_END
Packit 679830
#define LZO_MEMOPS_MOVE8(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_move_TU1p d__8 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    const lzo_memops_move_TU1p s__8 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \
Packit 679830
    d__8[0] = s__8[0]; d__8[1] = s__8[1]; d__8[2] = s__8[2]; d__8[3] = s__8[3]; \
Packit 679830
    d__8[4] = s__8[4]; d__8[5] = s__8[5]; d__8[6] = s__8[6]; d__8[7] = s__8[7]; \
Packit 679830
    LZO_BLOCK_END
Packit 679830
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU1p)0)==1)
Packit 679830
#define LZO_MEMOPS_COPY1(dd,ss) LZO_MEMOPS_MOVE1(dd,ss)
Packit 679830
#if (LZO_OPT_UNALIGNED16)
Packit 679830
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU2p)0)==2)
Packit 679830
#define LZO_MEMOPS_COPY2(dd,ss) \
Packit 679830
    * (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss)
Packit 679830
#elif defined(__lzo_memops_tcheck)
Packit 679830
#define LZO_MEMOPS_COPY2(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN if (__lzo_memops_tcheck(lzo_memops_TU2,2,1)) { \
Packit 679830
        * (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss); \
Packit 679830
    } else { LZO_MEMOPS_MOVE2(dd,ss); } LZO_BLOCK_END
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_COPY2(dd,ss) LZO_MEMOPS_MOVE2(dd,ss)
Packit 679830
#endif
Packit 679830
#if (LZO_OPT_UNALIGNED32)
Packit 679830
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU4p)0)==4)
Packit 679830
#define LZO_MEMOPS_COPY4(dd,ss) \
Packit 679830
    * (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss)
Packit 679830
#elif defined(__lzo_memops_tcheck)
Packit 679830
#define LZO_MEMOPS_COPY4(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN if (__lzo_memops_tcheck(lzo_memops_TU4,4,1)) { \
Packit 679830
        * (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss); \
Packit 679830
    } else { LZO_MEMOPS_MOVE4(dd,ss); } LZO_BLOCK_END
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_COPY4(dd,ss) LZO_MEMOPS_MOVE4(dd,ss)
Packit 679830
#endif
Packit 679830
#if (LZO_WORDSIZE != 8)
Packit 679830
#define LZO_MEMOPS_COPY8(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN LZO_MEMOPS_COPY4(dd,ss); LZO_MEMOPS_COPY4((lzo_memops_TU1p)(lzo_memops_TU0p)(dd)+4,(const lzo_memops_TU1p)(const lzo_memops_TU0p)(ss)+4); LZO_BLOCK_END
Packit 679830
#else
Packit 679830
#if (LZO_OPT_UNALIGNED64)
Packit 679830
LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU8p)0)==8)
Packit 679830
#define LZO_MEMOPS_COPY8(dd,ss) \
Packit 679830
    * (lzo_memops_TU8p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss)
Packit 679830
#elif (LZO_OPT_UNALIGNED32)
Packit 679830
#define LZO_MEMOPS_COPY8(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN LZO_MEMOPS_COPY4(dd,ss); LZO_MEMOPS_COPY4((lzo_memops_TU1p)(lzo_memops_TU0p)(dd)+4,(const lzo_memops_TU1p)(const lzo_memops_TU0p)(ss)+4); LZO_BLOCK_END
Packit 679830
#elif defined(__lzo_memops_tcheck)
Packit 679830
#define LZO_MEMOPS_COPY8(dd,ss) \
Packit 679830
    LZO_BLOCK_BEGIN if (__lzo_memops_tcheck(lzo_memops_TU8,8,1)) { \
Packit 679830
        * (lzo_memops_TU8p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss); \
Packit 679830
    } else { LZO_MEMOPS_MOVE8(dd,ss); } LZO_BLOCK_END
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_COPY8(dd,ss) LZO_MEMOPS_MOVE8(dd,ss)
Packit 679830
#endif
Packit 679830
#endif
Packit 679830
#define LZO_MEMOPS_COPYN(dd,ss,nn) \
Packit 679830
    LZO_BLOCK_BEGIN \
Packit 679830
    lzo_memops_TU1p d__n = (lzo_memops_TU1p) (lzo_memops_TU0p) (dd); \
Packit 679830
    const lzo_memops_TU1p s__n = (const lzo_memops_TU1p) (const lzo_memops_TU0p) (ss); \
Packit 679830
    lzo_uint n__n = (nn); \
Packit 679830
    while ((void)0, n__n >= 8) { LZO_MEMOPS_COPY8(d__n, s__n); d__n += 8; s__n += 8; n__n -= 8; } \
Packit 679830
    if ((void)0, n__n >= 4) { LZO_MEMOPS_COPY4(d__n, s__n); d__n += 4; s__n += 4; n__n -= 4; } \
Packit 679830
    if ((void)0, n__n > 0) do { *d__n++ = *s__n++; } while (--n__n > 0); \
Packit 679830
    LZO_BLOCK_END
Packit 679830
Packit 679830
__lzo_static_forceinline lzo_uint16_t lzo_memops_get_le16(const lzo_voidp ss)
Packit 679830
{
Packit 679830
    lzo_uint16_t v;
Packit 679830
#if (LZO_ABI_LITTLE_ENDIAN)
Packit 679830
    LZO_MEMOPS_COPY2(&v, ss);
Packit 679830
#elif (LZO_OPT_UNALIGNED16 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC)
Packit 679830
    const lzo_memops_TU2p s = (const lzo_memops_TU2p) ss;
Packit 679830
    unsigned long vv;
Packit 679830
    __asm__("lhbrx %0,0,%1" : "=r" (vv) : "r" (s), "m" (*s));
Packit 679830
    v = (lzo_uint16_t) vv;
Packit 679830
#else
Packit 679830
    const lzo_memops_TU1p s = (const lzo_memops_TU1p) ss;
Packit 679830
    v = (lzo_uint16_t) (((lzo_uint16_t)s[0]) | ((lzo_uint16_t)s[1] << 8));
Packit 679830
#endif
Packit 679830
    return v;
Packit 679830
}
Packit 679830
#if (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN)
Packit 679830
#define LZO_MEMOPS_GET_LE16(ss)    * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss)
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_GET_LE16(ss)    lzo_memops_get_le16(ss)
Packit 679830
#endif
Packit 679830
Packit 679830
__lzo_static_forceinline lzo_uint32_t lzo_memops_get_le32(const lzo_voidp ss)
Packit 679830
{
Packit 679830
    lzo_uint32_t v;
Packit 679830
#if (LZO_ABI_LITTLE_ENDIAN)
Packit 679830
    LZO_MEMOPS_COPY4(&v, ss);
Packit 679830
#elif (LZO_OPT_UNALIGNED32 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC)
Packit 679830
    const lzo_memops_TU4p s = (const lzo_memops_TU4p) ss;
Packit 679830
    unsigned long vv;
Packit 679830
    __asm__("lwbrx %0,0,%1" : "=r" (vv) : "r" (s), "m" (*s));
Packit 679830
    v = (lzo_uint32_t) vv;
Packit 679830
#else
Packit 679830
    const lzo_memops_TU1p s = (const lzo_memops_TU1p) ss;
Packit 679830
    v = (lzo_uint32_t) (((lzo_uint32_t)s[0]) | ((lzo_uint32_t)s[1] << 8) | ((lzo_uint32_t)s[2] << 16) | ((lzo_uint32_t)s[3] << 24));
Packit 679830
#endif
Packit 679830
    return v;
Packit 679830
}
Packit 679830
#if (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN)
Packit 679830
#define LZO_MEMOPS_GET_LE32(ss)    * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss)
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_GET_LE32(ss)    lzo_memops_get_le32(ss)
Packit 679830
#endif
Packit 679830
Packit 679830
#if (LZO_OPT_UNALIGNED64) && (LZO_ABI_LITTLE_ENDIAN)
Packit 679830
#define LZO_MEMOPS_GET_LE64(ss)    * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss)
Packit 679830
#endif
Packit 679830
Packit 679830
__lzo_static_forceinline lzo_uint16_t lzo_memops_get_ne16(const lzo_voidp ss)
Packit 679830
{
Packit 679830
    lzo_uint16_t v;
Packit 679830
    LZO_MEMOPS_COPY2(&v, ss);
Packit 679830
    return v;
Packit 679830
}
Packit 679830
#if (LZO_OPT_UNALIGNED16)
Packit 679830
#define LZO_MEMOPS_GET_NE16(ss)    * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss)
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_GET_NE16(ss)    lzo_memops_get_ne16(ss)
Packit 679830
#endif
Packit 679830
Packit 679830
__lzo_static_forceinline lzo_uint32_t lzo_memops_get_ne32(const lzo_voidp ss)
Packit 679830
{
Packit 679830
    lzo_uint32_t v;
Packit 679830
    LZO_MEMOPS_COPY4(&v, ss);
Packit 679830
    return v;
Packit 679830
}
Packit 679830
#if (LZO_OPT_UNALIGNED32)
Packit 679830
#define LZO_MEMOPS_GET_NE32(ss)    * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss)
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_GET_NE32(ss)    lzo_memops_get_ne32(ss)
Packit 679830
#endif
Packit 679830
Packit 679830
#if (LZO_OPT_UNALIGNED64)
Packit 679830
#define LZO_MEMOPS_GET_NE64(ss)    * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss)
Packit 679830
#endif
Packit 679830
Packit 679830
__lzo_static_forceinline void lzo_memops_put_le16(lzo_voidp dd, lzo_uint16_t vv)
Packit 679830
{
Packit 679830
#if (LZO_ABI_LITTLE_ENDIAN)
Packit 679830
    LZO_MEMOPS_COPY2(dd, &vv;;
Packit 679830
#elif (LZO_OPT_UNALIGNED16 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC)
Packit 679830
    lzo_memops_TU2p d = (lzo_memops_TU2p) dd;
Packit 679830
    unsigned long v = vv;
Packit 679830
    __asm__("sthbrx %2,0,%1" : "=m" (*d) : "r" (d), "r" (v));
Packit 679830
#else
Packit 679830
    lzo_memops_TU1p d = (lzo_memops_TU1p) dd;
Packit 679830
    d[0] = LZO_BYTE((vv      ) & 0xff);
Packit 679830
    d[1] = LZO_BYTE((vv >>  8) & 0xff);
Packit 679830
#endif
Packit 679830
}
Packit 679830
#if (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN)
Packit 679830
#define LZO_MEMOPS_PUT_LE16(dd,vv) (* (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = (vv))
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_PUT_LE16(dd,vv) lzo_memops_put_le16(dd,vv)
Packit 679830
#endif
Packit 679830
Packit 679830
__lzo_static_forceinline void lzo_memops_put_le32(lzo_voidp dd, lzo_uint32_t vv)
Packit 679830
{
Packit 679830
#if (LZO_ABI_LITTLE_ENDIAN)
Packit 679830
    LZO_MEMOPS_COPY4(dd, &vv;;
Packit 679830
#elif (LZO_OPT_UNALIGNED32 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC)
Packit 679830
    lzo_memops_TU4p d = (lzo_memops_TU4p) dd;
Packit 679830
    unsigned long v = vv;
Packit 679830
    __asm__("stwbrx %2,0,%1" : "=m" (*d) : "r" (d), "r" (v));
Packit 679830
#else
Packit 679830
    lzo_memops_TU1p d = (lzo_memops_TU1p) dd;
Packit 679830
    d[0] = LZO_BYTE((vv      ) & 0xff);
Packit 679830
    d[1] = LZO_BYTE((vv >>  8) & 0xff);
Packit 679830
    d[2] = LZO_BYTE((vv >> 16) & 0xff);
Packit 679830
    d[3] = LZO_BYTE((vv >> 24) & 0xff);
Packit 679830
#endif
Packit 679830
}
Packit 679830
#if (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN)
Packit 679830
#define LZO_MEMOPS_PUT_LE32(dd,vv) (* (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = (vv))
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_PUT_LE32(dd,vv) lzo_memops_put_le32(dd,vv)
Packit 679830
#endif
Packit 679830
Packit 679830
__lzo_static_forceinline void lzo_memops_put_ne16(lzo_voidp dd, lzo_uint16_t vv)
Packit 679830
{
Packit 679830
    LZO_MEMOPS_COPY2(dd, &vv;;
Packit 679830
}
Packit 679830
#if (LZO_OPT_UNALIGNED16)
Packit 679830
#define LZO_MEMOPS_PUT_NE16(dd,vv) (* (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = (vv))
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_PUT_NE16(dd,vv) lzo_memops_put_ne16(dd,vv)
Packit 679830
#endif
Packit 679830
Packit 679830
__lzo_static_forceinline void lzo_memops_put_ne32(lzo_voidp dd, lzo_uint32_t vv)
Packit 679830
{
Packit 679830
    LZO_MEMOPS_COPY4(dd, &vv;;
Packit 679830
}
Packit 679830
#if (LZO_OPT_UNALIGNED32)
Packit 679830
#define LZO_MEMOPS_PUT_NE32(dd,vv) (* (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = (vv))
Packit 679830
#else
Packit 679830
#define LZO_MEMOPS_PUT_NE32(dd,vv) lzo_memops_put_ne32(dd,vv)
Packit 679830
#endif
Packit 679830
Packit 679830
#if 1 && (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI)
Packit 679830
static void __attribute__((__unused__))
Packit 679830
#else
Packit 679830
__lzo_static_forceinline void
Packit 679830
#endif
Packit 679830
lzo_memops_unused_funcs(void)
Packit 679830
{
Packit 679830
    LZO_UNUSED_FUNC(lzo_memops_get_le16);
Packit 679830
    LZO_UNUSED_FUNC(lzo_memops_get_le32);
Packit 679830
    LZO_UNUSED_FUNC(lzo_memops_get_ne16);
Packit 679830
    LZO_UNUSED_FUNC(lzo_memops_get_ne32);
Packit 679830
    LZO_UNUSED_FUNC(lzo_memops_put_le16);
Packit 679830
    LZO_UNUSED_FUNC(lzo_memops_put_le32);
Packit 679830
    LZO_UNUSED_FUNC(lzo_memops_put_ne16);
Packit 679830
    LZO_UNUSED_FUNC(lzo_memops_put_ne32);
Packit 679830
    LZO_UNUSED_FUNC(lzo_memops_unused_funcs);
Packit 679830
}
Packit 679830
Packit 679830
#endif /* already included */
Packit 679830
Packit 679830
/* vim:set ts=4 sw=4 et: */