1a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* minilzo.c -- mini subset of the LZO real-time data compression library 2a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat This file is part of the LZO real-time data compression library. 4a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer 6a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat All Rights Reserved. 7a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 8a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat The LZO library is free software; you can redistribute it and/or 9a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat modify it under the terms of the GNU General Public License as 10a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat published by the Free Software Foundation; either version 2 of 11a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat the License, or (at your option) any later version. 12a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 13a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat The LZO library is distributed in the hope that it will be useful, 14a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat but WITHOUT ANY WARRANTY; without even the implied warranty of 15a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat GNU General Public License for more details. 17a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 18a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat You should have received a copy of the GNU General Public License 19a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat along with the LZO library; see the file COPYING. 20a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat If not, write to the Free Software Foundation, Inc., 21a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 22a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 23a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat Markus F.X.J. Oberhumer 24a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat <markus@oberhumer.com> 25a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat http://www.oberhumer.com/opensource/lzo/ 26a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 27a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 28a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 29a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * NOTE: 30a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * the full LZO package can be found at 31a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * http://www.oberhumer.com/opensource/lzo/ 32a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 33a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 34a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define __LZO_IN_MINILZO 1 35a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 36a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_CFG_FREESTANDING) 37a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef MINILZO_HAVE_CONFIG_H 38a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_LIBC_FREESTANDING 1 39a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_FREESTANDING 1 40a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 41a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 42a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef MINILZO_HAVE_CONFIG_H 43a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# include <config.h> 44a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 45a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <limits.h> 46a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <stddef.h> 47a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS) 48a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 49a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef __LZODEFS_H_INCLUDED 50a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define __LZODEFS_H_INCLUDED 1 51a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 52a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__CYGWIN32__) && !defined(__CYGWIN__) 53a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __CYGWIN__ __CYGWIN32__ 54a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 55a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE) 56a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _ALL_SOURCE 1 57a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 58a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__mips__) && defined(__R5900__) 59a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__LONG_MAX__) 60a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LONG_MAX__ 9223372036854775807L 61a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 62a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 63bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_CFG_NO_DISABLE_WUNDEF) 64bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__ARMCC_VERSION) 65bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# pragma diag_suppress 193 66bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__clang__) && defined(__clang_minor__) 67bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# pragma clang diagnostic ignored "-Wundef" 68bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__INTEL_COMPILER) 69a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma warning(disable: 193) 70bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__KEIL__) && defined(__C166__) 71a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma warning disable = 322 72bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && !defined(__PATHSCALE__) 73bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if ((__GNUC__-0) >= 5 || ((__GNUC__-0) == 4 && (__GNUC_MINOR__-0) >= 2)) 74bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# pragma GCC diagnostic ignored "-Wundef" 75bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 76bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__) 77bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if ((_MSC_VER-0) >= 1300) 78a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma warning(disable: 4668) 79a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 80a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 81bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 82bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 0 && defined(__POCC__) && defined(_WIN32) 83bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (__POCC__ >= 400) 84bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# pragma warn(disable: 2216) 85bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 86bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 87a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 0 && defined(__WATCOMC__) 88a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060) 89a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma warning 203 9 90a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 91a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 92a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__) 93a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma option -h 94a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 95bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_CFG_NO_DISABLE_WCRTNONSTDC) 96bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef _CRT_NONSTDC_NO_DEPRECATE 97bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define _CRT_NONSTDC_NO_DEPRECATE 1 98bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 99bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef _CRT_NONSTDC_NO_WARNINGS 100bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define _CRT_NONSTDC_NO_WARNINGS 1 101bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 102bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef _CRT_SECURE_NO_DEPRECATE 103bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define _CRT_SECURE_NO_DEPRECATE 1 104bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 105bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef _CRT_SECURE_NO_WARNINGS 106bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define _CRT_SECURE_NO_WARNINGS 1 107bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 108bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 109a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 0 110bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_0xffffUL 0xfffful 111bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_0xffffffffUL 0xfffffffful 112a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 113bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_0xffffUL 65535ul 114bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_0xffffffffUL 4294967295ul 115a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 116bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_0xffffL LZO_0xffffUL 117bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_0xffffffffL LZO_0xffffffffUL 118a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_0xffffL == LZO_0xffffffffL) 119a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "your preprocessor is broken 1" 120a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 121a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (16ul * 16384ul != 262144ul) 122a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "your preprocessor is broken 2" 123a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 124a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 0 125a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (32767 >= 4294967295ul) 126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "your preprocessor is broken 3" 127a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (65535u >= 4294967295ul) 129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "your preprocessor is broken 4" 130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 132bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__COUNTER__) 133bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_CFG_USE_COUNTER 134bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CFG_USE_COUNTER 1 135bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 136bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 137bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_CFG_USE_COUNTER 138bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 139a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (UINT_MAX == LZO_0xffffL) 140a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) 141a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(MSDOS) 142a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define MSDOS 1 143a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 144a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(_MSDOS) 145a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _MSDOS 1 146a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 147a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX) 148a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (__VERSION == 520) && (MB_LEN_MAX == 1) 149a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__AZTEC_C__) 150a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __AZTEC_C__ __VERSION 151a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 152a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__DOS__) 153a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __DOS__ 1 154a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 155a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 156a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 157a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 158a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL) 159a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define ptrdiff_t long 160a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _PTRDIFF_T_DEFINED 1 161a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (UINT_MAX == LZO_0xffffL) 163a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef __LZO_RENAME_A 164a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef __LZO_RENAME_B 165a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__AZTEC_C__) && defined(__DOS__) 166a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_RENAME_A 1 167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(_MSC_VER) && defined(MSDOS) 168a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (_MSC_VER < 600) 169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_RENAME_A 1 170a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (_MSC_VER < 700) 171a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_RENAME_B 1 172a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 173a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__TSC__) && defined(__OS2__) 174a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_RENAME_A 1 175a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) 176a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_RENAME_A 1 177a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__PACIFIC__) && defined(DOS) 178a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__far) 179a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __far far 180a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 181a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__near) 182a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __near near 183a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 184a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 185a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__LZO_RENAME_A) 186a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__cdecl) 187a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __cdecl cdecl 188a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 189a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__far) 190a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __far far 191a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 192a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__huge) 193a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __huge huge 194a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 195a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__near) 196a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __near near 197a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 198a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__pascal) 199a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __pascal pascal 200a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 201a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__huge) 202a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __huge huge 203a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 204a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__LZO_RENAME_B) 205a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__cdecl) 206a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __cdecl _cdecl 207a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 208a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__far) 209a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __far _far 210a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 211a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__huge) 212a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __huge _huge 213a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 214a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__near) 215a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __near _near 216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__pascal) 218a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __pascal _pascal 219a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 220a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) 221a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__cdecl) 222a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __cdecl cdecl 223a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 224a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__pascal) 225a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __pascal pascal 226a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 227a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 228a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef __LZO_RENAME_A 229a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef __LZO_RENAME_B 230a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 231a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (UINT_MAX == LZO_0xffffL) 232a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__AZTEC_C__) && defined(__DOS__) 233a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 234a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(_MSC_VER) && defined(MSDOS) 235a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (_MSC_VER < 600) 236a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 237a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 238a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (_MSC_VER < 700) 239a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_INTEGRAL_PROMOTION 1 240a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_SIZEOF 1 241a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 242a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__PACIFIC__) && defined(DOS) 243a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 244a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__TURBOC__) && defined(__MSDOS__) 245a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (__TURBOC__ < 0x0150) 246a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 247a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 248a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_INTEGRAL_PROMOTION 1 249a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 250a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (__TURBOC__ < 0x0200) 251a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_SIZEOF 1 252a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 253a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (__TURBOC__ < 0x0400) && defined(__cplusplus) 254a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 255a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 256a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) 257a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 258a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_SIZEOF 1 259a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 260a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 261a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__WATCOMC__) && (__WATCOMC__ < 900) 262a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 263a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 264a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(_CRAY) && defined(_CRAY1) 265a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1 266a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 267a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_STRINGIZE(x) #x 268a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x) 269bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_CONCAT0() /*empty*/ 270bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_CONCAT1(a) a 271a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_CONCAT2(a,b) a ## b 272a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_CONCAT3(a,b,c) a ## b ## c 273a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d 274a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e 275bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_CONCAT6(a,b,c,d,e,f) a ## b ## c ## d ## e ## f 276bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_CONCAT7(a,b,c,d,e,f,g) a ## b ## c ## d ## e ## f ## g 277bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_ECONCAT0() LZO_PP_CONCAT0() 278bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_ECONCAT1(a) LZO_PP_CONCAT1(a) 279a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b) 280a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c) 281a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d) 282a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e) 283bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_ECONCAT6(a,b,c,d,e,f) LZO_PP_CONCAT6(a,b,c,d,e,f) 284bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_ECONCAT7(a,b,c,d,e,f,g) LZO_PP_CONCAT7(a,b,c,d,e,f,g) 285bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_EMPTY /*empty*/ 286bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_EMPTY0() /*empty*/ 287bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_EMPTY1(a) /*empty*/ 288bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_EMPTY2(a,b) /*empty*/ 289bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_EMPTY3(a,b,c) /*empty*/ 290bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_EMPTY4(a,b,c,d) /*empty*/ 291bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_EMPTY5(a,b,c,d,e) /*empty*/ 292bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_EMPTY6(a,b,c,d,e,f) /*empty*/ 293bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_PP_EMPTY7(a,b,c,d,e,f,g) /*empty*/ 294a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 295a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_STRINGIZE(x) #x 296a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x) 297a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_CONCAT2(a,b) a ## b 298a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c 299a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d 300a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e 301bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_CPP_CONCAT6(a,b,c,d,e,f) a ## b ## c ## d ## e ## f 302bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_CPP_CONCAT7(a,b,c,d,e,f,g) a ## b ## c ## d ## e ## f ## g 303a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b) 304a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c) 305a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d) 306a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e) 307bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_CPP_ECONCAT6(a,b,c,d,e,f) LZO_CPP_CONCAT6(a,b,c,d,e,f) 308bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_CPP_ECONCAT7(a,b,c,d,e,f,g) LZO_CPP_CONCAT7(a,b,c,d,e,f,g) 309a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 310bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-!!(b))) - (o)) << 1) + (o)*!!(b)) 311a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && defined(__cplusplus) 312a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__STDC_CONSTANT_MACROS) 313a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __STDC_CONSTANT_MACROS 1 314a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 315a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(__STDC_LIMIT_MACROS) 316a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __STDC_LIMIT_MACROS 1 317a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 318a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 319a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__cplusplus) 320bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_EXTERN_C extern "C" 321bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_EXTERN_C_BEGIN extern "C" { 322bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_EXTERN_C_END } 323a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 324bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_EXTERN_C extern 325bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_EXTERN_C_BEGIN /*empty*/ 326bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_EXTERN_C_END /*empty*/ 327a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 328a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_OS_OVERRIDE) 329a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_OS_FREESTANDING) 330a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "freestanding" 331a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_OS_EMBEDDED) 332a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "embedded" 333a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif 1 && defined(__IAR_SYSTEMS_ICC__) 334a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_EMBEDDED 1 335a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "embedded" 336a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__CYGWIN__) && defined(__GNUC__) 337a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_CYGWIN 1 338a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "cygwin" 339a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__EMX__) && defined(__GNUC__) 340a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_EMX 1 341a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "emx" 342a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__BEOS__) 343a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_BEOS 1 344a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "beos" 345a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__Lynx__) 346a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_LYNXOS 1 347a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "lynxos" 348a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__OS400__) 349a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_OS400 1 350a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "os400" 351a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__QNX__) 352a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_QNX 1 353a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "qnx" 354a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) 355a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_DOS32 1 356a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "dos32" 357a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__BORLANDC__) && defined(__DPMI16__) 358a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_DOS16 1 359a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "dos16" 360a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__ZTC__) && defined(DOS386) 361a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_DOS32 1 362a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "dos32" 363a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__OS2__) || defined(__OS2V2__) 364a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (UINT_MAX == LZO_0xffffL) 365a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_OS216 1 366a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "os216" 367a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (UINT_MAX == LZO_0xffffffffL) 368a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_OS2 1 369a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "os2" 370a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 371a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "check your limits.h header" 372a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 373a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) 374a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_WIN64 1 375a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "win64" 376a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) 377a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_WIN32 1 378a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "win32" 379a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__MWERKS__) && defined(__INTEL__) 380a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_WIN32 1 381a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "win32" 382a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) 383a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (UINT_MAX == LZO_0xffffL) 384a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_WIN16 1 385a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "win16" 386a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (UINT_MAX == LZO_0xffffffffL) 387a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_WIN32 1 388a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "win32" 389a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 390a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "check your limits.h header" 391a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 392a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) 393a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (UINT_MAX == LZO_0xffffL) 394a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_DOS16 1 395a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "dos16" 396a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (UINT_MAX == LZO_0xffffffffL) 397a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_DOS32 1 398a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "dos32" 399a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 400a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "check your limits.h header" 401a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 402a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__WATCOMC__) 403a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__NT__) && (UINT_MAX == LZO_0xffffL) 404a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_DOS16 1 405a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "dos16" 406a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__NT__) && (__WATCOMC__ < 1100) 407a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_WIN32 1 408a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "win32" 409a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__linux__) || defined(__LINUX__) 410a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX 1 411a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "posix" 412a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 413a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "please specify a target using the -bt compiler option" 414a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 415a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__palmos__) 416a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_PALMOS 1 417a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "palmos" 418a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__TOS__) || defined(__atarist__) 419a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_TOS 1 420a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "tos" 421a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(macintosh) && !defined(__ppc__) 422a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_MACCLASSIC 1 423a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "macclassic" 424a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__VMS) 425a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_VMS 1 426a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "vms" 427bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__) 428a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_CONSOLE 1 429a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_CONSOLE_PS2 1 430a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "console" 431a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_CONSOLE "ps2" 432bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__mips__) && defined(__psp__) 433a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_CONSOLE 1 434a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_CONSOLE_PSP 1 435a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "console" 436a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_CONSOLE "psp" 437a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 438a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX 1 439a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS "posix" 440a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 441a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_OS_POSIX) 442a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(_AIX) || defined(__AIX__) || defined(__aix__) 443a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_AIX 1 444a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "aix" 445a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__FreeBSD__) 446a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_FREEBSD 1 447a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "freebsd" 448a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__hpux__) || defined(__hpux) 449a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_HPUX 1 450a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "hpux" 451a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__INTERIX) 452a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_INTERIX 1 453a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "interix" 454a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__IRIX__) || defined(__irix__) 455a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_IRIX 1 456a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "irix" 457a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__linux__) || defined(__linux) || defined(__LINUX__) 458a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_LINUX 1 459a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "linux" 460bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__APPLE__) && defined(__MACH__) 461bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if ((__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__-0) >= 20000) 462bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OS_POSIX_DARWIN 1040 463bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_OS_POSIX "darwin_iphone" 464bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) >= 1040) 465bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OS_POSIX_DARWIN __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ 466bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_OS_POSIX "darwin" 467bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 468bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OS_POSIX_DARWIN 1 469bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_OS_POSIX "darwin" 470bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 471bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OS_POSIX_MACOSX LZO_OS_POSIX_DARWIN 472a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__minix__) || defined(__minix) 473a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_MINIX 1 474a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "minix" 475a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__NetBSD__) 476a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_NETBSD 1 477a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "netbsd" 478a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__OpenBSD__) 479a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_OPENBSD 1 480a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "openbsd" 481a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__osf__) 482a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_OSF 1 483a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "osf" 484a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__solaris__) || defined(__sun) 485a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__SVR4) || defined(__svr4__) 486a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_SOLARIS 1 487a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "solaris" 488a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 489a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_SUNOS 1 490a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "sunos" 491a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 492a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(__ultrix__) || defined(__ultrix) 493a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_ULTRIX 1 494a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "ultrix" 495a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(_UNICOS) 496a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_UNICOS 1 497a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "unicos" 498a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 499a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_POSIX_UNKNOWN 1 500a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_OS_POSIX "unknown" 501a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 502a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 503a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 504a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 505a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (UINT_MAX != LZO_0xffffL) 506bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 507a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 508a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (ULONG_MAX != LZO_0xffffffffL) 509bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 510a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 511a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 512a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64) 513a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (UINT_MAX != LZO_0xffffffffL) 514bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 515a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 516a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (ULONG_MAX != LZO_0xffffffffL) 517bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 518a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 519a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 520a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__) 521a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_CILLY 1 522a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Cilly" 523a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__CILLY__) 524a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__) 525a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 526a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 527a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 528a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__) 529a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_SDCC 1 530a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "sdcc" 531a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC) 532a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__) 533bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + (__PATHCC_MINOR__-0) * 0x100 + (__PATHCC_PATCHLEVEL__-0)) 534a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Pathscale C" 535a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER __PATHSCALE__ 536bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 537bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_PATHSCALE_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) 538bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 539bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__INTEL_COMPILER) && ((__INTEL_COMPILER-0) > 0) 540bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_INTELC __INTEL_COMPILER 541a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Intel C" 542a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER) 543bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(_MSC_VER) && ((_MSC_VER-0) > 0) 544bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_INTELC_MSC _MSC_VER 545bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 546bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_INTELC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) 547a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 548a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__POCC__) && defined(_WIN32) 549a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_PELLESC 1 550a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Pelles C" 551a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__) 552bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__ARMCC_VERSION) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 553a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__GNUC_PATCHLEVEL__) 554bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_ARMCC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) 555a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 556bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_ARMCC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100) 557a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 558bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_ARMCC __ARMCC_VERSION 559bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CC "ARM C Compiler" 560bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER __VERSION__ 561bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__clang__) && defined(__llvm__) && defined(__VERSION__) 562a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__) 563bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_CLANG (__clang_major__ * 0x10000L + (__clang_minor__-0) * 0x100 + (__clang_patchlevel__-0)) 564a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 565bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_CLANG 0x010000L 566bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 567bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(_MSC_VER) && ((_MSC_VER-0) > 0) 568bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_CLANG_MSC _MSC_VER 569bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 570bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) 571a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 572a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "clang" 573a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER __VERSION__ 574a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 575a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__GNUC_PATCHLEVEL__) 576bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) 577a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 578bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100) 579a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 580a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_LLVM LZO_CC_LLVM_GNUC 581a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "llvm-gcc" 582a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER __VERSION__ 583a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__ACK__) && defined(_ACK) 584a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_ACK 1 585a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Amsterdam Compiler Kit C" 586a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 587bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__ARMCC_VERSION) && !defined(__GNUC__) 588bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_ARMCC __ARMCC_VERSION 589bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_ARMCC_ARMCC __ARMCC_VERSION 590bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CC "ARM C Compiler" 591bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ARMCC_VERSION) 592a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__AZTEC_C__) 593a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_AZTECC 1 594a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Aztec C" 595a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__) 596a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__CODEGEARC__) 597a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_CODEGEARC 1 598a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "CodeGear C" 599a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__) 600a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__BORLANDC__) 601a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_BORLANDC 1 602a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Borland C" 603a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__) 604a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(_CRAYC) && defined(_RELEASE) 605a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_CRAYC 1 606a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Cray C" 607a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE) 608a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__DMC__) && defined(__SC__) 609a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_DMC 1 610a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Digital Mars C" 611a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__) 612a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__DECC) 613a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_DECC 1 614a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "DEC C" 615a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC) 616bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (defined(__ghs) || defined(__ghs__)) && defined(__GHS_VERSION_NUMBER) && ((__GHS_VERSION_NUMBER-0) > 0) 617bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_GHS 1 618bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CC "Green Hills C" 619bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__GHS_VERSION_NUMBER) 620bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(_MSC_VER) && ((_MSC_VER-0) > 0) 621bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_GHS_MSC _MSC_VER 622bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 623bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_GHS_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) 624bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 625a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__HIGHC__) 626a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_HIGHC 1 627a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "MetaWare High C" 628a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 629bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__HP_aCC) && ((__HP_aCC-0) > 0) 630bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_HPACC __HP_aCC 631bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CC "HP aCC" 632bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__HP_aCC) 633a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__IAR_SYSTEMS_ICC__) 634a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_IARC 1 635a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "IAR C" 636a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__VER__) 637a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__) 638a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 639a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 640a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 641bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__IBMC__) && ((__IBMC__-0) > 0) 642bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_IBMC __IBMC__ 643a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "IBM C" 644a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__) 645bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__IBMCPP__) && ((__IBMCPP__-0) > 0) 646bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_IBMC __IBMCPP__ 647bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CC "IBM C" 648bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMCPP__) 649a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__KEIL__) && defined(__C166__) 650a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_KEILC 1 651a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Keil C" 652a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__) 653a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL) 654a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_LCCWIN32 1 655a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "lcc-win32" 656a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 657a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__LCC__) 658a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_LCC 1 659a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "lcc" 660a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__LCC_VERSION__) 661a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__) 662a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 663a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 664a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 665bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__MWERKS__) && ((__MWERKS__-0) > 0) 666bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_MWERKS __MWERKS__ 667a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Metrowerks C" 668a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__) 669a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) 670a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_NDPC 1 671a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Microway NDP C" 672a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 673a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__PACIFIC__) 674a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_PACIFICC 1 675a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Pacific C" 676a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__) 677bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) 678bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__PGIC_PATCHLEVEL__) 679bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_PGI (__PGIC__ * 0x10000L + (__PGIC_MINOR__-0) * 0x100 + (__PGIC_PATCHLEVEL__-0)) 680bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PGIC__) "." LZO_PP_MACRO_EXPAND(__PGIC_MINOR__) "." LZO_PP_MACRO_EXPAND(__PGIC_PATCHLEVEL__) 681bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 682bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_PGI (__PGIC__ * 0x10000L + (__PGIC_MINOR__-0) * 0x100) 683bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PGIC__) "." LZO_PP_MACRO_EXPAND(__PGIC_MINOR__) ".0" 684bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 685bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CC "Portland Group PGI C" 686a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) 687a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_PGI 1 688a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Portland Group PGI C" 689a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 690a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__PUREC__) && defined(__TOS__) 691a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_PUREC 1 692a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Pure C" 693a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__) 694a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__SC__) && defined(__ZTC__) 695a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_SYMANTECC 1 696a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Symantec C" 697a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__) 698a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__SUNPRO_C) 699a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "SunPro C" 700bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if ((__SUNPRO_C-0) > 0) 701a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_SUNPROC __SUNPRO_C 702a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C) 703a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 704a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_SUNPROC 1 705a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 706a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 707a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__SUNPRO_CC) 708a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "SunPro C" 709bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if ((__SUNPRO_CC-0) > 0) 710a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_SUNPROC __SUNPRO_CC 711a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC) 712a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 713a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_SUNPROC 1 714a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 715a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 716a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__TINYC__) 717a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_TINYC 1 718a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Tiny C" 719a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__) 720a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__TSC__) 721a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_TOPSPEEDC 1 722a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "TopSpeed C" 723a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__) 724a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__WATCOMC__) 725a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_WATCOMC 1 726a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Watcom C" 727a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__) 728a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__TURBOC__) 729a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_TURBOC 1 730a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Turbo C" 731a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__) 732a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__ZTC__) 733a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_ZORTECHC 1 734a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "Zortech C" 735bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if ((__ZTC__-0) == 0x310) 736a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "0x310" 737a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 738a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__) 739a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 740bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__GNUC__) && defined(__VERSION__) 741bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) 742bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) 743bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__GNUC_MINOR__) 744bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100) 745bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 746bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_GNUC (__GNUC__ * 0x10000L) 747bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 748bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CC "gcc" 749bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER __VERSION__ 750bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(_MSC_VER) && ((_MSC_VER-0) > 0) 751bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_MSC _MSC_VER 752bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CC "Microsoft C" 753bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(_MSC_FULL_VER) 754bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER) 755bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 756bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) 757bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 758a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 759a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CC_UNKNOWN 1 760a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CC "unknown" 761a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_CCVER "unknown" 762a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 763bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_GNUC) && defined(__OPEN64__) 764bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__OPENCC__) && defined(__OPENCC_MINOR__) && defined(__OPENCC_PATCHLEVEL__) 765bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_OPEN64 (__OPENCC__ * 0x10000L + (__OPENCC_MINOR__-0) * 0x100 + (__OPENCC_PATCHLEVEL__-0)) 766bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_OPEN64_GNUC LZO_CC_GNUC 767bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 768bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 769bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_GNUC) && defined(__PCC__) 770bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__PCC__) && defined(__PCC_MINOR__) && defined(__PCC_MINORMINOR__) 771bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_PCC (__PCC__ * 0x10000L + (__PCC_MINOR__-0) * 0x100 + (__PCC_MINORMINOR__-0)) 772bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CC_PCC_GNUC LZO_CC_GNUC 773bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 774bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 775a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER) 776a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "LZO_CC_MSC: _MSC_FULL_VER is not defined" 777a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 778a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY) 779a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY) 780a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E) 781a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_CRAY_MPP 1 782a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(_CRAY1) 783a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_CRAY_PVP 1 784a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 785a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 786a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 787a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_ARCH_OVERRIDE) 788a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ARCH_GENERIC) 789a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "generic" 790a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 791a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_I086 1 792a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "i086" 793bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__aarch64__) 794bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ARCH_ARM64 1 795bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ARCH "arm64" 796a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) 797a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_ALPHA 1 798a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "alpha" 799a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E)) 800a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_ALPHA 1 801a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "alpha" 802a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64) 803a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_AMD64 1 804a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "amd64" 805a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB)) 806a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_ARM 1 807a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_ARM_THUMB 1 808a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "arm_thumb" 809a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__) 810a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_ARM 1 811bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__CPU_MODE__) && ((__CPU_MODE__-0) == 1) 812a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_ARM_THUMB 1 813a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "arm_thumb" 814bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__CPU_MODE__) && ((__CPU_MODE__-0) == 2) 815a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "arm" 816a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 817a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "arm" 818a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 819a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__arm__) || defined(_M_ARM) 820a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_ARM 1 821a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "arm" 822a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__) 823a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_AVR 1 824a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "avr" 825a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__avr32__) || defined(__AVR32__) 826a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_AVR32 1 827a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "avr32" 828a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__bfin__) 829a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_BLACKFIN 1 830a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "blackfin" 831a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__) 832a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_C166 1 833a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "c166" 834a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__cris__) 835a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_CRIS 1 836a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "cris" 837a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__) 838a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_EZ80 1 839a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "ez80" 840a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) 841a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_H8300 1 842a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "h8300" 843a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__hppa__) || defined(__hppa) 844a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_HPPA 1 845a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "hppa" 846a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386) 847a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_I386 1 848a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_IA32 1 849a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "i386" 850a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_ZORTECHC && defined(__I86__)) 851a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_I386 1 852a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_IA32 1 853a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "i386" 854a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386) 855a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_I386 1 856a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_IA32 1 857a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "i386" 858a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64) 859a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_IA64 1 860a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "ia64" 861a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__) 862a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_M16C 1 863a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "m16c" 864a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__) 865a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_M16C 1 866a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "m16c" 867a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__m32r__) 868a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_M32R 1 869a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "m32r" 870a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K) 871a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_M68K 1 872a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "m68k" 873a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__) 874a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_MCS251 1 875a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "mcs251" 876a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__) 877a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_MCS51 1 878a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "mcs51" 879a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__) 880a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_MCS51 1 881a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "mcs51" 882a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000) 883a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_MIPS 1 884a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "mips" 885a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__) 886a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_MSP430 1 887a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "msp430" 888a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__) 889a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_MSP430 1 890a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "msp430" 891a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR) 892a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_POWERPC 1 893a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "powerpc" 894a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x) 895a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_S390 1 896a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "s390" 897a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__sh__) || defined(_M_SH) 898a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_SH 1 899a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "sh" 900a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) 901a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_SPARC 1 902a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "sparc" 903a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__SPU__) 904a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_SPU 1 905a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "spu" 906a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (UINT_MAX == LZO_0xffffL) && defined(__z80) 907a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_Z80 1 908a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "z80" 909a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_CRAY_PVP) 910a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(_CRAYSV1) 911a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_CRAY_SV1 1 912a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "cray_sv1" 913a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (_ADDR64) 914a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_CRAY_T90 1 915a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "cray_t90" 916a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (_ADDR32) 917a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_CRAY_YMP 1 918a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "cray_ymp" 919a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 920a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_CRAY_XMP 1 921a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "cray_xmp" 922a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 923a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 924a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_UNKNOWN 1 925a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_ARCH "unknown" 926a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 927a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 928a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2) 929a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "FIXME - missing define for CPU architecture" 930a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 931a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32) 932bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "FIXME - missing LZO_OS_WIN32 define for CPU architecture" 933a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 934a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64) 935bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "FIXME - missing LZO_OS_WIN64 define for CPU architecture" 936a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 937a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_OS_OS216 || LZO_OS_WIN16) 938a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_I086PM 1 939a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif 1 && (LZO_OS_DOS16 && defined(BLX286)) 940a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_I086PM 1 941a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) 942a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_I086PM 1 943a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__)) 944a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_ARCH_I086PM 1 945a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 946bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_AMD64 && !LZO_ARCH_X64) 947bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ARCH_X64 1 948bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (!LZO_ARCH_AMD64 && LZO_ARCH_X64) && defined(__LZO_ARCH_OVERRIDE) 949bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ARCH_AMD64 1 950bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 951bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_ARM64 && !LZO_ARCH_AARCH64) 952bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ARCH_AARCH64 1 953bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (!LZO_ARCH_ARM64 && LZO_ARCH_AARCH64) && defined(__LZO_ARCH_OVERRIDE) 954bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ARCH_ARM64 1 955bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 956bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_I386 && !LZO_ARCH_X86) 957bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ARCH_X86 1 958bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (!LZO_ARCH_I386 && LZO_ARCH_X86) && defined(__LZO_ARCH_OVERRIDE) 959bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ARCH_I386 1 960bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 961bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_AMD64 && !LZO_ARCH_X64) || (!LZO_ARCH_AMD64 && LZO_ARCH_X64) 962bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 963bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 964bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_ARM64 && !LZO_ARCH_AARCH64) || (!LZO_ARCH_ARM64 && LZO_ARCH_AARCH64) 965bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 966bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 967bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_I386 && !LZO_ARCH_X86) || (!LZO_ARCH_I386 && LZO_ARCH_X86) 968bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 969bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 970bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_ARM_THUMB && !LZO_ARCH_ARM) 971bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 972bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 973bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_ARM_THUMB1 && !LZO_ARCH_ARM_THUMB) 974bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 975bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 976bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_ARM_THUMB2 && !LZO_ARCH_ARM_THUMB) 977bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 978a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 979bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_ARM_THUMB1 && LZO_ARCH_ARM_THUMB2) 980bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 981bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 982bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_I086PM && !LZO_ARCH_I086) 983bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 984a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 985a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ARCH_I086) 986a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (UINT_MAX != LZO_0xffffL) 987bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 988a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 989a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (ULONG_MAX != LZO_0xffffffffL) 990bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 991a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 992a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 993a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ARCH_I386) 994a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__) 995bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 996a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 997a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__) 998bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 999a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1000a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (ULONG_MAX != LZO_0xffffffffL) 1001bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1002bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1003bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1004bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_AMD64 || LZO_ARCH_I386) 1005bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if !defined(LZO_TARGET_FEATURE_SSE2) 1006bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__SSE2__) 1007bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_TARGET_FEATURE_SSE2 1 1008bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(_MSC_VER) && ((defined(_M_IX86_FP) && ((_M_IX86_FP)+0 >= 2)) || defined(_M_AMD64)) 1009bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_TARGET_FEATURE_SSE2 1 1010bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1011bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1012bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if !defined(LZO_TARGET_FEATURE_SSSE3) 1013bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_TARGET_FEATURE_SSE2) 1014bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__SSSE3__) 1015bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_TARGET_FEATURE_SSSE3 1 1016bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(_MSC_VER) && defined(__AVX__) 1017bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_TARGET_FEATURE_SSSE3 1 1018bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1019bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1020bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1021bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if !defined(LZO_TARGET_FEATURE_SSE4_2) 1022bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_TARGET_FEATURE_SSSE3) 1023bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__SSE4_2__) 1024bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_TARGET_FEATURE_SSE4_2 1 1025bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1026bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1027bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1028bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if !defined(LZO_TARGET_FEATURE_AVX) 1029bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_TARGET_FEATURE_SSSE3) 1030bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__AVX__) 1031bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_TARGET_FEATURE_AVX 1 1032bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1033bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1034bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1035bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if !defined(LZO_TARGET_FEATURE_AVX2) 1036bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_TARGET_FEATURE_AVX) 1037bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__AVX2__) 1038bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_TARGET_FEATURE_AVX2 1 1039bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1040bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1041bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1042bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1043bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_TARGET_FEATURE_SSSE3 && !(LZO_TARGET_FEATURE_SSE2)) 1044bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1045bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1046bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_TARGET_FEATURE_SSE4_2 && !(LZO_TARGET_FEATURE_SSSE3)) 1047bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1048bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1049bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_TARGET_FEATURE_AVX && !(LZO_TARGET_FEATURE_SSSE3)) 1050bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1051bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1052bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_TARGET_FEATURE_AVX2 && !(LZO_TARGET_FEATURE_AVX)) 1053bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1054bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1055bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_ARM) 1056bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if !defined(LZO_TARGET_FEATURE_NEON) 1057bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__ARM_NEON__) 1058bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_TARGET_FEATURE_NEON 1 1059bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1060bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1061bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_ARM64) 1062bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if !defined(LZO_TARGET_FEATURE_NEON) 1063bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if 1 1064bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_TARGET_FEATURE_NEON 1 1065bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1066a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1067a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1068bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 0 1069bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif !defined(__LZO_MM_OVERRIDE) 1070a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ARCH_I086) 1071a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (UINT_MAX != LZO_0xffffL) 1072bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1073a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1074a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM) 1075a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_TINY 1 1076a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM) 1077a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_HUGE 1 1078a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL) 1079a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_SMALL 1 1080a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM) 1081a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_MEDIUM 1 1082a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM) 1083a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_COMPACT 1 1084a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL) 1085a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_LARGE 1 1086a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_AZTECC) 1087a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(_LARGE_CODE) && defined(_LARGE_DATA) 1088a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_LARGE 1 1089a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(_LARGE_CODE) 1090a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_MEDIUM 1 1091a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(_LARGE_DATA) 1092a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_COMPACT 1 1093a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1094a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_SMALL 1 1095a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1096a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_ZORTECHC && defined(__VCM__)) 1097a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_LARGE 1 1098a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1099bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unknown LZO_ARCH_I086 memory model" 1100a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1101a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 1102a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_HAVE_MM_HUGE_PTR 1 1103a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_HAVE_MM_HUGE_ARRAY 1 1104a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_MM_TINY) 1105a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_HAVE_MM_HUGE_ARRAY 1106a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1107a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC) 1108a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_HAVE_MM_HUGE_PTR 1109a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_HAVE_MM_HUGE_ARRAY 1110a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_DMC || LZO_CC_SYMANTECC) 1111a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_HAVE_MM_HUGE_ARRAY 1112a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MSC && defined(_QC)) 1113a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_HAVE_MM_HUGE_ARRAY 1114a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (_MSC_VER < 600) 1115a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_HAVE_MM_HUGE_PTR 1116a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1117a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295)) 1118a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_HAVE_MM_HUGE_ARRAY 1119a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1120a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR) 1121a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_OS_DOS16) 1122bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1123a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_ZORTECHC) 1124a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1125bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1127a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef __cplusplus 1129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern "C" { 1130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200)) 1132a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat extern void __near __cdecl _AHSHIFT(void); 1133a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 1134a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 1135a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat extern void __near __cdecl _AHSHIFT(void); 1136a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 1137a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC) 1138a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat extern void __near __cdecl _AHSHIFT(void); 1139a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 1140a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295)) 1141a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat extern void __near __cdecl _AHSHIFT(void); 1142a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 1143a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16) 1144a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_AHSHIFT 12 1145a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_WATCOMC) 1146a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat extern unsigned char _HShift; 1147a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_AHSHIFT ((unsigned) _HShift) 1148a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1149a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "FIXME - implement LZO_MM_AHSHIFT" 1150a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1151a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef __cplusplus 1152a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 1153a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1154a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1155a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_C166) 1156a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__MODEL__) 1157bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "FIXME - LZO_ARCH_C166 __MODEL__" 1158a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 0) 1159a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_SMALL 1 1160a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 1) 1161a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_SMALL 1 1162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 2) 1163a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_LARGE 1 1164a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 3) 1165a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_TINY 1 1166a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 4) 1167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_XTINY 1 1168a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 5) 1169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_XSMALL 1 1170a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1171bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "FIXME - LZO_ARCH_C166 __MODEL__" 1172a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1173a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_MCS251) 1174a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__MODEL__) 1175bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "FIXME - LZO_ARCH_MCS251 __MODEL__" 1176a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 0) 1177a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_SMALL 1 1178a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 2) 1179a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_LARGE 1 1180a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 3) 1181a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_TINY 1 1182a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 4) 1183a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_XTINY 1 1184a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 5) 1185a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_XSMALL 1 1186a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1187bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "FIXME - LZO_ARCH_MCS251 __MODEL__" 1188a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1189a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_MCS51) 1190a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__MODEL__) 1191bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "FIXME - LZO_ARCH_MCS51 __MODEL__" 1192a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 1) 1193a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_SMALL 1 1194a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 2) 1195a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_LARGE 1 1196a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 3) 1197a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_TINY 1 1198a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 4) 1199a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_XTINY 1 1200a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif ((__MODEL__) == 5) 1201a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_XSMALL 1 1202a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1203bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "FIXME - LZO_ARCH_MCS51 __MODEL__" 1204a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1205a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_CRAY_PVP) 1206a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_PVP 1 1207a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1208a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_MM_FLAT 1 1209a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1210a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_MM_COMPACT) 1211a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_MM "compact" 1212a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_FLAT) 1213a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_MM "flat" 1214a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_HUGE) 1215a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_MM "huge" 1216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_LARGE) 1217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_MM "large" 1218a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_MEDIUM) 1219a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_MM "medium" 1220a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_PVP) 1221a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_MM "pvp" 1222a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_SMALL) 1223a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_MM "small" 1224a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_TINY) 1225a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_INFO_MM "tiny" 1226a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1227a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "unknown memory model" 1228a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1229a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1230bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_gnuc_extension__) 1231bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_GNUC >= 0x020800ul) 1232bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_gnuc_extension__ __extension__ 1233bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1234bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_gnuc_extension__ __extension__ 1235bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 600) 1236bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_gnuc_extension__ __extension__ 1237bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 1238a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1239a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1240bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_gnuc_extension__) 1241bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_gnuc_extension__ /*empty*/ 1242a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1243bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_CFG_USE_NEW_STYLE_CASTS) && defined(__cplusplus) && 0 1244bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) 1245bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CFG_USE_NEW_STYLE_CASTS 0 1246bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_INTELC && (__INTEL_COMPILER < 1200)) 1247bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CFG_USE_NEW_STYLE_CASTS 0 1248bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 1249bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CFG_USE_NEW_STYLE_CASTS 1 1250bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1251a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1252bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_CFG_USE_NEW_STYLE_CASTS) 1253bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CFG_USE_NEW_STYLE_CASTS 0 1254a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1255bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__cplusplus) 1256bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(LZO_CFG_USE_NEW_STYLE_CASTS) 1257bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_CFG_USE_NEW_STYLE_CASTS 1258bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1259bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CFG_USE_NEW_STYLE_CASTS 0 1260a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1261bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_REINTERPRET_CAST) 1262bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CFG_USE_NEW_STYLE_CASTS) 1263bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_REINTERPRET_CAST(t,e) (reinterpret_cast<t> (e)) 1264bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1265a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1266bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_REINTERPRET_CAST) 1267bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_REINTERPRET_CAST(t,e) ((t) (e)) 1268a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1269bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_STATIC_CAST) 1270bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CFG_USE_NEW_STYLE_CASTS) 1271bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_STATIC_CAST(t,e) (static_cast<t> (e)) 1272bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1273a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1274bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_STATIC_CAST) 1275bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_STATIC_CAST(t,e) ((t) (e)) 1276a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1277bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_STATIC_CAST2) 1278bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_STATIC_CAST2(t1,t2,e) LZO_STATIC_CAST(t1, LZO_STATIC_CAST(t2, e)) 1279a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1280bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNCONST_CAST) 1281bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CFG_USE_NEW_STYLE_CASTS) 1282bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNCONST_CAST(t,e) (const_cast<t> (e)) 1283bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_HAVE_MM_HUGE_PTR) 1284bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNCONST_CAST(t,e) ((t) (e)) 1285bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1286bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((lzo_uintptr_t) ((const void *) (e))))) 1287a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1288a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1289bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNCONST_CAST) 1290bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((const void *) (e)))) 1291bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1292bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNCONST_VOLATILE_CAST) 1293bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CFG_USE_NEW_STYLE_CASTS) 1294bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNCONST_VOLATILE_CAST(t,e) (const_cast<t> (e)) 1295bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_HAVE_MM_HUGE_PTR) 1296bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) (e)) 1297bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1298bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) ((volatile void *) ((lzo_uintptr_t) ((volatile const void *) (e))))) 1299a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1300a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1301bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNCONST_VOLATILE_CAST) 1302bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) ((volatile void *) ((volatile const void *) (e)))) 1303bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1304bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNVOLATILE_CAST) 1305bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CFG_USE_NEW_STYLE_CASTS) 1306bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNVOLATILE_CAST(t,e) (const_cast<t> (e)) 1307bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_HAVE_MM_HUGE_PTR) 1308bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNVOLATILE_CAST(t,e) ((t) (e)) 1309bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1310bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNVOLATILE_CAST(t,e) ((t) ((void *) ((lzo_uintptr_t) ((volatile void *) (e))))) 1311a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1312a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1313bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNVOLATILE_CAST) 1314bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNVOLATILE_CAST(t,e) ((t) ((void *) ((volatile void *) (e)))) 1315a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1316bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNVOLATILE_CONST_CAST) 1317bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CFG_USE_NEW_STYLE_CASTS) 1318bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNVOLATILE_CONST_CAST(t,e) (const_cast<t> (e)) 1319bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_HAVE_MM_HUGE_PTR) 1320bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) (e)) 1321bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1322bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) ((const void *) ((lzo_uintptr_t) ((volatile const void *) (e))))) 1323bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1324a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1325bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNVOLATILE_CONST_CAST) 1326bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) ((const void *) ((volatile const void *) (e)))) 1327a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1328bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_PCAST) 1329bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_HAVE_MM_HUGE_PTR) 1330bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_PCAST(t,e) ((t) (e)) 1331bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1332a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1333bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_PCAST) 1334bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_PCAST(t,e) LZO_STATIC_CAST(t, LZO_STATIC_CAST(void *, e)) 1335bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1336bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_CCAST) 1337bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_HAVE_MM_HUGE_PTR) 1338bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CCAST(t,e) ((t) (e)) 1339a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1340a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1341bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_CCAST) 1342bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CCAST(t,e) LZO_STATIC_CAST(t, LZO_STATIC_CAST(const void *, e)) 1343a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1344bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_ICONV) 1345bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ICONV(t,e) LZO_STATIC_CAST(t, e) 1346bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1347bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_ICAST) 1348bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ICAST(t,e) LZO_STATIC_CAST(t, e) 1349bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1350bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_ITRUNC) 1351bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ITRUNC(t,e) LZO_STATIC_CAST(t, e) 1352bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1353bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_cte) 1354bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_MSC || LZO_CC_WATCOMC) 1355bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_cte(e) ((void)0,(e)) 1356bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif 1 1357bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_cte(e) ((void)0,(e)) 1358a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1359a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1360bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_cte) 1361bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_cte(e) (e) 1362a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1363bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_BLOCK_BEGIN) 1364bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_BLOCK_BEGIN do { 1365bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_BLOCK_END } while __lzo_cte(0) 1366bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1367bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNUSED) 1368bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) 1369bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED(var) ((void) &var) 1370bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC) 1371bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED(var) if (&var) ; else 1372bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x030200ul)) 1373bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED(var) ((void) &var) 1374bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1375bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED(var) ((void) var) 1376bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_MSC && (_MSC_VER < 900)) 1377bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED(var) if (&var) ; else 1378bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_KEILC) 1379bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED(var) {LZO_EXTERN_C int lzo_unused__[1-2*!(sizeof(var)>0)];} 1380bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_PACIFICC) 1381bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED(var) ((void) sizeof(var)) 1382bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_WATCOMC) && defined(__cplusplus) 1383bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED(var) ((void) var) 1384a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1385bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED(var) ((void) &var) 1386a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1387a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1388bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNUSED_FUNC) 1389bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) 1390bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_FUNC(func) ((void) func) 1391bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC) 1392bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_FUNC(func) if (func) ; else 1393bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_CLANG || LZO_CC_LLVM) 1394bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_FUNC(func) ((void) &func) 1395bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_MSC && (_MSC_VER < 900)) 1396bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_FUNC(func) if (func) ; else 1397bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_MSC) 1398bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_FUNC(func) ((void) &func) 1399bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_KEILC || LZO_CC_PELLESC) 1400bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_FUNC(func) {LZO_EXTERN_C int lzo_unused_func__[1-2*!(sizeof((int)func)>0)];} 1401a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1402bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_FUNC(func) ((void) func) 1403a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1404a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1405bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_UNUSED_LABEL) 1406bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_CLANG >= 0x020800ul) 1407bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_LABEL(l) (__lzo_gnuc_extension__ ((void) ((const void *) &&l))) 1408bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC) 1409bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_LABEL(l) if __lzo_cte(0) goto l 1410a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1411bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UNUSED_LABEL(l) switch (0) case 1:goto l 1412a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1413a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1414bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_DEFINE_UNINITIALIZED_VAR) 1415bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if 0 1416bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var 1417bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif 0 && (LZO_CC_GNUC) 1418bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var 1419a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1420bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init 1421a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1422a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1423a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__lzo_inline) 1424a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295)) 1425a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(__cplusplus) 1426a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_inline inline 1427bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__STDC_VERSION__) && (__STDC_VERSION__-0 >= 199901L) 1428bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_inline inline 1429a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) 1430a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_inline __inline 1431bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) 1432a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_inline __inline__ 1433a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_DMC) 1434a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_inline __inline 1435bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GHS) 1436bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_inline __inline__ 1437bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 600) 1438bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_inline __inline__ 1439a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_INTELC) 1440a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_inline __inline 1441a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405)) 1442a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_inline __inline 1443a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MSC && (_MSC_VER >= 900)) 1444a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_inline __inline 1445bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_SUNPROC >= 0x5100) 1446a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_inline __inline__ 1447a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1448a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1449a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__lzo_inline) 1450bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_inline 1451a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_HAVE_inline 1 1452bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1453a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1454a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_inline /*empty*/ 1455a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1456a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__lzo_forceinline) 1457a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_GNUC >= 0x030200ul) 1458a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1459bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 700) 1460bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1461bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450)) 1462a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_forceinline __forceinline 1463bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800)) 1464a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1465bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1466a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1467a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) 1468a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_forceinline __forceinline 1469bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_PGI >= 0x0d0a00ul) 1470bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1471bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_SUNPROC >= 0x5100) 1472a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1473a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1474a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1475a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__lzo_forceinline) 1476bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_forceinline 1477a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_HAVE_forceinline 1 1478bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1479a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1480bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_forceinline __lzo_inline 1481a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1482a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__lzo_noinline) 1483a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul) 1484a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_noinline __attribute__((__noinline__,__used__)) 1485a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_GNUC >= 0x030200ul) 1486a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_noinline __attribute__((__noinline__)) 1487bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 700) 1488bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noinline __attribute__((__noinline__)) 1489bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 600)) 1490a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_noinline __declspec(noinline) 1491bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800)) 1492a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_noinline __attribute__((__noinline__)) 1493bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1494a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_noinline __attribute__((__noinline__)) 1495a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) 1496a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_noinline __declspec(noinline) 1497a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64)) 1498a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__cplusplus) 1499a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1500a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_noinline __declspec(noinline) 1501a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1502bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_PGI >= 0x0d0a00ul) 1503bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noinline __attribute__((__noinline__)) 1504bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_SUNPROC >= 0x5100) 1505a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_noinline __attribute__((__noinline__)) 1506a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1507a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1508a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__lzo_noinline) 1509bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_noinline 1510a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_HAVE_noinline 1 1511bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1512a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1513a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_noinline /*empty*/ 1514a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1515a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline) 1516bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1517a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1518bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_static_inline) 1519bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_IBMC) 1520bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_static_inline __lzo_gnuc_extension__ static __lzo_inline 1521a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1522a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1523bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_static_inline) 1524bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_static_inline static __lzo_inline 1525a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1526bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_static_forceinline) 1527bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_IBMC) 1528bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_static_forceinline __lzo_gnuc_extension__ static __lzo_forceinline 1529bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1530bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1531bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_static_forceinline) 1532bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_static_forceinline static __lzo_forceinline 1533bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1534bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_static_noinline) 1535bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_IBMC) 1536bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_static_noinline __lzo_gnuc_extension__ static __lzo_noinline 1537bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1538bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1539bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_static_noinline) 1540bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_static_noinline static __lzo_noinline 1541bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1542bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_c99_extern_inline) 1543bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__GNUC_GNU_INLINE__) 1544bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_c99_extern_inline __lzo_inline 1545bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__GNUC_STDC_INLINE__) 1546bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_c99_extern_inline extern __lzo_inline 1547bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__STDC_VERSION__) && (__STDC_VERSION__-0 >= 199901L) 1548bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_c99_extern_inline extern __lzo_inline 1549bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1550bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_c99_extern_inline) && (__lzo_HAVE_inline) 1551bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_c99_extern_inline __lzo_inline 1552bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1553bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1554bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_c99_extern_inline) 1555bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_c99_extern_inline 1556bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_HAVE_c99_extern_inline 1 1557bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1558bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 1559bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_c99_extern_inline /*empty*/ 1560bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1561bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_may_alias) 1562bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_GNUC >= 0x030400ul) 1563bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_may_alias __attribute__((__may_alias__)) 1564bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_CLANG >= 0x020900ul) 1565bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_may_alias __attribute__((__may_alias__)) 1566bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1210)) && 0 1567bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_may_alias __attribute__((__may_alias__)) 1568bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_PGI >= 0x0d0a00ul) && 0 1569bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_may_alias __attribute__((__may_alias__)) 1570bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1571bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1572bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_may_alias) 1573bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_may_alias 1574bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_HAVE_may_alias 1 1575bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1576bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 1577bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_may_alias /*empty*/ 1578bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1579bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_noreturn) 1580bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_GNUC >= 0x020700ul) 1581bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noreturn __attribute__((__noreturn__)) 1582bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 700) 1583bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noreturn __attribute__((__noreturn__)) 1584bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450)) 1585bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noreturn __declspec(noreturn) 1586bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 600)) 1587bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noreturn __attribute__((__noreturn__)) 1588bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1589bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noreturn __attribute__((__noreturn__)) 1590bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) 1591bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noreturn __declspec(noreturn) 1592bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_PGI >= 0x0d0a00ul) 1593bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noreturn __attribute__((__noreturn__)) 1594bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1595bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1596bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_noreturn) 1597bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_noreturn 1598bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_HAVE_noreturn 1 1599bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1600bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 1601bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_noreturn /*empty*/ 1602bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1603bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_nothrow) 1604bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_GNUC >= 0x030300ul) 1605bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_nothrow __attribute__((__nothrow__)) 1606bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450)) && defined(__cplusplus) 1607bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_nothrow __declspec(nothrow) 1608bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 900)) 1609bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_nothrow __attribute__((__nothrow__)) 1610bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1611a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_nothrow __attribute__((__nothrow__)) 1612a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus) 1613a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_nothrow __declspec(nothrow) 1614a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1615a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1616a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__lzo_nothrow) 1617bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_nothrow 1618a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_HAVE_nothrow 1 1619bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1620a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1621a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_nothrow /*empty*/ 1622a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1623a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__lzo_restrict) 1624a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_GNUC >= 0x030400ul) 1625a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_restrict __restrict__ 1626bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 800) && !defined(__cplusplus) 1627a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_restrict __restrict__ 1628bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 1210) 1629bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_restrict __restrict__ 1630bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 600)) 1631bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 600)) 1632bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_restrict __restrict__ 1633bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM) 1634a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_restrict __restrict__ 1635a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MSC && (_MSC_VER >= 1400)) 1636a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_restrict __restrict 1637bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_PGI >= 0x0d0a00ul) 1638bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_restrict __restrict__ 1639a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1640a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1641a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__lzo_restrict) 1642bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_restrict 1643a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_HAVE_restrict 1 1644bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1645a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1646a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_restrict /*empty*/ 1647a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1648bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_alignof) 1649bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_ARMCC || LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) 1650bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_alignof(e) __alignof__(e) 1651bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GHS) && !defined(__cplusplus) 1652bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_alignof(e) __alignof__(e) 1653bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 600) 1654bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_alignof(e) (__lzo_gnuc_extension__ __alignof__(e)) 1655bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700)) 1656bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_alignof(e) __alignof__(e) 1657bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) 1658bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_alignof(e) __alignof(e) 1659bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_SUNPROC >= 0x5100) 1660bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_alignof(e) __alignof__(e) 1661bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1662bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1663bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_alignof) 1664bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_alignof 1665bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_HAVE_alignof 1 1666bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1667bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1668bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_struct_packed) 1669bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus) 1670bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020700ul)) 1671bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) && defined(__cplusplus) 1672bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_PCC && (LZO_CC_PCC < 0x010100ul)) 1673bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC < 0x5110)) && !defined(__cplusplus) 1674bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GNUC >= 0x030400ul) && !(LZO_CC_PCC_GNUC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) 1675bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed(s) struct s { 1676bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_end() } __attribute__((__gcc_struct__,__packed__)); 1677bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__gcc_struct__,__packed__)); 1678bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || (LZO_CC_PGI >= 0x0d0a00ul) || (LZO_CC_SUNPROC >= 0x5100)) 1679bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed(s) struct s { 1680bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_end() } __attribute__((__packed__)); 1681bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__packed__)); 1682bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 700) 1683bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed(s) __lzo_gnuc_extension__ struct s { 1684bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_end() } __attribute__((__packed__)); 1685bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__packed__)); 1686bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300)) 1687bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed(s) __pragma(pack(push,1)) struct s { 1688bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_end() } __pragma(pack(pop)); 1689bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_WATCOMC && (__WATCOMC__ >= 900)) 1690bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed(s) _Packed struct s { 1691bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_end() }; 1692bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1693bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1694bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_struct_packed) && !defined(__lzo_struct_packed_ma) 1695bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_ma(s) __lzo_struct_packed(s) 1696bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1697bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_struct_packed_end) && !defined(__lzo_struct_packed_ma_end) 1698bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_packed_ma_end() __lzo_struct_packed_end() 1699bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1700bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_byte_struct) 1701bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_struct_packed) 1702bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_byte_struct(s,n) __lzo_struct_packed(s) unsigned char a[n]; __lzo_struct_packed_end() 1703bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_byte_struct_ma(s,n) __lzo_struct_packed_ma(s) unsigned char a[n]; __lzo_struct_packed_ma_end() 1704bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_PGI || (LZO_CC_SUNPROC >= 0x5100)) 1705bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_byte_struct(s,n) struct s { unsigned char a[n]; } __attribute__((__packed__)); 1706bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_byte_struct_ma(s,n) struct s { unsigned char a[n]; } __lzo_may_alias __attribute__((__packed__)); 1707bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1708bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1709bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_byte_struct) && !defined(__lzo_byte_struct_ma) 1710bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_byte_struct_ma(s,n) __lzo_byte_struct(s,n) 1711bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1712bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_struct_align16) && (__lzo_HAVE_alignof) 1713bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x030000ul)) 1714bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus) 1715bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_CILLY || LZO_CC_PCC) 1716bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300)) 1717bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align16(s) struct __declspec(align(16)) s { 1718bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align16_end() }; 1719bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align32(s) struct __declspec(align(32)) s { 1720bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align32_end() }; 1721bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align64(s) struct __declspec(align(64)) s { 1722bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align64_end() }; 1723bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || (LZO_CC_IBMC >= 700) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1724bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align16(s) struct s { 1725bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align16_end() } __attribute__((__aligned__(16))); 1726bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align32(s) struct s { 1727bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align32_end() } __attribute__((__aligned__(32))); 1728bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align64(s) struct s { 1729bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_struct_align64_end() } __attribute__((__aligned__(64))); 1730bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1731bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1732bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_union_um) 1733bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus) 1734bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020700ul)) 1735bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) && defined(__cplusplus) 1736bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER < 810)) 1737bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_PCC && (LZO_CC_PCC < 0x010100ul)) 1738bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC < 0x5110)) && !defined(__cplusplus) 1739bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || (LZO_CC_PGI >= 0x0d0a00ul) || (LZO_CC_SUNPROC >= 0x5100)) 1740bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_am(s) union s { 1741bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_am_end() } __lzo_may_alias; 1742bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_um(s) union s { 1743bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_um_end() } __lzo_may_alias __attribute__((__packed__)); 1744bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 700) 1745bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_am(s) __lzo_gnuc_extension__ union s { 1746bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_am_end() } __lzo_may_alias; 1747bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_um(s) __lzo_gnuc_extension__ union s { 1748bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_um_end() } __lzo_may_alias __attribute__((__packed__)); 1749bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300)) 1750bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_um(s) __pragma(pack(push,1)) union s { 1751bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_um_end() } __pragma(pack(pop)); 1752bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_WATCOMC && (__WATCOMC__ >= 900)) 1753bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_um(s) _Packed union s { 1754bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_um_end() }; 1755bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1756bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1757bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_union_am) 1758bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_am(s) union s { 1759bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_union_am_end() }; 1760bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1761bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_constructor) 1762bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_GNUC >= 0x030400ul) 1763bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_constructor __attribute__((__constructor__,__used__)) 1764bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GNUC >= 0x020700ul) 1765bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_constructor __attribute__((__constructor__)) 1766bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800)) 1767bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_constructor __attribute__((__constructor__,__used__)) 1768bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1769bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_constructor __attribute__((__constructor__)) 1770bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1771bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1772bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_constructor) 1773bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_constructor 1774bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_HAVE_constructor 1 1775bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1776bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1777bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_destructor) 1778bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_GNUC >= 0x030400ul) 1779bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_destructor __attribute__((__destructor__,__used__)) 1780bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GNUC >= 0x020700ul) 1781bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_destructor __attribute__((__destructor__)) 1782bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800)) 1783bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_destructor __attribute__((__destructor__,__used__)) 1784bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1785bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_destructor __attribute__((__destructor__)) 1786bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1787bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1788bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_destructor) 1789bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_destructor 1790bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_HAVE_destructor 1 1791bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1792bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1793bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor) 1794bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 1795bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1796a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__lzo_likely) && !defined(__lzo_unlikely) 1797a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_GNUC >= 0x030200ul) 1798a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1799a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1800bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_IBMC >= 1010) 1801bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1802bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1803a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800)) 1804a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1805a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1806bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1807a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1808a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1809a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1810a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1811a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__lzo_likely) 1812bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_likely 1813a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_HAVE_likely 1 1814bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1815a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1816a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_likely(e) (e) 1817a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1818a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__lzo_unlikely) 1819bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_unlikely 1820a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_HAVE_unlikely 1 1821bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1822a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 1823a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_unlikely(e) (e) 1824a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1825bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_static_unused_void_func) 1826bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# 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) 1827bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_static_unused_void_func(f) static void __attribute__((__unused__)) f(void) 1828a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1829bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_static_unused_void_func(f) static __lzo_inline void f(void) 1830a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1831a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1832bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_loop_forever) 1833bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_IBMC) 1834bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_loop_forever() LZO_BLOCK_BEGIN for (;;) { ; } LZO_BLOCK_END 1835a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1836bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_loop_forever() do { ; } while __lzo_cte(1) 1837a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1838a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1839bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_unreachable) 1840bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x020800ul)) 1841bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_unreachable() __builtin_unreachable(); 1842bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GNUC >= 0x040500ul) 1843bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_unreachable() __builtin_unreachable(); 1844bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1300)) && 1 1845bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_unreachable() __builtin_unreachable(); 1846a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1847bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1848bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_unreachable) 1849bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef __lzo_HAVE_unreachable 1850bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_HAVE_unreachable 1 1851bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1852bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 1853a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if 0 1854bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_unreachable() ((void)0); 1855a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1856bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_unreachable() __lzo_loop_forever(); 1857a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1858a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1859bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef __LZO_CTA_NAME 1860bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CFG_USE_COUNTER) 1861bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_CTA_NAME(a) LZO_PP_ECONCAT2(a,__COUNTER__) 1862bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 1863bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_CTA_NAME(a) LZO_PP_ECONCAT2(a,__LINE__) 1864bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1865a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1866a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER) 1867a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_CC_AZTECC || LZO_CC_ZORTECHC) 1868bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-!(e)]; LZO_EXTERN_C_END 1869a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_DMC || LZO_CC_SYMANTECC) 1870bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1u-2*!(e)]; LZO_EXTERN_C_END 1871a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) 1872bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-!(e)]; LZO_EXTERN_C_END 1873bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020900ul)) && defined(__cplusplus) 1874bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN int __LZO_CTA_NAME(lzo_cta_f__)(int [1-2*!(e)]); LZO_EXTERN_C_END 1875bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_GNUC) && defined(__CHECKER__) && defined(__SPARSE_CHECKER__) 1876bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN enum {__LZO_CTA_NAME(lzo_cta_e__)=1/!!(e)} __attribute__((__unused__)); LZO_EXTERN_C_END 1877a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1878bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-2*!(e)]; LZO_EXTERN_C_END 1879a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1880a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1881a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(LZO_COMPILE_TIME_ASSERT) 1882a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_CC_AZTECC) 1883bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-!(e)];} 1884a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 1885a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 1886bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_GNUC) && defined(__CHECKER__) && defined(__SPARSE_CHECKER__) 1887bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT(e) {(void) (0/!!(e));} 1888bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_GNUC >= 0x040700ul) && (LZO_CFG_USE_COUNTER) && defined(__cplusplus) 1889bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT(e) {enum {__LZO_CTA_NAME(lzo_cta_e__)=1/!!(e)} __attribute__((__unused__));} 1890bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_CC_GNUC >= 0x040700ul) 1891bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)] __attribute__((__unused__));} 1892a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_MSC && (_MSC_VER < 900)) 1893a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 1894a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) 1895a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 1896a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1897bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)];} 1898a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1899a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1900bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(1 == 1) 1901bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__cplusplus) 1902bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanextern "C" { LZO_COMPILE_TIME_ASSERT_HEADER(2 == 2) } 1903bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1904bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(3 == 3) 1905a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) 1906a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC) 1907a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 1908a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl __cdecl 1909a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_atexit /*empty*/ 1910a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_main __cdecl 1911a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) 1912a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_qsort __pascal 1913a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) 1914a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_qsort _stdcall 1915a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1916a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_qsort __cdecl 1917a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1918a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_WATCOMC) 1919a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl __cdecl 1920a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1921a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl __cdecl 1922a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_atexit __cdecl 1923a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_main __cdecl 1924a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_qsort __cdecl 1925a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1926a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC) 1927a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) 1928a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_sighandler __pascal 1929a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) 1930a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_sighandler _stdcall 1931a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE) 1932a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_sighandler __clrcall 1933a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700)) 1934a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(_DLL) 1935a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_sighandler _far _cdecl _loadds 1936a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# elif defined(_MT) 1937a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_sighandler _far _cdecl 1938a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1939a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_sighandler _cdecl 1940a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1941a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# else 1942a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_sighandler __cdecl 1943a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 1944a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC) 1945a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl __cdecl 1946a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) 1947a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl cdecl 1948a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1949a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__lzo_cdecl) 1950a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl /*empty*/ 1951a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1952a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__lzo_cdecl_atexit) 1953a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_atexit /*empty*/ 1954a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1955a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__lzo_cdecl_main) 1956a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_main /*empty*/ 1957a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1958a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__lzo_cdecl_qsort) 1959a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_cdecl_qsort /*empty*/ 1960a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 1961bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_cdecl_sighandler) 1962bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_cdecl_sighandler /*empty*/ 1963bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1964bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(__lzo_cdecl_va) 1965bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __lzo_cdecl_va __lzo_cdecl 1966bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1967bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_CFG_NO_WINDOWS_H) 1968bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_HAVE_WINDOWS_H) 1969bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64) 1970bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) 1971bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) 1972bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul))) 1973bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 1974bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_HAVE_WINDOWS_H 1 1975bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 1976bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1977bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1978bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1979bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF_SHORT 1980bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF_SHORT) 1981bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SHORT (SIZEOF_SHORT) 1982bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__SIZEOF_SHORT__) 1983bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SHORT (__SIZEOF_SHORT__) 1984bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1985bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1986bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF_INT 1987bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF_INT) 1988bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT (SIZEOF_INT) 1989bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__SIZEOF_INT__) 1990bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT (__SIZEOF_INT__) 1991bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1992bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1993bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF_LONG 1994bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF_LONG) 1995bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG (SIZEOF_LONG) 1996bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__SIZEOF_LONG__) 1997bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG (__SIZEOF_LONG__) 1998bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 1999bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2000bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF_LONG_LONG 2001bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF_LONG_LONG) 2002bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG) 2003bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__SIZEOF_LONG_LONG__) 2004bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG (__SIZEOF_LONG_LONG__) 2005bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2006bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2007bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF___INT16 2008bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF___INT16) 2009bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF___INT16 (SIZEOF___INT16) 2010bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2011bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2012bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF___INT32 2013bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF___INT32) 2014bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF___INT32 (SIZEOF___INT32) 2015bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2016bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2017bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF___INT64 2018bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF___INT64) 2019bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF___INT64 (SIZEOF___INT64) 2020bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2021bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2022bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF_VOID_P 2023bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF_VOID_P) 2024bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P) 2025bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__SIZEOF_POINTER__) 2026bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P (__SIZEOF_POINTER__) 2027bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2028bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2029bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF_SIZE_T 2030bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF_SIZE_T) 2031bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T) 2032bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__SIZEOF_SIZE_T__) 2033bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SIZE_T (__SIZEOF_SIZE_T__) 2034bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2035bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2036bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_SIZEOF_PTRDIFF_T 2037bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(SIZEOF_PTRDIFF_T) 2038bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T) 2039bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__SIZEOF_PTRDIFF_T__) 2040bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T (__SIZEOF_PTRDIFF_T__) 2041bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2042bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2043bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define __LZO_LSR(x,b) (((x)+0ul) >> (b)) 2044bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_SHORT) 2045bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_ARCH_CRAY_PVP) 2046bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SHORT 8 2047bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (USHRT_MAX == LZO_0xffffL) 2048bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SHORT 2 2049bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(USHRT_MAX,7) == 1) 2050bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SHORT 1 2051bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(USHRT_MAX,15) == 1) 2052bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SHORT 2 2053bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(USHRT_MAX,31) == 1) 2054bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SHORT 4 2055bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(USHRT_MAX,63) == 1) 2056bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SHORT 8 2057bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(USHRT_MAX,127) == 1) 2058bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SHORT 16 2059bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2060bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "LZO_SIZEOF_SHORT" 2061bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2062bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2063bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_SHORT == sizeof(short)) 2064bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_INT) 2065bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_ARCH_CRAY_PVP) 2066bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT 8 2067bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (UINT_MAX == LZO_0xffffL) 2068bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT 2 2069bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (UINT_MAX == LZO_0xffffffffL) 2070bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT 4 2071bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(UINT_MAX,7) == 1) 2072bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT 1 2073bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(UINT_MAX,15) == 1) 2074bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT 2 2075bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(UINT_MAX,31) == 1) 2076bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT 4 2077bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(UINT_MAX,63) == 1) 2078bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT 8 2079bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(UINT_MAX,127) == 1) 2080bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_INT 16 2081bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2082bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "LZO_SIZEOF_INT" 2083bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2084bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2085bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_INT == sizeof(int)) 2086bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_LONG) 2087bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (ULONG_MAX == LZO_0xffffffffL) 2088bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG 4 2089bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(ULONG_MAX,7) == 1) 2090bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG 1 2091bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(ULONG_MAX,15) == 1) 2092bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG 2 2093bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(ULONG_MAX,31) == 1) 2094bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG 4 2095bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(ULONG_MAX,39) == 1) 2096bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG 5 2097bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(ULONG_MAX,63) == 1) 2098bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG 8 2099bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(ULONG_MAX,127) == 1) 2100bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG 16 2101bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2102bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "LZO_SIZEOF_LONG" 2103bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2104bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2105bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_LONG == sizeof(long)) 2106bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) 2107bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) 2108bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__) 2109bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_GNUC >= 0x030300ul) 2110bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if ((__LONG_MAX__-0) == (__LONG_LONG_MAX__-0)) 2111bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG 2112bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1) 2113bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 4 2114bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2115bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2116bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2117bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2118bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2119bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) 2120bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) 2121bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_I086 && LZO_CC_DMC) 2122bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_CILLY) && defined(__GNUC__) 2123bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2124bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 2125bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2126bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400)) 2127bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2128bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OS_WIN64 || defined(_WIN64)) 2129bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF___INT64 8 2130bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I386 && (LZO_CC_DMC)) 2131bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2132bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700))) 2133bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2134bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__))) 2135bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2136bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC)) 2137bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2138bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC)) 2139bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF___INT64 8 2140bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC)) 2141bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF___INT64 8 2142bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520))) 2143bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF___INT64 8 2144bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100))) 2145bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF___INT64 8 2146bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GHS && defined(__LLONG_BIT) && ((__LLONG_BIT-0) == 64)) 2147bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2148bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && ((_INTEGRAL_MAX_BITS-0) == 64)) 2149bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF___INT64 8 2150bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) 2151bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2152bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (defined(__vms) || defined(__VMS)) && ((__INITIAL_POINTER_SIZE-0) == 64) 2153bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2154bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2) 2155bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) 2156bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LONG_LONG 8 2157bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2158bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2159bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2160bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__cplusplus) && (LZO_CC_GNUC) 2161bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_GNUC < 0x020800ul) 2162bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_SIZEOF_LONG_LONG 2163bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2164bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2165bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CFG_NO_LONG_LONG) 2166bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_SIZEOF_LONG_LONG 2167bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__NO_LONG_LONG) 2168bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_SIZEOF_LONG_LONG 2169bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(_NO_LONGLONG) 2170bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_SIZEOF_LONG_LONG 2171bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2172bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_WORDSIZE) 2173bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_ALPHA) 2174bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 8 2175bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_AMD64) 2176bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 8 2177bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_AVR) 2178bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 1 2179bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_H8300) 2180bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__NORMAL_MODE__) 2181bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 4 2182bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) 2183bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 4 2184bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2185bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 2 2186bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2187bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I086) 2188bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 2 2189bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_IA64) 2190bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 8 2191bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_M16C) 2192bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 2 2193bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_SPU) 2194bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 4 2195bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_Z80) 2196bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 1 2197bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) 2198bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 8 2199bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OS_OS400 || defined(__OS400__)) 2200bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 8 2201bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) 2202bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE 8 2203bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2204bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2205bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_VOID_P) 2206bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__ILP32__) || defined(__ILP32) || defined(_ILP32) 2207bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) == 4) 2208bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 4) 2209bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 4 2210bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__ILP64__) || defined(__ILP64) || defined(_ILP64) 2211bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) == 8) 2212bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 8) 2213bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 8 2214bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64) 2215bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 4) 2216bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 8 2217bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__LP64__) || defined(__LP64) || defined(_LP64) 2218bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 8) 2219bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 8 2220bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_AVR) 2221bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 2 2222bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430) 2223bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 2 2224bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_H8300) 2225bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__NORMAL_MODE__) 2226bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 2 2227bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) 2228bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 4 2229bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2230bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 2 2231bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2232bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4) 2233bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT 2234bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT 2235bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2236bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I086) 2237bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) 2238bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 2 2239bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) 2240bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 4 2241bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2242bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "invalid LZO_ARCH_I086 memory model" 2243bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2244bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_M16C) 2245bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__m32c_cpu__) || defined(__m32cm_cpu__) 2246bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 4 2247bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2248bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 2 2249bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2250bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_SPU) 2251bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 4 2252bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_Z80) 2253bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 2 2254bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) 2255bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 4 2256bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OS_OS400 || defined(__OS400__)) 2257bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__LLP64_IFC__) 2258bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 8 2259bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 2260bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 2261bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2262bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 16 2263bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 2264bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 2265bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2266bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) 2267bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P 8 2268bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 2269bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 2270bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2271bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2272bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_VOID_P) 2273bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG 2274bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2275bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_VOID_P == sizeof(void *)) 2276bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_SIZE_T) 2277bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_I086 || LZO_ARCH_M16C) 2278bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SIZE_T 2 2279bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2280bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2281bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_SIZE_T) 2282bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P 2283bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2284bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(offsetof) 2285bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_SIZE_T == sizeof(size_t)) 2286bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2287bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_PTRDIFF_T) 2288bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_I086) 2289bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE) 2290bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P 2291bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_MM_COMPACT || LZO_MM_LARGE) 2292bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_BORLANDC || LZO_CC_TURBOC) 2293bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T 4 2294bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2295bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T 2 2296bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2297bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2298bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "invalid LZO_ARCH_I086 memory model" 2299bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2300bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2301bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2302bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_SIZEOF_PTRDIFF_T) 2303bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T 2304bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2305bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(offsetof) 2306bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_PTRDIFF_T == sizeof(ptrdiff_t)) 2307bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2308bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_WORDSIZE) 2309bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WORDSIZE LZO_SIZEOF_VOID_P 2310bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2311bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_NEUTRAL_ENDIAN) 2312bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_ABI_BIG_ENDIAN 2313bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_ABI_LITTLE_ENDIAN 2314bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN) 2315bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP) 2316bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_BIG_ENDIAN 1 2317bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64) 2318bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LITTLE_ENDIAN 1 2319bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430) 2320bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LITTLE_ENDIAN 1 2321bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390 || LZO_ARCH_SPU) 2322bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_BIG_ENDIAN 1 2323bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__) 2324bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (__LITTLE_ENDIAN__ == 1) 2325bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LITTLE_ENDIAN 1 2326bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2327bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_BIG_ENDIAN 1 2328bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2329bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) 2330bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_BIG_ENDIAN 1 2331bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) 2332bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LITTLE_ENDIAN 1 2333bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__) 2334bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_BIG_ENDIAN 1 2335bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__) 2336bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LITTLE_ENDIAN 1 2337bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && (LZO_ARCH_ARM && LZO_CC_ARMCC_ARMCC) 2338bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) 2339bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 2340bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__BIG_ENDIAN) 2341bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_BIG_ENDIAN 1 2342bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2343bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LITTLE_ENDIAN 1 2344bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2345bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LITTLE_ENDIAN 1 2346bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && (LZO_ARCH_ARM64) && defined(__AARCH64EB__) && !defined(__AARCH64EL__) 2347bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_BIG_ENDIAN 1 2348bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && (LZO_ARCH_ARM64) && defined(__AARCH64EL__) && !defined(__AARCH64EB__) 2349bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LITTLE_ENDIAN 1 2350bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) 2351bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_BIG_ENDIAN 1 2352bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) 2353bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LITTLE_ENDIAN 1 2354bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2355bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2356bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN) 2357bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "unexpected configuration - check your compiler defines" 2358bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2359bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_BIG_ENDIAN) 2360bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_ENDIAN "be" 2361bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ABI_LITTLE_ENDIAN) 2362bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_ENDIAN "le" 2363bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ABI_NEUTRAL_ENDIAN) 2364bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_ENDIAN "neutral" 2365bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2366bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) 2367bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_I8LP16 1 2368bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_PM "i8lp16" 2369bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) 2370bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_ILP16 1 2371bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_PM "ilp16" 2372bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) 2373bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LP32 1 2374bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_PM "lp32" 2375bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) 2376bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_ILP32 1 2377bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_PM "ilp32" 2378bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8) 2379bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LLP64 1 2380bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_PM "llp64" 2381bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) 2382bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_LP64 1 2383bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_PM "lp64" 2384bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) 2385bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_ILP64 1 2386bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_PM "ilp64" 2387bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4) 2388bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ABI_IP32L64 1 2389bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_ABI_PM "ip32l64" 2390bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2391bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 0 2392bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif !defined(__LZO_LIBC_OVERRIDE) 2393bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_LIBC_NAKED) 2394bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "naked" 2395bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_LIBC_FREESTANDING) 2396bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "freestanding" 2397bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_LIBC_MOSTLY_FREESTANDING) 2398bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "mfreestanding" 2399bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_LIBC_ISOC90) 2400bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "isoc90" 2401bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_LIBC_ISOC99) 2402bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "isoc99" 2403bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_ARMCC_ARMCC) && defined(__ARMCLIB_VERSION) 2404bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_LIBC_ISOC90 1 2405bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "isoc90" 2406bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__dietlibc__) 2407bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_LIBC_DIETLIBC 1 2408bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "dietlibc" 2409bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(_NEWLIB_VERSION) 2410bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_LIBC_NEWLIB 1 2411bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "newlib" 2412bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__) 2413bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__UCLIBC_SUBLEVEL__) 2414bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + (__UCLIBC_MINOR__-0) * 0x100 + (__UCLIBC_SUBLEVEL__-0)) 2415bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2416bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_LIBC_UCLIBC 0x00090bL 2417bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2418bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "uc" "libc" 2419bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__) 2420bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + (__GLIBC_MINOR__-0) * 0x100) 2421bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "glibc" 2422bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_MWERKS) && defined(__MSL__) 2423bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_LIBC_MSL __MSL__ 2424bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "msl" 2425bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && defined(__IAR_SYSTEMS_ICC__) 2426bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_LIBC_ISOC90 1 2427bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "isoc90" 2428bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2429bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_LIBC_DEFAULT 1 2430bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INFO_LIBC "default" 2431bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2432a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2433bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) 2434bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ASM_SYNTAX_MSC 1 2435bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) 2436bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul)) 2437bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) 2438bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ASM_SYNTAX_GNUC 1 2439bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) 2440bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ASM_SYNTAX_GNUC 1 2441bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_GNUC) 2442bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_ASM_SYNTAX_GNUC 1 2443a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2444bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ASM_SYNTAX_GNUC) 2445bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) 2446bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER "ax" 2447bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER_LIST_CC /*empty*/ 2448bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER_LIST_CC_MEMORY /*empty*/ 2449bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty*/ 2450bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_INTELC && (__INTEL_COMPILER < 1000)) 2451bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER "memory" 2452bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER_LIST_CC /*empty*/ 2453bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER_LIST_CC_MEMORY : "memory" 2454bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty*/ 2455bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2456bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER "cc", "memory" 2457bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER_LIST_CC : "cc" 2458bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER_LIST_CC_MEMORY : "cc", "memory" 2459bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty*/ 2460a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2461a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2462a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ARCH_ALPHA) 2463bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_AVOID_UINT_INDEX 1 2464a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_AMD64) 2465bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_AVOID_INT_INDEX 1 2466bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_AVOID_UINT_INDEX 1 2467bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2468bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2469bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2470bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2471bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2472bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2473bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED64 2474bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED64 1 2475bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2476a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_ARM) 2477bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if defined(__ARM_FEATURE_UNALIGNED) 2478bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2479bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2480bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2481bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2482bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2483bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2484bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__TARGET_ARCH_ARM) && ((__TARGET_ARCH_ARM+0) >= 7) 2485bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2486bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2487bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2488bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2489bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2490bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2491bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif defined(__TARGET_ARCH_ARM) && ((__TARGET_ARCH_ARM+0) >= 6) && !defined(__TARGET_PROFILE_M) 2492bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2493bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2494bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2495bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2496bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2497bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2498bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2499bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_ARM64) 2500bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2501bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2502bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2503bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2504bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2505bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2506bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED64 2507bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED64 1 2508bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2509a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_CRIS) 2510bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2511bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2512bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2513bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2514bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2515bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2516a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_I386) 2517bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2518bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2519bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2520bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2521bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2522bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2523a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_IA64) 2524bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_AVOID_INT_INDEX 1 2525bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_AVOID_UINT_INDEX 1 2526bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_PREFER_POSTINC 1 2527a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_M68K) 2528bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_PREFER_POSTINC 1 2529bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_PREFER_PREDEC 1 2530a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if defined(__mc68020__) && !defined(__mcoldfire__) 2531bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2532bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2533bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2534bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2535bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2536bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2537a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 2538a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_MIPS) 2539bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_AVOID_UINT_INDEX 1 2540a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_POWERPC) 2541bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_PREFER_PREINC 1 2542bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_PREFER_PREDEC 1 2543a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_ABI_BIG_ENDIAN) 2544bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2545bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2546bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2547bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2548bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2549bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2550bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_WORDSIZE == 8) 2551bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED64 2552bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED64 1 2553bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2554bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2555a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 2556a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_S390) 2557bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED16 2558bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED16 1 2559bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2560bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED32 2561bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED32 1 2562bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2563bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_WORDSIZE == 8) 2564bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# ifndef LZO_OPT_UNALIGNED64 2565bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_UNALIGNED64 1 2566bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2567a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 2568a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_ARCH_SH) 2569bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_PREFER_POSTINC 1 2570bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_OPT_PREFER_PREDEC 1 2571a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2572a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef LZO_CFG_NO_INLINE_ASM 2573bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) 2574a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CFG_NO_INLINE_ASM 1 2575bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_LLVM) 2576bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CFG_NO_INLINE_ASM 1 2577bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2578a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2579bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CFG_NO_INLINE_ASM) 2580bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_ASM_SYNTAX_MSC 2581bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef LZO_ASM_SYNTAX_GNUC 2582bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef __LZO_ASM_CLOBBER 2583bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef __LZO_ASM_CLOBBER_LIST_CC 2584bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef __LZO_ASM_CLOBBER_LIST_CC_MEMORY 2585bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# undef __LZO_ASM_CLOBBER_LIST_EMPTY 2586a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2587a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef LZO_CFG_NO_UNALIGNED 2588a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) 2589a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CFG_NO_UNALIGNED 1 2590a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2591a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2592a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CFG_NO_UNALIGNED) 2593a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_OPT_UNALIGNED16 2594a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_OPT_UNALIGNED32 2595a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_OPT_UNALIGNED64 2596a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2597a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__LZO_INFOSTR_MM) 2598a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM)) 2599a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_MM "" 2600a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO_INFO_MM) 2601a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_MM "." LZO_INFO_MM 2602a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 2603a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_MM "" 2604a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2605a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__LZO_INFOSTR_PM) 2606a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO_INFO_ABI_PM) 2607a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM 2608a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 2609a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_PM "" 2610a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2611a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__LZO_INFOSTR_ENDIAN) 2612a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO_INFO_ABI_ENDIAN) 2613a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN 2614a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 2615a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_ENDIAN "" 2616a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2617a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__LZO_INFOSTR_OSNAME) 2618a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO_INFO_OS_CONSOLE) 2619a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE 2620a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO_INFO_OS_POSIX) 2621a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX 2622a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 2623a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_OSNAME LZO_INFO_OS 2624a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2625a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__LZO_INFOSTR_LIBC) 2626a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO_INFO_LIBC) 2627a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC 2628a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 2629a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_LIBC "" 2630a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2631a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__LZO_INFOSTR_CCVER) 2632a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO_INFO_CCVER) 2633a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER 2634a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 2635a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_INFOSTR_CCVER "" 2636a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 2637a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_INFO_STRING \ 2638a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \ 2639a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER 2640bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_CFG_SKIP_LZO_TYPES) 2641bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (!(LZO_SIZEOF_SHORT+0 > 0 && LZO_SIZEOF_INT+0 > 0 && LZO_SIZEOF_LONG+0 > 0)) 2642bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "missing defines for sizes" 2643bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2644bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (!(LZO_SIZEOF_PTRDIFF_T+0 > 0 && LZO_SIZEOF_SIZE_T+0 > 0 && LZO_SIZEOF_VOID_P+0 > 0)) 2645bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "missing defines for sizes" 2646bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2647bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_llong_t) 2648bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_SIZEOF_LONG_LONG+0 > 0) 2649bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_gnuc_extension__ typedef long long lzo_llong_t__; 2650bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_gnuc_extension__ typedef unsigned long long lzo_ullong_t__; 2651bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_llong_t lzo_llong_t__ 2652bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_ullong_t lzo_ullong_t__ 2653bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2654bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2655bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_int16e_t) 2656bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_SIZEOF_LONG == 2) 2657bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int16e_t long 2658bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint16e_t unsigned long 2659bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT == 2) 2660bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int16e_t int 2661bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint16e_t unsigned int 2662bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_SHORT == 2) 2663bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int16e_t short int 2664bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint16e_t unsigned short int 2665bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && !(LZO_CFG_TYPE_NO_MODE_HI) && (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x025f00ul) || LZO_CC_LLVM) 2666bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef int lzo_int16e_hi_t__ __attribute__((__mode__(__HI__))); 2667bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef unsigned int lzo_uint16e_hi_t__ __attribute__((__mode__(__HI__))); 2668bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int16e_t lzo_int16e_hi_t__ 2669bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint16e_t lzo_uint16e_hi_t__ 2670bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF___INT16 == 2) 2671bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int16e_t __int16 2672bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint16e_t unsigned __int16 2673bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2674bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2675bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2676bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int16e_t) 2677bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT16E_T 2 2678bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16e_t) == 2) 2679bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16e_t) == LZO_SIZEOF_LZO_INT16E_T) 2680bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2681bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_int32e_t) 2682bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_SIZEOF_LONG == 4) 2683bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32e_t long int 2684bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32e_t unsigned long int 2685bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT == 4) 2686bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32e_t int 2687bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32e_t unsigned int 2688bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_SHORT == 4) 2689bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32e_t short int 2690bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32e_t unsigned short int 2691bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_LONG_LONG == 4) 2692bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32e_t lzo_llong_t 2693bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32e_t lzo_ullong_t 2694bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && !(LZO_CFG_TYPE_NO_MODE_SI) && (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x025f00ul) || LZO_CC_LLVM) && (__INT_MAX__+0 > 2147483647L) 2695bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__))); 2696bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__))); 2697bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32e_t lzo_int32e_si_t__ 2698bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32e_t lzo_uint32e_si_t__ 2699bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif 1 && !(LZO_CFG_TYPE_NO_MODE_SI) && (LZO_CC_GNUC >= 0x025f00ul) && defined(__AVR__) && (__LONG_MAX__+0 == 32767L) 2700bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__))); 2701bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__))); 2702bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32e_t lzo_int32e_si_t__ 2703bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32e_t lzo_uint32e_si_t__ 2704bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT32_C(c) (c##LL) 2705bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT32_C(c) (c##ULL) 2706bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF___INT32 == 4) 2707bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32e_t __int32 2708bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32e_t unsigned __int32 2709bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2710bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2711bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2712bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int32e_t) 2713bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT32E_T 4 2714bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32e_t) == 4) 2715bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32e_t) == LZO_SIZEOF_LZO_INT32E_T) 2716bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2717bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_int64e_t) 2718bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_SIZEOF___INT64 == 8) 2719bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_BORLANDC) && !(LZO_CFG_TYPE_PREFER___INT64) 2720bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CFG_TYPE_PREFER___INT64 1 2721bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2722bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2723bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_SIZEOF_INT == 8) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG) 2724bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int64e_t int 2725bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint64e_t unsigned int 2726bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT64E_T LZO_SIZEOF_INT 2727bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_LONG == 8) 2728bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int64e_t long int 2729bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint64e_t unsigned long int 2730bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT64E_T LZO_SIZEOF_LONG 2731bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_LONG_LONG == 8) && !(LZO_CFG_TYPE_PREFER___INT64) 2732bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int64e_t lzo_llong_t 2733bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint64e_t lzo_ullong_t 2734bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_BORLANDC) 2735bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT64_C(c) ((c) + 0ll) 2736bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT64_C(c) ((c) + 0ull) 2737bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif 0 2738bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT64_C(c) (__lzo_gnuc_extension__ (c##LL)) 2739bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT64_C(c) (__lzo_gnuc_extension__ (c##ULL)) 2740bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2741bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT64_C(c) (c##LL) 2742bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT64_C(c) (c##ULL) 2743bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2744bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT64E_T LZO_SIZEOF_LONG_LONG 2745bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF___INT64 == 8) 2746bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int64e_t __int64 2747bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint64e_t unsigned __int64 2748bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_CC_BORLANDC) 2749bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT64_C(c) ((c) + 0i64) 2750bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT64_C(c) ((c) + 0ui64) 2751bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2752bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT64_C(c) (c##i64) 2753bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT64_C(c) (c##ui64) 2754bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2755bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT64E_T LZO_SIZEOF___INT64 2756bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2757bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2758bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2759bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int64e_t) 2760bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64e_t) == 8) 2761bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64e_t) == LZO_SIZEOF_LZO_INT64E_T) 2762bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2763bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_int32l_t) 2764bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int32e_t) 2765bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32l_t lzo_int32e_t 2766bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32l_t lzo_uint32e_t 2767bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_LZO_INT32E_T 2768bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT >= 4) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG) 2769bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32l_t int 2770bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32l_t unsigned int 2771bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_INT 2772bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_LONG >= 4) 2773bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32l_t long int 2774bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32l_t unsigned long int 2775bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_LONG 2776bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2777bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "lzo_int32l_t" 2778bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2779bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2780bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 2781bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32l_t) >= 4) 2782bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32l_t) == LZO_SIZEOF_LZO_INT32L_T) 2783bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2784bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_int64l_t) 2785bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int64e_t) 2786bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int64l_t lzo_int64e_t 2787bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint64l_t lzo_uint64e_t 2788bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT64L_T LZO_SIZEOF_LZO_INT64E_T 2789bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2790bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2791bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2792bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int64l_t) 2793bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64l_t) >= 8) 2794bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64l_t) == LZO_SIZEOF_LZO_INT64L_T) 2795bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2796bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_int32f_t) 2797bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_SIZEOF_SIZE_T >= 8) 2798bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32f_t lzo_int64l_t 2799bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32f_t lzo_uint64l_t 2800bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT32F_T LZO_SIZEOF_LZO_INT64L_T 2801bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2802bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int32f_t lzo_int32l_t 2803bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint32f_t lzo_uint32l_t 2804bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT32F_T LZO_SIZEOF_LZO_INT32L_T 2805bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2806bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2807bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 2808bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32f_t) >= 4) 2809bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32f_t) == LZO_SIZEOF_LZO_INT32F_T) 2810bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2811bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_int64f_t) 2812bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int64l_t) 2813bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_int64f_t lzo_int64l_t 2814bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uint64f_t lzo_uint64l_t 2815bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INT64F_T LZO_SIZEOF_LZO_INT64L_T 2816bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2817bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2818bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2819bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int64f_t) 2820bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64f_t) >= 8) 2821bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64f_t) == LZO_SIZEOF_LZO_INT64F_T) 2822bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2823bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_intptr_t) 2824bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 && (LZO_OS_OS400 && (LZO_SIZEOF_VOID_P == 16)) 2825bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define __LZO_INTPTR_T_IS_POINTER 1 2826bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef char* lzo_intptr_t; 2827bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef char* lzo_uintptr_t; 2828bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_intptr_t lzo_intptr_t 2829bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uintptr_t lzo_uintptr_t 2830bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_VOID_P 2831bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_CC_MSC && (_MSC_VER >= 1300) && (LZO_SIZEOF_VOID_P == 4) && (LZO_SIZEOF_INT == 4)) 2832bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef __w64 int lzo_intptr_t; 2833bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef __w64 unsigned int lzo_uintptr_t; 2834bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_intptr_t lzo_intptr_t 2835bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uintptr_t lzo_uintptr_t 2836bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_INT 2837bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_SHORT == LZO_SIZEOF_VOID_P) && (LZO_SIZEOF_INT > LZO_SIZEOF_VOID_P) 2838bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_intptr_t short 2839bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uintptr_t unsigned short 2840bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_SHORT 2841bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_INT >= LZO_SIZEOF_VOID_P) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG) 2842bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_intptr_t int 2843bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uintptr_t unsigned int 2844bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_INT 2845bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_LONG >= LZO_SIZEOF_VOID_P) 2846bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_intptr_t long 2847bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uintptr_t unsigned long 2848bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_LONG 2849bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_SIZEOF_LZO_INT64L_T >= LZO_SIZEOF_VOID_P) 2850bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_intptr_t lzo_int64l_t 2851bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_uintptr_t lzo_uint64l_t 2852bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_LZO_INT64L_T 2853bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2854bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "lzo_intptr_t" 2855bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2856bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2857bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 2858bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_intptr_t) >= sizeof(void *)) 2859bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_intptr_t) == sizeof(lzo_uintptr_t)) 2860bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2861bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(lzo_word_t) 2862bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(LZO_WORDSIZE) && (LZO_WORDSIZE+0 > 0) 2863bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_WORDSIZE == LZO_SIZEOF_LZO_INTPTR_T) && !(__LZO_INTPTR_T_IS_POINTER) 2864bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_word_t lzo_uintptr_t 2865bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_sword_t lzo_intptr_t 2866bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LZO_INTPTR_T 2867bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_WORDSIZE == LZO_SIZEOF_LONG) 2868bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_word_t unsigned long 2869bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_sword_t long 2870bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LONG 2871bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_WORDSIZE == LZO_SIZEOF_INT) 2872bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_word_t unsigned int 2873bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_sword_t int 2874bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_INT 2875bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_WORDSIZE == LZO_SIZEOF_SHORT) 2876bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_word_t unsigned short 2877bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_sword_t short 2878bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_SHORT 2879bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_WORDSIZE == 1) 2880bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_word_t unsigned char 2881bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_sword_t signed char 2882bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_WORD_T 1 2883bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_WORDSIZE == LZO_SIZEOF_LZO_INT64L_T) 2884bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_word_t lzo_uint64l_t 2885bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_sword_t lzo_int64l_t 2886bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LZO_INT64L_T 2887bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ARCH_SPU) && (LZO_CC_GNUC) 2888bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 0 2889bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef unsigned lzo_word_t __attribute__((__mode__(__V16QI__))); 2890bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman typedef int lzo_sword_t __attribute__((__mode__(__V16QI__))); 2891bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_word_t lzo_word_t 2892bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_sword_t lzo_sword_t 2893bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_SIZEOF_LZO_WORD_T 16 2894bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2895bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 2896bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "lzo_word_t" 2897bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2898bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2899bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2900bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 && defined(lzo_word_t) 2901bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_word_t) == LZO_WORDSIZE) 2902bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_sword_t) == LZO_WORDSIZE) 2903bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2904bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 2905bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_int8_t signed char 2906bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_uint8_t unsigned char 2907bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_SIZEOF_LZO_INT8_T 1 2908bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == 1) 2909bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == sizeof(lzo_uint8_t)) 2910bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2911bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int16e_t) 2912bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_int16_t lzo_int16e_t 2913bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_uint16_t lzo_uint16e_t 2914bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_SIZEOF_LZO_INT16_T LZO_SIZEOF_LZO_INT16E_T 2915bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == 2) 2916bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == sizeof(lzo_uint16_t)) 2917bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2918bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int32e_t) 2919bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_int32_t lzo_int32e_t 2920bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_uint32_t lzo_uint32e_t 2921bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_SIZEOF_LZO_INT32_T LZO_SIZEOF_LZO_INT32E_T 2922bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == 4) 2923bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == sizeof(lzo_uint32_t)) 2924bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2925bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int64e_t) 2926bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_int64_t lzo_int64e_t 2927bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_uint64_t lzo_uint64e_t 2928bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_SIZEOF_LZO_INT64_T LZO_SIZEOF_LZO_INT64E_T 2929bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == 8) 2930bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == sizeof(lzo_uint64_t)) 2931bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2932bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 2933bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_int_least32_t lzo_int32l_t 2934bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_uint_least32_t lzo_uint32l_t 2935bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_SIZEOF_LZO_INT_LEAST32_T LZO_SIZEOF_LZO_INT32L_T 2936bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least32_t) >= 4) 2937bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least32_t) == sizeof(lzo_uint_least32_t)) 2938bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2939bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int64l_t) 2940bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_int_least64_t lzo_int64l_t 2941bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_uint_least64_t lzo_uint64l_t 2942bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_SIZEOF_LZO_INT_LEAST64_T LZO_SIZEOF_LZO_INT64L_T 2943bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least64_t) >= 8) 2944bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least64_t) == sizeof(lzo_uint_least64_t)) 2945bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2946bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 2947bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_int_fast32_t lzo_int32f_t 2948bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_uint_fast32_t lzo_uint32f_t 2949bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_SIZEOF_LZO_INT_FAST32_T LZO_SIZEOF_LZO_INT32F_T 2950bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast32_t) >= 4) 2951bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast32_t) == sizeof(lzo_uint_fast32_t)) 2952bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2953bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int64f_t) 2954bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_int_fast64_t lzo_int64f_t 2955bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_uint_fast64_t lzo_uint64f_t 2956bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_SIZEOF_LZO_INT_FAST64_T LZO_SIZEOF_LZO_INT64F_T 2957bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast64_t) >= 8) 2958bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast64_t) == sizeof(lzo_uint_fast64_t)) 2959bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2960bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_INT16_C) 2961bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 2) 2962bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT16_C(c) ((c) + 0) 2963bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT16_C(c) ((c) + 0U) 2964bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 2) 2965bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT16_C(c) ((c) + 0L) 2966bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT16_C(c) ((c) + 0UL) 2967bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_SIZEOF_INT >= 2) 2968bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT16_C(c) (c) 2969bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT16_C(c) (c##U) 2970bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_SIZEOF_LONG >= 2) 2971bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT16_C(c) (c##L) 2972bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT16_C(c) (c##UL) 2973bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2974bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "LZO_INT16_C" 2975bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2976bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2977bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_INT32_C) 2978bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 4) 2979bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT32_C(c) ((c) + 0) 2980bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT32_C(c) ((c) + 0U) 2981bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 4) 2982bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT32_C(c) ((c) + 0L) 2983bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT32_C(c) ((c) + 0UL) 2984bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_SIZEOF_INT >= 4) 2985bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT32_C(c) (c) 2986bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT32_C(c) (c##U) 2987bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_SIZEOF_LONG >= 4) 2988bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT32_C(c) (c##L) 2989bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT32_C(c) (c##UL) 2990bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_SIZEOF_LONG_LONG >= 4) 2991bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT32_C(c) (c##LL) 2992bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT32_C(c) (c##ULL) 2993bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 2994bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "LZO_INT32_C" 2995bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 2996bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 2997bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_INT64_C) && defined(lzo_int64l_t) 2998bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 8) 2999bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT64_C(c) ((c) + 0) 3000bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT64_C(c) ((c) + 0U) 3001bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 8) 3002bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT64_C(c) ((c) + 0L) 3003bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT64_C(c) ((c) + 0UL) 3004bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_SIZEOF_INT >= 8) 3005bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT64_C(c) (c) 3006bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT64_C(c) (c##U) 3007bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# elif (LZO_SIZEOF_LONG >= 8) 3008bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_INT64_C(c) (c##L) 3009bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_UINT64_C(c) (c##UL) 3010bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# else 3011bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# error "LZO_INT64_C" 3012bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 3013bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3014bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3015a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3016a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3017a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3018a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3019a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3020a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZO_HAVE_CONFIG_H 3021a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include "minilzo.h" 3022a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3023bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x2070) 3024a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "version mismatch in miniLZO source files" 3025a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3026a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3027a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef MINILZO_HAVE_CONFIG_H 3028a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_HAVE_CONFIG_H 1 3029a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3030a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3031a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef __LZO_CONF_H 3032a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define __LZO_CONF_H 1 3033a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3034a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_IN_MINILZO) 3035bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(LZO_CFG_FREESTANDING) && (LZO_CFG_FREESTANDING) 3036a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_LIBC_FREESTANDING 1 3037a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_OS_FREESTANDING 1 3038a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3039a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_CFG_EXTRA_CONFIG_HEADER) 3040a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# include LZO_CFG_EXTRA_CONFIG_HEADER 3041a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3042a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED) 3043a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "include this file first" 3044a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3045a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include "lzo/lzoconf.h" 3046bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(LZO_CFG_EXTRA_CONFIG_HEADER2) 3047bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# include LZO_CFG_EXTRA_CONFIG_HEADER2 3048bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3049a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3050a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3051bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_VERSION < 0x2070) || !defined(__LZOCONF_H_INCLUDED) 3052a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "version mismatch" 3053a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3054a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3055bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_MSC && (_MSC_VER >= 1000 && _MSC_VER < 1100)) 3056bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# pragma warning(disable: 4702) 3057a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3058a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_MSC && (_MSC_VER >= 1000)) 3059a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma warning(disable: 4127 4701) 3060bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# pragma warning(disable: 4514 4710 4711) 3061a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3062a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_MSC && (_MSC_VER >= 1300)) 3063a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma warning(disable: 4820) 3064bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3065bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_MSC && (_MSC_VER >= 1800)) 3066bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# pragma warning(disable: 4746) 3067a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3068a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3069a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_SUNPROC) 3070a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__cplusplus) 3071a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma error_messages(off,E_END_OF_LOOP_CODE_NOT_REACHED) 3072a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma error_messages(off,E_LOOP_NOT_ENTERED_AT_TOP) 3073a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# pragma error_messages(off,E_STATEMENT_NOT_REACHED) 3074a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3075a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3076a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3077bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__LZO_IN_MINILZO) || (LZO_CFG_FREESTANDING) 3078a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif 1 3079a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# include <string.h> 3080a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3081bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_WANT_ACC_INCD_H 1 3082a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3083bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(LZO_HAVE_CONFIG_H) 3084bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define LZO_CFG_NO_CONFIG_HEADER 1 3085a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3086a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3087a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && !defined(LZO_CFG_FREESTANDING) 3088a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && !defined(HAVE_STRING_H) 3089a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define HAVE_STRING_H 1 3090a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3091a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && !defined(HAVE_MEMCMP) 3092a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define HAVE_MEMCMP 1 3093a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3094a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && !defined(HAVE_MEMCPY) 3095a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define HAVE_MEMCPY 1 3096a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3097a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && !defined(HAVE_MEMMOVE) 3098a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define HAVE_MEMMOVE 1 3099a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3100a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && !defined(HAVE_MEMSET) 3101a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define HAVE_MEMSET 1 3102a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3103a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3104a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3105a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && defined(HAVE_STRING_H) 3106a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <string.h> 3107a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3108a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3109bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 || defined(lzo_int8_t) || defined(lzo_uint8_t) 3110bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == 1) 3111bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint8_t) == 1) 3112bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3113bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 || defined(lzo_int16_t) || defined(lzo_uint16_t) 3114bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == 2) 3115bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint16_t) == 2) 3116bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3117bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 || defined(lzo_int32_t) || defined(lzo_uint32_t) 3118bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == 4) 3119bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32_t) == 4) 3120bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3121bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_int64_t) || defined(lzo_uint64_t) 3122bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == 8) 3123bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint64_t) == 8) 3124bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3125bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CFG_FREESTANDING) 3127a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef HAVE_MEMCMP 3128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef HAVE_MEMCPY 3129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef HAVE_MEMMOVE 3130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef HAVE_MEMSET 3131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3132a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3133a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !(HAVE_MEMCMP) 3134a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef memcmp 3135a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define memcmp(a,b,c) lzo_memcmp(a,b,c) 3136bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3137a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef lzo_memcmp 3138a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define lzo_memcmp(a,b,c) memcmp(a,b,c) 3139a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3140a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !(HAVE_MEMCPY) 3141a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef memcpy 3142a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define memcpy(a,b,c) lzo_memcpy(a,b,c) 3143bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3144a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef lzo_memcpy 3145a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define lzo_memcpy(a,b,c) memcpy(a,b,c) 3146a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3147a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !(HAVE_MEMMOVE) 3148a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef memmove 3149a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define memmove(a,b,c) lzo_memmove(a,b,c) 3150bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3151a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef lzo_memmove 3152a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define lzo_memmove(a,b,c) memmove(a,b,c) 3153a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3154a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !(HAVE_MEMSET) 3155a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef memset 3156a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define memset(a,b,c) lzo_memset(a,b,c) 3157bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3158a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef lzo_memset 3159a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define lzo_memset(a,b,c) memset(a,b,c) 3160a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3161a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef NDEBUG 3163a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CFG_FREESTANDING) 3164a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_DEBUG 3165a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NDEBUG 1 3166a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef assert 3167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define assert(e) ((void)0) 3168a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(LZO_DEBUG) 3170a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NDEBUG 1 3171a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 3172a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# include <assert.h> 3173a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3174a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3175a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 0 && defined(__BOUNDS_CHECKING_ON) 3176a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# include <unchecked.h> 3177a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3178a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define BOUNDS_CHECKING_OFF_DURING(stmt) stmt 3179a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr) 3180a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3181a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3182a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CFG_PGO) 3183a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef __lzo_likely 3184a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef __lzo_unlikely 3185a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_likely(e) (e) 3186a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __lzo_unlikely(e) (e) 3187a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3188a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3189bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _ 3190bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef __ 3191bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef ___ 3192bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef ____ 3193bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _p0 3194bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _p1 3195bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _p2 3196bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _p3 3197bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _p4 3198bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _s0 3199bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _s1 3200bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _s2 3201bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _s3 3202bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _s4 3203bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef _ww 3204bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3205a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 3206a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BYTE(x) ((unsigned char) (x)) 3207a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3208a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_BYTE(x) ((unsigned char) ((x) & 0xff)) 3209a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3210a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3211a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) 3212a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b)) 3213a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c)) 3214a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c)) 3215a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define lzo_sizeof(type) ((lzo_uint) (sizeof(type))) 3217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3218bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array)))) 3219bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3220bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_SIZE(bits) (1u << (bits)) 3221bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MASK(bits) (LZO_SIZE(bits) - 1) 3222bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3223bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_USIZE(bits) ((lzo_uint) 1 << (bits)) 3224bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_UMASK(bits) (LZO_USIZE(bits) - 1) 3225bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3226bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(DMUL) 3227bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 0 3228bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3229bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define DMUL(a,b) ((lzo_xint) ((lzo_uint32_t)(a) * (lzo_uint32_t)(b))) 3230bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3231bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define DMUL(a,b) ((lzo_xint) ((a) * (b))) 3232bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3233bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3234bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3235bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef __LZO_FUNC_H 3236bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define __LZO_FUNC_H 1 3237bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3238bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !defined(LZO_BITOPS_USE_ASM_BITSCAN) && !defined(LZO_BITOPS_USE_GNUC_BITSCAN) && !defined(LZO_BITOPS_USE_MSC_BITSCAN) 3239bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 && (LZO_ARCH_AMD64) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_ASM_SYNTAX_GNUC) 3240bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_BITOPS_USE_ASM_BITSCAN 1 3241bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#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)))) 3242bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_BITOPS_USE_GNUC_BITSCAN 1 3243bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OS_WIN32 || LZO_OS_WIN64) && ((LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 1010)) || (LZO_CC_MSC && (_MSC_VER >= 1400))) 3244bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_BITOPS_USE_MSC_BITSCAN 1 3245bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_MSC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) 3246bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#include <intrin.h> 3247bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3248bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_MSC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) 3249bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#pragma intrinsic(_BitScanReverse) 3250bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#pragma intrinsic(_BitScanForward) 3251bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3252bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_MSC) && (LZO_ARCH_AMD64) 3253bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#pragma intrinsic(_BitScanReverse64) 3254bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#pragma intrinsic(_BitScanForward64) 3255bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3256bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3257bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3258bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3259bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline unsigned lzo_bitops_ctlz32_func(lzo_uint32_t v) 3260bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3261bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) 3262bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned long r; (void) _BitScanReverse(&r, v); return (unsigned) r ^ 31; 3263bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_ctlz32(v) lzo_bitops_ctlz32_func(v) 3264bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) 3265bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint32_t r; 3266bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman __asm__("bsr %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC); 3267bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return (unsigned) r ^ 31; 3268bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_ctlz32(v) lzo_bitops_ctlz32_func(v) 3269bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_INT == 4) 3270bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned r; r = (unsigned) __builtin_clz(v); return r; 3271bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_ctlz32(v) ((unsigned) __builtin_clz(v)) 3272bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3273bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED(v); return 0; 3274bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3275bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3276bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3277bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_uint64_t) 3278bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline unsigned lzo_bitops_ctlz64_func(lzo_uint64_t v) 3279bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3280bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64) 3281bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned long r; (void) _BitScanReverse64(&r, v); return (unsigned) r ^ 63; 3282bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_ctlz64(v) lzo_bitops_ctlz64_func(v) 3283bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC) 3284bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint64_t r; 3285bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman __asm__("bsr %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC); 3286bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return (unsigned) r ^ 63; 3287bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_ctlz64(v) lzo_bitops_ctlz64_func(v) 3288bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG == 8) && (LZO_WORDSIZE >= 8) 3289bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned r; r = (unsigned) __builtin_clzl(v); return r; 3290bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_ctlz64(v) ((unsigned) __builtin_clzl(v)) 3291bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG_LONG == 8) && (LZO_WORDSIZE >= 8) 3292bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned r; r = (unsigned) __builtin_clzll(v); return r; 3293bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_ctlz64(v) ((unsigned) __builtin_clzll(v)) 3294bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3295bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED(v); return 0; 3296bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3297bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3298bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3299bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3300bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline unsigned lzo_bitops_cttz32_func(lzo_uint32_t v) 3301bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3302bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) 3303bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned long r; (void) _BitScanForward(&r, v); return (unsigned) r; 3304bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_cttz32(v) lzo_bitops_cttz32_func(v) 3305bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) 3306bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint32_t r; 3307bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman __asm__("bsf %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC); 3308bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return (unsigned) r; 3309bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_cttz32(v) lzo_bitops_cttz32_func(v) 3310bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_INT >= 4) 3311bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned r; r = (unsigned) __builtin_ctz(v); return r; 3312bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_cttz32(v) ((unsigned) __builtin_ctz(v)) 3313bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3314bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED(v); return 0; 3315bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3316bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3317bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3318bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_uint64_t) 3319bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline unsigned lzo_bitops_cttz64_func(lzo_uint64_t v) 3320bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3321bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64) 3322bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned long r; (void) _BitScanForward64(&r, v); return (unsigned) r; 3323bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_cttz64(v) lzo_bitops_cttz64_func(v) 3324bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC) 3325bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint64_t r; 3326bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman __asm__("bsf %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC); 3327bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return (unsigned) r; 3328bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_cttz64(v) lzo_bitops_cttz64_func(v) 3329bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG >= 8) && (LZO_WORDSIZE >= 8) 3330bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned r; r = (unsigned) __builtin_ctzl(v); return r; 3331bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_cttz64(v) ((unsigned) __builtin_ctzl(v)) 3332bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG_LONG >= 8) && (LZO_WORDSIZE >= 8) 3333bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned r; r = (unsigned) __builtin_ctzll(v); return r; 3334bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_bitops_cttz64(v) ((unsigned) __builtin_ctzll(v)) 3335bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3336bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED(v); return 0; 3337bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3338bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3339bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3340bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3341bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#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) 3342bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanstatic void __attribute__((__unused__)) 3343bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3344bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline void 3345bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3346bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanlzo_bitops_unused_funcs(void) 3347bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3348bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_bitops_ctlz32_func); 3349bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_bitops_cttz32_func); 3350bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_uint64_t) 3351bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_bitops_ctlz64_func); 3352bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_bitops_cttz64_func); 3353bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3354bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_bitops_unused_funcs); 3355bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3356bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3357bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(__lzo_alignof) && !(LZO_CFG_NO_UNALIGNED) 3358bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef __lzo_memops_tcheck 3359bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define __lzo_memops_tcheck(t,a,b) ((void)0, sizeof(t) == (a) && __lzo_alignof(t) == (b)) 3360bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3361bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3362bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_TU0p 3363bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_TU0p void __LZO_MMODEL * 3364bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3365bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_TU1p 3366bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_TU1p unsigned char __LZO_MMODEL * 3367bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3368bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_TU2p 3369bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED16) 3370bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmantypedef lzo_uint16_t __lzo_may_alias lzo_memops_TU2; 3371bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_TU2p volatile lzo_memops_TU2 * 3372bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__lzo_byte_struct) 3373bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_byte_struct(lzo_memops_TU2_struct,2) 3374bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmantypedef struct lzo_memops_TU2_struct lzo_memops_TU2; 3375bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3376bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanstruct lzo_memops_TU2_struct { unsigned char a[2]; } __lzo_may_alias; 3377bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmantypedef struct lzo_memops_TU2_struct lzo_memops_TU2; 3378bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3379bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_TU2p 3380bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_TU2p lzo_memops_TU2 * 3381bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3382bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3383bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_TU4p 3384bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) 3385bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmantypedef lzo_uint32_t __lzo_may_alias lzo_memops_TU4; 3386bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_TU4p volatile lzo_memops_TU4 __LZO_MMODEL * 3387bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__lzo_byte_struct) 3388bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_byte_struct(lzo_memops_TU4_struct,4) 3389bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmantypedef struct lzo_memops_TU4_struct lzo_memops_TU4; 3390bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3391bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanstruct lzo_memops_TU4_struct { unsigned char a[4]; } __lzo_may_alias; 3392bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmantypedef struct lzo_memops_TU4_struct lzo_memops_TU4; 3393bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3394bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_TU4p 3395bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_TU4p lzo_memops_TU4 __LZO_MMODEL * 3396bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3397bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3398bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_TU8p 3399bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED64) 3400bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmantypedef lzo_uint64_t __lzo_may_alias lzo_memops_TU8; 3401bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_TU8p volatile lzo_memops_TU8 __LZO_MMODEL * 3402bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__lzo_byte_struct) 3403bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_byte_struct(lzo_memops_TU8_struct,8) 3404bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmantypedef struct lzo_memops_TU8_struct lzo_memops_TU8; 3405bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3406bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanstruct lzo_memops_TU8_struct { unsigned char a[8]; } __lzo_may_alias; 3407bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmantypedef struct lzo_memops_TU8_struct lzo_memops_TU8; 3408bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3409bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_TU8p 3410bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_TU8p lzo_memops_TU8 __LZO_MMODEL * 3411bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3412bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3413bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_set_TU1p 3414bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_set_TU1p volatile lzo_memops_TU1p 3415bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3416bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef lzo_memops_move_TU1p 3417bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_memops_move_TU1p lzo_memops_TU1p 3418bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3419bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_SET1(dd,cc) \ 3420bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3421bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_set_TU1p d__1 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \ 3422bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__1[0] = LZO_BYTE(cc); \ 3423bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3424bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_SET2(dd,cc) \ 3425bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3426bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_set_TU1p d__2 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \ 3427bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__2[0] = LZO_BYTE(cc); d__2[1] = LZO_BYTE(cc); \ 3428bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3429bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_SET3(dd,cc) \ 3430bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3431bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_set_TU1p d__3 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \ 3432bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__3[0] = LZO_BYTE(cc); d__3[1] = LZO_BYTE(cc); d__3[2] = LZO_BYTE(cc); \ 3433bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3434bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_SET4(dd,cc) \ 3435bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3436bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_set_TU1p d__4 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \ 3437bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__4[0] = LZO_BYTE(cc); d__4[1] = LZO_BYTE(cc); d__4[2] = LZO_BYTE(cc); d__4[3] = LZO_BYTE(cc); \ 3438bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3439bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_MOVE1(dd,ss) \ 3440bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3441bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_move_TU1p d__1 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ 3442bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_move_TU1p s__1 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ 3443bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__1[0] = s__1[0]; \ 3444bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3445bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_MOVE2(dd,ss) \ 3446bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3447bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_move_TU1p d__2 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ 3448bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_move_TU1p s__2 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ 3449bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__2[0] = s__2[0]; d__2[1] = s__2[1]; \ 3450bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3451bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_MOVE3(dd,ss) \ 3452bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3453bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_move_TU1p d__3 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ 3454bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_move_TU1p s__3 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ 3455bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__3[0] = s__3[0]; d__3[1] = s__3[1]; d__3[2] = s__3[2]; \ 3456bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3457bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_MOVE4(dd,ss) \ 3458bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3459bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_move_TU1p d__4 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ 3460bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_move_TU1p s__4 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ 3461bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__4[0] = s__4[0]; d__4[1] = s__4[1]; d__4[2] = s__4[2]; d__4[3] = s__4[3]; \ 3462bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3463bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_MOVE8(dd,ss) \ 3464bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3465bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_move_TU1p d__8 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ 3466bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_move_TU1p s__8 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ 3467bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__8[0] = s__8[0]; d__8[1] = s__8[1]; d__8[2] = s__8[2]; d__8[3] = s__8[3]; \ 3468bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d__8[4] = s__8[4]; d__8[5] = s__8[5]; d__8[6] = s__8[6]; d__8[7] = s__8[7]; \ 3469bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3470bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU1p)0)==1) 3471bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY1(dd,ss) LZO_MEMOPS_MOVE1(dd,ss) 3472bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED16) 3473bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU2p)0)==2) 3474bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY2(dd,ss) \ 3475bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman * (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss) 3476bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__lzo_memops_tcheck) 3477bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY2(dd,ss) \ 3478bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN if (__lzo_memops_tcheck(lzo_memops_TU2,2,1)) { \ 3479bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman * (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss); \ 3480bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } else { LZO_MEMOPS_MOVE2(dd,ss); } LZO_BLOCK_END 3481bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3482bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY2(dd,ss) LZO_MEMOPS_MOVE2(dd,ss) 3483bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3484bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) 3485bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU4p)0)==4) 3486bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY4(dd,ss) \ 3487bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman * (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss) 3488bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__lzo_memops_tcheck) 3489bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY4(dd,ss) \ 3490bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN if (__lzo_memops_tcheck(lzo_memops_TU4,4,1)) { \ 3491bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman * (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss); \ 3492bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } else { LZO_MEMOPS_MOVE4(dd,ss); } LZO_BLOCK_END 3493bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3494bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY4(dd,ss) LZO_MEMOPS_MOVE4(dd,ss) 3495bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3496bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_WORDSIZE != 8) 3497bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY8(dd,ss) \ 3498bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 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 3499bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3500bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED64) 3501bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU8p)0)==8) 3502bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY8(dd,ss) \ 3503bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman * (lzo_memops_TU8p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss) 3504bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED32) 3505bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY8(dd,ss) \ 3506bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 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 3507bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(__lzo_memops_tcheck) 3508bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY8(dd,ss) \ 3509bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN if (__lzo_memops_tcheck(lzo_memops_TU8,8,1)) { \ 3510bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman * (lzo_memops_TU8p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss); \ 3511bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } else { LZO_MEMOPS_MOVE8(dd,ss); } LZO_BLOCK_END 3512bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3513bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPY8(dd,ss) LZO_MEMOPS_MOVE8(dd,ss) 3514bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3515bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3516bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_COPYN(dd,ss,nn) \ 3517bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_BEGIN \ 3518bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_TU1p d__n = (lzo_memops_TU1p) (lzo_memops_TU0p) (dd); \ 3519bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_TU1p s__n = (const lzo_memops_TU1p) (const lzo_memops_TU0p) (ss); \ 3520bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint n__n = (nn); \ 3521bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman while ((void)0, n__n >= 8) { LZO_MEMOPS_COPY8(d__n, s__n); d__n += 8; s__n += 8; n__n -= 8; } \ 3522bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if ((void)0, n__n >= 4) { LZO_MEMOPS_COPY4(d__n, s__n); d__n += 4; s__n += 4; n__n -= 4; } \ 3523bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if ((void)0, n__n > 0) do { *d__n++ = *s__n++; } while (--n__n > 0); \ 3524bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_BLOCK_END 3525bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3526bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline lzo_uint16_t lzo_memops_get_le16(const lzo_voidp ss) 3527bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3528bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint16_t v; 3529bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_LITTLE_ENDIAN) 3530bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_MEMOPS_COPY2(&v, ss); 3531bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED16 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC) 3532bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_TU2p s = (const lzo_memops_TU2p) ss; 3533bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned long vv; 3534bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman __asm__("lhbrx %0,0,%1" : "=r" (vv) : "r" (s), "m" (*s)); 3535bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v = (lzo_uint16_t) vv; 3536bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3537bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_TU1p s = (const lzo_memops_TU1p) ss; 3538bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v = (lzo_uint16_t) (((lzo_uint16_t)s[0]) | ((lzo_uint16_t)s[1] << 8)); 3539bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3540bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return v; 3541bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3542bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) 3543bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_LE16(ss) * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss) 3544bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3545bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_LE16(ss) lzo_memops_get_le16(ss) 3546bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3547bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3548bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline lzo_uint32_t lzo_memops_get_le32(const lzo_voidp ss) 3549bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3550bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint32_t v; 3551bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_LITTLE_ENDIAN) 3552bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_MEMOPS_COPY4(&v, ss); 3553bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED32 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC) 3554bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_TU4p s = (const lzo_memops_TU4p) ss; 3555bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned long vv; 3556bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman __asm__("lwbrx %0,0,%1" : "=r" (vv) : "r" (s), "m" (*s)); 3557bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v = (lzo_uint32_t) vv; 3558bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3559bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_memops_TU1p s = (const lzo_memops_TU1p) ss; 3560bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v = (lzo_uint32_t) (((lzo_uint32_t)s[0] << 24) | ((lzo_uint32_t)s[1] << 16) | ((lzo_uint32_t)s[2] << 8) | ((lzo_uint32_t)s[3])); 3561bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3562bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return v; 3563bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3564bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN) 3565bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_LE32(ss) * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss) 3566bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3567bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_LE32(ss) lzo_memops_get_le32(ss) 3568bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3569bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3570bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED64) && (LZO_ABI_LITTLE_ENDIAN) 3571bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_LE64(ss) * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss) 3572bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3573a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3574bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline lzo_uint16_t lzo_memops_get_ne16(const lzo_voidp ss) 3575bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3576bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint16_t v; 3577bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_MEMOPS_COPY2(&v, ss); 3578bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return v; 3579bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3580bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED16) 3581bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_NE16(ss) * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss) 3582bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3583bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_NE16(ss) lzo_memops_get_ne16(ss) 3584bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3585a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3586bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline lzo_uint32_t lzo_memops_get_ne32(const lzo_voidp ss) 3587bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3588bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint32_t v; 3589bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_MEMOPS_COPY4(&v, ss); 3590bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return v; 3591bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3592bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) 3593bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_NE32(ss) * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss) 3594bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3595bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_NE32(ss) lzo_memops_get_ne32(ss) 3596bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3597a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3598bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED64) 3599bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_GET_NE64(ss) * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss) 3600bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3601a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3602bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline void lzo_memops_put_le16(lzo_voidp dd, lzo_uint16_t vv) 3603bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3604bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_LITTLE_ENDIAN) 3605bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_MEMOPS_COPY2(dd, &vv); 3606bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED16 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC) 3607bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_TU2p d = (lzo_memops_TU2p) dd; 3608bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned long v = vv; 3609bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman __asm__("sthbrx %2,0,%1" : "=m" (*d) : "r" (d), "r" (v)); 3610bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3611bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_TU1p d = (lzo_memops_TU1p) dd; 3612bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d[0] = LZO_BYTE((vv ) & 0xff); 3613bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d[1] = LZO_BYTE((vv >> 8) & 0xff); 3614bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3615bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3616bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) 3617bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_PUT_LE16(dd,vv) (* (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = (vv)) 3618bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3619bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_PUT_LE16(dd,vv) lzo_memops_put_le16(dd,vv) 3620bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3621a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3622bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline void lzo_memops_put_le32(lzo_voidp dd, lzo_uint32_t vv) 3623bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3624bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_LITTLE_ENDIAN) 3625bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_MEMOPS_COPY4(dd, &vv); 3626bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED32 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC) 3627bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_TU4p d = (lzo_memops_TU4p) dd; 3628bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned long v = vv; 3629bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman __asm__("stwbrx %2,0,%1" : "=m" (*d) : "r" (d), "r" (v)); 3630a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3631bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memops_TU1p d = (lzo_memops_TU1p) dd; 3632bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d[0] = LZO_BYTE((vv ) & 0xff); 3633bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d[1] = LZO_BYTE((vv >> 8) & 0xff); 3634bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d[2] = LZO_BYTE((vv >> 16) & 0xff); 3635bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman d[3] = LZO_BYTE((vv >> 24) & 0xff); 3636a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3637bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3638bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN) 3639bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_PUT_LE32(dd,vv) (* (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = (vv)) 3640bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3641bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_PUT_LE32(dd,vv) lzo_memops_put_le32(dd,vv) 3642a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3643a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3644bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline void lzo_memops_put_ne16(lzo_voidp dd, lzo_uint16_t vv) 3645bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3646bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_MEMOPS_COPY2(dd, &vv); 3647bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3648bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED16) 3649bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_PUT_NE16(dd,vv) (* (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = (vv)) 3650bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3651bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_PUT_NE16(dd,vv) lzo_memops_put_ne16(dd,vv) 3652a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3653bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3654bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline void lzo_memops_put_ne32(lzo_voidp dd, lzo_uint32_t vv) 3655bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3656bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_MEMOPS_COPY4(dd, &vv); 3657bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3658bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) 3659bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_PUT_NE32(dd,vv) (* (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = (vv)) 3660bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3661bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_MEMOPS_PUT_NE32(dd,vv) lzo_memops_put_ne32(dd,vv) 3662a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3663a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3664bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#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) 3665bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanstatic void __attribute__((__unused__)) 3666bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 3667bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman__lzo_static_forceinline void 3668a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3669bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanlzo_memops_unused_funcs(void) 3670bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman{ 3671bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_memops_get_le16); 3672bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_memops_get_le32); 3673bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_memops_get_ne16); 3674bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_memops_get_ne32); 3675bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_memops_put_le16); 3676bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_memops_put_le32); 3677bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_memops_put_ne16); 3678bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_memops_put_ne32); 3679bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_memops_unused_funcs); 3680bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman} 3681bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 3682a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3683a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3684bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_SET1 3685bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_SET1 LZO_MEMOPS_SET1 3686bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3687bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_SET2 3688bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_SET2 LZO_MEMOPS_SET2 3689bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3690bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_SET3 3691bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_SET3 LZO_MEMOPS_SET3 3692bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3693bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_SET4 3694bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_SET4 LZO_MEMOPS_SET4 3695bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3696bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_MOVE1 3697bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_MOVE1 LZO_MEMOPS_MOVE1 3698bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3699bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_MOVE2 3700bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_MOVE2 LZO_MEMOPS_MOVE2 3701bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3702bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_MOVE3 3703bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_MOVE3 LZO_MEMOPS_MOVE3 3704bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3705bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_MOVE4 3706bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_MOVE4 LZO_MEMOPS_MOVE4 3707bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3708bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_MOVE8 3709bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_MOVE8 LZO_MEMOPS_MOVE8 3710bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3711bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_COPY1 3712bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_COPY1 LZO_MEMOPS_COPY1 3713bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3714bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_COPY2 3715bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_COPY2 LZO_MEMOPS_COPY2 3716bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3717bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_COPY3 3718bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_COPY3 LZO_MEMOPS_COPY3 3719bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3720bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_COPY4 3721bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_COPY4 LZO_MEMOPS_COPY4 3722bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3723bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_COPY8 3724bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_COPY8 LZO_MEMOPS_COPY8 3725bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3726bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_COPYN 3727bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_COPYN LZO_MEMOPS_COPYN 3728bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3729bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_COPYN_X 3730bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_COPYN_X LZO_MEMOPS_COPYN 3731bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3732bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_GET_LE16 3733bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_GET_LE16 LZO_MEMOPS_GET_LE16 3734bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3735bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_GET_LE32 3736bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_GET_LE32 LZO_MEMOPS_GET_LE32 3737bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3738bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifdef LZO_MEMOPS_GET_LE64 3739bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_GET_LE64 3740bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_GET_LE64 LZO_MEMOPS_GET_LE64 3741bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3742bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3743bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_GET_NE16 3744bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_GET_NE16 LZO_MEMOPS_GET_NE16 3745bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3746bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_GET_NE32 3747bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_GET_NE32 LZO_MEMOPS_GET_NE32 3748bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3749bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifdef LZO_MEMOPS_GET_NE64 3750bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_GET_NE64 3751bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_GET_NE64 LZO_MEMOPS_GET_NE64 3752bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3753bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3754bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_PUT_LE16 3755bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_PUT_LE16 LZO_MEMOPS_PUT_LE16 3756bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3757bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_PUT_LE32 3758bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_PUT_LE32 LZO_MEMOPS_PUT_LE32 3759bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3760bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_PUT_NE16 3761bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_PUT_NE16 LZO_MEMOPS_PUT_NE16 3762bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3763bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef UA_PUT_NE32 3764bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define UA_PUT_NE32 LZO_MEMOPS_PUT_NE32 3765a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3766a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3767a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define MEMCPY8_DS(dest,src,len) \ 3768a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_memcpy(dest,src,len); dest += len; src += len 3769a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3770a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define BZERO8_PTR(s,l,n) \ 3771a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n)) 3772a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3773a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define MEMCPY_DS(dest,src,len) \ 3774a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *dest++ = *src++; while (--len > 0) 3775a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3776a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_EXTERN(const lzo_bytep) lzo_copyright(void); 3777a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3778a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef __LZO_PTR_H 3779a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define __LZO_PTR_H 1 3780a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3781a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef __cplusplus 3782a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern "C" { 3783a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3784a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3785a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ARCH_I086) 3786bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#error "LZO_ARCH_I086 is unsupported" 3787a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_PVP) 3788bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#error "LZO_MM_PVP is unsupported" 3789a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3790a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define PTR(a) ((lzo_uintptr_t) (a)) 3791a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define PTR_LINEAR(a) PTR(a) 3792a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0) 3793a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0) 3794a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0) 3795a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0) 3796a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3797a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3798a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define PTR_LT(a,b) (PTR(a) < PTR(b)) 3799a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define PTR_GE(a,b) (PTR(a) >= PTR(b)) 3800a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define PTR_DIFF(a,b) (PTR(a) - PTR(b)) 3801a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define pd(a,b) ((lzo_uint) ((a)-(b))) 3802a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3803a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_EXTERN(lzo_uintptr_t) 3804a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat__lzo_ptr_linear(const lzo_voidp ptr); 3805a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3806a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattypedef union 3807a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3808a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat char a_char; 3809a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat unsigned char a_uchar; 3810a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat short a_short; 3811a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat unsigned short a_ushort; 3812a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int a_int; 3813a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat unsigned int a_uint; 3814a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat long a_long; 3815a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat unsigned long a_ulong; 3816a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_int a_lzo_int; 3817a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint a_lzo_uint; 3818bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_xint a_lzo_xint; 3819bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_int16_t a_lzo_int16_t; 3820bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint16_t a_lzo_uint16_t; 3821bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_int32_t a_lzo_int32_t; 3822bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint32_t a_lzo_uint32_t; 3823bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_uint64_t) 3824bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_int64_t a_lzo_int64_t; 3825bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint64_t a_lzo_uint64_t; 3826bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3827bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman size_t a_size_t; 3828a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ptrdiff_t a_ptrdiff_t; 3829a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uintptr_t a_lzo_uintptr_t; 3830a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat void * a_void_p; 3831a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat char * a_char_p; 3832bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned char * a_uchar_p; 3833bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const void * a_c_void_p; 3834bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const char * a_c_char_p; 3835bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const unsigned char * a_c_uchar_p; 3836bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_voidp a_lzo_voidp; 3837bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_bytep a_lzo_bytep; 3838bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_voidp a_c_lzo_voidp; 3839bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_bytep a_c_lzo_bytep; 3840a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3841a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatlzo_full_align_t; 3842a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3843a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef __cplusplus 3844a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3845a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3846a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3847a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3848a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3849bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_DETERMINISTIC 3850a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_DETERMINISTIC 1 3851bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 3852a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3853bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef LZO_DICT_USE_PTR 3854a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_DICT_USE_PTR 1 3855a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3856a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3857a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_DICT_USE_PTR) 3858a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define lzo_dict_t const lzo_bytep 3859bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_dict_p lzo_dict_t * 3860a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3861a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define lzo_dict_t lzo_uint 3862bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define lzo_dict_p lzo_dict_t * 3863a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3864a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3865a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3866a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3867a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(MINILZO_CFG_SKIP_LZO_PTR) 3868a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3869a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(lzo_uintptr_t) 3870a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat__lzo_ptr_linear(const lzo_voidp ptr) 3871a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3872a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uintptr_t p; 3873a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3874a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_ARCH_I086) 3875bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#error "LZO_ARCH_I086 is unsupported" 3876a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_MM_PVP) 3877bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#error "LZO_MM_PVP is unsupported" 3878a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3879a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p = (lzo_uintptr_t) PTR_LINEAR(ptr); 3880a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3881a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3882a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return p; 3883a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3884a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3885a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(unsigned) 3886a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat__lzo_align_gap(const lzo_voidp ptr, lzo_uint size) 3887a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3888bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (__LZO_UINTPTR_T_IS_POINTER) 3889bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#error "__LZO_UINTPTR_T_IS_POINTER is unsupported" 3890a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3891a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uintptr_t p, n; 3892a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p = __lzo_ptr_linear(ptr); 3893a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat n = (((p + size - 1) / size) * size) - p; 3894a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3895a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3896a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat assert(size > 0); 3897a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat assert((long)n >= 0); 3898a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat assert(n <= size); 3899a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return (unsigned)n; 3900a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3901a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3902a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3903a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(MINILZO_CFG_SKIP_LZO_UTIL) 3904a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3905a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* If you use the LZO library in a product, I would appreciate that you 3906a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * keep this copyright string in the executable of your product. 3907a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 3908a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3909a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatstatic const char __lzo_copyright[] = 3910a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_IN_MINLZO) 3911a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat LZO_VERSION_STRING; 3912a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 3913a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat "\r\n\n" 3914a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat "LZO data compression library.\n" 3915bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman "$Copyright: LZO Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer\n" 3916a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat "<markus@oberhumer.com>\n" 3917a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat "http://www.oberhumer.com $\n\n" 3918a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat "$Id: LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE " $\n" 3919a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat "$Info: " LZO_INFO_STRING " $\n"; 3920a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 3921a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3922a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(const lzo_bytep) 3923a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatlzo_copyright(void) 3924a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3925a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return (const lzo_bytep) __lzo_copyright; 3926a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3927a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3928a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(unsigned) 3929a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatlzo_version(void) 3930a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3931a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_VERSION; 3932a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3933a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3934a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(const char *) 3935a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatlzo_version_string(void) 3936a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3937a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_VERSION_STRING; 3938a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3939a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3940a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(const char *) 3941a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatlzo_version_date(void) 3942a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3943a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_VERSION_DATE; 3944a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3945a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3946a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(const lzo_charp) 3947a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat_lzo_version_string(void) 3948a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3949a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_VERSION_STRING; 3950a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3951a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3952a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(const lzo_charp) 3953a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat_lzo_version_date(void) 3954a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3955a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_VERSION_DATE; 3956a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3957a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3958a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_BASE 65521u 3959a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_NMAX 5552 3960a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3961a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_DO1(buf,i) s1 += buf[i]; s2 += s1 3962a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_DO2(buf,i) LZO_DO1(buf,i); LZO_DO1(buf,i+1); 3963a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_DO4(buf,i) LZO_DO2(buf,i); LZO_DO2(buf,i+2); 3964a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_DO8(buf,i) LZO_DO4(buf,i); LZO_DO4(buf,i+4); 3965a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8); 3966a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3967bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZO_PUBLIC(lzo_uint32_t) 3968bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanlzo_adler32(lzo_uint32_t adler, const lzo_bytep buf, lzo_uint len) 3969a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 3970bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint32_t s1 = adler & 0xffff; 3971bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint32_t s2 = (adler >> 16) & 0xffff; 3972a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat unsigned k; 3973a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3974a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (buf == NULL) 3975a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return 1; 3976a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3977a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while (len > 0) 3978a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 3979a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX; 3980a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat len -= k; 3981a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (k >= 16) do 3982a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 3983a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat LZO_DO16(buf,0); 3984a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat buf += 16; 3985a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat k -= 16; 3986a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } while (k >= 16); 3987a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (k != 0) do 3988a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 3989a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat s1 += *buf++; 3990a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat s2 += s1; 3991a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } while (--k > 0); 3992a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat s1 %= LZO_BASE; 3993a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat s2 %= LZO_BASE; 3994a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 3995a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return (s2 << 16) | s1; 3996a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 3997a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 3998a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZO_DO1 3999a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZO_DO2 4000a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZO_DO4 4001a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZO_DO8 4002a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZO_DO16 4003a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4004a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4005a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(MINILZO_CFG_SKIP_LZO_STRING) 4006a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef lzo_memcmp 4007a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef lzo_memcpy 4008a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef lzo_memmove 4009a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef lzo_memset 4010a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_MMODEL_HUGE) 4011a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef LZO_HAVE_MM_HUGE_PTR 4012a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4013a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define lzo_hsize_t lzo_uint 4014a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define lzo_hvoid_p lzo_voidp 4015a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define lzo_hbyte_p lzo_bytep 4016a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZOLIB_PUBLIC(r,f) LZO_PUBLIC(r) f 4017a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define lzo_hmemcmp lzo_memcmp 4018a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define lzo_hmemcpy lzo_memcpy 4019a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define lzo_hmemmove lzo_memmove 4020a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define lzo_hmemset lzo_memset 4021a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define __LZOLIB_HMEMCPY_CH_INCLUDED 1 4022a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(LZOLIB_PUBLIC) 4023a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) 4024a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4025a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len) 4026a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4027a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCMP) 4028bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_hbyte_p p1 = LZO_STATIC_CAST(const lzo_hbyte_p, s1); 4029bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_hbyte_p p2 = LZO_STATIC_CAST(const lzo_hbyte_p, s2); 4030a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if __lzo_likely(len > 0) do 4031a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4032a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int d = *p1 - *p2; 4033a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (d != 0) 4034a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return d; 4035a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p1++; p2++; 4036a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } while __lzo_likely(--len > 0); 4037a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return 0; 4038a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4039a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return memcmp(s1, s2, len); 4040a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4041a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4042a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) 4043a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4044a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCPY) 4045bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_hbyte_p p1 = LZO_STATIC_CAST(lzo_hbyte_p, dest); 4046bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_hbyte_p p2 = LZO_STATIC_CAST(const lzo_hbyte_p, src); 4047a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (!(len > 0) || p1 == p2) 4048a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return dest; 4049a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do 4050a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *p1++ = *p2++; 4051a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while __lzo_likely(--len > 0); 4052a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return dest; 4053a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4054a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return memcpy(dest, src, len); 4055a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4056a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4057a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) 4058a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4059a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMMOVE) 4060bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_hbyte_p p1 = LZO_STATIC_CAST(lzo_hbyte_p, dest); 4061bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_hbyte_p p2 = LZO_STATIC_CAST(const lzo_hbyte_p, src); 4062a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (!(len > 0) || p1 == p2) 4063a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return dest; 4064a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (p1 < p2) 4065a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4066a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do 4067a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *p1++ = *p2++; 4068a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while __lzo_likely(--len > 0); 4069a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4070a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 4071a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4072a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p1 += len; 4073a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p2 += len; 4074a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do 4075a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *--p1 = *--p2; 4076a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while __lzo_likely(--len > 0); 4077a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4078a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return dest; 4079a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4080a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return memmove(dest, src, len); 4081a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4082a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4083bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg HartmanLZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int cc, lzo_hsize_t len) 4084a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4085a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMSET) 4086bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_hbyte_p p = LZO_STATIC_CAST(lzo_hbyte_p, s); 4087bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned char c = LZO_ITRUNC(unsigned char, cc); 4088a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if __lzo_likely(len > 0) do 4089bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *p++ = c; 4090a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while __lzo_likely(--len > 0); 4091a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return s; 4092a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4093bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return memset(s, cc, len); 4094a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4095a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4096a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZOLIB_PUBLIC 4097a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4098a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(MINILZO_CFG_SKIP_LZO_INIT) 4099a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4100a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_IN_MINILZO) 4101a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4102bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_WANT_ACC_CHK_CH 1 4103bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef LZOCHK_ASSERT 4104a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4105bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZOCHK_ASSERT((LZO_UINT32_C(1) << (int)(8*sizeof(LZO_UINT32_C(1))-1)) > 0) 4106bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZOCHK_ASSERT_IS_SIGNED_T(lzo_int) 4107bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint) 4108bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(__LZO_UINTPTR_T_IS_POINTER) 4109bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t) 4110a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4111bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZOCHK_ASSERT(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) 4112bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_xint) 4113a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4114bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4115bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef LZOCHK_ASSERT 4116a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4117bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanunion lzo_config_check_union { 4118bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint a[2]; 4119bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned char b[2*LZO_MAX(8,sizeof(lzo_uint))]; 4120bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_uint64_t) 4121bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint64_t c[2]; 4122a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4123bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman}; 4124a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4125a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 0 4126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define u2p(ptr,off) ((lzo_voidp) (((lzo_bytep)(lzo_voidp)(ptr)) + (off))) 4127a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatstatic __lzo_noinline lzo_voidp u2p(lzo_voidp ptr, lzo_uint off) 4129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return (lzo_voidp) ((lzo_bytep) ptr + off); 4131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4132a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4133a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4134a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(int) 4135a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat_lzo_config_check(void) 4136a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4137bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x030100ul && LZO_CC_CLANG < 0x030300ul)) 4138bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# if 0 4139bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman volatile 4140bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# endif 4141bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4142bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman union lzo_config_check_union u; 4143a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_voidp p; 4144bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman unsigned r = 1; 4145a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4146a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat u.a[0] = u.a[1] = 0; 4147a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p = u2p(&u, 0); 4148a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat r &= ((* (lzo_bytep) p) == 0); 4149bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_CFG_NO_CONFIG_CHECK) 4150bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_BIG_ENDIAN) 4151a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat u.a[0] = u.a[1] = 0; u.b[sizeof(lzo_uint) - 1] = 128; 4152a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p = u2p(&u, 0); 4153a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat r &= ((* (lzo_uintp) p) == 128); 4154a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4155bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_LITTLE_ENDIAN) 4156a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat u.a[0] = u.a[1] = 0; u.b[0] = 128; 4157a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p = u2p(&u, 0); 4158a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat r &= ((* (lzo_uintp) p) == 128); 4159a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4160a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat u.a[0] = u.a[1] = 0; 4161bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman u.b[0] = 1; u.b[3] = 2; 4162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p = u2p(&u, 1); 4163bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= UA_GET_NE16(p) == 0; 4164bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= UA_GET_LE16(p) == 0; 4165bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman u.b[1] = 128; 4166bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= UA_GET_LE16(p) == 128; 4167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat u.a[0] = u.a[1] = 0; 4168bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman u.b[0] = 3; u.b[5] = 4; 4169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat p = u2p(&u, 1); 4170bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= UA_GET_NE32(p) == 0; 4171bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= UA_GET_LE32(p) == 0; 4172bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman u.b[1] = 128; 4173bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= UA_GET_LE32(p) == 128; 4174bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(UA_GET_NE64) 4175bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman u.c[0] = u.c[1] = 0; 4176bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman u.b[0] = 5; u.b[9] = 6; 4177bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman p = u2p(&u, 1); 4178bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman u.c[0] = u.c[1] = 0; 4179bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= UA_GET_NE64(p) == 0; 4180bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(UA_GET_LE64) 4181bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= UA_GET_LE64(p) == 0; 4182bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman u.b[1] = 128; 4183bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= UA_GET_LE64(p) == 128; 4184bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4185bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4186bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_bitops_ctlz32) 4187bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { unsigned i = 0; lzo_uint32_t v; 4188bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman for (v = 1; v != 0 && r == 1; v <<= 1, i++) { 4189bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= lzo_bitops_ctlz32(v) == 31 - i; 4190bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= lzo_bitops_ctlz32_func(v) == 31 - i; 4191bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman }} 4192bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4193bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_bitops_ctlz64) 4194bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { unsigned i = 0; lzo_uint64_t v; 4195bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman for (v = 1; v != 0 && r == 1; v <<= 1, i++) { 4196bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= lzo_bitops_ctlz64(v) == 63 - i; 4197bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= lzo_bitops_ctlz64_func(v) == 63 - i; 4198bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman }} 4199bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4200bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_bitops_cttz32) 4201bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { unsigned i = 0; lzo_uint32_t v; 4202bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman for (v = 1; v != 0 && r == 1; v <<= 1, i++) { 4203bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= lzo_bitops_cttz32(v) == i; 4204bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= lzo_bitops_cttz32_func(v) == i; 4205bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman }} 4206bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4207bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(lzo_bitops_cttz64) 4208bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { unsigned i = 0; lzo_uint64_t v; 4209bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman for (v = 1; v != 0 && r == 1; v <<= 1, i++) { 4210bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= lzo_bitops_cttz64(v) == i; 4211bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman r &= lzo_bitops_cttz64_func(v) == i; 4212bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman }} 4213bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4214bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4215bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman LZO_UNUSED_FUNC(lzo_bitops_unused_funcs); 4216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return r == 1 ? LZO_E_OK : LZO_E_ERROR; 4218a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4219a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4220a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(int) 4221a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat__lzo_init_v2(unsigned v, int s1, int s2, int s3, int s4, int s5, 4222a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int s6, int s7, int s8, int s9) 4223a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4224a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat int r; 4225a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4226a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__LZO_IN_MINILZO) 4227a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_CC_MSC && ((_MSC_VER) < 700)) 4228a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4229bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_WANT_ACC_CHK_CH 1 4230bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef LZOCHK_ASSERT 4231bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZOCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT(expr) 4232a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4233bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef LZOCHK_ASSERT 4234a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4235a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (v == 0) 4236a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_E_ERROR; 4237a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4238a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat r = (s1 == -1 || s1 == (int) sizeof(short)) && 4239a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (s2 == -1 || s2 == (int) sizeof(int)) && 4240a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (s3 == -1 || s3 == (int) sizeof(long)) && 4241bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman (s4 == -1 || s4 == (int) sizeof(lzo_uint32_t)) && 4242a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (s5 == -1 || s5 == (int) sizeof(lzo_uint)) && 4243a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (s6 == -1 || s6 == (int) lzo_sizeof_dict_t) && 4244a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (s7 == -1 || s7 == (int) sizeof(char *)) && 4245a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (s8 == -1 || s8 == (int) sizeof(lzo_voidp)) && 4246a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (s9 == -1 || s9 == (int) sizeof(lzo_callback_t)); 4247a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (!r) 4248a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_E_ERROR; 4249a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4250a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat r = _lzo_config_check(); 4251a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (r != LZO_E_OK) 4252a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return r; 4253a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4254a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return r; 4255a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4256a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4257a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_IN_MINILZO) 4258a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4259a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_OS_WIN16 && LZO_CC_WATCOMC) && defined(__SW_BD) 4260a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4261a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 0 4262a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatBOOL FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataSegment, 4263a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat WORD wHeapSize, LPSTR lpszCmdLine ) 4264a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4265a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatint __far __pascal LibMain ( int a, short b, short c, long d ) 4266a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4267a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4268a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat LZO_UNUSED(a); LZO_UNUSED(b); LZO_UNUSED(c); LZO_UNUSED(d); 4269a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return 1; 4270a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4271a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4272a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4273a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4274a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4275a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4276a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4277a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4278a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO1X 1 4279a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_EOF_CODE 1 4280a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M2_MAX_OFFSET 0x0800 4281a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4282a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(MINILZO_CFG_SKIP_LZO1X_1_COMPRESS) 4283a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4284bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 && defined(UA_GET_LE32) 4285bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef LZO_DICT_USE_PTR 4286bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_DICT_USE_PTR 0 4287bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef lzo_dict_t 4288bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define lzo_dict_t lzo_uint16_t 4289bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4290bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 4291a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_NEED_DICT_H 1 4292bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef D_BITS 4293a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define D_BITS 14 4294bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4295a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5) 4296a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f) 4297bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 1 4298bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define DINDEX(dv,p) DM(((DMUL(0x1824429d,dv)) >> (32-D_BITS))) 4299bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 4300bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define DINDEX(dv,p) DM((dv) + ((dv) >> (32-D_BITS))) 4301bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4302a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4303a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef __LZO_CONFIG1X_H 4304a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define __LZO_CONFIG1X_H 1 4305a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4306a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z) 4307a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO1X 1 4308a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4309a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4310a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_IN_MINILZO) 4311a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include "lzo/lzo1x.h" 4312a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4313a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4314a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef LZO_EOF_CODE 4315a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_EOF_CODE 1 4316a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4317a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZO_DETERMINISTIC 4318a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4319a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M1_MAX_OFFSET 0x0400 4320a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef M2_MAX_OFFSET 4321a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M2_MAX_OFFSET 0x0800 4322a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4323a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M3_MAX_OFFSET 0x4000 4324a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M4_MAX_OFFSET 0xbfff 4325a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4326a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET) 4327a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4328a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M1_MIN_LEN 2 4329a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M1_MAX_LEN 2 4330a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M2_MIN_LEN 3 4331a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef M2_MAX_LEN 4332a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M2_MAX_LEN 8 4333a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4334a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M3_MIN_LEN 3 4335a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M3_MAX_LEN 33 4336a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M4_MIN_LEN 3 4337a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M4_MAX_LEN 9 4338a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4339a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M1_MARKER 0 4340a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M2_MARKER 64 4341a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M3_MARKER 32 4342a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define M4_MARKER 16 4343a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4344a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef MIN_LOOKAHEAD 4345a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define MIN_LOOKAHEAD (M2_MAX_LEN + 1) 4346a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4347a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4348a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_NEED_DICT_H) 4349a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4350a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef LZO_HASH 4351a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B 4352a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4353a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DL_MIN_LEN M2_MIN_LEN 4354a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4355a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef __LZO_DICT_H 4356a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define __LZO_DICT_H 1 4357a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4358a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef __cplusplus 4359a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatextern "C" { 4360a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4361a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4362a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(D_BITS) && defined(DBITS) 4363a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define D_BITS DBITS 4364a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4365a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(D_BITS) 4366a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "D_BITS is not defined" 4367a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4368a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (D_BITS < 16) 4369a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define D_SIZE LZO_SIZE(D_BITS) 4370a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define D_MASK LZO_MASK(D_BITS) 4371a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4372a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define D_SIZE LZO_USIZE(D_BITS) 4373a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define D_MASK LZO_UMASK(D_BITS) 4374a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4375a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define D_HIGH ((D_MASK >> 1) + 1) 4376a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4377a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(DD_BITS) 4378a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DD_BITS 0 4379a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4380a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DD_SIZE LZO_SIZE(DD_BITS) 4381a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DD_MASK LZO_MASK(DD_BITS) 4382a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4383a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(DL_BITS) 4384a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DL_BITS (D_BITS - DD_BITS) 4385a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4386a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (DL_BITS < 16) 4387a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DL_SIZE LZO_SIZE(DL_BITS) 4388a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DL_MASK LZO_MASK(DL_BITS) 4389a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4390a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DL_SIZE LZO_USIZE(DL_BITS) 4391a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DL_MASK LZO_UMASK(DL_BITS) 4392a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4393a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4394a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (D_BITS != DL_BITS + DD_BITS) 4395a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "D_BITS does not match" 4396a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4397a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (D_BITS < 6 || D_BITS > 18) 4398a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "invalid D_BITS" 4399a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4400a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (DL_BITS < 6 || DL_BITS > 20) 4401a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "invalid DL_BITS" 4402a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4403a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (DD_BITS < 0 || DD_BITS > 6) 4404a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "invalid DD_BITS" 4405a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4406a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4407a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(DL_MIN_LEN) 4408a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DL_MIN_LEN 3 4409a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4410a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(DL_SHIFT) 4411a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN) 4412a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4413a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4414a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_HASH_GZIP 1 4415a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_HASH_GZIP_INCREMENTAL 2 4416a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_HASH_LZO_INCREMENTAL_A 3 4417a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_HASH_LZO_INCREMENTAL_B 4 4418a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4419a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(LZO_HASH) 4420a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "choose a hashing strategy" 4421a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4422a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4423a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef DM 4424a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef DX 4425a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4426a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (DL_MIN_LEN == 3) 4427a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _DV2_A(p,shift1,shift2) \ 4428a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2]) 4429a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _DV2_B(p,shift1,shift2) \ 4430a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0]) 4431a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _DV3_B(p,shift1,shift2,shift3) \ 4432a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0]) 4433a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (DL_MIN_LEN == 2) 4434a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _DV2_A(p,shift1,shift2) \ 4435a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (( (lzo_xint)(p[0]) << shift1) ^ p[1]) 4436a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _DV2_B(p,shift1,shift2) \ 4437a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (( (lzo_xint)(p[1]) << shift1) ^ p[2]) 4438a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4439a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "invalid DL_MIN_LEN" 4440a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4441a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define _DV_A(p,shift) _DV2_A(p,shift,shift) 4442a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define _DV_B(p,shift) _DV2_B(p,shift,shift) 4443a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DA2(p,s1,s2) \ 4444a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0]) 4445a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DS2(p,s1,s2) \ 4446a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0]) 4447a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DX2(p,s1,s2) \ 4448a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0]) 4449a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0]) 4450a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0]) 4451a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0]) 4452a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s))) 4453a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DM(v) DMS(v,0) 4454a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4455a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_HASH == LZO_HASH_GZIP) 4456a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT)) 4457a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4458a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL) 4459a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_HASH_INCREMENTAL 1 4460a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT) 4461a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2]) 4462a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _DINDEX(dv,p) (dv) 4463a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_LOOKAHEAD DL_MIN_LEN 4464a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4465a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A) 4466a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_HASH_INCREMENTAL 1 4467a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_FIRST(dv,p) dv = _DV_A((p),5) 4468a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_NEXT(dv,p) \ 4469a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2]) 4470a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) 4471a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_LOOKAHEAD DL_MIN_LEN 4472a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4473a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B) 4474a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define __LZO_HASH_INCREMENTAL 1 4475a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_FIRST(dv,p) dv = _DV_B((p),5) 4476a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_NEXT(dv,p) \ 4477a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5))) 4478a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) 4479a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_LOOKAHEAD DL_MIN_LEN 4480a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4481a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4482a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# error "choose a hashing strategy" 4483a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4484a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4485a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifndef DINDEX 4486a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS) 4487a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4488a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(DINDEX1) && defined(D_INDEX1) 4489a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DINDEX1 D_INDEX1 4490a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4491a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(DINDEX2) && defined(D_INDEX2) 4492a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DINDEX2 D_INDEX2 4493a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4494a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4495a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(__LZO_HASH_INCREMENTAL) 4496a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_FIRST(dv,p) ((void) 0) 4497a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_NEXT(dv,p) ((void) 0) 4498a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_LOOKAHEAD 0 4499a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4500a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4501a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(DVAL_ASSERT) 4502a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG) 4503a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_LLVM) 4504a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatstatic void __attribute__((__unused__)) 4505a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4506a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatstatic void 4507a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4508a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatDVAL_ASSERT(lzo_xint dv, const lzo_bytep p) 4509a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4510a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_xint df; 4511a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat DVAL_FIRST(df,(p)); 4512a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat assert(DINDEX(dv,p) == DINDEX(df,p)); 4513a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4514a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4515a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DVAL_ASSERT(dv,p) ((void) 0) 4516a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4517a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4518a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4519bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_DICT_USE_PTR) 4520a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define DENTRY(p,in) (p) 4521a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex] 4522a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4523bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define DENTRY(p,in) ((lzo_dict_t) pd(p, in)) 4524a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex] 4525a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4526a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4527a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if (DD_BITS == 0) 4528a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4529a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in) 4530a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in) 4531a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in) 4532a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4533a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4534a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4535a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define UPDATE_D(dict,drun,dv,p,in) \ 4536a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK 4537a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define UPDATE_I(dict,drun,index,p,in) \ 4538a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK 4539a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define UPDATE_P(ptr,drun,p,in) \ 4540a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK 4541a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4542a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4543a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4544bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_DICT_USE_PTR) 4545a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4546a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ 4547a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset) 4548a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4549a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ 4550a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (BOUNDS_CHECKING_OFF_IN_EXPR(( \ 4551a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \ 4552a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat PTR_LT(m_pos,in) || \ 4553a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) == 0 || \ 4554a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off > max_offset ))) 4555a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4556a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4557a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4558a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ 4559a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (m_off == 0 || \ 4560a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ((m_off = pd(ip, in) - m_off) > max_offset) || \ 4561a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (m_pos = (ip) - (m_off), 0) ) 4562a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4563a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ 4564a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (pd(ip, in) <= m_off || \ 4565a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ((m_off = pd(ip, in) - m_off) > max_offset) || \ 4566a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (m_pos = (ip) - (m_off), 0) ) 4567a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4568a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4569a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4570bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_DETERMINISTIC) 4571a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET 4572a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4573a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET 4574a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4575a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4576a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef __cplusplus 4577a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4578a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4579a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4580a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4581a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4582a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4583a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4584a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4585a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4586bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#define LZO_DETERMINISTIC !(LZO_DICT_USE_PTR) 4587bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 4588bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#ifndef DO_COMPRESS 4589a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DO_COMPRESS lzo1x_1_compress 4590bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4591a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4592a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 && defined(DO_COMPRESS) && !defined(do_compress) 4593bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define do_compress LZO_PP_ECONCAT2(DO_COMPRESS,_core) 4594a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4595a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4596a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatstatic __lzo_noinline lzo_uint 4597a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatdo_compress ( const lzo_bytep in , lzo_uint in_len, 4598a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_bytep out, lzo_uintp out_len, 4599bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint ti, lzo_voidp wrkmem) 4600a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4601bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_bytep ip; 4602a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_bytep op; 4603a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat const lzo_bytep const in_end = in + in_len; 4604bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_bytep const ip_end = in + in_len - 20; 4605a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat const lzo_bytep ii; 4606a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_dict_p const dict = (lzo_dict_p) wrkmem; 4607a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4608a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op = out; 4609a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip = in; 4610a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ii = ip; 4611a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4612bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman ip += ti < 4 ? 4 - ti : 0; 4613a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for (;;) 4614a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4615bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_bytep m_pos; 4616bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_DETERMINISTIC) 4617a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat LZO_DEFINE_UNINITIALIZED_VAR(lzo_uint, m_off, 0); 4618a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint m_len; 4619a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint dindex; 4620bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmannext: 4621bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if __lzo_unlikely(ip >= ip_end) 4622bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4623a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat DINDEX1(dindex,ip); 4624a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat GINDEX(m_pos,m_off,dict,dindex,in); 4625a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) 4626a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto literal; 4627a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 1 4628a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) 4629a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto try_match; 4630a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat DINDEX2(dindex,ip); 4631a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4632a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat GINDEX(m_pos,m_off,dict,dindex,in); 4633a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) 4634a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto literal; 4635a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) 4636a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto try_match; 4637a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto literal; 4638a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4639a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehattry_match: 4640bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) 4641bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (UA_GET_NE32(m_pos) != UA_GET_NE32(ip)) 4642a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4643bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (m_pos[0] != ip[0] || m_pos[1] != ip[1] || m_pos[2] != ip[2] || m_pos[3] != ip[3]) 4644a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4645a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4646bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanliteral: 4647bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UPDATE_I(dict,0,dindex,ip,in); 4648bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman ip += 1 + ((ip - ii) >> 5); 4649bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman continue; 4650a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4651bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UPDATE_I(dict,0,dindex,ip,in); 4652a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 4653bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint m_off; 4654bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint m_len; 4655bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 4656bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint32_t dv; 4657bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint dindex; 4658a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatliteral: 4659bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman ip += 1 + ((ip - ii) >> 5); 4660bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmannext: 4661a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if __lzo_unlikely(ip >= ip_end) 4662a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 4663bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman dv = UA_GET_LE32(ip); 4664bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman dindex = DINDEX(dv,ip); 4665bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman GINDEX(m_off,m_pos,in+dict,dindex,in); 4666a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UPDATE_I(dict,0,dindex,ip,in); 4667bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if __lzo_unlikely(dv != UA_GET_LE32(m_pos)) 4668bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman goto literal; 4669bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4670bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4671a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4672bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman ii -= ti; ti = 0; 4673bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 4674bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint t = pd(ip,ii); 4675bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t != 0) 4676bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 4677a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t <= 3) 4678a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4679bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op[-2] = LZO_BYTE(op[-2] | t); 4680bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) 4681bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op, ii); 4682bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += t; 4683bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 4684bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { do *op++ = *ii++; while (--t > 0); } 4685bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4686a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4687bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) || (LZO_OPT_UNALIGNED64) 4688bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman else if (t <= 16) 4689bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 4690a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = LZO_BYTE(t - 3); 4691bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY8(op, ii); 4692bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY8(op+8, ii+8); 4693bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += t; 4694bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4695bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4696a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 4697a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4698bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t <= 18) 4699bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(t - 3); 4700bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman else 4701a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4702bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint tt = t - 18; 4703a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = 0; 4704bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman while __lzo_unlikely(tt > 255) 4705bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 4706bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman tt -= 255; 4707bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_SET1(op, 0); 4708bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op++; 4709bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4710bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman assert(tt > 0); 4711bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(tt); 4712a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4713bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED32) || (LZO_OPT_UNALIGNED64) 4714bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman do { 4715bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY8(op, ii); 4716bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY8(op+8, ii+8); 4717bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += 16; ii += 16; t -= 16; 4718bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (t >= 16); if (t > 0) 4719bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4720bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { do *op++ = *ii++; while (--t > 0); } 4721a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4722a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4723bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4724bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len = 4; 4725bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 4726bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED64) 4727bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint64_t v; 4728bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v = UA_GET_NE64(ip + m_len) ^ UA_GET_NE64(m_pos + m_len); 4729bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if __lzo_unlikely(v == 0) { 4730bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman do { 4731bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 8; 4732bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v = UA_GET_NE64(ip + m_len) ^ UA_GET_NE64(m_pos + m_len); 4733bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if __lzo_unlikely(ip + m_len >= ip_end) 4734bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman goto m_len_done; 4735bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (v == 0); 4736bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4737bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_BIG_ENDIAN) && defined(lzo_bitops_ctlz64) 4738bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += lzo_bitops_ctlz64(v) / CHAR_BIT; 4739bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ABI_BIG_ENDIAN) 4740bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if ((v >> (64 - CHAR_BIT)) == 0) do { 4741bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v <<= CHAR_BIT; 4742bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4743bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while ((v >> (64 - CHAR_BIT)) == 0); 4744bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_cttz64) 4745bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += lzo_bitops_cttz64(v) / CHAR_BIT; 4746bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ABI_LITTLE_ENDIAN) 4747bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if ((v & UCHAR_MAX) == 0) do { 4748bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v >>= CHAR_BIT; 4749bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4750bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while ((v & UCHAR_MAX) == 0); 4751bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 4752bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (ip[m_len] == m_pos[m_len]) do { 4753bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4754bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (ip[m_len] == m_pos[m_len]); 4755bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4756bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED32) 4757bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint32_t v; 4758bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v = UA_GET_NE32(ip + m_len) ^ UA_GET_NE32(m_pos + m_len); 4759bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if __lzo_unlikely(v == 0) { 4760bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman do { 4761bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 4; 4762bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v = UA_GET_NE32(ip + m_len) ^ UA_GET_NE32(m_pos + m_len); 4763bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (v != 0) 4764bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4765bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 4; 4766bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v = UA_GET_NE32(ip + m_len) ^ UA_GET_NE32(m_pos + m_len); 4767bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if __lzo_unlikely(ip + m_len >= ip_end) 4768bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman goto m_len_done; 4769bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (v == 0); 4770bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4771bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_ABI_BIG_ENDIAN) && defined(lzo_bitops_ctlz32) 4772bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += lzo_bitops_ctlz32(v) / CHAR_BIT; 4773bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ABI_BIG_ENDIAN) 4774bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if ((v >> (32 - CHAR_BIT)) == 0) do { 4775bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v <<= CHAR_BIT; 4776bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4777bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while ((v >> (32 - CHAR_BIT)) == 0); 4778bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_cttz32) 4779bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += lzo_bitops_cttz32(v) / CHAR_BIT; 4780bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_ABI_LITTLE_ENDIAN) 4781bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if ((v & UCHAR_MAX) == 0) do { 4782bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman v >>= CHAR_BIT; 4783bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4784bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while ((v & UCHAR_MAX) == 0); 4785bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 4786bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (ip[m_len] == m_pos[m_len]) do { 4787bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4788bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (ip[m_len] == m_pos[m_len]); 4789bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4790bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 4791bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if __lzo_unlikely(ip[m_len] == m_pos[m_len]) { 4792bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman do { 4793bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4794bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (ip[m_len] != m_pos[m_len]) 4795bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4796bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4797bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (ip[m_len] != m_pos[m_len]) 4798bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4799bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4800bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (ip[m_len] != m_pos[m_len]) 4801bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4802bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4803bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (ip[m_len] != m_pos[m_len]) 4804bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4805bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4806bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (ip[m_len] != m_pos[m_len]) 4807bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4808bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4809bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (ip[m_len] != m_pos[m_len]) 4810bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4811bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4812bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (ip[m_len] != m_pos[m_len]) 4813bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4814bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len += 1; 4815bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if __lzo_unlikely(ip + m_len >= ip_end) 4816bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman goto m_len_done; 4817bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (ip[m_len] == m_pos[m_len]); 4818bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4819a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4820bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4821bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartmanm_len_done: 4822bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_off = pd(ip,m_pos); 4823bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman ip += m_len; 4824bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman ii = ip; 4825bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET) 4826a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4827bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_off -= 1; 4828a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1X) 4829bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2)); 4830bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(m_off >> 3); 4831a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO1Y) 4832bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2)); 4833bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(m_off >> 2); 4834a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4835bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4836bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman else if (m_off <= M3_MAX_OFFSET) 4837bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 4838bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_off -= 1; 4839bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (m_len <= M3_MAX_LEN) 4840a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); 4841a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 4842a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4843bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len -= M3_MAX_LEN; 4844bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = M3_MARKER | 0; 4845bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman while __lzo_unlikely(m_len > 255) 4846bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 4847bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len -= 255; 4848bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_SET1(op, 0); 4849bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op++; 4850bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 4851bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(m_len); 4852a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4853bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(m_off << 2); 4854bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(m_off >> 6); 4855a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4856a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 4857a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4858bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_off -= 0x4000; 4859bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (m_len <= M4_MAX_LEN) 4860bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8) | (m_len - 2)); 4861a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 4862a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4863bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len -= M4_MAX_LEN; 4864bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8)); 4865bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman while __lzo_unlikely(m_len > 255) 4866a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4867bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_len -= 255; 4868bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_SET1(op, 0); 4869bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op++; 4870a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4871bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(m_len); 4872a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4873bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = LZO_BYTE(m_off << 2); 4874a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = LZO_BYTE(m_off >> 6); 4875a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4876bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman goto next; 4877a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4878a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4879a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 4880bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman return pd(in_end,ii-ti); 4881a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4882a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4883a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(int) 4884a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatDO_COMPRESS ( const lzo_bytep in , lzo_uint in_len, 4885a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_bytep out, lzo_uintp out_len, 4886a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_voidp wrkmem ) 4887a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 4888bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_bytep ip = in; 4889a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_bytep op = out; 4890bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint l = in_len; 4891bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint t = 0; 4892a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4893bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman while (l > 20) 4894a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4895bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint ll = l; 4896bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uintptr_t ll_end; 4897bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if 0 || (LZO_DETERMINISTIC) 4898bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman ll = LZO_MIN(ll, 49152); 4899bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4900bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman ll_end = (lzo_uintptr_t)ip + ll; 4901bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if ((ll_end + ((t + ll) >> 5)) <= ll_end || (const lzo_bytep)(ll_end + ((t + ll) >> 5)) <= ip + ll) 4902bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman break; 4903bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_DETERMINISTIC) 4904bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_memset(wrkmem, 0, ((lzo_uint)1 << D_BITS) * sizeof(lzo_dict_t)); 4905bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 4906bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman t = do_compress(ip,ll,op,out_len,t,wrkmem); 4907bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman ip += ll; 4908a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op += *out_len; 4909bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman l -= ll; 4910a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4911bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman t += l; 4912a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4913a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t > 0) 4914a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4915a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat const lzo_bytep ii = in + in_len - t; 4916a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4917a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (op == out && t <= 238) 4918a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = LZO_BYTE(17 + t); 4919a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else if (t <= 3) 4920bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op[-2] = LZO_BYTE(op[-2] | t); 4921a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else if (t <= 18) 4922a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = LZO_BYTE(t - 3); 4923a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 4924a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4925a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint tt = t - 18; 4926a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4927a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = 0; 4928a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while (tt > 255) 4929a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 4930a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat tt -= 255; 4931bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_SET1(op, 0); 4932bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op++; 4933a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4934a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat assert(tt > 0); 4935a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = LZO_BYTE(tt); 4936a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4937bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPYN(op, ii, t); 4938bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += t; 4939a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 4940a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4941a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = M4_MARKER | 1; 4942a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = 0; 4943a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = 0; 4944a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4945a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 4946a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_E_OK; 4947a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 4948a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4949a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4950a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4951a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef do_compress 4952a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef DO_COMPRESS 4953a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZO_HASH 4954a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4955a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef LZO_TEST_OVERRUN 4956a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef DO_DECOMPRESS 4957a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DO_DECOMPRESS lzo1x_decompress 4958a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4959a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS) 4960a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4961a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN) 4962a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(LZO_TEST_OVERRUN_INPUT) 4963a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_TEST_OVERRUN_INPUT 2 4964a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 4965a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(LZO_TEST_OVERRUN_OUTPUT) 4966a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_TEST_OVERRUN_OUTPUT 2 4967a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 4968a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) 4969a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_TEST_OVERRUN_LOOKBEHIND 1 4970a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 4971a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4972a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4973a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef TEST_IP 4974a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef TEST_OP 4975bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef TEST_IP_AND_TEST_OP 4976a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef TEST_LB 4977a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef TEST_LBO 4978a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef NEED_IP 4979a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef NEED_OP 4980bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef TEST_IV 4981bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef TEST_OV 4982a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_TEST_IP 4983a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_TEST_OP 4984a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_NEED_IP 4985a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_NEED_OP 4986a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_ANY_IP 4987a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_ANY_OP 4988a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 4989a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN_INPUT) 4990a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_TEST_OVERRUN_INPUT >= 1) 4991a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_IP (ip < ip_end) 4992a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 4993a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_TEST_OVERRUN_INPUT >= 2) 4994a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NEED_IP(x) \ 4995a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun 4996bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IV(x) if ((x) > (lzo_uint)0 - (511)) goto input_overrun 4997a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 4998a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 4999a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5000a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN_OUTPUT) 5001a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_TEST_OVERRUN_OUTPUT >= 1) 5002a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_OP (op <= op_end) 5003a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 5004a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_TEST_OVERRUN_OUTPUT >= 2) 5005a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef TEST_OP 5006a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NEED_OP(x) \ 5007a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun 5008bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_OV(x) if ((x) > (lzo_uint)0 - (511)) goto output_overrun 5009a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 5010a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5011a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5012a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 5013bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_LB(m_pos) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op)) goto lookbehind_overrun 5014bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_LBO(m_pos,o) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op-(o))) goto lookbehind_overrun 5015a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5016a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_LB(m_pos) ((void) 0) 5017a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_LBO(m_pos,o) ((void) 0) 5018a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5019a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5020a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) 5021a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_IP (ip < ip_end) 5022a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5023a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5024a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(TEST_IP) 5025a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_TEST_IP 1 5026a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5027a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_IP 1 5028a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5029a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(TEST_OP) 5030a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_TEST_OP 1 5031a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5032a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_OP 1 5033a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5034a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5035bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(HAVE_TEST_IP) && defined(HAVE_TEST_OP) 5036bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IP_AND_TEST_OP (TEST_IP && TEST_OP) 5037bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(HAVE_TEST_IP) 5038bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IP_AND_TEST_OP TEST_IP 5039bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(HAVE_TEST_OP) 5040bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IP_AND_TEST_OP TEST_OP 5041bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 5042bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IP_AND_TEST_OP 1 5043bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 5044bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 5045a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(NEED_IP) 5046a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_NEED_IP 1 5047a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5048a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NEED_IP(x) ((void) 0) 5049bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IV(x) ((void) 0) 5050a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5051a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(NEED_OP) 5052a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_NEED_OP 1 5053a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5054a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NEED_OP(x) ((void) 0) 5055bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_OV(x) ((void) 0) 5056a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5057a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5058a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) 5059a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_ANY_IP 1 5060a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5061a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) 5062a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_ANY_OP 1 5063a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5064a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5065a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(DO_DECOMPRESS) 5066a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(int) 5067a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatDO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, 5068a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_bytep out, lzo_uintp out_len, 5069a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_voidp wrkmem ) 5070a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5071a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 5072bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_bytep op; 5073bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_bytep ip; 5074bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint t; 5075a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5076a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint m_off; 5077a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat const lzo_bytep dict_end; 5078a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5079bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_bytep m_pos; 5080a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5081a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5082a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat const lzo_bytep const ip_end = in + in_len; 5083a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_ANY_OP) 5084a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_bytep const op_end = out + *out_len; 5085a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5086a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5087a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint last_m_off = 0; 5088a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5089a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5090a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat LZO_UNUSED(wrkmem); 5091a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5092a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5093a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (dict) 5094a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5095a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (dict_len > M4_MAX_OFFSET) 5096a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5097a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict += dict_len - M4_MAX_OFFSET; 5098a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict_len = M4_MAX_OFFSET; 5099a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5100a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict_end = dict + dict_len; 5101a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5102a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5103a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5104a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict_len = 0; 5105a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict_end = NULL; 5106a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5107a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5108a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5109a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = 0; 5110a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5111a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op = out; 5112a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip = in; 5113a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5114bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman NEED_IP(1); 5115a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (*ip > 17) 5116a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5117a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = *ip++ - 17; 5118a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t < 4) 5119a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match_next; 5120bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman assert(t > 0); NEED_OP(t); NEED_IP(t+3); 5121a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *ip++; while (--t > 0); 5122a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto first_literal_run; 5123a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5124a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5125bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman for (;;) 5126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5127bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman NEED_IP(3); 5128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = *ip++; 5129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 16) 5130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match; 5131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t == 0) 5132a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5133a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while (*ip == 0) 5134a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5135a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 255; 5136a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip++; 5137bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman TEST_IV(t); 5138a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_IP(1); 5139a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5140a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 15 + *ip++; 5141a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5142bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman assert(t > 0); NEED_OP(t+3); NEED_IP(t+6); 5143bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED64) && (LZO_OPT_UNALIGNED32) 5144bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman t += 3; 5145bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t >= 8) do 5146bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5147bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY8(op,ip); 5148bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += 8; ip += 8; t -= 8; 5149bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (t >= 8); 5150bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t >= 4) 5151bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5152bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,ip); 5153bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += 4; ip += 4; t -= 4; 5154bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5155bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t > 0) 5156bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5157bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = *ip++; 5158bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 5159bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5160bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED32) || (LZO_ALIGNED_OK_4) 5161bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_OPT_UNALIGNED32) 5162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (PTR_ALIGNED2_4(op,ip)) 5163a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5164a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5165bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,ip); 5166a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op += 4; ip += 4; 5167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (--t > 0) 5168a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 4) 5170a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5171a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do { 5172bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,ip); 5173a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op += 4; ip += 4; t -= 4; 5174a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } while (t >= 4); 5175a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t > 0) do *op++ = *ip++; while (--t > 0); 5176a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5177a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5178a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *ip++; while (--t > 0); 5179a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5180bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_OPT_UNALIGNED32) 5181a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5182a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5183a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5184a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5185bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_OPT_UNALIGNED32) 5186a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5187a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; 5188a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *ip++; while (--t > 0); 5189a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5190a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5191a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5192a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatfirst_literal_run: 5193a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5194a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = *ip++; 5195a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 16) 5196a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match; 5197a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5198a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5199a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 5200a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5201a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5202a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); 5203a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5204a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_OP(3); 5205a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = 3; COPY_DICT(t,m_off) 5206a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5207a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5208a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 5209a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - t; 5210a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = t; 5211a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5212a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - (1 + M2_MAX_OFFSET); 5213a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= t >> 2; 5214a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= *ip++ << 2; 5215a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat TEST_LB(m_pos); NEED_OP(3); 5217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; 5218a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5219a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match_done; 5220a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5221bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman for (;;) { 5222a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatmatch: 5223a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 64) 5224a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5225a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5226a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1X) 5227a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); 5228a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 5) - 1; 5229a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO1Y) 5230a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); 5231a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 4) - 3; 5232a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO1Z) 5233a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = t & 0x1f; 5234a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (m_off >= 0x1c) 5235a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = last_m_off; 5236a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5237a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5238a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (m_off << 6) + (*ip++ >> 2); 5239a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5240a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5241a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 5) - 1; 5242a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5243a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5244a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1X) 5245a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5246a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (t >> 2) & 7; 5247a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= *ip++ << 3; 5248a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 5) - 1; 5249a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO1Y) 5250a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5251a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (t >> 2) & 3; 5252a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= *ip++ << 2; 5253a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 4) - 3; 5254a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO1Z) 5255a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5256a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint off = t & 0x1f; 5257a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op; 5258a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (off >= 0x1c) 5259a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5260a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat assert(last_m_off > 0); 5261a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= last_m_off; 5262a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5263a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5264a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5265a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat off = 1 + (off << 6) + (*ip++ >> 2); 5266a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= off; 5267a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = off; 5268a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5269a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5270a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 5) - 1; 5271a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5272a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 5273a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto copy_match; 5274a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5275a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5276a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else if (t >= 32) 5277a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5278a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t &= 31; 5279a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t == 0) 5280a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5281a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while (*ip == 0) 5282a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5283a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 255; 5284a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip++; 5285bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman TEST_OV(t); 5286a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_IP(1); 5287a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5288a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 31 + *ip++; 5289bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman NEED_IP(2); 5290a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5291a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5292a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5293a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); 5294a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5295a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5296a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); 5297a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5298a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5299a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5300a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5301a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); 5302a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - off; 5303a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = off; 5304a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5305bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) 5306a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5307bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_pos -= UA_GET_LE16(ip) >> 2; 5308a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5309a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5310a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (ip[0] >> 2) + (ip[1] << 6); 5311a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5312a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5313a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip += 2; 5314a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5315a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else if (t >= 16) 5316a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5317a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5318a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = (t & 8) << 11; 5319a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5320a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op; 5321a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (t & 8) << 11; 5322a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5323a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t &= 7; 5324a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t == 0) 5325a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5326a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while (*ip == 0) 5327a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5328a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 255; 5329a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip++; 5330bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman TEST_OV(t); 5331a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_IP(1); 5332a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5333a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 7 + *ip++; 5334bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman NEED_IP(2); 5335a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5336a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5337a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5338a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off += (ip[0] << 6) + (ip[1] >> 2); 5339a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5340a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off += (ip[0] >> 2) + (ip[1] << 6); 5341a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5342a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip += 2; 5343a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (m_off == 0) 5344a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto eof_found; 5345a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off += 0x4000; 5346a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5347a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5348a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5349a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5350a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5351a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (ip[0] << 6) + (ip[1] >> 2); 5352bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) 5353bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_pos -= UA_GET_LE16(ip) >> 2; 5354a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5355a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (ip[0] >> 2) + (ip[1] << 6); 5356a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5357a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip += 2; 5358a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (m_pos == op) 5359a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto eof_found; 5360a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= 0x4000; 5361a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5362a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = pd((const lzo_bytep)op, m_pos); 5363a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5364a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5365a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5366a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5367a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5368a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5369a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5370a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (t << 6) + (*ip++ >> 2); 5371a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5372a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5373a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (t >> 2) + (*ip++ << 2); 5374a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5375a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_OP(2); 5376a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = 2; COPY_DICT(t,m_off) 5377a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5378a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5379a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = 1 + (t << 6) + (*ip++ >> 2); 5380a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - t; 5381a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = t; 5382a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5383a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5384a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= t >> 2; 5385a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= *ip++ << 2; 5386a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5387a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat TEST_LB(m_pos); NEED_OP(2); 5388a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *m_pos++; *op++ = *m_pos; 5389a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5390a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match_done; 5391a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5392a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5393a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5394a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5395a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_OP(t+3-1); 5396a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 3-1; COPY_DICT(t,m_off) 5397a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5398a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5399a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5400a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 5401bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED64) && (LZO_OPT_UNALIGNED32) 5402bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (op - m_pos >= 8) 5403bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5404bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman t += (3 - 1); 5405bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t >= 8) do 5406bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5407bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY8(op,m_pos); 5408bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += 8; m_pos += 8; t -= 8; 5409bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (t >= 8); 5410bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t >= 4) 5411bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5412bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,m_pos); 5413bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += 4; m_pos += 4; t -= 4; 5414bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5415bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t > 0) 5416bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5417bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = m_pos[0]; 5418bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t > 1) { *op++ = m_pos[1]; if (t > 2) { *op++ = m_pos[2]; } } 5419bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5420bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5421bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman else 5422bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED32) || (LZO_ALIGNED_OK_4) 5423bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_OPT_UNALIGNED32) 5424a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) 5425a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5426a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat assert((op - m_pos) >= 4); 5427a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5428a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) 5429a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5430a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5431bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,m_pos); 5432a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op += 4; m_pos += 4; t -= 4 - (3 - 1); 5433a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do { 5434bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,m_pos); 5435a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op += 4; m_pos += 4; t -= 4; 5436a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } while (t >= 4); 5437a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t > 0) do *op++ = *m_pos++; while (--t > 0); 5438a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5439a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5440a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5441a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5442a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatcopy_match: 5443a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *m_pos++; *op++ = *m_pos++; 5444a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *m_pos++; while (--t > 0); 5445a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5446a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5447a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5448a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5449a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatmatch_done: 5450a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5451a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = ip[-1] & 3; 5452a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5453a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = ip[-2] & 3; 5454a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5455a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t == 0) 5456a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 5457a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5458a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatmatch_next: 5459bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+3); 5460a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 0 5461a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *ip++; while (--t > 0); 5462a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5463a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *ip++; 5464a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 5465a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5466a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = *ip++; 5467bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5468a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5469a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5470a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehateof_found: 5471a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 5472a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return (ip == ip_end ? LZO_E_OK : 5473a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); 5474a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5475a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_NEED_IP) 5476a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatinput_overrun: 5477a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 5478a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_E_INPUT_OVERRUN; 5479a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5480a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5481a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_NEED_OP) 5482a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatoutput_overrun: 5483a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 5484a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_E_OUTPUT_OVERRUN; 5485a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5486a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5487a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 5488a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatlookbehind_overrun: 5489a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 5490a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_E_LOOKBEHIND_OVERRUN; 5491a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5492a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 5493a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5494a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5495a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5496a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define LZO_TEST_OVERRUN 1 5497a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef DO_DECOMPRESS 5498a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#define DO_DECOMPRESS lzo1x_decompress_safe 5499a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5500a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS_SAFE) 5501a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5502a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN) 5503a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(LZO_TEST_OVERRUN_INPUT) 5504a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_TEST_OVERRUN_INPUT 2 5505a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 5506a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(LZO_TEST_OVERRUN_OUTPUT) 5507a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_TEST_OVERRUN_OUTPUT 2 5508a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 5509a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) 5510a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define LZO_TEST_OVERRUN_LOOKBEHIND 1 5511a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 5512a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5513a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5514a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef TEST_IP 5515a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef TEST_OP 5516bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef TEST_IP_AND_TEST_OP 5517a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef TEST_LB 5518a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef TEST_LBO 5519a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef NEED_IP 5520a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef NEED_OP 5521bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef TEST_IV 5522bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#undef TEST_OV 5523a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_TEST_IP 5524a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_TEST_OP 5525a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_NEED_IP 5526a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_NEED_OP 5527a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_ANY_IP 5528a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#undef HAVE_ANY_OP 5529a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5530a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN_INPUT) 5531a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_TEST_OVERRUN_INPUT >= 1) 5532a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_IP (ip < ip_end) 5533a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 5534a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_TEST_OVERRUN_INPUT >= 2) 5535a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NEED_IP(x) \ 5536a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun 5537bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IV(x) if ((x) > (lzo_uint)0 - (511)) goto input_overrun 5538a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 5539a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5540a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5541a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN_OUTPUT) 5542a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_TEST_OVERRUN_OUTPUT >= 1) 5543a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_OP (op <= op_end) 5544a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 5545a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# if (LZO_TEST_OVERRUN_OUTPUT >= 2) 5546a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# undef TEST_OP 5547a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NEED_OP(x) \ 5548a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun 5549bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_OV(x) if ((x) > (lzo_uint)0 - (511)) goto output_overrun 5550a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# endif 5551a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5552a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5553a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 5554bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_LB(m_pos) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op)) goto lookbehind_overrun 5555bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_LBO(m_pos,o) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op-(o))) goto lookbehind_overrun 5556a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5557a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_LB(m_pos) ((void) 0) 5558a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_LBO(m_pos,o) ((void) 0) 5559a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5560a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5561a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) 5562a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_IP (ip < ip_end) 5563a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5564a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5565a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(TEST_IP) 5566a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_TEST_IP 1 5567a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5568a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_IP 1 5569a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5570a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(TEST_OP) 5571a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_TEST_OP 1 5572a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5573a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define TEST_OP 1 5574a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5575a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5576bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if defined(HAVE_TEST_IP) && defined(HAVE_TEST_OP) 5577bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IP_AND_TEST_OP (TEST_IP && TEST_OP) 5578bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(HAVE_TEST_IP) 5579bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IP_AND_TEST_OP TEST_IP 5580bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif defined(HAVE_TEST_OP) 5581bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IP_AND_TEST_OP TEST_OP 5582bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#else 5583bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IP_AND_TEST_OP 1 5584bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#endif 5585bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman 5586a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(NEED_IP) 5587a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_NEED_IP 1 5588a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5589a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NEED_IP(x) ((void) 0) 5590bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_IV(x) ((void) 0) 5591a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5592a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(NEED_OP) 5593a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_NEED_OP 1 5594a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5595a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define NEED_OP(x) ((void) 0) 5596bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman# define TEST_OV(x) ((void) 0) 5597a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5598a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5599a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) 5600a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_ANY_IP 1 5601a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5602a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) 5603a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat# define HAVE_ANY_OP 1 5604a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5605a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5606a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(DO_DECOMPRESS) 5607a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatLZO_PUBLIC(int) 5608a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatDO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, 5609a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_bytep out, lzo_uintp out_len, 5610a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_voidp wrkmem ) 5611a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5612a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 5613bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_bytep op; 5614bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_bytep ip; 5615bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman lzo_uint t; 5616a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5617a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint m_off; 5618a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat const lzo_bytep dict_end; 5619a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5620bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman const lzo_bytep m_pos; 5621a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5622a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5623a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat const lzo_bytep const ip_end = in + in_len; 5624a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_ANY_OP) 5625a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_bytep const op_end = out + *out_len; 5626a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5627a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5628a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint last_m_off = 0; 5629a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5630a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5631a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat LZO_UNUSED(wrkmem); 5632a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5633a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5634a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (dict) 5635a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5636a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (dict_len > M4_MAX_OFFSET) 5637a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5638a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict += dict_len - M4_MAX_OFFSET; 5639a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict_len = M4_MAX_OFFSET; 5640a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5641a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict_end = dict + dict_len; 5642a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5643a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5644a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5645a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict_len = 0; 5646a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat dict_end = NULL; 5647a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5648a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5649a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5650a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = 0; 5651a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5652a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op = out; 5653a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip = in; 5654a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5655bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman NEED_IP(1); 5656a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (*ip > 17) 5657a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5658a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = *ip++ - 17; 5659a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t < 4) 5660a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match_next; 5661bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman assert(t > 0); NEED_OP(t); NEED_IP(t+3); 5662a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *ip++; while (--t > 0); 5663a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto first_literal_run; 5664a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5665a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5666bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman for (;;) 5667a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5668bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman NEED_IP(3); 5669a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = *ip++; 5670a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 16) 5671a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match; 5672a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t == 0) 5673a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5674a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while (*ip == 0) 5675a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5676a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 255; 5677a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip++; 5678bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman TEST_IV(t); 5679a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_IP(1); 5680a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5681a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 15 + *ip++; 5682a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5683bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman assert(t > 0); NEED_OP(t+3); NEED_IP(t+6); 5684bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED64) && (LZO_OPT_UNALIGNED32) 5685bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman t += 3; 5686bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t >= 8) do 5687bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5688bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY8(op,ip); 5689bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += 8; ip += 8; t -= 8; 5690bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (t >= 8); 5691bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t >= 4) 5692bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5693bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,ip); 5694bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += 4; ip += 4; t -= 4; 5695bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5696bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t > 0) 5697bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5698bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = *ip++; 5699bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 5700bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5701bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED32) || (LZO_ALIGNED_OK_4) 5702bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_OPT_UNALIGNED32) 5703a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (PTR_ALIGNED2_4(op,ip)) 5704a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5705a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5706bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,ip); 5707a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op += 4; ip += 4; 5708a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (--t > 0) 5709a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5710a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 4) 5711a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5712a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do { 5713bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,ip); 5714a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op += 4; ip += 4; t -= 4; 5715a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } while (t >= 4); 5716a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t > 0) do *op++ = *ip++; while (--t > 0); 5717a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5718a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5719a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *ip++; while (--t > 0); 5720a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5721bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_OPT_UNALIGNED32) 5722a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5723a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5724a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5725a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5726bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_OPT_UNALIGNED32) 5727a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5728a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; 5729a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *ip++; while (--t > 0); 5730a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5731a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5732a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5733a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatfirst_literal_run: 5734a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5735a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = *ip++; 5736a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 16) 5737a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match; 5738a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5739a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5740a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 5741a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5742a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5743a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); 5744a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5745a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_OP(3); 5746a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = 3; COPY_DICT(t,m_off) 5747a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5748a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5749a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 5750a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - t; 5751a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = t; 5752a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5753a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - (1 + M2_MAX_OFFSET); 5754a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= t >> 2; 5755a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= *ip++ << 2; 5756a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5757a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat TEST_LB(m_pos); NEED_OP(3); 5758a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; 5759a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5760a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match_done; 5761a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5762bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman for (;;) { 5763a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatmatch: 5764a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 64) 5765a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5766a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5767a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1X) 5768a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); 5769a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 5) - 1; 5770a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO1Y) 5771a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); 5772a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 4) - 3; 5773a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO1Z) 5774a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = t & 0x1f; 5775a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (m_off >= 0x1c) 5776a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = last_m_off; 5777a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5778a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5779a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (m_off << 6) + (*ip++ >> 2); 5780a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5781a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5782a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 5) - 1; 5783a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5784a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5785a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1X) 5786a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5787a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (t >> 2) & 7; 5788a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= *ip++ << 3; 5789a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 5) - 1; 5790a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO1Y) 5791a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5792a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (t >> 2) & 3; 5793a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= *ip++ << 2; 5794a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 4) - 3; 5795a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#elif defined(LZO1Z) 5796a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5797a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint off = t & 0x1f; 5798a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op; 5799a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (off >= 0x1c) 5800a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5801a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat assert(last_m_off > 0); 5802a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= last_m_off; 5803a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5804a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5805a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5806a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat off = 1 + (off << 6) + (*ip++ >> 2); 5807a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= off; 5808a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = off; 5809a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5810a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5811a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = (t >> 5) - 1; 5812a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5813a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 5814a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto copy_match; 5815a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5816a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5817a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else if (t >= 32) 5818a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5819a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t &= 31; 5820a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t == 0) 5821a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5822a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while (*ip == 0) 5823a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5824a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 255; 5825a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip++; 5826bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman TEST_OV(t); 5827a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_IP(1); 5828a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5829a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 31 + *ip++; 5830bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman NEED_IP(2); 5831a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5832a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5833a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5834a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); 5835a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5836a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5837a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); 5838a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5839a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5840a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5841a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5842a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); 5843a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - off; 5844a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = off; 5845a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5846bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) 5847a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5848bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_pos -= UA_GET_LE16(ip) >> 2; 5849a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5850a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5851a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (ip[0] >> 2) + (ip[1] << 6); 5852a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5853a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5854a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip += 2; 5855a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5856a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else if (t >= 16) 5857a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5858a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5859a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = (t & 8) << 11; 5860a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5861a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op; 5862a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (t & 8) << 11; 5863a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5864a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t &= 7; 5865a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t == 0) 5866a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5867a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat while (*ip == 0) 5868a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5869a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 255; 5870a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip++; 5871bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman TEST_OV(t); 5872a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_IP(1); 5873a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5874a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 7 + *ip++; 5875bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman NEED_IP(2); 5876a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5877a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5878a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5879a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off += (ip[0] << 6) + (ip[1] >> 2); 5880a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5881a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off += (ip[0] >> 2) + (ip[1] << 6); 5882a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5883a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip += 2; 5884a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (m_off == 0) 5885a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto eof_found; 5886a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off += 0x4000; 5887a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5888a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5889a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5890a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5891a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5892a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (ip[0] << 6) + (ip[1] >> 2); 5893bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) 5894bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman m_pos -= UA_GET_LE16(ip) >> 2; 5895a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5896a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= (ip[0] >> 2) + (ip[1] << 6); 5897a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5898a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ip += 2; 5899a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (m_pos == op) 5900a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto eof_found; 5901a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= 0x4000; 5902a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5903a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = pd((const lzo_bytep)op, m_pos); 5904a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5905a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5906a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5907a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5908a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5909a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5910a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5911a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (t << 6) + (*ip++ >> 2); 5912a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = m_off; 5913a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5914a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_off = 1 + (t >> 2) + (*ip++ << 2); 5915a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5916a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_OP(2); 5917a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = 2; COPY_DICT(t,m_off) 5918a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5919a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5920a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = 1 + (t << 6) + (*ip++ >> 2); 5921a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - t; 5922a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat last_m_off = t; 5923a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5924a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos = op - 1; 5925a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= t >> 2; 5926a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat m_pos -= *ip++ << 2; 5927a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5928a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat TEST_LB(m_pos); NEED_OP(2); 5929a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *m_pos++; *op++ = *m_pos; 5930a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5931a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat goto match_done; 5932a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5933a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5934a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(COPY_DICT) 5935a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5936a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat NEED_OP(t+3-1); 5937a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t += 3-1; COPY_DICT(t,m_off) 5938a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5939a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5940a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5941a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 5942bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if (LZO_OPT_UNALIGNED64) && (LZO_OPT_UNALIGNED32) 5943bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (op - m_pos >= 8) 5944bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5945bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman t += (3 - 1); 5946bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t >= 8) do 5947bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5948bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY8(op,m_pos); 5949bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += 8; m_pos += 8; t -= 8; 5950bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } while (t >= 8); 5951bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t >= 4) 5952bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5953bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,m_pos); 5954bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman op += 4; m_pos += 4; t -= 4; 5955bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5956bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t > 0) 5957bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman { 5958bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman *op++ = m_pos[0]; 5959bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman if (t > 1) { *op++ = m_pos[1]; if (t > 2) { *op++ = m_pos[2]; } } 5960bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5961bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 5962bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman else 5963bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#elif (LZO_OPT_UNALIGNED32) || (LZO_ALIGNED_OK_4) 5964bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman#if !(LZO_OPT_UNALIGNED32) 5965a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) 5966a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5967a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat assert((op - m_pos) >= 4); 5968a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5969a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) 5970a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5971a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5972bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,m_pos); 5973a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op += 4; m_pos += 4; t -= 4 - (3 - 1); 5974a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do { 5975bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman UA_COPY4(op,m_pos); 5976a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat op += 4; m_pos += 4; t -= 4; 5977a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } while (t >= 4); 5978a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t > 0) do *op++ = *m_pos++; while (--t > 0); 5979a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5980a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat else 5981a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5982a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat { 5983a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatcopy_match: 5984a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *m_pos++; *op++ = *m_pos++; 5985a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *m_pos++; while (--t > 0); 5986a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 5987a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5988a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5989a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5990a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatmatch_done: 5991a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO1Z) 5992a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = ip[-1] & 3; 5993a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 5994a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = ip[-2] & 3; 5995a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 5996a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t == 0) 5997a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 5998a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 5999a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatmatch_next: 6000bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+3); 6001a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if 0 6002a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat do *op++ = *ip++; while (--t > 0); 6003a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else 6004a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *op++ = *ip++; 6005a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 6006a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 6007a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat t = *ip++; 6008bec50fdbf6ec2d61edda4f69913f8a8331b8b364Greg Hartman } 6009a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 6010a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 6011a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehateof_found: 6012a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 6013a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return (ip == ip_end ? LZO_E_OK : 6014a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); 6015a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 6016a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_NEED_IP) 6017a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatinput_overrun: 6018a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 6019a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_E_INPUT_OVERRUN; 6020a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 6021a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 6022a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(HAVE_NEED_OP) 6023a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatoutput_overrun: 6024a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 6025a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_E_OUTPUT_OVERRUN; 6026a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 6027a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 6028a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 6029a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatlookbehind_overrun: 6030a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *out_len = pd(op, out); 6031a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return LZO_E_LOOKBEHIND_OVERRUN; 6032a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 6033a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 6034a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 6035a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif 6036a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 6037a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/***** End of minilzo.c *****/ 6038