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