Subversion Repositories QNX 8.QNX8 IFS tool

Rev

Details | Last modification | View Log | RSS feed

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