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