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) 2011 Markus Franz Xaver Johannes Oberhumer 6 Copyright (C) 2010 Markus Franz Xaver Johannes Oberhumer 7 Copyright (C) 2009 Markus Franz Xaver Johannes Oberhumer 8 Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer 9 Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer 10 Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer 11 Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer 12 Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer 13 Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer 14 Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer 15 Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer 16 Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer 17 Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer 18 Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer 19 Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer 20 Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer 21 All Rights Reserved. 22 23 The LZO library is free software; you can redistribute it and/or 24 modify it under the terms of the GNU General Public License as 25 published by the Free Software Foundation; either version 2 of 26 the License, or (at your option) any later version. 27 28 The LZO library is distributed in the hope that it will be useful, 29 but WITHOUT ANY WARRANTY; without even the implied warranty of 30 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 31 GNU General Public License for more details. 32 33 You should have received a copy of the GNU General Public License 34 along with the LZO library; see the file COPYING. 35 If not, write to the Free Software Foundation, Inc., 36 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 37 38 Markus F.X.J. Oberhumer 39 <markus@oberhumer.com> 40 http://www.oberhumer.com/opensource/lzo/ 41 */ 42 43/* 44 * NOTE: 45 * the full LZO package can be found at 46 * http://www.oberhumer.com/opensource/lzo/ 47 */ 48 49#define __LZO_IN_MINILZO 1 50 51#if defined(LZO_CFG_FREESTANDING) 52# undef MINILZO_HAVE_CONFIG_H 53# define LZO_LIBC_FREESTANDING 1 54# define LZO_OS_FREESTANDING 1 55#endif 56 57#ifdef MINILZO_HAVE_CONFIG_H 58# include <config.h> 59#endif 60#include <limits.h> 61#include <stddef.h> 62#if defined(MINILZO_CFG_USE_INTERNAL_LZODEFS) 63 64#ifndef __LZODEFS_H_INCLUDED 65#define __LZODEFS_H_INCLUDED 1 66 67#if defined(__CYGWIN32__) && !defined(__CYGWIN__) 68# define __CYGWIN__ __CYGWIN32__ 69#endif 70#if defined(__IBMCPP__) && !defined(__IBMC__) 71# define __IBMC__ __IBMCPP__ 72#endif 73#if defined(__ICL) && defined(_WIN32) && !defined(__INTEL_COMPILER) 74# define __INTEL_COMPILER __ICL 75#endif 76#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE) 77# define _ALL_SOURCE 1 78#endif 79#if defined(__mips__) && defined(__R5900__) 80# if !defined(__LONG_MAX__) 81# define __LONG_MAX__ 9223372036854775807L 82# endif 83#endif 84#if defined(__INTEL_COMPILER) && defined(__linux__) 85# pragma warning(disable: 193) 86#endif 87#if defined(__KEIL__) && defined(__C166__) 88# pragma warning disable = 322 89#elif 0 && defined(__C251__) 90# pragma warning disable = 322 91#endif 92#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__) 93# if (_MSC_VER >= 1300) 94# pragma warning(disable: 4668) 95# endif 96#endif 97#if 0 && defined(__WATCOMC__) 98# if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060) 99# pragma warning 203 9 100# endif 101#endif 102#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__) 103# pragma option -h 104#endif 105#if 0 106#define LZO_0xffffL 0xfffful 107#define LZO_0xffffffffL 0xfffffffful 108#else 109#define LZO_0xffffL 65535ul 110#define LZO_0xffffffffL 4294967295ul 111#endif 112#if (LZO_0xffffL == LZO_0xffffffffL) 113# error "your preprocessor is broken 1" 114#endif 115#if (16ul * 16384ul != 262144ul) 116# error "your preprocessor is broken 2" 117#endif 118#if 0 119#if (32767 >= 4294967295ul) 120# error "your preprocessor is broken 3" 121#endif 122#if (65535u >= 4294967295ul) 123# error "your preprocessor is broken 4" 124#endif 125#endif 126#if (UINT_MAX == LZO_0xffffL) 127#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) 128# if !defined(MSDOS) 129# define MSDOS 1 130# endif 131# if !defined(_MSDOS) 132# define _MSDOS 1 133# endif 134#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX) 135# if (__VERSION == 520) && (MB_LEN_MAX == 1) 136# if !defined(__AZTEC_C__) 137# define __AZTEC_C__ __VERSION 138# endif 139# if !defined(__DOS__) 140# define __DOS__ 1 141# endif 142# endif 143#endif 144#endif 145#if defined(_MSC_VER) && defined(M_I86HM) && (UINT_MAX == LZO_0xffffL) 146# define ptrdiff_t long 147# define _PTRDIFF_T_DEFINED 1 148#endif 149#if (UINT_MAX == LZO_0xffffL) 150# undef __LZO_RENAME_A 151# undef __LZO_RENAME_B 152# if defined(__AZTEC_C__) && defined(__DOS__) 153# define __LZO_RENAME_A 1 154# elif defined(_MSC_VER) && defined(MSDOS) 155# if (_MSC_VER < 600) 156# define __LZO_RENAME_A 1 157# elif (_MSC_VER < 700) 158# define __LZO_RENAME_B 1 159# endif 160# elif defined(__TSC__) && defined(__OS2__) 161# define __LZO_RENAME_A 1 162# elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) 163# define __LZO_RENAME_A 1 164# elif defined(__PACIFIC__) && defined(DOS) 165# if !defined(__far) 166# define __far far 167# endif 168# if !defined(__near) 169# define __near near 170# endif 171# endif 172# if defined(__LZO_RENAME_A) 173# if !defined(__cdecl) 174# define __cdecl cdecl 175# endif 176# if !defined(__far) 177# define __far far 178# endif 179# if !defined(__huge) 180# define __huge huge 181# endif 182# if !defined(__near) 183# define __near near 184# endif 185# if !defined(__pascal) 186# define __pascal pascal 187# endif 188# if !defined(__huge) 189# define __huge huge 190# endif 191# elif defined(__LZO_RENAME_B) 192# if !defined(__cdecl) 193# define __cdecl _cdecl 194# endif 195# if !defined(__far) 196# define __far _far 197# endif 198# if !defined(__huge) 199# define __huge _huge 200# endif 201# if !defined(__near) 202# define __near _near 203# endif 204# if !defined(__pascal) 205# define __pascal _pascal 206# endif 207# elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) 208# if !defined(__cdecl) 209# define __cdecl cdecl 210# endif 211# if !defined(__pascal) 212# define __pascal pascal 213# endif 214# endif 215# undef __LZO_RENAME_A 216# undef __LZO_RENAME_B 217#endif 218#if (UINT_MAX == LZO_0xffffL) 219#if defined(__AZTEC_C__) && defined(__DOS__) 220# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 221#elif defined(_MSC_VER) && defined(MSDOS) 222# if (_MSC_VER < 600) 223# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 224# endif 225# if (_MSC_VER < 700) 226# define LZO_BROKEN_INTEGRAL_PROMOTION 1 227# define LZO_BROKEN_SIZEOF 1 228# endif 229#elif defined(__PACIFIC__) && defined(DOS) 230# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 231#elif defined(__TURBOC__) && defined(__MSDOS__) 232# if (__TURBOC__ < 0x0150) 233# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 234# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 235# define LZO_BROKEN_INTEGRAL_PROMOTION 1 236# endif 237# if (__TURBOC__ < 0x0200) 238# define LZO_BROKEN_SIZEOF 1 239# endif 240# if (__TURBOC__ < 0x0400) && defined(__cplusplus) 241# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 242# endif 243#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) 244# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 245# define LZO_BROKEN_SIZEOF 1 246#endif 247#endif 248#if defined(__WATCOMC__) && (__WATCOMC__ < 900) 249# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 250#endif 251#if defined(_CRAY) && defined(_CRAY1) 252# define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1 253#endif 254#define LZO_PP_STRINGIZE(x) #x 255#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x) 256#define LZO_PP_CONCAT2(a,b) a ## b 257#define LZO_PP_CONCAT3(a,b,c) a ## b ## c 258#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d 259#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e 260#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b) 261#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c) 262#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d) 263#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e) 264#if 1 265#define LZO_CPP_STRINGIZE(x) #x 266#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x) 267#define LZO_CPP_CONCAT2(a,b) a ## b 268#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c 269#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d 270#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e 271#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b) 272#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c) 273#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d) 274#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e) 275#endif 276#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-1)) - (o)) << 1) + (o)) 277#if 1 && defined(__cplusplus) 278# if !defined(__STDC_CONSTANT_MACROS) 279# define __STDC_CONSTANT_MACROS 1 280# endif 281# if !defined(__STDC_LIMIT_MACROS) 282# define __STDC_LIMIT_MACROS 1 283# endif 284#endif 285#if defined(__cplusplus) 286# define LZO_EXTERN_C extern "C" 287#else 288# define LZO_EXTERN_C extern 289#endif 290#if !defined(__LZO_OS_OVERRIDE) 291#if (LZO_OS_FREESTANDING) 292# define LZO_INFO_OS "freestanding" 293#elif (LZO_OS_EMBEDDED) 294# define LZO_INFO_OS "embedded" 295#elif 1 && defined(__IAR_SYSTEMS_ICC__) 296# define LZO_OS_EMBEDDED 1 297# define LZO_INFO_OS "embedded" 298#elif defined(__CYGWIN__) && defined(__GNUC__) 299# define LZO_OS_CYGWIN 1 300# define LZO_INFO_OS "cygwin" 301#elif defined(__EMX__) && defined(__GNUC__) 302# define LZO_OS_EMX 1 303# define LZO_INFO_OS "emx" 304#elif defined(__BEOS__) 305# define LZO_OS_BEOS 1 306# define LZO_INFO_OS "beos" 307#elif defined(__Lynx__) 308# define LZO_OS_LYNXOS 1 309# define LZO_INFO_OS "lynxos" 310#elif defined(__OS400__) 311# define LZO_OS_OS400 1 312# define LZO_INFO_OS "os400" 313#elif defined(__QNX__) 314# define LZO_OS_QNX 1 315# define LZO_INFO_OS "qnx" 316#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) 317# define LZO_OS_DOS32 1 318# define LZO_INFO_OS "dos32" 319#elif defined(__BORLANDC__) && defined(__DPMI16__) 320# define LZO_OS_DOS16 1 321# define LZO_INFO_OS "dos16" 322#elif defined(__ZTC__) && defined(DOS386) 323# define LZO_OS_DOS32 1 324# define LZO_INFO_OS "dos32" 325#elif defined(__OS2__) || defined(__OS2V2__) 326# if (UINT_MAX == LZO_0xffffL) 327# define LZO_OS_OS216 1 328# define LZO_INFO_OS "os216" 329# elif (UINT_MAX == LZO_0xffffffffL) 330# define LZO_OS_OS2 1 331# define LZO_INFO_OS "os2" 332# else 333# error "check your limits.h header" 334# endif 335#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) 336# define LZO_OS_WIN64 1 337# define LZO_INFO_OS "win64" 338#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) 339# define LZO_OS_WIN32 1 340# define LZO_INFO_OS "win32" 341#elif defined(__MWERKS__) && defined(__INTEL__) 342# define LZO_OS_WIN32 1 343# define LZO_INFO_OS "win32" 344#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) 345# if (UINT_MAX == LZO_0xffffL) 346# define LZO_OS_WIN16 1 347# define LZO_INFO_OS "win16" 348# elif (UINT_MAX == LZO_0xffffffffL) 349# define LZO_OS_WIN32 1 350# define LZO_INFO_OS "win32" 351# else 352# error "check your limits.h header" 353# endif 354#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) 355# if (UINT_MAX == LZO_0xffffL) 356# define LZO_OS_DOS16 1 357# define LZO_INFO_OS "dos16" 358# elif (UINT_MAX == LZO_0xffffffffL) 359# define LZO_OS_DOS32 1 360# define LZO_INFO_OS "dos32" 361# else 362# error "check your limits.h header" 363# endif 364#elif defined(__WATCOMC__) 365# if defined(__NT__) && (UINT_MAX == LZO_0xffffL) 366# define LZO_OS_DOS16 1 367# define LZO_INFO_OS "dos16" 368# elif defined(__NT__) && (__WATCOMC__ < 1100) 369# define LZO_OS_WIN32 1 370# define LZO_INFO_OS "win32" 371# elif defined(__linux__) || defined(__LINUX__) 372# define LZO_OS_POSIX 1 373# define LZO_INFO_OS "posix" 374# else 375# error "please specify a target using the -bt compiler option" 376# endif 377#elif defined(__palmos__) 378# define LZO_OS_PALMOS 1 379# define LZO_INFO_OS "palmos" 380#elif defined(__TOS__) || defined(__atarist__) 381# define LZO_OS_TOS 1 382# define LZO_INFO_OS "tos" 383#elif defined(macintosh) && !defined(__ppc__) 384# define LZO_OS_MACCLASSIC 1 385# define LZO_INFO_OS "macclassic" 386#elif defined(__VMS) 387# define LZO_OS_VMS 1 388# define LZO_INFO_OS "vms" 389#elif ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) 390# define LZO_OS_CONSOLE 1 391# define LZO_OS_CONSOLE_PS2 1 392# define LZO_INFO_OS "console" 393# define LZO_INFO_OS_CONSOLE "ps2" 394#elif (defined(__mips__) && defined(__psp__)) 395# define LZO_OS_CONSOLE 1 396# define LZO_OS_CONSOLE_PSP 1 397# define LZO_INFO_OS "console" 398# define LZO_INFO_OS_CONSOLE "psp" 399#else 400# define LZO_OS_POSIX 1 401# define LZO_INFO_OS "posix" 402#endif 403#if (LZO_OS_POSIX) 404# if defined(_AIX) || defined(__AIX__) || defined(__aix__) 405# define LZO_OS_POSIX_AIX 1 406# define LZO_INFO_OS_POSIX "aix" 407# elif defined(__FreeBSD__) 408# define LZO_OS_POSIX_FREEBSD 1 409# define LZO_INFO_OS_POSIX "freebsd" 410# elif defined(__hpux__) || defined(__hpux) 411# define LZO_OS_POSIX_HPUX 1 412# define LZO_INFO_OS_POSIX "hpux" 413# elif defined(__INTERIX) 414# define LZO_OS_POSIX_INTERIX 1 415# define LZO_INFO_OS_POSIX "interix" 416# elif defined(__IRIX__) || defined(__irix__) 417# define LZO_OS_POSIX_IRIX 1 418# define LZO_INFO_OS_POSIX "irix" 419# elif defined(__linux__) || defined(__linux) || defined(__LINUX__) 420# define LZO_OS_POSIX_LINUX 1 421# define LZO_INFO_OS_POSIX "linux" 422# elif defined(__APPLE__) || defined(__MACOS__) 423# define LZO_OS_POSIX_MACOSX 1 424# define LZO_INFO_OS_POSIX "macosx" 425# elif defined(__minix__) || defined(__minix) 426# define LZO_OS_POSIX_MINIX 1 427# define LZO_INFO_OS_POSIX "minix" 428# elif defined(__NetBSD__) 429# define LZO_OS_POSIX_NETBSD 1 430# define LZO_INFO_OS_POSIX "netbsd" 431# elif defined(__OpenBSD__) 432# define LZO_OS_POSIX_OPENBSD 1 433# define LZO_INFO_OS_POSIX "openbsd" 434# elif defined(__osf__) 435# define LZO_OS_POSIX_OSF 1 436# define LZO_INFO_OS_POSIX "osf" 437# elif defined(__solaris__) || defined(__sun) 438# if defined(__SVR4) || defined(__svr4__) 439# define LZO_OS_POSIX_SOLARIS 1 440# define LZO_INFO_OS_POSIX "solaris" 441# else 442# define LZO_OS_POSIX_SUNOS 1 443# define LZO_INFO_OS_POSIX "sunos" 444# endif 445# elif defined(__ultrix__) || defined(__ultrix) 446# define LZO_OS_POSIX_ULTRIX 1 447# define LZO_INFO_OS_POSIX "ultrix" 448# elif defined(_UNICOS) 449# define LZO_OS_POSIX_UNICOS 1 450# define LZO_INFO_OS_POSIX "unicos" 451# else 452# define LZO_OS_POSIX_UNKNOWN 1 453# define LZO_INFO_OS_POSIX "unknown" 454# endif 455#endif 456#endif 457#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 458# if (UINT_MAX != LZO_0xffffL) 459# error "this should not happen" 460# endif 461# if (ULONG_MAX != LZO_0xffffffffL) 462# error "this should not happen" 463# endif 464#endif 465#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64) 466# if (UINT_MAX != LZO_0xffffffffL) 467# error "this should not happen" 468# endif 469# if (ULONG_MAX != LZO_0xffffffffL) 470# error "this should not happen" 471# endif 472#endif 473#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__) 474# define LZO_CC_CILLY 1 475# define LZO_INFO_CC "Cilly" 476# if defined(__CILLY__) 477# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__) 478# else 479# define LZO_INFO_CCVER "unknown" 480# endif 481#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__) 482# define LZO_CC_SDCC 1 483# define LZO_INFO_CC "sdcc" 484# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC) 485#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__) 486# define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + __PATHCC_MINOR__ * 0x100 + __PATHCC_PATCHLEVEL__) 487# define LZO_INFO_CC "Pathscale C" 488# define LZO_INFO_CCVER __PATHSCALE__ 489#elif defined(__INTEL_COMPILER) 490# define LZO_CC_INTELC 1 491# define LZO_INFO_CC "Intel C" 492# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER) 493# if defined(_WIN32) || defined(_WIN64) 494# define LZO_CC_SYNTAX_MSC 1 495# else 496# define LZO_CC_SYNTAX_GNUC 1 497# endif 498#elif defined(__POCC__) && defined(_WIN32) 499# define LZO_CC_PELLESC 1 500# define LZO_INFO_CC "Pelles C" 501# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__) 502#elif defined(__clang__) && defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 503# if defined(__GNUC_PATCHLEVEL__) 504# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) 505# else 506# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) 507# endif 508# if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__) 509# define LZO_CC_CLANG_CLANG (__clang_major__ * 0x10000L + __clang_minor__ * 0x100 + __clang_patchlevel__) 510# else 511# define LZO_CC_CLANG_CLANG 0x010000L 512# endif 513# define LZO_CC_CLANG LZO_CC_CLANG_GNUC 514# define LZO_INFO_CC "clang" 515# define LZO_INFO_CCVER __VERSION__ 516#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) 517# if defined(__GNUC_PATCHLEVEL__) 518# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) 519# else 520# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) 521# endif 522# define LZO_CC_LLVM LZO_CC_LLVM_GNUC 523# define LZO_INFO_CC "llvm-gcc" 524# define LZO_INFO_CCVER __VERSION__ 525#elif defined(__GNUC__) && defined(__VERSION__) 526# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) 527# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100 + __GNUC_PATCHLEVEL__) 528# elif defined(__GNUC_MINOR__) 529# define LZO_CC_GNUC (__GNUC__ * 0x10000L + __GNUC_MINOR__ * 0x100) 530# else 531# define LZO_CC_GNUC (__GNUC__ * 0x10000L) 532# endif 533# define LZO_INFO_CC "gcc" 534# define LZO_INFO_CCVER __VERSION__ 535#elif defined(__ACK__) && defined(_ACK) 536# define LZO_CC_ACK 1 537# define LZO_INFO_CC "Amsterdam Compiler Kit C" 538# define LZO_INFO_CCVER "unknown" 539#elif defined(__AZTEC_C__) 540# define LZO_CC_AZTECC 1 541# define LZO_INFO_CC "Aztec C" 542# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__) 543#elif defined(__CODEGEARC__) 544# define LZO_CC_CODEGEARC 1 545# define LZO_INFO_CC "CodeGear C" 546# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__) 547#elif defined(__BORLANDC__) 548# define LZO_CC_BORLANDC 1 549# define LZO_INFO_CC "Borland C" 550# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__) 551#elif defined(_CRAYC) && defined(_RELEASE) 552# define LZO_CC_CRAYC 1 553# define LZO_INFO_CC "Cray C" 554# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE) 555#elif defined(__DMC__) && defined(__SC__) 556# define LZO_CC_DMC 1 557# define LZO_INFO_CC "Digital Mars C" 558# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__) 559#elif defined(__DECC) 560# define LZO_CC_DECC 1 561# define LZO_INFO_CC "DEC C" 562# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC) 563#elif defined(__HIGHC__) 564# define LZO_CC_HIGHC 1 565# define LZO_INFO_CC "MetaWare High C" 566# define LZO_INFO_CCVER "unknown" 567#elif defined(__IAR_SYSTEMS_ICC__) 568# define LZO_CC_IARC 1 569# define LZO_INFO_CC "IAR C" 570# if defined(__VER__) 571# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__) 572# else 573# define LZO_INFO_CCVER "unknown" 574# endif 575#elif defined(__IBMC__) 576# define LZO_CC_IBMC 1 577# define LZO_INFO_CC "IBM C" 578# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__) 579#elif defined(__KEIL__) && defined(__C166__) 580# define LZO_CC_KEILC 1 581# define LZO_INFO_CC "Keil C" 582# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__) 583#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL) 584# define LZO_CC_LCCWIN32 1 585# define LZO_INFO_CC "lcc-win32" 586# define LZO_INFO_CCVER "unknown" 587#elif defined(__LCC__) 588# define LZO_CC_LCC 1 589# define LZO_INFO_CC "lcc" 590# if defined(__LCC_VERSION__) 591# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__) 592# else 593# define LZO_INFO_CCVER "unknown" 594# endif 595#elif defined(_MSC_VER) 596# define LZO_CC_MSC 1 597# define LZO_INFO_CC "Microsoft C" 598# if defined(_MSC_FULL_VER) 599# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER) 600# else 601# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) 602# endif 603#elif defined(__MWERKS__) 604# define LZO_CC_MWERKS 1 605# define LZO_INFO_CC "Metrowerks C" 606# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__) 607#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) 608# define LZO_CC_NDPC 1 609# define LZO_INFO_CC "Microway NDP C" 610# define LZO_INFO_CCVER "unknown" 611#elif defined(__PACIFIC__) 612# define LZO_CC_PACIFICC 1 613# define LZO_INFO_CC "Pacific C" 614# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__) 615#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) 616# define LZO_CC_PGI 1 617# define LZO_INFO_CC "Portland Group PGI C" 618# define LZO_INFO_CCVER "unknown" 619#elif defined(__PUREC__) && defined(__TOS__) 620# define LZO_CC_PUREC 1 621# define LZO_INFO_CC "Pure C" 622# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__) 623#elif defined(__SC__) && defined(__ZTC__) 624# define LZO_CC_SYMANTECC 1 625# define LZO_INFO_CC "Symantec C" 626# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__) 627#elif defined(__SUNPRO_C) 628# define LZO_INFO_CC "SunPro C" 629# if ((__SUNPRO_C)+0 > 0) 630# define LZO_CC_SUNPROC __SUNPRO_C 631# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C) 632# else 633# define LZO_CC_SUNPROC 1 634# define LZO_INFO_CCVER "unknown" 635# endif 636#elif defined(__SUNPRO_CC) 637# define LZO_INFO_CC "SunPro C" 638# if ((__SUNPRO_CC)+0 > 0) 639# define LZO_CC_SUNPROC __SUNPRO_CC 640# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC) 641# else 642# define LZO_CC_SUNPROC 1 643# define LZO_INFO_CCVER "unknown" 644# endif 645#elif defined(__TINYC__) 646# define LZO_CC_TINYC 1 647# define LZO_INFO_CC "Tiny C" 648# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__) 649#elif defined(__TSC__) 650# define LZO_CC_TOPSPEEDC 1 651# define LZO_INFO_CC "TopSpeed C" 652# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__) 653#elif defined(__WATCOMC__) 654# define LZO_CC_WATCOMC 1 655# define LZO_INFO_CC "Watcom C" 656# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__) 657#elif defined(__TURBOC__) 658# define LZO_CC_TURBOC 1 659# define LZO_INFO_CC "Turbo C" 660# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__) 661#elif defined(__ZTC__) 662# define LZO_CC_ZORTECHC 1 663# define LZO_INFO_CC "Zortech C" 664# if (__ZTC__ == 0x310) 665# define LZO_INFO_CCVER "0x310" 666# else 667# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__) 668# endif 669#else 670# define LZO_CC_UNKNOWN 1 671# define LZO_INFO_CC "unknown" 672# define LZO_INFO_CCVER "unknown" 673#endif 674#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER) 675# error "LZO_CC_MSC: _MSC_FULL_VER is not defined" 676#endif 677#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY) 678# if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY) 679# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E) 680# define LZO_ARCH_CRAY_MPP 1 681# elif defined(_CRAY1) 682# define LZO_ARCH_CRAY_PVP 1 683# endif 684# endif 685#endif 686#if !defined(__LZO_ARCH_OVERRIDE) 687#if (LZO_ARCH_GENERIC) 688# define LZO_INFO_ARCH "generic" 689#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 690# define LZO_ARCH_I086 1 691# define LZO_ARCH_IA16 1 692# define LZO_INFO_ARCH "i086" 693#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) 694# define LZO_ARCH_ALPHA 1 695# define LZO_INFO_ARCH "alpha" 696#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E)) 697# define LZO_ARCH_ALPHA 1 698# define LZO_INFO_ARCH "alpha" 699#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64) 700# define LZO_ARCH_AMD64 1 701# define LZO_INFO_ARCH "amd64" 702#elif defined(__thumb__) || (defined(_M_ARM) && defined(_M_THUMB)) 703# define LZO_ARCH_ARM 1 704# define LZO_ARCH_ARM_THUMB 1 705# define LZO_INFO_ARCH "arm_thumb" 706#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__) 707# define LZO_ARCH_ARM 1 708# if defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 1) 709# define LZO_ARCH_ARM_THUMB 1 710# define LZO_INFO_ARCH "arm_thumb" 711# elif defined(__CPU_MODE__) && ((__CPU_MODE__)+0 == 2) 712# define LZO_INFO_ARCH "arm" 713# else 714# define LZO_INFO_ARCH "arm" 715# endif 716#elif defined(__arm__) || defined(_M_ARM) 717# define LZO_ARCH_ARM 1 718# define LZO_INFO_ARCH "arm" 719#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__) 720# define LZO_ARCH_AVR 1 721# define LZO_INFO_ARCH "avr" 722#elif defined(__avr32__) || defined(__AVR32__) 723# define LZO_ARCH_AVR32 1 724# define LZO_INFO_ARCH "avr32" 725#elif defined(__bfin__) 726# define LZO_ARCH_BLACKFIN 1 727# define LZO_INFO_ARCH "blackfin" 728#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__) 729# define LZO_ARCH_C166 1 730# define LZO_INFO_ARCH "c166" 731#elif defined(__cris__) 732# define LZO_ARCH_CRIS 1 733# define LZO_INFO_ARCH "cris" 734#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__) 735# define LZO_ARCH_EZ80 1 736# define LZO_INFO_ARCH "ez80" 737#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) 738# define LZO_ARCH_H8300 1 739# define LZO_INFO_ARCH "h8300" 740#elif defined(__hppa__) || defined(__hppa) 741# define LZO_ARCH_HPPA 1 742# define LZO_INFO_ARCH "hppa" 743#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386) 744# define LZO_ARCH_I386 1 745# define LZO_ARCH_IA32 1 746# define LZO_INFO_ARCH "i386" 747#elif (LZO_CC_ZORTECHC && defined(__I86__)) 748# define LZO_ARCH_I386 1 749# define LZO_ARCH_IA32 1 750# define LZO_INFO_ARCH "i386" 751#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386) 752# define LZO_ARCH_I386 1 753# define LZO_ARCH_IA32 1 754# define LZO_INFO_ARCH "i386" 755#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64) 756# define LZO_ARCH_IA64 1 757# define LZO_INFO_ARCH "ia64" 758#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__) 759# define LZO_ARCH_M16C 1 760# define LZO_INFO_ARCH "m16c" 761#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__) 762# define LZO_ARCH_M16C 1 763# define LZO_INFO_ARCH "m16c" 764#elif defined(__m32r__) 765# define LZO_ARCH_M32R 1 766# define LZO_INFO_ARCH "m32r" 767#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K) 768# define LZO_ARCH_M68K 1 769# define LZO_INFO_ARCH "m68k" 770#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__) 771# define LZO_ARCH_MCS251 1 772# define LZO_INFO_ARCH "mcs251" 773#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__) 774# define LZO_ARCH_MCS51 1 775# define LZO_INFO_ARCH "mcs51" 776#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__) 777# define LZO_ARCH_MCS51 1 778# define LZO_INFO_ARCH "mcs51" 779#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000) 780# define LZO_ARCH_MIPS 1 781# define LZO_INFO_ARCH "mips" 782#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__) 783# define LZO_ARCH_MSP430 1 784# define LZO_INFO_ARCH "msp430" 785#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__) 786# define LZO_ARCH_MSP430 1 787# define LZO_INFO_ARCH "msp430" 788#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR) 789# define LZO_ARCH_POWERPC 1 790# define LZO_INFO_ARCH "powerpc" 791#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x) 792# define LZO_ARCH_S390 1 793# define LZO_INFO_ARCH "s390" 794#elif defined(__sh__) || defined(_M_SH) 795# define LZO_ARCH_SH 1 796# define LZO_INFO_ARCH "sh" 797#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) 798# define LZO_ARCH_SPARC 1 799# define LZO_INFO_ARCH "sparc" 800#elif defined(__SPU__) 801# define LZO_ARCH_SPU 1 802# define LZO_INFO_ARCH "spu" 803#elif (UINT_MAX == LZO_0xffffL) && defined(__z80) 804# define LZO_ARCH_Z80 1 805# define LZO_INFO_ARCH "z80" 806#elif (LZO_ARCH_CRAY_PVP) 807# if defined(_CRAYSV1) 808# define LZO_ARCH_CRAY_SV1 1 809# define LZO_INFO_ARCH "cray_sv1" 810# elif (_ADDR64) 811# define LZO_ARCH_CRAY_T90 1 812# define LZO_INFO_ARCH "cray_t90" 813# elif (_ADDR32) 814# define LZO_ARCH_CRAY_YMP 1 815# define LZO_INFO_ARCH "cray_ymp" 816# else 817# define LZO_ARCH_CRAY_XMP 1 818# define LZO_INFO_ARCH "cray_xmp" 819# endif 820#else 821# define LZO_ARCH_UNKNOWN 1 822# define LZO_INFO_ARCH "unknown" 823#endif 824#endif 825#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2) 826# error "FIXME - missing define for CPU architecture" 827#endif 828#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32) 829# error "FIXME - missing WIN32 define for CPU architecture" 830#endif 831#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64) 832# error "FIXME - missing WIN64 define for CPU architecture" 833#endif 834#if (LZO_OS_OS216 || LZO_OS_WIN16) 835# define LZO_ARCH_I086PM 1 836# define LZO_ARCH_IA16PM 1 837#elif 1 && (LZO_OS_DOS16 && defined(BLX286)) 838# define LZO_ARCH_I086PM 1 839# define LZO_ARCH_IA16PM 1 840#elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) 841# define LZO_ARCH_I086PM 1 842# define LZO_ARCH_IA16PM 1 843#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__)) 844# define LZO_ARCH_I086PM 1 845# define LZO_ARCH_IA16PM 1 846#endif 847#if (LZO_ARCH_ARM_THUMB) && !(LZO_ARCH_ARM) 848# error "this should not happen" 849#endif 850#if (LZO_ARCH_I086PM) && !(LZO_ARCH_I086) 851# error "this should not happen" 852#endif 853#if (LZO_ARCH_I086) 854# if (UINT_MAX != LZO_0xffffL) 855# error "this should not happen" 856# endif 857# if (ULONG_MAX != LZO_0xffffffffL) 858# error "this should not happen" 859# endif 860#endif 861#if (LZO_ARCH_I386) 862# if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__) 863# error "this should not happen" 864# endif 865# if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__) 866# error "this should not happen" 867# endif 868# if (ULONG_MAX != LZO_0xffffffffL) 869# error "this should not happen" 870# endif 871#endif 872#if !defined(__LZO_MM_OVERRIDE) 873#if (LZO_ARCH_I086) 874#if (UINT_MAX != LZO_0xffffL) 875# error "this should not happen" 876#endif 877#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM) 878# define LZO_MM_TINY 1 879#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM) 880# define LZO_MM_HUGE 1 881#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL) 882# define LZO_MM_SMALL 1 883#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM) 884# define LZO_MM_MEDIUM 1 885#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM) 886# define LZO_MM_COMPACT 1 887#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL) 888# define LZO_MM_LARGE 1 889#elif (LZO_CC_AZTECC) 890# if defined(_LARGE_CODE) && defined(_LARGE_DATA) 891# define LZO_MM_LARGE 1 892# elif defined(_LARGE_CODE) 893# define LZO_MM_MEDIUM 1 894# elif defined(_LARGE_DATA) 895# define LZO_MM_COMPACT 1 896# else 897# define LZO_MM_SMALL 1 898# endif 899#elif (LZO_CC_ZORTECHC && defined(__VCM__)) 900# define LZO_MM_LARGE 1 901#else 902# error "unknown memory model" 903#endif 904#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 905#define LZO_HAVE_MM_HUGE_PTR 1 906#define LZO_HAVE_MM_HUGE_ARRAY 1 907#if (LZO_MM_TINY) 908# undef LZO_HAVE_MM_HUGE_ARRAY 909#endif 910#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC) 911# undef LZO_HAVE_MM_HUGE_PTR 912# undef LZO_HAVE_MM_HUGE_ARRAY 913#elif (LZO_CC_DMC || LZO_CC_SYMANTECC) 914# undef LZO_HAVE_MM_HUGE_ARRAY 915#elif (LZO_CC_MSC && defined(_QC)) 916# undef LZO_HAVE_MM_HUGE_ARRAY 917# if (_MSC_VER < 600) 918# undef LZO_HAVE_MM_HUGE_PTR 919# endif 920#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295)) 921# undef LZO_HAVE_MM_HUGE_ARRAY 922#endif 923#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR) 924# if (LZO_OS_DOS16) 925# error "this should not happen" 926# elif (LZO_CC_ZORTECHC) 927# else 928# error "this should not happen" 929# endif 930#endif 931#ifdef __cplusplus 932extern "C" { 933#endif 934#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200)) 935 extern void __near __cdecl _AHSHIFT(void); 936# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 937#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 938 extern void __near __cdecl _AHSHIFT(void); 939# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 940#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC) 941 extern void __near __cdecl _AHSHIFT(void); 942# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 943#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295)) 944 extern void __near __cdecl _AHSHIFT(void); 945# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) 946#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16) 947# define LZO_MM_AHSHIFT 12 948#elif (LZO_CC_WATCOMC) 949 extern unsigned char _HShift; 950# define LZO_MM_AHSHIFT ((unsigned) _HShift) 951#else 952# error "FIXME - implement LZO_MM_AHSHIFT" 953#endif 954#ifdef __cplusplus 955} 956#endif 957#endif 958#elif (LZO_ARCH_C166) 959#if !defined(__MODEL__) 960# error "FIXME - C166 __MODEL__" 961#elif ((__MODEL__) == 0) 962# define LZO_MM_SMALL 1 963#elif ((__MODEL__) == 1) 964# define LZO_MM_SMALL 1 965#elif ((__MODEL__) == 2) 966# define LZO_MM_LARGE 1 967#elif ((__MODEL__) == 3) 968# define LZO_MM_TINY 1 969#elif ((__MODEL__) == 4) 970# define LZO_MM_XTINY 1 971#elif ((__MODEL__) == 5) 972# define LZO_MM_XSMALL 1 973#else 974# error "FIXME - C166 __MODEL__" 975#endif 976#elif (LZO_ARCH_MCS251) 977#if !defined(__MODEL__) 978# error "FIXME - MCS251 __MODEL__" 979#elif ((__MODEL__) == 0) 980# define LZO_MM_SMALL 1 981#elif ((__MODEL__) == 2) 982# define LZO_MM_LARGE 1 983#elif ((__MODEL__) == 3) 984# define LZO_MM_TINY 1 985#elif ((__MODEL__) == 4) 986# define LZO_MM_XTINY 1 987#elif ((__MODEL__) == 5) 988# define LZO_MM_XSMALL 1 989#else 990# error "FIXME - MCS251 __MODEL__" 991#endif 992#elif (LZO_ARCH_MCS51) 993#if !defined(__MODEL__) 994# error "FIXME - MCS51 __MODEL__" 995#elif ((__MODEL__) == 1) 996# define LZO_MM_SMALL 1 997#elif ((__MODEL__) == 2) 998# define LZO_MM_LARGE 1 999#elif ((__MODEL__) == 3) 1000# define LZO_MM_TINY 1 1001#elif ((__MODEL__) == 4) 1002# define LZO_MM_XTINY 1 1003#elif ((__MODEL__) == 5) 1004# define LZO_MM_XSMALL 1 1005#else 1006# error "FIXME - MCS51 __MODEL__" 1007#endif 1008#elif (LZO_ARCH_CRAY_PVP) 1009# define LZO_MM_PVP 1 1010#else 1011# define LZO_MM_FLAT 1 1012#endif 1013#if (LZO_MM_COMPACT) 1014# define LZO_INFO_MM "compact" 1015#elif (LZO_MM_FLAT) 1016# define LZO_INFO_MM "flat" 1017#elif (LZO_MM_HUGE) 1018# define LZO_INFO_MM "huge" 1019#elif (LZO_MM_LARGE) 1020# define LZO_INFO_MM "large" 1021#elif (LZO_MM_MEDIUM) 1022# define LZO_INFO_MM "medium" 1023#elif (LZO_MM_PVP) 1024# define LZO_INFO_MM "pvp" 1025#elif (LZO_MM_SMALL) 1026# define LZO_INFO_MM "small" 1027#elif (LZO_MM_TINY) 1028# define LZO_INFO_MM "tiny" 1029#else 1030# error "unknown memory model" 1031#endif 1032#endif 1033#if defined(SIZEOF_SHORT) 1034# define LZO_SIZEOF_SHORT (SIZEOF_SHORT) 1035#endif 1036#if defined(SIZEOF_INT) 1037# define LZO_SIZEOF_INT (SIZEOF_INT) 1038#endif 1039#if defined(SIZEOF_LONG) 1040# define LZO_SIZEOF_LONG (SIZEOF_LONG) 1041#endif 1042#if defined(SIZEOF_LONG_LONG) 1043# define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG) 1044#endif 1045#if defined(SIZEOF___INT16) 1046# define LZO_SIZEOF___INT16 (SIZEOF___INT16) 1047#endif 1048#if defined(SIZEOF___INT32) 1049# define LZO_SIZEOF___INT32 (SIZEOF___INT32) 1050#endif 1051#if defined(SIZEOF___INT64) 1052# define LZO_SIZEOF___INT64 (SIZEOF___INT64) 1053#endif 1054#if defined(SIZEOF_VOID_P) 1055# define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P) 1056#endif 1057#if defined(SIZEOF_SIZE_T) 1058# define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T) 1059#endif 1060#if defined(SIZEOF_PTRDIFF_T) 1061# define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T) 1062#endif 1063#define __LZO_LSR(x,b) (((x)+0ul) >> (b)) 1064#if !defined(LZO_SIZEOF_SHORT) 1065# if (LZO_ARCH_CRAY_PVP) 1066# define LZO_SIZEOF_SHORT 8 1067# elif (USHRT_MAX == LZO_0xffffL) 1068# define LZO_SIZEOF_SHORT 2 1069# elif (__LZO_LSR(USHRT_MAX,7) == 1) 1070# define LZO_SIZEOF_SHORT 1 1071# elif (__LZO_LSR(USHRT_MAX,15) == 1) 1072# define LZO_SIZEOF_SHORT 2 1073# elif (__LZO_LSR(USHRT_MAX,31) == 1) 1074# define LZO_SIZEOF_SHORT 4 1075# elif (__LZO_LSR(USHRT_MAX,63) == 1) 1076# define LZO_SIZEOF_SHORT 8 1077# elif (__LZO_LSR(USHRT_MAX,127) == 1) 1078# define LZO_SIZEOF_SHORT 16 1079# else 1080# error "LZO_SIZEOF_SHORT" 1081# endif 1082#endif 1083#if !defined(LZO_SIZEOF_INT) 1084# if (LZO_ARCH_CRAY_PVP) 1085# define LZO_SIZEOF_INT 8 1086# elif (UINT_MAX == LZO_0xffffL) 1087# define LZO_SIZEOF_INT 2 1088# elif (UINT_MAX == LZO_0xffffffffL) 1089# define LZO_SIZEOF_INT 4 1090# elif (__LZO_LSR(UINT_MAX,7) == 1) 1091# define LZO_SIZEOF_INT 1 1092# elif (__LZO_LSR(UINT_MAX,15) == 1) 1093# define LZO_SIZEOF_INT 2 1094# elif (__LZO_LSR(UINT_MAX,31) == 1) 1095# define LZO_SIZEOF_INT 4 1096# elif (__LZO_LSR(UINT_MAX,63) == 1) 1097# define LZO_SIZEOF_INT 8 1098# elif (__LZO_LSR(UINT_MAX,127) == 1) 1099# define LZO_SIZEOF_INT 16 1100# else 1101# error "LZO_SIZEOF_INT" 1102# endif 1103#endif 1104#if !defined(LZO_SIZEOF_LONG) 1105# if (ULONG_MAX == LZO_0xffffffffL) 1106# define LZO_SIZEOF_LONG 4 1107# elif (__LZO_LSR(ULONG_MAX,7) == 1) 1108# define LZO_SIZEOF_LONG 1 1109# elif (__LZO_LSR(ULONG_MAX,15) == 1) 1110# define LZO_SIZEOF_LONG 2 1111# elif (__LZO_LSR(ULONG_MAX,31) == 1) 1112# define LZO_SIZEOF_LONG 4 1113# elif (__LZO_LSR(ULONG_MAX,63) == 1) 1114# define LZO_SIZEOF_LONG 8 1115# elif (__LZO_LSR(ULONG_MAX,127) == 1) 1116# define LZO_SIZEOF_LONG 16 1117# else 1118# error "LZO_SIZEOF_LONG" 1119# endif 1120#endif 1121#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) 1122#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) 1123# if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__) 1124# if (LZO_CC_GNUC >= 0x030300ul) 1125# if ((__LONG_MAX__)+0 == (__LONG_LONG_MAX__)+0) 1126# define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG 1127# elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1) 1128# define LZO_SIZEOF_LONG_LONG 4 1129# endif 1130# endif 1131# endif 1132#endif 1133#endif 1134#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) 1135#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) 1136#if (LZO_ARCH_I086 && LZO_CC_DMC) 1137#elif (LZO_CC_CILLY) && defined(__GNUC__) 1138# define LZO_SIZEOF_LONG_LONG 8 1139#elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1140# define LZO_SIZEOF_LONG_LONG 8 1141#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400)) 1142# define LZO_SIZEOF_LONG_LONG 8 1143#elif (LZO_OS_WIN64 || defined(_WIN64)) 1144# define LZO_SIZEOF___INT64 8 1145#elif (LZO_ARCH_I386 && (LZO_CC_DMC)) 1146# define LZO_SIZEOF_LONG_LONG 8 1147#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700))) 1148# define LZO_SIZEOF_LONG_LONG 8 1149#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__))) 1150# define LZO_SIZEOF_LONG_LONG 8 1151#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC)) 1152# define LZO_SIZEOF_LONG_LONG 8 1153#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC)) 1154# define LZO_SIZEOF___INT64 8 1155#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC)) 1156# define LZO_SIZEOF___INT64 8 1157#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520))) 1158# define LZO_SIZEOF___INT64 8 1159#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100))) 1160# define LZO_SIZEOF___INT64 8 1161#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && (_INTEGRAL_MAX_BITS == 64)) 1162# define LZO_SIZEOF___INT64 8 1163#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) 1164# define LZO_SIZEOF_LONG_LONG 8 1165#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) 1166# define LZO_SIZEOF_LONG_LONG 8 1167#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2) 1168#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) 1169# define LZO_SIZEOF_LONG_LONG 8 1170#endif 1171#endif 1172#endif 1173#if defined(__cplusplus) && (LZO_CC_GNUC) 1174# if (LZO_CC_GNUC < 0x020800ul) 1175# undef LZO_SIZEOF_LONG_LONG 1176# endif 1177#endif 1178#if (LZO_CFG_NO_LONG_LONG) || defined(__NO_LONG_LONG) 1179# undef LZO_SIZEOF_LONG_LONG 1180#endif 1181#if !defined(LZO_SIZEOF_VOID_P) 1182#if (LZO_ARCH_I086) 1183# define __LZO_WORDSIZE 2 1184# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) 1185# define LZO_SIZEOF_VOID_P 2 1186# elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) 1187# define LZO_SIZEOF_VOID_P 4 1188# else 1189# error "LZO_MM" 1190# endif 1191#elif (LZO_ARCH_AVR || LZO_ARCH_Z80) 1192# define __LZO_WORDSIZE 1 1193# define LZO_SIZEOF_VOID_P 2 1194#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430) 1195# define LZO_SIZEOF_VOID_P 2 1196#elif (LZO_ARCH_H8300) 1197# if defined(__NORMAL_MODE__) 1198# define __LZO_WORDSIZE 4 1199# define LZO_SIZEOF_VOID_P 2 1200# elif defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) 1201# define __LZO_WORDSIZE 4 1202# define LZO_SIZEOF_VOID_P 4 1203# else 1204# define __LZO_WORDSIZE 2 1205# define LZO_SIZEOF_VOID_P 2 1206# endif 1207# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4) 1208# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT 1209# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT 1210# endif 1211#elif (LZO_ARCH_M16C) 1212# define __LZO_WORDSIZE 2 1213# if defined(__m32c_cpu__) || defined(__m32cm_cpu__) 1214# define LZO_SIZEOF_VOID_P 4 1215# else 1216# define LZO_SIZEOF_VOID_P 2 1217# endif 1218#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) 1219# define __LZO_WORDSIZE 8 1220# define LZO_SIZEOF_VOID_P 4 1221#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64) 1222# define __LZO_WORDSIZE 8 1223# define LZO_SIZEOF_VOID_P 8 1224#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) 1225# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG 1226# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 1227# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 1228#elif (LZO_OS_OS400 || defined(__OS400__)) 1229# define __LZO_WORDSIZE LZO_SIZEOF_LONG 1230# define LZO_SIZEOF_VOID_P 16 1231# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 1232# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 1233#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) 1234# define LZO_SIZEOF_VOID_P 8 1235# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG 1236# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG 1237#elif (LZO_ARCH_SPU) 1238# if 0 1239# define __LZO_WORDSIZE 16 1240# endif 1241# define LZO_SIZEOF_VOID_P 4 1242#else 1243# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG 1244#endif 1245#endif 1246#if !defined(LZO_WORDSIZE) 1247# if defined(__LZO_WORDSIZE) 1248# define LZO_WORDSIZE __LZO_WORDSIZE 1249# else 1250# define LZO_WORDSIZE LZO_SIZEOF_VOID_P 1251# endif 1252#endif 1253#if !defined(LZO_SIZEOF_SIZE_T) 1254#if (LZO_ARCH_I086 || LZO_ARCH_M16C) 1255# define LZO_SIZEOF_SIZE_T 2 1256#else 1257# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P 1258#endif 1259#endif 1260#if !defined(LZO_SIZEOF_PTRDIFF_T) 1261#if (LZO_ARCH_I086) 1262# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE) 1263# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P 1264# elif (LZO_MM_COMPACT || LZO_MM_LARGE) 1265# if (LZO_CC_BORLANDC || LZO_CC_TURBOC) 1266# define LZO_SIZEOF_PTRDIFF_T 4 1267# else 1268# define LZO_SIZEOF_PTRDIFF_T 2 1269# endif 1270# else 1271# error "LZO_MM" 1272# endif 1273#else 1274# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T 1275#endif 1276#endif 1277#if (LZO_ABI_NEUTRAL_ENDIAN) 1278# undef LZO_ABI_BIG_ENDIAN 1279# undef LZO_ABI_LITTLE_ENDIAN 1280#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN) 1281#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP) 1282# define LZO_ABI_BIG_ENDIAN 1 1283#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64) 1284# define LZO_ABI_LITTLE_ENDIAN 1 1285#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430) 1286# define LZO_ABI_LITTLE_ENDIAN 1 1287#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390) 1288# define LZO_ABI_BIG_ENDIAN 1 1289#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__) 1290# if (__LITTLE_ENDIAN__ == 1) 1291# define LZO_ABI_LITTLE_ENDIAN 1 1292# else 1293# define LZO_ABI_BIG_ENDIAN 1 1294# endif 1295#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) 1296# define LZO_ABI_BIG_ENDIAN 1 1297#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) 1298# define LZO_ABI_LITTLE_ENDIAN 1 1299#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__) 1300# define LZO_ABI_BIG_ENDIAN 1 1301#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__) 1302# define LZO_ABI_LITTLE_ENDIAN 1 1303#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) 1304# define LZO_ABI_BIG_ENDIAN 1 1305#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) 1306# define LZO_ABI_LITTLE_ENDIAN 1 1307#endif 1308#endif 1309#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN) 1310# error "this should not happen" 1311#endif 1312#if (LZO_ABI_BIG_ENDIAN) 1313# define LZO_INFO_ABI_ENDIAN "be" 1314#elif (LZO_ABI_LITTLE_ENDIAN) 1315# define LZO_INFO_ABI_ENDIAN "le" 1316#elif (LZO_ABI_NEUTRAL_ENDIAN) 1317# define LZO_INFO_ABI_ENDIAN "neutral" 1318#endif 1319#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) 1320# define LZO_ABI_I8LP16 1 1321# define LZO_INFO_ABI_PM "i8lp16" 1322#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) 1323# define LZO_ABI_ILP16 1 1324# define LZO_INFO_ABI_PM "ilp16" 1325#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) 1326# define LZO_ABI_ILP32 1 1327# define LZO_INFO_ABI_PM "ilp32" 1328#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8) 1329# define LZO_ABI_LLP64 1 1330# define LZO_INFO_ABI_PM "llp64" 1331#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) 1332# define LZO_ABI_LP64 1 1333# define LZO_INFO_ABI_PM "lp64" 1334#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) 1335# define LZO_ABI_ILP64 1 1336# define LZO_INFO_ABI_PM "ilp64" 1337#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4) 1338# define LZO_ABI_IP32L64 1 1339# define LZO_INFO_ABI_PM "ip32l64" 1340#endif 1341#if !defined(__LZO_LIBC_OVERRIDE) 1342#if (LZO_LIBC_NAKED) 1343# define LZO_INFO_LIBC "naked" 1344#elif (LZO_LIBC_FREESTANDING) 1345# define LZO_INFO_LIBC "freestanding" 1346#elif (LZO_LIBC_MOSTLY_FREESTANDING) 1347# define LZO_INFO_LIBC "mfreestanding" 1348#elif (LZO_LIBC_ISOC90) 1349# define LZO_INFO_LIBC "isoc90" 1350#elif (LZO_LIBC_ISOC99) 1351# define LZO_INFO_LIBC "isoc99" 1352#elif defined(__dietlibc__) 1353# define LZO_LIBC_DIETLIBC 1 1354# define LZO_INFO_LIBC "dietlibc" 1355#elif defined(_NEWLIB_VERSION) 1356# define LZO_LIBC_NEWLIB 1 1357# define LZO_INFO_LIBC "newlib" 1358#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__) 1359# if defined(__UCLIBC_SUBLEVEL__) 1360# define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + __UCLIBC_MINOR__ * 0x100 + __UCLIBC_SUBLEVEL__) 1361# else 1362# define LZO_LIBC_UCLIBC 0x00090bL 1363# endif 1364# define LZO_INFO_LIBC "uclibc" 1365#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__) 1366# define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + __GLIBC_MINOR__ * 0x100) 1367# define LZO_INFO_LIBC "glibc" 1368#elif (LZO_CC_MWERKS) && defined(__MSL__) 1369# define LZO_LIBC_MSL __MSL__ 1370# define LZO_INFO_LIBC "msl" 1371#elif 1 && defined(__IAR_SYSTEMS_ICC__) 1372# define LZO_LIBC_ISOC90 1 1373# define LZO_INFO_LIBC "isoc90" 1374#else 1375# define LZO_LIBC_DEFAULT 1 1376# define LZO_INFO_LIBC "default" 1377#endif 1378#endif 1379#if !defined(__lzo_gnuc_extension__) 1380#if (LZO_CC_GNUC >= 0x020800ul) 1381# define __lzo_gnuc_extension__ __extension__ 1382#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1383# define __lzo_gnuc_extension__ __extension__ 1384#else 1385# define __lzo_gnuc_extension__ /*empty*/ 1386#endif 1387#endif 1388#if !defined(__lzo_ua_volatile) 1389# define __lzo_ua_volatile volatile 1390#endif 1391#if !defined(__lzo_alignof) 1392#if (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) 1393# define __lzo_alignof(e) __alignof__(e) 1394#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700)) 1395# define __lzo_alignof(e) __alignof__(e) 1396#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) 1397# define __lzo_alignof(e) __alignof(e) 1398#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) 1399# define __lzo_alignof(e) __alignof__(e) 1400#endif 1401#endif 1402#if defined(__lzo_alignof) 1403# define __lzo_HAVE_alignof 1 1404#endif 1405#if !defined(__lzo_constructor) 1406#if (LZO_CC_GNUC >= 0x030400ul) 1407# define __lzo_constructor __attribute__((__constructor__,__used__)) 1408#elif (LZO_CC_GNUC >= 0x020700ul) 1409# define __lzo_constructor __attribute__((__constructor__)) 1410#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1411# define __lzo_constructor __attribute__((__constructor__)) 1412#endif 1413#endif 1414#if defined(__lzo_constructor) 1415# define __lzo_HAVE_constructor 1 1416#endif 1417#if !defined(__lzo_destructor) 1418#if (LZO_CC_GNUC >= 0x030400ul) 1419# define __lzo_destructor __attribute__((__destructor__,__used__)) 1420#elif (LZO_CC_GNUC >= 0x020700ul) 1421# define __lzo_destructor __attribute__((__destructor__)) 1422#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1423# define __lzo_destructor __attribute__((__destructor__)) 1424#endif 1425#endif 1426#if defined(__lzo_destructor) 1427# define __lzo_HAVE_destructor 1 1428#endif 1429#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor) 1430# error "this should not happen" 1431#endif 1432#if !defined(__lzo_inline) 1433#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295)) 1434#elif defined(__cplusplus) 1435# define __lzo_inline inline 1436#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) 1437# define __lzo_inline __inline 1438#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) 1439# define __lzo_inline __inline__ 1440#elif (LZO_CC_DMC) 1441# define __lzo_inline __inline 1442#elif (LZO_CC_INTELC) 1443# define __lzo_inline __inline 1444#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405)) 1445# define __lzo_inline __inline 1446#elif (LZO_CC_MSC && (_MSC_VER >= 900)) 1447# define __lzo_inline __inline 1448#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) 1449# define __lzo_inline __inline__ 1450#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) 1451# define __lzo_inline inline 1452#endif 1453#endif 1454#if defined(__lzo_inline) 1455# define __lzo_HAVE_inline 1 1456#else 1457# define __lzo_inline /*empty*/ 1458#endif 1459#if !defined(__lzo_forceinline) 1460#if (LZO_CC_GNUC >= 0x030200ul) 1461# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1462#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) 1463# define __lzo_forceinline __forceinline 1464#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) 1465# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1466#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1467# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1468#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) 1469# define __lzo_forceinline __forceinline 1470#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) 1471# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) 1472#endif 1473#endif 1474#if defined(__lzo_forceinline) 1475# define __lzo_HAVE_forceinline 1 1476#else 1477# define __lzo_forceinline /*empty*/ 1478#endif 1479#if !defined(__lzo_noinline) 1480#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul) 1481# define __lzo_noinline __attribute__((__noinline__,__used__)) 1482#elif (LZO_CC_GNUC >= 0x030200ul) 1483# define __lzo_noinline __attribute__((__noinline__)) 1484#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_MSC) 1485# define __lzo_noinline __declspec(noinline) 1486#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800) && LZO_CC_SYNTAX_GNUC) 1487# define __lzo_noinline __attribute__((__noinline__)) 1488#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1489# define __lzo_noinline __attribute__((__noinline__)) 1490#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) 1491# define __lzo_noinline __declspec(noinline) 1492#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64)) 1493# if defined(__cplusplus) 1494# else 1495# define __lzo_noinline __declspec(noinline) 1496# endif 1497#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC >= 0x5100)) 1498# define __lzo_noinline __attribute__((__noinline__)) 1499#endif 1500#endif 1501#if defined(__lzo_noinline) 1502# define __lzo_HAVE_noinline 1 1503#else 1504# define __lzo_noinline /*empty*/ 1505#endif 1506#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline) 1507# error "this should not happen" 1508#endif 1509#if !defined(__lzo_noreturn) 1510#if (LZO_CC_GNUC >= 0x020700ul) 1511# define __lzo_noreturn __attribute__((__noreturn__)) 1512#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) 1513# define __lzo_noreturn __declspec(noreturn) 1514#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) 1515# define __lzo_noreturn __attribute__((__noreturn__)) 1516#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1517# define __lzo_noreturn __attribute__((__noreturn__)) 1518#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) 1519# define __lzo_noreturn __declspec(noreturn) 1520#endif 1521#endif 1522#if defined(__lzo_noreturn) 1523# define __lzo_HAVE_noreturn 1 1524#else 1525# define __lzo_noreturn /*empty*/ 1526#endif 1527#if !defined(__lzo_nothrow) 1528#if (LZO_CC_GNUC >= 0x030300ul) 1529# define __lzo_nothrow __attribute__((__nothrow__)) 1530#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 450) && LZO_CC_SYNTAX_MSC) && defined(__cplusplus) 1531# define __lzo_nothrow __declspec(nothrow) 1532#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 900) && LZO_CC_SYNTAX_GNUC) 1533# define __lzo_nothrow __attribute__((__nothrow__)) 1534#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1535# define __lzo_nothrow __attribute__((__nothrow__)) 1536#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus) 1537# define __lzo_nothrow __declspec(nothrow) 1538#endif 1539#endif 1540#if defined(__lzo_nothrow) 1541# define __lzo_HAVE_nothrow 1 1542#else 1543# define __lzo_nothrow /*empty*/ 1544#endif 1545#if !defined(__lzo_restrict) 1546#if (LZO_CC_GNUC >= 0x030400ul) 1547# define __lzo_restrict __restrict__ 1548#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 600) && LZO_CC_SYNTAX_GNUC) 1549# define __lzo_restrict __restrict__ 1550#elif (LZO_CC_CLANG || LZO_CC_LLVM) 1551# define __lzo_restrict __restrict__ 1552#elif (LZO_CC_MSC && (_MSC_VER >= 1400)) 1553# define __lzo_restrict __restrict 1554#endif 1555#endif 1556#if defined(__lzo_restrict) 1557# define __lzo_HAVE_restrict 1 1558#else 1559# define __lzo_restrict /*empty*/ 1560#endif 1561#if !defined(__lzo_likely) && !defined(__lzo_unlikely) 1562#if (LZO_CC_GNUC >= 0x030200ul) 1563# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1564# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1565#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800)) 1566# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1567# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1568#elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1569# define __lzo_likely(e) (__builtin_expect(!!(e),1)) 1570# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) 1571#endif 1572#endif 1573#if defined(__lzo_likely) 1574# define __lzo_HAVE_likely 1 1575#else 1576# define __lzo_likely(e) (e) 1577#endif 1578#if defined(__lzo_unlikely) 1579# define __lzo_HAVE_unlikely 1 1580#else 1581# define __lzo_unlikely(e) (e) 1582#endif 1583#if !defined(LZO_UNUSED) 1584# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) 1585# define LZO_UNUSED(var) ((void) &var) 1586# elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC) 1587# define LZO_UNUSED(var) if (&var) ; else 1588# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1589# define LZO_UNUSED(var) ((void) var) 1590# elif (LZO_CC_MSC && (_MSC_VER < 900)) 1591# define LZO_UNUSED(var) if (&var) ; else 1592# elif (LZO_CC_KEILC) 1593# define LZO_UNUSED(var) {extern int __lzo_unused[1-2*!(sizeof(var)>0)];} 1594# elif (LZO_CC_PACIFICC) 1595# define LZO_UNUSED(var) ((void) sizeof(var)) 1596# elif (LZO_CC_WATCOMC) && defined(__cplusplus) 1597# define LZO_UNUSED(var) ((void) var) 1598# else 1599# define LZO_UNUSED(var) ((void) &var) 1600# endif 1601#endif 1602#if !defined(LZO_UNUSED_FUNC) 1603# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) 1604# define LZO_UNUSED_FUNC(func) ((void) func) 1605# elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC) 1606# define LZO_UNUSED_FUNC(func) if (func) ; else 1607# elif (LZO_CC_CLANG || LZO_CC_LLVM) 1608# define LZO_UNUSED_FUNC(func) ((void) &func) 1609# elif (LZO_CC_MSC && (_MSC_VER < 900)) 1610# define LZO_UNUSED_FUNC(func) if (func) ; else 1611# elif (LZO_CC_MSC) 1612# define LZO_UNUSED_FUNC(func) ((void) &func) 1613# elif (LZO_CC_KEILC || LZO_CC_PELLESC) 1614# define LZO_UNUSED_FUNC(func) {extern int __lzo_unused[1-2*!(sizeof((int)func)>0)];} 1615# else 1616# define LZO_UNUSED_FUNC(func) ((void) func) 1617# endif 1618#endif 1619#if !defined(LZO_UNUSED_LABEL) 1620# if (LZO_CC_WATCOMC) && defined(__cplusplus) 1621# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l 1622# elif (LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC) 1623# define LZO_UNUSED_LABEL(l) if (0) goto l 1624# else 1625# define LZO_UNUSED_LABEL(l) switch(0) case 1:goto l 1626# endif 1627#endif 1628#if !defined(LZO_DEFINE_UNINITIALIZED_VAR) 1629# if 0 1630# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var 1631# elif 0 && (LZO_CC_GNUC) 1632# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var 1633# else 1634# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init 1635# endif 1636#endif 1637#if !defined(LZO_UNCONST_CAST) 1638# if 0 && defined(__cplusplus) 1639# define LZO_UNCONST_CAST(t,e) (const_cast<t> (e)) 1640# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) 1641# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((lzo_uintptr_t) ((const void *) (e)))))) 1642# else 1643# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((char *) ((const void *) (e))))) 1644# endif 1645#endif 1646#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER) 1647# if (LZO_CC_AZTECC || LZO_CC_ZORTECHC) 1648# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; 1649# elif (LZO_CC_DMC || LZO_CC_SYMANTECC) 1650# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1u-2*!(e)]; 1651# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) 1652# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-!(e)]; 1653# else 1654# define LZO_COMPILE_TIME_ASSERT_HEADER(e) extern int __lzo_cta[1-2*!(e)]; 1655# endif 1656#endif 1657#if !defined(LZO_COMPILE_TIME_ASSERT) 1658# if (LZO_CC_AZTECC) 1659# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-!(e)];} 1660# elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 1661# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 1662# elif (LZO_CC_MSC && (_MSC_VER < 900)) 1663# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 1664# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) 1665# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; 1666# else 1667# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __lzo_cta_t[1-2*!(e)];} 1668# endif 1669#endif 1670#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) 1671# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC) 1672# elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) 1673# define __lzo_cdecl __cdecl 1674# define __lzo_cdecl_atexit /*empty*/ 1675# define __lzo_cdecl_main __cdecl 1676# if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) 1677# define __lzo_cdecl_qsort __pascal 1678# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) 1679# define __lzo_cdecl_qsort _stdcall 1680# else 1681# define __lzo_cdecl_qsort __cdecl 1682# endif 1683# elif (LZO_CC_WATCOMC) 1684# define __lzo_cdecl __cdecl 1685# else 1686# define __lzo_cdecl __cdecl 1687# define __lzo_cdecl_atexit __cdecl 1688# define __lzo_cdecl_main __cdecl 1689# define __lzo_cdecl_qsort __cdecl 1690# endif 1691# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC) 1692# elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) 1693# define __lzo_cdecl_sighandler __pascal 1694# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) 1695# define __lzo_cdecl_sighandler _stdcall 1696# elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE) 1697# define __lzo_cdecl_sighandler __clrcall 1698# elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700)) 1699# if defined(_DLL) 1700# define __lzo_cdecl_sighandler _far _cdecl _loadds 1701# elif defined(_MT) 1702# define __lzo_cdecl_sighandler _far _cdecl 1703# else 1704# define __lzo_cdecl_sighandler _cdecl 1705# endif 1706# else 1707# define __lzo_cdecl_sighandler __cdecl 1708# endif 1709#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC) 1710# define __lzo_cdecl __cdecl 1711#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) 1712# define __lzo_cdecl cdecl 1713#endif 1714#if !defined(__lzo_cdecl) 1715# define __lzo_cdecl /*empty*/ 1716#endif 1717#if !defined(__lzo_cdecl_atexit) 1718# define __lzo_cdecl_atexit /*empty*/ 1719#endif 1720#if !defined(__lzo_cdecl_main) 1721# define __lzo_cdecl_main /*empty*/ 1722#endif 1723#if !defined(__lzo_cdecl_qsort) 1724# define __lzo_cdecl_qsort /*empty*/ 1725#endif 1726#if !defined(__lzo_cdecl_sighandler) 1727# define __lzo_cdecl_sighandler /*empty*/ 1728#endif 1729#if !defined(__lzo_cdecl_va) 1730# define __lzo_cdecl_va __lzo_cdecl 1731#endif 1732#if !(LZO_CFG_NO_WINDOWS_H) 1733#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64) 1734# if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) 1735# elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) 1736# elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul))) 1737# else 1738# define LZO_HAVE_WINDOWS_H 1 1739# endif 1740#endif 1741#endif 1742#if (LZO_ARCH_ALPHA) 1743# define LZO_OPT_AVOID_UINT_INDEX 1 1744# define LZO_OPT_AVOID_SHORT 1 1745# define LZO_OPT_AVOID_USHORT 1 1746#elif (LZO_ARCH_AMD64) 1747# define LZO_OPT_AVOID_INT_INDEX 1 1748# define LZO_OPT_AVOID_UINT_INDEX 1 1749# define LZO_OPT_UNALIGNED16 1 1750# define LZO_OPT_UNALIGNED32 1 1751# define LZO_OPT_UNALIGNED64 1 1752#elif (LZO_ARCH_ARM && LZO_ARCH_ARM_THUMB) 1753#elif (LZO_ARCH_ARM) 1754# define LZO_OPT_AVOID_SHORT 1 1755# define LZO_OPT_AVOID_USHORT 1 1756#elif (LZO_ARCH_CRIS) 1757# define LZO_OPT_UNALIGNED16 1 1758# define LZO_OPT_UNALIGNED32 1 1759#elif (LZO_ARCH_I386) 1760# define LZO_OPT_UNALIGNED16 1 1761# define LZO_OPT_UNALIGNED32 1 1762#elif (LZO_ARCH_IA64) 1763# define LZO_OPT_AVOID_INT_INDEX 1 1764# define LZO_OPT_AVOID_UINT_INDEX 1 1765# define LZO_OPT_PREFER_POSTINC 1 1766#elif (LZO_ARCH_M68K) 1767# define LZO_OPT_PREFER_POSTINC 1 1768# define LZO_OPT_PREFER_PREDEC 1 1769# if defined(__mc68020__) && !defined(__mcoldfire__) 1770# define LZO_OPT_UNALIGNED16 1 1771# define LZO_OPT_UNALIGNED32 1 1772# endif 1773#elif (LZO_ARCH_MIPS) 1774# define LZO_OPT_AVOID_UINT_INDEX 1 1775#elif (LZO_ARCH_POWERPC) 1776# define LZO_OPT_PREFER_PREINC 1 1777# define LZO_OPT_PREFER_PREDEC 1 1778# if (LZO_ABI_BIG_ENDIAN) 1779# define LZO_OPT_UNALIGNED16 1 1780# define LZO_OPT_UNALIGNED32 1 1781# endif 1782#elif (LZO_ARCH_S390) 1783# define LZO_OPT_UNALIGNED16 1 1784# define LZO_OPT_UNALIGNED32 1 1785# if (LZO_SIZEOF_SIZE_T == 8) 1786# define LZO_OPT_UNALIGNED64 1 1787# endif 1788#elif (LZO_ARCH_SH) 1789# define LZO_OPT_PREFER_POSTINC 1 1790# define LZO_OPT_PREFER_PREDEC 1 1791#endif 1792#ifndef LZO_CFG_NO_INLINE_ASM 1793#if (LZO_CC_LLVM) 1794# define LZO_CFG_NO_INLINE_ASM 1 1795#endif 1796#endif 1797#ifndef LZO_CFG_NO_UNALIGNED 1798#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) 1799# define LZO_CFG_NO_UNALIGNED 1 1800#endif 1801#endif 1802#if (LZO_CFG_NO_UNALIGNED) 1803# undef LZO_OPT_UNALIGNED16 1804# undef LZO_OPT_UNALIGNED32 1805# undef LZO_OPT_UNALIGNED64 1806#endif 1807#if (LZO_CFG_NO_INLINE_ASM) 1808#elif (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) 1809# define LZO_ASM_SYNTAX_MSC 1 1810#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) 1811#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul)) 1812#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) 1813# define LZO_ASM_SYNTAX_GNUC 1 1814#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) 1815# define LZO_ASM_SYNTAX_GNUC 1 1816#endif 1817#if (LZO_ASM_SYNTAX_GNUC) 1818#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) 1819# define __LZO_ASM_CLOBBER "ax" 1820#elif (LZO_CC_INTELC) 1821# define __LZO_ASM_CLOBBER "memory" 1822#else 1823# define __LZO_ASM_CLOBBER "cc", "memory" 1824#endif 1825#endif 1826#if defined(__LZO_INFOSTR_MM) 1827#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM)) 1828# define __LZO_INFOSTR_MM "" 1829#elif defined(LZO_INFO_MM) 1830# define __LZO_INFOSTR_MM "." LZO_INFO_MM 1831#else 1832# define __LZO_INFOSTR_MM "" 1833#endif 1834#if defined(__LZO_INFOSTR_PM) 1835#elif defined(LZO_INFO_ABI_PM) 1836# define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM 1837#else 1838# define __LZO_INFOSTR_PM "" 1839#endif 1840#if defined(__LZO_INFOSTR_ENDIAN) 1841#elif defined(LZO_INFO_ABI_ENDIAN) 1842# define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN 1843#else 1844# define __LZO_INFOSTR_ENDIAN "" 1845#endif 1846#if defined(__LZO_INFOSTR_OSNAME) 1847#elif defined(LZO_INFO_OS_CONSOLE) 1848# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE 1849#elif defined(LZO_INFO_OS_POSIX) 1850# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX 1851#else 1852# define __LZO_INFOSTR_OSNAME LZO_INFO_OS 1853#endif 1854#if defined(__LZO_INFOSTR_LIBC) 1855#elif defined(LZO_INFO_LIBC) 1856# define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC 1857#else 1858# define __LZO_INFOSTR_LIBC "" 1859#endif 1860#if defined(__LZO_INFOSTR_CCVER) 1861#elif defined(LZO_INFO_CCVER) 1862# define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER 1863#else 1864# define __LZO_INFOSTR_CCVER "" 1865#endif 1866#define LZO_INFO_STRING \ 1867 LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \ 1868 " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER 1869 1870#endif 1871 1872#endif 1873 1874#undef LZO_HAVE_CONFIG_H 1875#include "minilzo.h" 1876 1877#if !defined(MINILZO_VERSION) || (MINILZO_VERSION != 0x2060) 1878# error "version mismatch in miniLZO source files" 1879#endif 1880 1881#ifdef MINILZO_HAVE_CONFIG_H 1882# define LZO_HAVE_CONFIG_H 1 1883#endif 1884 1885#ifndef __LZO_CONF_H 1886#define __LZO_CONF_H 1 1887 1888#if !defined(__LZO_IN_MINILZO) 1889#if (LZO_CFG_FREESTANDING) 1890# define LZO_LIBC_FREESTANDING 1 1891# define LZO_OS_FREESTANDING 1 1892# define ACC_LIBC_FREESTANDING 1 1893# define ACC_OS_FREESTANDING 1 1894#endif 1895#if (LZO_CFG_NO_UNALIGNED) 1896# define ACC_CFG_NO_UNALIGNED 1 1897#endif 1898#if (LZO_ARCH_GENERIC) 1899# define ACC_ARCH_GENERIC 1 1900#endif 1901#if (LZO_ABI_NEUTRAL_ENDIAN) 1902# define ACC_ABI_NEUTRAL_ENDIAN 1 1903#endif 1904#if (LZO_HAVE_CONFIG_H) 1905# define ACC_CONFIG_NO_HEADER 1 1906#endif 1907#if defined(LZO_CFG_EXTRA_CONFIG_HEADER) 1908# include LZO_CFG_EXTRA_CONFIG_HEADER 1909#endif 1910#if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED) 1911# error "include this file first" 1912#endif 1913#include "lzo/lzoconf.h" 1914#endif 1915 1916#if (LZO_VERSION < 0x02000) || !defined(__LZOCONF_H_INCLUDED) 1917# error "version mismatch" 1918#endif 1919 1920#if (LZO_CC_BORLANDC && LZO_ARCH_I086) 1921# pragma option -h 1922#endif 1923 1924#if (LZO_CC_MSC && (_MSC_VER >= 1000)) 1925# pragma warning(disable: 4127 4701) 1926#endif 1927#if (LZO_CC_MSC && (_MSC_VER >= 1300)) 1928# pragma warning(disable: 4820) 1929# pragma warning(disable: 4514 4710 4711) 1930#endif 1931 1932#if (LZO_CC_SUNPROC) 1933#if !defined(__cplusplus) 1934# pragma error_messages(off,E_END_OF_LOOP_CODE_NOT_REACHED) 1935# pragma error_messages(off,E_LOOP_NOT_ENTERED_AT_TOP) 1936# pragma error_messages(off,E_STATEMENT_NOT_REACHED) 1937#endif 1938#endif 1939 1940#if (__LZO_MMODEL_HUGE) && !(LZO_HAVE_MM_HUGE_PTR) 1941# error "this should not happen - check defines for __huge" 1942#endif 1943 1944#if defined(__LZO_IN_MINILZO) || defined(LZO_CFG_FREESTANDING) 1945#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) 1946# define ACC_WANT_ACC_INCD_H 1 1947# define ACC_WANT_ACC_INCE_H 1 1948# define ACC_WANT_ACC_INCI_H 1 1949#elif 1 1950# include <string.h> 1951#else 1952# define ACC_WANT_ACC_INCD_H 1 1953#endif 1954 1955#if (LZO_ARCH_I086) 1956# define ACC_MM_AHSHIFT LZO_MM_AHSHIFT 1957# define ACC_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0]) 1958# define ACC_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1]) 1959# define ACC_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o))) 1960#endif 1961 1962#if !defined(lzo_uintptr_t) 1963# if defined(__LZO_MMODEL_HUGE) 1964# define lzo_uintptr_t unsigned long 1965# elif 1 && defined(LZO_OS_OS400) && (LZO_SIZEOF_VOID_P == 16) 1966# define __LZO_UINTPTR_T_IS_POINTER 1 1967 typedef char* lzo_uintptr_t; 1968# define lzo_uintptr_t lzo_uintptr_t 1969# elif (LZO_SIZEOF_SIZE_T == LZO_SIZEOF_VOID_P) 1970# define lzo_uintptr_t size_t 1971# elif (LZO_SIZEOF_LONG == LZO_SIZEOF_VOID_P) 1972# define lzo_uintptr_t unsigned long 1973# elif (LZO_SIZEOF_INT == LZO_SIZEOF_VOID_P) 1974# define lzo_uintptr_t unsigned int 1975# elif (LZO_SIZEOF_LONG_LONG == LZO_SIZEOF_VOID_P) 1976# define lzo_uintptr_t unsigned long long 1977# else 1978# define lzo_uintptr_t size_t 1979# endif 1980#endif 1981LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) 1982 1983#if 1 && !defined(LZO_CFG_FREESTANDING) 1984#if 1 && !defined(HAVE_STRING_H) 1985#define HAVE_STRING_H 1 1986#endif 1987#if 1 && !defined(HAVE_MEMCMP) 1988#define HAVE_MEMCMP 1 1989#endif 1990#if 1 && !defined(HAVE_MEMCPY) 1991#define HAVE_MEMCPY 1 1992#endif 1993#if 1 && !defined(HAVE_MEMMOVE) 1994#define HAVE_MEMMOVE 1 1995#endif 1996#if 1 && !defined(HAVE_MEMSET) 1997#define HAVE_MEMSET 1 1998#endif 1999#endif 2000 2001#if 1 && defined(HAVE_STRING_H) 2002#include <string.h> 2003#endif 2004 2005#if (LZO_CFG_FREESTANDING) 2006# undef HAVE_MEMCMP 2007# undef HAVE_MEMCPY 2008# undef HAVE_MEMMOVE 2009# undef HAVE_MEMSET 2010#endif 2011 2012#if !(HAVE_MEMCMP) 2013# undef memcmp 2014# define memcmp(a,b,c) lzo_memcmp(a,b,c) 2015#elif !(__LZO_MMODEL_HUGE) 2016# undef lzo_memcmp 2017# define lzo_memcmp(a,b,c) memcmp(a,b,c) 2018#endif 2019#if !(HAVE_MEMCPY) 2020# undef memcpy 2021# define memcpy(a,b,c) lzo_memcpy(a,b,c) 2022#elif !(__LZO_MMODEL_HUGE) 2023# undef lzo_memcpy 2024# define lzo_memcpy(a,b,c) memcpy(a,b,c) 2025#endif 2026#if !(HAVE_MEMMOVE) 2027# undef memmove 2028# define memmove(a,b,c) lzo_memmove(a,b,c) 2029#elif !(__LZO_MMODEL_HUGE) 2030# undef lzo_memmove 2031# define lzo_memmove(a,b,c) memmove(a,b,c) 2032#endif 2033#if !(HAVE_MEMSET) 2034# undef memset 2035# define memset(a,b,c) lzo_memset(a,b,c) 2036#elif !(__LZO_MMODEL_HUGE) 2037# undef lzo_memset 2038# define lzo_memset(a,b,c) memset(a,b,c) 2039#endif 2040 2041#undef NDEBUG 2042#if (LZO_CFG_FREESTANDING) 2043# undef LZO_DEBUG 2044# define NDEBUG 1 2045# undef assert 2046# define assert(e) ((void)0) 2047#else 2048# if !defined(LZO_DEBUG) 2049# define NDEBUG 1 2050# endif 2051# include <assert.h> 2052#endif 2053 2054#if 0 && defined(__BOUNDS_CHECKING_ON) 2055# include <unchecked.h> 2056#else 2057# define BOUNDS_CHECKING_OFF_DURING(stmt) stmt 2058# define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr) 2059#endif 2060 2061#if !defined(__lzo_inline) 2062# define __lzo_inline /*empty*/ 2063#endif 2064#if !defined(__lzo_forceinline) 2065# define __lzo_forceinline /*empty*/ 2066#endif 2067#if !defined(__lzo_noinline) 2068# define __lzo_noinline /*empty*/ 2069#endif 2070 2071#if (LZO_CFG_PGO) 2072# undef __acc_likely 2073# undef __acc_unlikely 2074# undef __lzo_likely 2075# undef __lzo_unlikely 2076# define __acc_likely(e) (e) 2077# define __acc_unlikely(e) (e) 2078# define __lzo_likely(e) (e) 2079# define __lzo_unlikely(e) (e) 2080#endif 2081 2082#if 1 2083# define LZO_BYTE(x) ((unsigned char) (x)) 2084#else 2085# define LZO_BYTE(x) ((unsigned char) ((x) & 0xff)) 2086#endif 2087 2088#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) 2089#define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b)) 2090#define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c)) 2091#define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c)) 2092 2093#define lzo_sizeof(type) ((lzo_uint) (sizeof(type))) 2094 2095#define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array)))) 2096 2097#define LZO_SIZE(bits) (1u << (bits)) 2098#define LZO_MASK(bits) (LZO_SIZE(bits) - 1) 2099 2100#define LZO_LSIZE(bits) (1ul << (bits)) 2101#define LZO_LMASK(bits) (LZO_LSIZE(bits) - 1) 2102 2103#define LZO_USIZE(bits) ((lzo_uint) 1 << (bits)) 2104#define LZO_UMASK(bits) (LZO_USIZE(bits) - 1) 2105 2106#if !defined(DMUL) 2107#if 0 2108 2109# define DMUL(a,b) ((lzo_xint) ((lzo_uint32)(a) * (lzo_uint32)(b))) 2110#else 2111# define DMUL(a,b) ((lzo_xint) ((a) * (b))) 2112#endif 2113#endif 2114 2115#if 1 && (LZO_ARCH_AMD64 || LZO_ARCH_I386 || LZO_ARCH_POWERPC) 2116# if (LZO_SIZEOF_SHORT == 2) 2117# define LZO_UNALIGNED_OK_2 1 2118# endif 2119# if (LZO_SIZEOF_INT == 4) 2120# define LZO_UNALIGNED_OK_4 1 2121# endif 2122#endif 2123#if 1 && (LZO_ARCH_AMD64) 2124# if defined(LZO_UINT64_MAX) 2125# define LZO_UNALIGNED_OK_8 1 2126# endif 2127#endif 2128#if (LZO_CFG_NO_UNALIGNED) 2129# undef LZO_UNALIGNED_OK_2 2130# undef LZO_UNALIGNED_OK_4 2131# undef LZO_UNALIGNED_OK_8 2132#endif 2133 2134#undef UA_GET16 2135#undef UA_SET16 2136#undef UA_COPY16 2137#undef UA_GET32 2138#undef UA_SET32 2139#undef UA_COPY32 2140#undef UA_GET64 2141#undef UA_SET64 2142#undef UA_COPY64 2143#if defined(LZO_UNALIGNED_OK_2) 2144 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(unsigned short) == 2) 2145# if 1 && defined(ACC_UA_COPY16) 2146# define UA_GET16 ACC_UA_GET16 2147# define UA_SET16 ACC_UA_SET16 2148# define UA_COPY16 ACC_UA_COPY16 2149# else 2150# define UA_GET16(p) (* (__lzo_ua_volatile const lzo_ushortp) (__lzo_ua_volatile const lzo_voidp) (p)) 2151# define UA_SET16(p,v) ((* (__lzo_ua_volatile lzo_ushortp) (__lzo_ua_volatile lzo_voidp) (p)) = (unsigned short) (v)) 2152# define UA_COPY16(d,s) UA_SET16(d, UA_GET16(s)) 2153# endif 2154#endif 2155#if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 2156 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32) == 4) 2157# if 1 && defined(ACC_UA_COPY32) 2158# define UA_GET32 ACC_UA_GET32 2159# define UA_SET32 ACC_UA_SET32 2160# define UA_COPY32 ACC_UA_COPY32 2161# else 2162# define UA_GET32(p) (* (__lzo_ua_volatile const lzo_uint32p) (__lzo_ua_volatile const lzo_voidp) (p)) 2163# define UA_SET32(p,v) ((* (__lzo_ua_volatile lzo_uint32p) (__lzo_ua_volatile lzo_voidp) (p)) = (lzo_uint32) (v)) 2164# define UA_COPY32(d,s) UA_SET32(d, UA_GET32(s)) 2165# endif 2166#endif 2167#if defined(LZO_UNALIGNED_OK_8) 2168 LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint64) == 8) 2169# if 1 && defined(ACC_UA_COPY64) 2170# define UA_GET64 ACC_UA_GET64 2171# define UA_SET64 ACC_UA_SET64 2172# define UA_COPY64 ACC_UA_COPY64 2173# else 2174# define UA_GET64(p) (* (__lzo_ua_volatile const lzo_uint64p) (__lzo_ua_volatile const lzo_voidp) (p)) 2175# define UA_SET64(p,v) ((* (__lzo_ua_volatile lzo_uint64p) (__lzo_ua_volatile lzo_voidp) (p)) = (lzo_uint64) (v)) 2176# define UA_COPY64(d,s) UA_SET64(d, UA_GET64(s)) 2177# endif 2178#endif 2179 2180#define MEMCPY8_DS(dest,src,len) \ 2181 lzo_memcpy(dest,src,len); dest += len; src += len 2182 2183#define BZERO8_PTR(s,l,n) \ 2184 lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n)) 2185 2186#define MEMCPY_DS(dest,src,len) \ 2187 do *dest++ = *src++; while (--len > 0) 2188 2189LZO_EXTERN(const lzo_bytep) lzo_copyright(void); 2190 2191#ifndef __LZO_PTR_H 2192#define __LZO_PTR_H 1 2193 2194#ifdef __cplusplus 2195extern "C" { 2196#endif 2197 2198#if !defined(lzo_uintptr_t) 2199# if (__LZO_MMODEL_HUGE) 2200# define lzo_uintptr_t unsigned long 2201# else 2202# define lzo_uintptr_t acc_uintptr_t 2203# ifdef __ACC_INTPTR_T_IS_POINTER 2204# define __LZO_UINTPTR_T_IS_POINTER 1 2205# endif 2206# endif 2207#endif 2208 2209#if (LZO_ARCH_I086) 2210#define PTR(a) ((lzo_bytep) (a)) 2211#define PTR_ALIGNED_4(a) ((ACC_PTR_FP_OFF(a) & 3) == 0) 2212#define PTR_ALIGNED2_4(a,b) (((ACC_PTR_FP_OFF(a) | ACC_PTR_FP_OFF(b)) & 3) == 0) 2213#elif (LZO_MM_PVP) 2214#define PTR(a) ((lzo_bytep) (a)) 2215#define PTR_ALIGNED_8(a) ((((lzo_uintptr_t)(a)) >> 61) == 0) 2216#define PTR_ALIGNED2_8(a,b) ((((lzo_uintptr_t)(a)|(lzo_uintptr_t)(b)) >> 61) == 0) 2217#else 2218#define PTR(a) ((lzo_uintptr_t) (a)) 2219#define PTR_LINEAR(a) PTR(a) 2220#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0) 2221#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0) 2222#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0) 2223#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0) 2224#endif 2225 2226#define PTR_LT(a,b) (PTR(a) < PTR(b)) 2227#define PTR_GE(a,b) (PTR(a) >= PTR(b)) 2228#define PTR_DIFF(a,b) (PTR(a) - PTR(b)) 2229#define pd(a,b) ((lzo_uint) ((a)-(b))) 2230 2231LZO_EXTERN(lzo_uintptr_t) 2232__lzo_ptr_linear(const lzo_voidp ptr); 2233 2234typedef union 2235{ 2236 char a_char; 2237 unsigned char a_uchar; 2238 short a_short; 2239 unsigned short a_ushort; 2240 int a_int; 2241 unsigned int a_uint; 2242 long a_long; 2243 unsigned long a_ulong; 2244 lzo_int a_lzo_int; 2245 lzo_uint a_lzo_uint; 2246 lzo_int32 a_lzo_int32; 2247 lzo_uint32 a_lzo_uint32; 2248#if defined(LZO_UINT64_MAX) 2249 lzo_int64 a_lzo_int64; 2250 lzo_uint64 a_lzo_uint64; 2251#endif 2252 ptrdiff_t a_ptrdiff_t; 2253 lzo_uintptr_t a_lzo_uintptr_t; 2254 lzo_voidp a_lzo_voidp; 2255 void * a_void_p; 2256 lzo_bytep a_lzo_bytep; 2257 lzo_bytepp a_lzo_bytepp; 2258 lzo_uintp a_lzo_uintp; 2259 lzo_uint * a_lzo_uint_p; 2260 lzo_uint32p a_lzo_uint32p; 2261 lzo_uint32 * a_lzo_uint32_p; 2262 unsigned char * a_uchar_p; 2263 char * a_char_p; 2264} 2265lzo_full_align_t; 2266 2267#ifdef __cplusplus 2268} 2269#endif 2270 2271#endif 2272 2273#ifndef LZO_DETERMINISTIC 2274#define LZO_DETERMINISTIC 1 2275#endif 2276 2277#ifndef LZO_DICT_USE_PTR 2278#define LZO_DICT_USE_PTR 1 2279#if 0 && (LZO_ARCH_I086) 2280# undef LZO_DICT_USE_PTR 2281# define LZO_DICT_USE_PTR 0 2282#endif 2283#endif 2284 2285#if (LZO_DICT_USE_PTR) 2286# define lzo_dict_t const lzo_bytep 2287# define lzo_dict_p lzo_dict_t __LZO_MMODEL * 2288#else 2289# define lzo_dict_t lzo_uint 2290# define lzo_dict_p lzo_dict_t __LZO_MMODEL * 2291#endif 2292 2293#endif 2294 2295#if !defined(MINILZO_CFG_SKIP_LZO_PTR) 2296 2297LZO_PUBLIC(lzo_uintptr_t) 2298__lzo_ptr_linear(const lzo_voidp ptr) 2299{ 2300 lzo_uintptr_t p; 2301 2302#if (LZO_ARCH_I086) 2303 p = (((lzo_uintptr_t)(ACC_PTR_FP_SEG(ptr))) << (16 - ACC_MM_AHSHIFT)) + (ACC_PTR_FP_OFF(ptr)); 2304#elif (LZO_MM_PVP) 2305 p = (lzo_uintptr_t) (ptr); 2306 p = (p << 3) | (p >> 61); 2307#else 2308 p = (lzo_uintptr_t) PTR_LINEAR(ptr); 2309#endif 2310 2311 return p; 2312} 2313 2314LZO_PUBLIC(unsigned) 2315__lzo_align_gap(const lzo_voidp ptr, lzo_uint size) 2316{ 2317#if defined(__LZO_UINTPTR_T_IS_POINTER) 2318 size_t n = (size_t) ptr; 2319 n = (((n + size - 1) / size) * size) - n; 2320#else 2321 lzo_uintptr_t p, n; 2322 p = __lzo_ptr_linear(ptr); 2323 n = (((p + size - 1) / size) * size) - p; 2324#endif 2325 2326 assert(size > 0); 2327 assert((long)n >= 0); 2328 assert(n <= size); 2329 return (unsigned)n; 2330} 2331 2332#endif 2333#if !defined(MINILZO_CFG_SKIP_LZO_UTIL) 2334 2335/* If you use the LZO library in a product, I would appreciate that you 2336 * keep this copyright string in the executable of your product. 2337 */ 2338 2339static const char __lzo_copyright[] = 2340#if !defined(__LZO_IN_MINLZO) 2341 LZO_VERSION_STRING; 2342#else 2343 "\r\n\n" 2344 "LZO data compression library.\n" 2345 "$Copyright: LZO Copyright (C) 1996-2011 Markus Franz Xaver Johannes Oberhumer\n" 2346 "<markus@oberhumer.com>\n" 2347 "http://www.oberhumer.com $\n\n" 2348 "$Id: LZO version: v" LZO_VERSION_STRING ", " LZO_VERSION_DATE " $\n" 2349 "$Info: " LZO_INFO_STRING " $\n"; 2350#endif 2351 2352LZO_PUBLIC(const lzo_bytep) 2353lzo_copyright(void) 2354{ 2355#if (LZO_OS_DOS16 && LZO_CC_TURBOC) 2356 return (lzo_voidp) __lzo_copyright; 2357#else 2358 return (const lzo_bytep) __lzo_copyright; 2359#endif 2360} 2361 2362LZO_PUBLIC(unsigned) 2363lzo_version(void) 2364{ 2365 return LZO_VERSION; 2366} 2367 2368LZO_PUBLIC(const char *) 2369lzo_version_string(void) 2370{ 2371 return LZO_VERSION_STRING; 2372} 2373 2374LZO_PUBLIC(const char *) 2375lzo_version_date(void) 2376{ 2377 return LZO_VERSION_DATE; 2378} 2379 2380LZO_PUBLIC(const lzo_charp) 2381_lzo_version_string(void) 2382{ 2383 return LZO_VERSION_STRING; 2384} 2385 2386LZO_PUBLIC(const lzo_charp) 2387_lzo_version_date(void) 2388{ 2389 return LZO_VERSION_DATE; 2390} 2391 2392#define LZO_BASE 65521u 2393#define LZO_NMAX 5552 2394 2395#define LZO_DO1(buf,i) s1 += buf[i]; s2 += s1 2396#define LZO_DO2(buf,i) LZO_DO1(buf,i); LZO_DO1(buf,i+1); 2397#define LZO_DO4(buf,i) LZO_DO2(buf,i); LZO_DO2(buf,i+2); 2398#define LZO_DO8(buf,i) LZO_DO4(buf,i); LZO_DO4(buf,i+4); 2399#define LZO_DO16(buf,i) LZO_DO8(buf,i); LZO_DO8(buf,i+8); 2400 2401LZO_PUBLIC(lzo_uint32) 2402lzo_adler32(lzo_uint32 adler, const lzo_bytep buf, lzo_uint len) 2403{ 2404 lzo_uint32 s1 = adler & 0xffff; 2405 lzo_uint32 s2 = (adler >> 16) & 0xffff; 2406 unsigned k; 2407 2408 if (buf == NULL) 2409 return 1; 2410 2411 while (len > 0) 2412 { 2413 k = len < LZO_NMAX ? (unsigned) len : LZO_NMAX; 2414 len -= k; 2415 if (k >= 16) do 2416 { 2417 LZO_DO16(buf,0); 2418 buf += 16; 2419 k -= 16; 2420 } while (k >= 16); 2421 if (k != 0) do 2422 { 2423 s1 += *buf++; 2424 s2 += s1; 2425 } while (--k > 0); 2426 s1 %= LZO_BASE; 2427 s2 %= LZO_BASE; 2428 } 2429 return (s2 << 16) | s1; 2430} 2431 2432#undef LZO_DO1 2433#undef LZO_DO2 2434#undef LZO_DO4 2435#undef LZO_DO8 2436#undef LZO_DO16 2437 2438#endif 2439#if !defined(MINILZO_CFG_SKIP_LZO_STRING) 2440#undef lzo_memcmp 2441#undef lzo_memcpy 2442#undef lzo_memmove 2443#undef lzo_memset 2444#if !defined(__LZO_MMODEL_HUGE) 2445# undef LZO_HAVE_MM_HUGE_PTR 2446#endif 2447#define lzo_hsize_t lzo_uint 2448#define lzo_hvoid_p lzo_voidp 2449#define lzo_hbyte_p lzo_bytep 2450#define LZOLIB_PUBLIC(r,f) LZO_PUBLIC(r) f 2451#define lzo_hmemcmp lzo_memcmp 2452#define lzo_hmemcpy lzo_memcpy 2453#define lzo_hmemmove lzo_memmove 2454#define lzo_hmemset lzo_memset 2455#define __LZOLIB_HMEMCPY_CH_INCLUDED 1 2456#if !defined(LZOLIB_PUBLIC) 2457# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) 2458#endif 2459LZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len) 2460{ 2461#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCMP) 2462 const lzo_hbyte_p p1 = (const lzo_hbyte_p) s1; 2463 const lzo_hbyte_p p2 = (const lzo_hbyte_p) s2; 2464 if __lzo_likely(len > 0) do 2465 { 2466 int d = *p1 - *p2; 2467 if (d != 0) 2468 return d; 2469 p1++; p2++; 2470 } while __lzo_likely(--len > 0); 2471 return 0; 2472#else 2473 return memcmp(s1, s2, len); 2474#endif 2475} 2476LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) 2477{ 2478#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCPY) 2479 lzo_hbyte_p p1 = (lzo_hbyte_p) dest; 2480 const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; 2481 if (!(len > 0) || p1 == p2) 2482 return dest; 2483 do 2484 *p1++ = *p2++; 2485 while __lzo_likely(--len > 0); 2486 return dest; 2487#else 2488 return memcpy(dest, src, len); 2489#endif 2490} 2491LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) 2492{ 2493#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMMOVE) 2494 lzo_hbyte_p p1 = (lzo_hbyte_p) dest; 2495 const lzo_hbyte_p p2 = (const lzo_hbyte_p) src; 2496 if (!(len > 0) || p1 == p2) 2497 return dest; 2498 if (p1 < p2) 2499 { 2500 do 2501 *p1++ = *p2++; 2502 while __lzo_likely(--len > 0); 2503 } 2504 else 2505 { 2506 p1 += len; 2507 p2 += len; 2508 do 2509 *--p1 = *--p2; 2510 while __lzo_likely(--len > 0); 2511 } 2512 return dest; 2513#else 2514 return memmove(dest, src, len); 2515#endif 2516} 2517LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int c, lzo_hsize_t len) 2518{ 2519#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMSET) 2520 lzo_hbyte_p p = (lzo_hbyte_p) s; 2521 if __lzo_likely(len > 0) do 2522 *p++ = (unsigned char) c; 2523 while __lzo_likely(--len > 0); 2524 return s; 2525#else 2526 return memset(s, c, len); 2527#endif 2528} 2529#undef LZOLIB_PUBLIC 2530#endif 2531#if !defined(MINILZO_CFG_SKIP_LZO_INIT) 2532 2533#if !defined(__LZO_IN_MINILZO) 2534 2535#define ACC_WANT_ACC_CHK_CH 1 2536#undef ACCCHK_ASSERT 2537 2538 ACCCHK_ASSERT_IS_SIGNED_T(lzo_int) 2539 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint) 2540 2541 ACCCHK_ASSERT_IS_SIGNED_T(lzo_int32) 2542 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32) 2543 ACCCHK_ASSERT((LZO_UINT32_C(1) << (int)(8*sizeof(LZO_UINT32_C(1))-1)) > 0) 2544 ACCCHK_ASSERT(sizeof(lzo_uint32) >= 4) 2545#if defined(LZO_UINT64_MAX) 2546 ACCCHK_ASSERT(sizeof(lzo_uint64) == 8) 2547 ACCCHK_ASSERT_IS_SIGNED_T(lzo_int64) 2548 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uint64) 2549#endif 2550 2551#if !defined(__LZO_UINTPTR_T_IS_POINTER) 2552 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t) 2553#endif 2554 ACCCHK_ASSERT(sizeof(lzo_uintptr_t) >= sizeof(lzo_voidp)) 2555 2556 ACCCHK_ASSERT_IS_UNSIGNED_T(lzo_xint) 2557 ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint32)) 2558 ACCCHK_ASSERT(sizeof(lzo_xint) >= sizeof(lzo_uint)) 2559 ACCCHK_ASSERT(sizeof(lzo_xint) == sizeof(lzo_uint32) || sizeof(lzo_xint) == sizeof(lzo_uint)) 2560 2561#endif 2562#undef ACCCHK_ASSERT 2563 2564#define WANT_lzo_bitops_clz32 1 2565#define WANT_lzo_bitops_clz64 1 2566#define WANT_lzo_bitops_ctz32 1 2567#define WANT_lzo_bitops_ctz64 1 2568 2569#if (defined(_WIN32) || defined(_WIN64)) && ((LZO_CC_INTELC && (__INTEL_COMPILER >= 1000)) || (LZO_CC_MSC && (_MSC_VER >= 1400))) 2570#include <intrin.h> 2571#if !defined(lzo_bitops_clz32) && defined(WANT_lzo_bitops_clz32) && 0 2572#pragma intrinsic(_BitScanReverse) 2573static __lzo_inline unsigned lzo_bitops_clz32(lzo_uint32 v) 2574{ 2575 unsigned long r; 2576 (void) _BitScanReverse(&r, v); 2577 return (unsigned) r; 2578} 2579#define lzo_bitops_clz32 lzo_bitops_clz32 2580#endif 2581#if !defined(lzo_bitops_clz64) && defined(WANT_lzo_bitops_clz64) && defined(LZO_UINT64_MAX) && 0 2582#pragma intrinsic(_BitScanReverse64) 2583static __lzo_inline unsigned lzo_bitops_clz64(lzo_uint64 v) 2584{ 2585 unsigned long r; 2586 (void) _BitScanReverse64(&r, v); 2587 return (unsigned) r; 2588} 2589#define lzo_bitops_clz64 lzo_bitops_clz64 2590#endif 2591#if !defined(lzo_bitops_ctz32) && defined(WANT_lzo_bitops_ctz32) 2592#pragma intrinsic(_BitScanForward) 2593static __lzo_inline unsigned lzo_bitops_ctz32(lzo_uint32 v) 2594{ 2595 unsigned long r; 2596 (void) _BitScanForward(&r, v); 2597 return (unsigned) r; 2598} 2599#define lzo_bitops_ctz32 lzo_bitops_ctz32 2600#endif 2601#if !defined(lzo_bitops_ctz64) && defined(WANT_lzo_bitops_ctz64) && defined(LZO_UINT64_MAX) 2602#pragma intrinsic(_BitScanForward64) 2603static __lzo_inline unsigned lzo_bitops_ctz64(lzo_uint64 v) 2604{ 2605 unsigned long r; 2606 (void) _BitScanForward64(&r, v); 2607 return (unsigned) r; 2608} 2609#define lzo_bitops_ctz64 lzo_bitops_ctz64 2610#endif 2611 2612#elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || (LZO_CC_INTELC && (__INTEL_COMPILER >= 1000)) || (LZO_CC_LLVM && (!defined(__llvm_tools_version__) || (__llvm_tools_version__+0 >= 0x010500ul)))) 2613#if !defined(lzo_bitops_clz32) && defined(WANT_lzo_bitops_clz32) 2614#define lzo_bitops_clz32(v) ((unsigned) __builtin_clz(v)) 2615#endif 2616#if !defined(lzo_bitops_clz64) && defined(WANT_lzo_bitops_clz64) && defined(LZO_UINT64_MAX) 2617#define lzo_bitops_clz64(v) ((unsigned) __builtin_clzll(v)) 2618#endif 2619#if !defined(lzo_bitops_ctz32) && defined(WANT_lzo_bitops_ctz32) 2620#define lzo_bitops_ctz32(v) ((unsigned) __builtin_ctz(v)) 2621#endif 2622#if !defined(lzo_bitops_ctz64) && defined(WANT_lzo_bitops_ctz64) && defined(LZO_UINT64_MAX) 2623#define lzo_bitops_ctz64(v) ((unsigned) __builtin_ctzll(v)) 2624#endif 2625#if !defined(lzo_bitops_popcount32) && defined(WANT_lzo_bitops_popcount32) 2626#define lzo_bitops_popcount32(v) ((unsigned) __builtin_popcount(v)) 2627#endif 2628#if !defined(lzo_bitops_popcount32) && defined(WANT_lzo_bitops_popcount64) && defined(LZO_UINT64_MAX) 2629#define lzo_bitops_popcount64(v) ((unsigned) __builtin_popcountll(v)) 2630#endif 2631#endif 2632 2633#if 0 2634#define u2p(ptr,off) ((lzo_voidp) (((lzo_bytep)(lzo_voidp)(ptr)) + (off))) 2635#else 2636static __lzo_noinline lzo_voidp u2p(lzo_voidp ptr, lzo_uint off) 2637{ 2638 return (lzo_voidp) ((lzo_bytep) ptr + off); 2639} 2640#endif 2641 2642LZO_PUBLIC(int) 2643_lzo_config_check(void) 2644{ 2645 lzo_bool r = 1; 2646 union { 2647 lzo_xint a[2]; unsigned char b[2*LZO_MAX(8,sizeof(lzo_xint))]; 2648#if defined(LZO_UNALIGNED_OK_8) 2649 lzo_uint64 c[2]; 2650#endif 2651 unsigned short x[2]; lzo_uint32 y[2]; lzo_uint z[2]; 2652 } u; 2653 lzo_voidp p; 2654 2655 u.a[0] = u.a[1] = 0; 2656 p = u2p(&u, 0); 2657 r &= ((* (lzo_bytep) p) == 0); 2658#if !defined(LZO_CFG_NO_CONFIG_CHECK) 2659#if defined(LZO_ABI_BIG_ENDIAN) 2660 u.a[0] = u.a[1] = 0; u.b[sizeof(lzo_uint) - 1] = 128; 2661 p = u2p(&u, 0); 2662 r &= ((* (lzo_uintp) p) == 128); 2663#endif 2664#if defined(LZO_ABI_LITTLE_ENDIAN) 2665 u.a[0] = u.a[1] = 0; u.b[0] = 128; 2666 p = u2p(&u, 0); 2667 r &= ((* (lzo_uintp) p) == 128); 2668#endif 2669#if defined(LZO_UNALIGNED_OK_2) 2670 u.a[0] = u.a[1] = 0; 2671 u.b[0] = 1; u.b[sizeof(unsigned short) + 1] = 2; 2672 p = u2p(&u, 1); 2673 r &= ((* (lzo_ushortp) p) == 0); 2674#endif 2675#if defined(LZO_UNALIGNED_OK_4) 2676 u.a[0] = u.a[1] = 0; 2677 u.b[0] = 3; u.b[sizeof(lzo_uint32) + 1] = 4; 2678 p = u2p(&u, 1); 2679 r &= ((* (lzo_uint32p) p) == 0); 2680#endif 2681#if defined(LZO_UNALIGNED_OK_8) 2682 u.c[0] = u.c[1] = 0; 2683 u.b[0] = 5; u.b[sizeof(lzo_uint64) + 1] = 6; 2684 p = u2p(&u, 1); 2685 r &= ((* (lzo_uint64p) p) == 0); 2686#endif 2687#if defined(lzo_bitops_clz32) 2688 { unsigned i; lzo_uint32 v = 1; 2689 for (i = 0; i < 32; i++, v <<= 1) 2690 r &= lzo_bitops_clz32(v) == 31 - i; 2691 } 2692#endif 2693#if defined(lzo_bitops_clz64) 2694 { unsigned i; lzo_uint64 v = 1; 2695 for (i = 0; i < 64; i++, v <<= 1) 2696 r &= lzo_bitops_clz64(v) == 63 - i; 2697 } 2698#endif 2699#if defined(lzo_bitops_ctz32) 2700 { unsigned i; lzo_uint32 v = 1; 2701 for (i = 0; i < 32; i++, v <<= 1) 2702 r &= lzo_bitops_ctz32(v) == i; 2703 } 2704#endif 2705#if defined(lzo_bitops_ctz64) 2706 { unsigned i; lzo_uint64 v = 1; 2707 for (i = 0; i < 64; i++, v <<= 1) 2708 r &= lzo_bitops_ctz64(v) == i; 2709 } 2710#endif 2711#endif 2712 2713 return r == 1 ? LZO_E_OK : LZO_E_ERROR; 2714} 2715 2716LZO_PUBLIC(int) 2717__lzo_init_v2(unsigned v, int s1, int s2, int s3, int s4, int s5, 2718 int s6, int s7, int s8, int s9) 2719{ 2720 int r; 2721 2722#if defined(__LZO_IN_MINILZO) 2723#elif (LZO_CC_MSC && ((_MSC_VER) < 700)) 2724#else 2725#define ACC_WANT_ACC_CHK_CH 1 2726#undef ACCCHK_ASSERT 2727#define ACCCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT(expr) 2728#endif 2729#undef ACCCHK_ASSERT 2730 2731 if (v == 0) 2732 return LZO_E_ERROR; 2733 2734 r = (s1 == -1 || s1 == (int) sizeof(short)) && 2735 (s2 == -1 || s2 == (int) sizeof(int)) && 2736 (s3 == -1 || s3 == (int) sizeof(long)) && 2737 (s4 == -1 || s4 == (int) sizeof(lzo_uint32)) && 2738 (s5 == -1 || s5 == (int) sizeof(lzo_uint)) && 2739 (s6 == -1 || s6 == (int) lzo_sizeof_dict_t) && 2740 (s7 == -1 || s7 == (int) sizeof(char *)) && 2741 (s8 == -1 || s8 == (int) sizeof(lzo_voidp)) && 2742 (s9 == -1 || s9 == (int) sizeof(lzo_callback_t)); 2743 if (!r) 2744 return LZO_E_ERROR; 2745 2746 r = _lzo_config_check(); 2747 if (r != LZO_E_OK) 2748 return r; 2749 2750 return r; 2751} 2752 2753#if !defined(__LZO_IN_MINILZO) 2754 2755#if (LZO_OS_WIN16 && LZO_CC_WATCOMC) && defined(__SW_BD) 2756 2757#if 0 2758BOOL FAR PASCAL LibMain ( HANDLE hInstance, WORD wDataSegment, 2759 WORD wHeapSize, LPSTR lpszCmdLine ) 2760#else 2761int __far __pascal LibMain ( int a, short b, short c, long d ) 2762#endif 2763{ 2764 LZO_UNUSED(a); LZO_UNUSED(b); LZO_UNUSED(c); LZO_UNUSED(d); 2765 return 1; 2766} 2767 2768#endif 2769 2770#endif 2771 2772#endif 2773 2774#define LZO1X 1 2775#define LZO_EOF_CODE 1 2776#define M2_MAX_OFFSET 0x0800 2777 2778#if !defined(MINILZO_CFG_SKIP_LZO1X_1_COMPRESS) 2779 2780#if 1 && defined(UA_GET32) 2781#undef LZO_DICT_USE_PTR 2782#define LZO_DICT_USE_PTR 0 2783#undef lzo_dict_t 2784#define lzo_dict_t unsigned short 2785#endif 2786 2787#define LZO_NEED_DICT_H 1 2788#ifndef D_BITS 2789#define D_BITS 14 2790#endif 2791#define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5) 2792#define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f) 2793#if 1 2794#define DINDEX(dv,p) DM(((DMUL(0x1824429d,dv)) >> (32-D_BITS))) 2795#else 2796#define DINDEX(dv,p) DM((dv) + ((dv) >> (32-D_BITS))) 2797#endif 2798 2799#ifndef __LZO_CONFIG1X_H 2800#define __LZO_CONFIG1X_H 1 2801 2802#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z) 2803# define LZO1X 1 2804#endif 2805 2806#if !defined(__LZO_IN_MINILZO) 2807#include "lzo/lzo1x.h" 2808#endif 2809 2810#ifndef LZO_EOF_CODE 2811#define LZO_EOF_CODE 1 2812#endif 2813#undef LZO_DETERMINISTIC 2814 2815#define M1_MAX_OFFSET 0x0400 2816#ifndef M2_MAX_OFFSET 2817#define M2_MAX_OFFSET 0x0800 2818#endif 2819#define M3_MAX_OFFSET 0x4000 2820#define M4_MAX_OFFSET 0xbfff 2821 2822#define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET) 2823 2824#define M1_MIN_LEN 2 2825#define M1_MAX_LEN 2 2826#define M2_MIN_LEN 3 2827#ifndef M2_MAX_LEN 2828#define M2_MAX_LEN 8 2829#endif 2830#define M3_MIN_LEN 3 2831#define M3_MAX_LEN 33 2832#define M4_MIN_LEN 3 2833#define M4_MAX_LEN 9 2834 2835#define M1_MARKER 0 2836#define M2_MARKER 64 2837#define M3_MARKER 32 2838#define M4_MARKER 16 2839 2840#ifndef MIN_LOOKAHEAD 2841#define MIN_LOOKAHEAD (M2_MAX_LEN + 1) 2842#endif 2843 2844#if defined(LZO_NEED_DICT_H) 2845 2846#ifndef LZO_HASH 2847#define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B 2848#endif 2849#define DL_MIN_LEN M2_MIN_LEN 2850 2851#ifndef __LZO_DICT_H 2852#define __LZO_DICT_H 1 2853 2854#ifdef __cplusplus 2855extern "C" { 2856#endif 2857 2858#if !defined(D_BITS) && defined(DBITS) 2859# define D_BITS DBITS 2860#endif 2861#if !defined(D_BITS) 2862# error "D_BITS is not defined" 2863#endif 2864#if (D_BITS < 16) 2865# define D_SIZE LZO_SIZE(D_BITS) 2866# define D_MASK LZO_MASK(D_BITS) 2867#else 2868# define D_SIZE LZO_USIZE(D_BITS) 2869# define D_MASK LZO_UMASK(D_BITS) 2870#endif 2871#define D_HIGH ((D_MASK >> 1) + 1) 2872 2873#if !defined(DD_BITS) 2874# define DD_BITS 0 2875#endif 2876#define DD_SIZE LZO_SIZE(DD_BITS) 2877#define DD_MASK LZO_MASK(DD_BITS) 2878 2879#if !defined(DL_BITS) 2880# define DL_BITS (D_BITS - DD_BITS) 2881#endif 2882#if (DL_BITS < 16) 2883# define DL_SIZE LZO_SIZE(DL_BITS) 2884# define DL_MASK LZO_MASK(DL_BITS) 2885#else 2886# define DL_SIZE LZO_USIZE(DL_BITS) 2887# define DL_MASK LZO_UMASK(DL_BITS) 2888#endif 2889 2890#if (D_BITS != DL_BITS + DD_BITS) 2891# error "D_BITS does not match" 2892#endif 2893#if (D_BITS < 6 || D_BITS > 18) 2894# error "invalid D_BITS" 2895#endif 2896#if (DL_BITS < 6 || DL_BITS > 20) 2897# error "invalid DL_BITS" 2898#endif 2899#if (DD_BITS < 0 || DD_BITS > 6) 2900# error "invalid DD_BITS" 2901#endif 2902 2903#if !defined(DL_MIN_LEN) 2904# define DL_MIN_LEN 3 2905#endif 2906#if !defined(DL_SHIFT) 2907# define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN) 2908#endif 2909 2910#define LZO_HASH_GZIP 1 2911#define LZO_HASH_GZIP_INCREMENTAL 2 2912#define LZO_HASH_LZO_INCREMENTAL_A 3 2913#define LZO_HASH_LZO_INCREMENTAL_B 4 2914 2915#if !defined(LZO_HASH) 2916# error "choose a hashing strategy" 2917#endif 2918 2919#undef DM 2920#undef DX 2921 2922#if (DL_MIN_LEN == 3) 2923# define _DV2_A(p,shift1,shift2) \ 2924 (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2]) 2925# define _DV2_B(p,shift1,shift2) \ 2926 (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0]) 2927# define _DV3_B(p,shift1,shift2,shift3) \ 2928 ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0]) 2929#elif (DL_MIN_LEN == 2) 2930# define _DV2_A(p,shift1,shift2) \ 2931 (( (lzo_xint)(p[0]) << shift1) ^ p[1]) 2932# define _DV2_B(p,shift1,shift2) \ 2933 (( (lzo_xint)(p[1]) << shift1) ^ p[2]) 2934#else 2935# error "invalid DL_MIN_LEN" 2936#endif 2937#define _DV_A(p,shift) _DV2_A(p,shift,shift) 2938#define _DV_B(p,shift) _DV2_B(p,shift,shift) 2939#define DA2(p,s1,s2) \ 2940 (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0]) 2941#define DS2(p,s1,s2) \ 2942 (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0]) 2943#define DX2(p,s1,s2) \ 2944 (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0]) 2945#define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0]) 2946#define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0]) 2947#define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0]) 2948#define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s))) 2949#define DM(v) DMS(v,0) 2950 2951#if (LZO_HASH == LZO_HASH_GZIP) 2952# define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT)) 2953 2954#elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL) 2955# define __LZO_HASH_INCREMENTAL 1 2956# define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT) 2957# define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2]) 2958# define _DINDEX(dv,p) (dv) 2959# define DVAL_LOOKAHEAD DL_MIN_LEN 2960 2961#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A) 2962# define __LZO_HASH_INCREMENTAL 1 2963# define DVAL_FIRST(dv,p) dv = _DV_A((p),5) 2964# define DVAL_NEXT(dv,p) \ 2965 dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2]) 2966# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) 2967# define DVAL_LOOKAHEAD DL_MIN_LEN 2968 2969#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B) 2970# define __LZO_HASH_INCREMENTAL 1 2971# define DVAL_FIRST(dv,p) dv = _DV_B((p),5) 2972# define DVAL_NEXT(dv,p) \ 2973 dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5))) 2974# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) 2975# define DVAL_LOOKAHEAD DL_MIN_LEN 2976 2977#else 2978# error "choose a hashing strategy" 2979#endif 2980 2981#ifndef DINDEX 2982#define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS) 2983#endif 2984#if !defined(DINDEX1) && defined(D_INDEX1) 2985#define DINDEX1 D_INDEX1 2986#endif 2987#if !defined(DINDEX2) && defined(D_INDEX2) 2988#define DINDEX2 D_INDEX2 2989#endif 2990 2991#if !defined(__LZO_HASH_INCREMENTAL) 2992# define DVAL_FIRST(dv,p) ((void) 0) 2993# define DVAL_NEXT(dv,p) ((void) 0) 2994# define DVAL_LOOKAHEAD 0 2995#endif 2996 2997#if !defined(DVAL_ASSERT) 2998#if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG) 2999#if (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_LLVM) 3000static void __attribute__((__unused__)) 3001#else 3002static void 3003#endif 3004DVAL_ASSERT(lzo_xint dv, const lzo_bytep p) 3005{ 3006 lzo_xint df; 3007 DVAL_FIRST(df,(p)); 3008 assert(DINDEX(dv,p) == DINDEX(df,p)); 3009} 3010#else 3011# define DVAL_ASSERT(dv,p) ((void) 0) 3012#endif 3013#endif 3014 3015#if (LZO_DICT_USE_PTR) 3016# define DENTRY(p,in) (p) 3017# define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex] 3018#else 3019# define DENTRY(p,in) ((lzo_dict_t) pd(p, in)) 3020# define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex] 3021#endif 3022 3023#if (DD_BITS == 0) 3024 3025# define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in) 3026# define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in) 3027# define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in) 3028 3029#else 3030 3031# define UPDATE_D(dict,drun,dv,p,in) \ 3032 dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK 3033# define UPDATE_I(dict,drun,index,p,in) \ 3034 dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK 3035# define UPDATE_P(ptr,drun,p,in) \ 3036 (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK 3037 3038#endif 3039 3040#if (LZO_DICT_USE_PTR) 3041 3042#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ 3043 (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset) 3044 3045#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ 3046 (BOUNDS_CHECKING_OFF_IN_EXPR(( \ 3047 m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \ 3048 PTR_LT(m_pos,in) || \ 3049 (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) == 0 || \ 3050 m_off > max_offset ))) 3051 3052#else 3053 3054#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ 3055 (m_off == 0 || \ 3056 ((m_off = pd(ip, in) - m_off) > max_offset) || \ 3057 (m_pos = (ip) - (m_off), 0) ) 3058 3059#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ 3060 (pd(ip, in) <= m_off || \ 3061 ((m_off = pd(ip, in) - m_off) > max_offset) || \ 3062 (m_pos = (ip) - (m_off), 0) ) 3063 3064#endif 3065 3066#if (LZO_DETERMINISTIC) 3067# define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET 3068#else 3069# define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET 3070#endif 3071 3072#ifdef __cplusplus 3073} 3074#endif 3075 3076#endif 3077 3078#endif 3079 3080#endif 3081 3082#define LZO_DETERMINISTIC !(LZO_DICT_USE_PTR) 3083 3084#ifndef DO_COMPRESS 3085#define DO_COMPRESS lzo1x_1_compress 3086#endif 3087 3088#if 1 && defined(DO_COMPRESS) && !defined(do_compress) 3089# define do_compress LZO_CPP_ECONCAT2(DO_COMPRESS,_core) 3090#endif 3091 3092#if defined(UA_GET64) && (LZO_ABI_BIG_ENDIAN) 3093# define WANT_lzo_bitops_clz64 1 3094#elif defined(UA_GET64) && (LZO_ABI_LITTLE_ENDIAN) 3095# define WANT_lzo_bitops_ctz64 1 3096#elif defined(UA_GET32) && (LZO_ABI_BIG_ENDIAN) 3097# define WANT_lzo_bitops_clz32 1 3098#elif defined(UA_GET32) && (LZO_ABI_LITTLE_ENDIAN) 3099# define WANT_lzo_bitops_ctz32 1 3100#endif 3101 3102#if (defined(_WIN32) || defined(_WIN64)) && ((LZO_CC_INTELC && (__INTEL_COMPILER >= 1000)) || (LZO_CC_MSC && (_MSC_VER >= 1400))) 3103#include <intrin.h> 3104#if !defined(lzo_bitops_clz32) && defined(WANT_lzo_bitops_clz32) && 0 3105#pragma intrinsic(_BitScanReverse) 3106static __lzo_inline unsigned lzo_bitops_clz32(lzo_uint32 v) 3107{ 3108 unsigned long r; 3109 (void) _BitScanReverse(&r, v); 3110 return (unsigned) r; 3111} 3112#define lzo_bitops_clz32 lzo_bitops_clz32 3113#endif 3114#if !defined(lzo_bitops_clz64) && defined(WANT_lzo_bitops_clz64) && defined(LZO_UINT64_MAX) && 0 3115#pragma intrinsic(_BitScanReverse64) 3116static __lzo_inline unsigned lzo_bitops_clz64(lzo_uint64 v) 3117{ 3118 unsigned long r; 3119 (void) _BitScanReverse64(&r, v); 3120 return (unsigned) r; 3121} 3122#define lzo_bitops_clz64 lzo_bitops_clz64 3123#endif 3124#if !defined(lzo_bitops_ctz32) && defined(WANT_lzo_bitops_ctz32) 3125#pragma intrinsic(_BitScanForward) 3126static __lzo_inline unsigned lzo_bitops_ctz32(lzo_uint32 v) 3127{ 3128 unsigned long r; 3129 (void) _BitScanForward(&r, v); 3130 return (unsigned) r; 3131} 3132#define lzo_bitops_ctz32 lzo_bitops_ctz32 3133#endif 3134#if !defined(lzo_bitops_ctz64) && defined(WANT_lzo_bitops_ctz64) && defined(LZO_UINT64_MAX) 3135#pragma intrinsic(_BitScanForward64) 3136static __lzo_inline unsigned lzo_bitops_ctz64(lzo_uint64 v) 3137{ 3138 unsigned long r; 3139 (void) _BitScanForward64(&r, v); 3140 return (unsigned) r; 3141} 3142#define lzo_bitops_ctz64 lzo_bitops_ctz64 3143#endif 3144 3145#elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || (LZO_CC_INTELC && (__INTEL_COMPILER >= 1000)) || (LZO_CC_LLVM && (!defined(__llvm_tools_version__) || (__llvm_tools_version__+0 >= 0x010500ul)))) 3146#if !defined(lzo_bitops_clz32) && defined(WANT_lzo_bitops_clz32) 3147#define lzo_bitops_clz32(v) ((unsigned) __builtin_clz(v)) 3148#endif 3149#if !defined(lzo_bitops_clz64) && defined(WANT_lzo_bitops_clz64) && defined(LZO_UINT64_MAX) 3150#define lzo_bitops_clz64(v) ((unsigned) __builtin_clzll(v)) 3151#endif 3152#if !defined(lzo_bitops_ctz32) && defined(WANT_lzo_bitops_ctz32) 3153#define lzo_bitops_ctz32(v) ((unsigned) __builtin_ctz(v)) 3154#endif 3155#if !defined(lzo_bitops_ctz64) && defined(WANT_lzo_bitops_ctz64) && defined(LZO_UINT64_MAX) 3156#define lzo_bitops_ctz64(v) ((unsigned) __builtin_ctzll(v)) 3157#endif 3158#if !defined(lzo_bitops_popcount32) && defined(WANT_lzo_bitops_popcount32) 3159#define lzo_bitops_popcount32(v) ((unsigned) __builtin_popcount(v)) 3160#endif 3161#if !defined(lzo_bitops_popcount32) && defined(WANT_lzo_bitops_popcount64) && defined(LZO_UINT64_MAX) 3162#define lzo_bitops_popcount64(v) ((unsigned) __builtin_popcountll(v)) 3163#endif 3164#endif 3165 3166static __lzo_noinline lzo_uint 3167do_compress ( const lzo_bytep in , lzo_uint in_len, 3168 lzo_bytep out, lzo_uintp out_len, 3169 lzo_uint ti, lzo_voidp wrkmem) 3170{ 3171 register const lzo_bytep ip; 3172 lzo_bytep op; 3173 const lzo_bytep const in_end = in + in_len; 3174 const lzo_bytep const ip_end = in + in_len - 20; 3175 const lzo_bytep ii; 3176 lzo_dict_p const dict = (lzo_dict_p) wrkmem; 3177 3178 op = out; 3179 ip = in; 3180 ii = ip; 3181 3182 ip += ti < 4 ? 4 - ti : 0; 3183 for (;;) 3184 { 3185 const lzo_bytep m_pos; 3186#if !(LZO_DETERMINISTIC) 3187 LZO_DEFINE_UNINITIALIZED_VAR(lzo_uint, m_off, 0); 3188 lzo_uint m_len; 3189 lzo_uint dindex; 3190next: 3191 if __lzo_unlikely(ip >= ip_end) 3192 break; 3193 DINDEX1(dindex,ip); 3194 GINDEX(m_pos,m_off,dict,dindex,in); 3195 if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) 3196 goto literal; 3197#if 1 3198 if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) 3199 goto try_match; 3200 DINDEX2(dindex,ip); 3201#endif 3202 GINDEX(m_pos,m_off,dict,dindex,in); 3203 if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) 3204 goto literal; 3205 if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) 3206 goto try_match; 3207 goto literal; 3208 3209try_match: 3210#if defined(UA_GET32) 3211 if (UA_GET32(m_pos) != UA_GET32(ip)) 3212#else 3213 if (m_pos[0] != ip[0] || m_pos[1] != ip[1] || m_pos[2] != ip[2] || m_pos[3] != ip[3]) 3214#endif 3215 { 3216literal: 3217 UPDATE_I(dict,0,dindex,ip,in); 3218 ip += 1 + ((ip - ii) >> 5); 3219 continue; 3220 } 3221 UPDATE_I(dict,0,dindex,ip,in); 3222#else 3223 lzo_uint m_off; 3224 lzo_uint m_len; 3225 { 3226 lzo_uint32 dv; 3227 lzo_uint dindex; 3228literal: 3229 ip += 1 + ((ip - ii) >> 5); 3230next: 3231 if __lzo_unlikely(ip >= ip_end) 3232 break; 3233 dv = UA_GET32(ip); 3234 dindex = DINDEX(dv,ip); 3235 GINDEX(m_off,m_pos,in+dict,dindex,in); 3236 UPDATE_I(dict,0,dindex,ip,in); 3237 if __lzo_unlikely(dv != UA_GET32(m_pos)) 3238 goto literal; 3239 } 3240#endif 3241 3242 ii -= ti; ti = 0; 3243 { 3244 register lzo_uint t = pd(ip,ii); 3245 if (t != 0) 3246 { 3247 if (t <= 3) 3248 { 3249 op[-2] |= LZO_BYTE(t); 3250#if defined(UA_COPY32) 3251 UA_COPY32(op, ii); 3252 op += t; 3253#else 3254 { do *op++ = *ii++; while (--t > 0); } 3255#endif 3256 } 3257#if defined(UA_COPY32) || defined(UA_COPY64) 3258 else if (t <= 16) 3259 { 3260 *op++ = LZO_BYTE(t - 3); 3261#if defined(UA_COPY64) 3262 UA_COPY64(op, ii); 3263 UA_COPY64(op+8, ii+8); 3264#else 3265 UA_COPY32(op, ii); 3266 UA_COPY32(op+4, ii+4); 3267 UA_COPY32(op+8, ii+8); 3268 UA_COPY32(op+12, ii+12); 3269#endif 3270 op += t; 3271 } 3272#endif 3273 else 3274 { 3275 if (t <= 18) 3276 *op++ = LZO_BYTE(t - 3); 3277 else 3278 { 3279 register lzo_uint tt = t - 18; 3280 *op++ = 0; 3281 while __lzo_unlikely(tt > 255) 3282 { 3283 tt -= 255; 3284#if 1 && (LZO_CC_MSC && (_MSC_VER >= 1400)) 3285 * (volatile unsigned char *) op++ = 0; 3286#else 3287 *op++ = 0; 3288#endif 3289 } 3290 assert(tt > 0); 3291 *op++ = LZO_BYTE(tt); 3292 } 3293#if defined(UA_COPY32) || defined(UA_COPY64) 3294 do { 3295#if defined(UA_COPY64) 3296 UA_COPY64(op, ii); 3297 UA_COPY64(op+8, ii+8); 3298#else 3299 UA_COPY32(op, ii); 3300 UA_COPY32(op+4, ii+4); 3301 UA_COPY32(op+8, ii+8); 3302 UA_COPY32(op+12, ii+12); 3303#endif 3304 op += 16; ii += 16; t -= 16; 3305 } while (t >= 16); if (t > 0) 3306#endif 3307 { do *op++ = *ii++; while (--t > 0); } 3308 } 3309 } 3310 } 3311 m_len = 4; 3312 { 3313#if defined(UA_GET64) 3314 lzo_uint64 v; 3315 v = UA_GET64(ip + m_len) ^ UA_GET64(m_pos + m_len); 3316 if __lzo_unlikely(v == 0) { 3317 do { 3318 m_len += 8; 3319 v = UA_GET64(ip + m_len) ^ UA_GET64(m_pos + m_len); 3320 if __lzo_unlikely(ip + m_len >= ip_end) 3321 goto m_len_done; 3322 } while (v == 0); 3323 } 3324#if (LZO_ABI_BIG_ENDIAN) && defined(lzo_bitops_clz64) 3325 m_len += lzo_bitops_clz64(v) / CHAR_BIT; 3326#elif (LZO_ABI_BIG_ENDIAN) 3327 if ((v >> (64 - CHAR_BIT)) == 0) do { 3328 v <<= CHAR_BIT; 3329 m_len += 1; 3330 } while ((v >> (64 - CHAR_BIT)) == 0); 3331#elif (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_ctz64) 3332 m_len += lzo_bitops_ctz64(v) / CHAR_BIT; 3333#elif (LZO_ABI_LITTLE_ENDIAN) 3334 if ((v & UCHAR_MAX) == 0) do { 3335 v >>= CHAR_BIT; 3336 m_len += 1; 3337 } while ((v & UCHAR_MAX) == 0); 3338#else 3339 if (ip[m_len] == m_pos[m_len]) do { 3340 m_len += 1; 3341 } while (ip[m_len] == m_pos[m_len]); 3342#endif 3343#elif defined(UA_GET32) 3344 lzo_uint32 v; 3345 v = UA_GET32(ip + m_len) ^ UA_GET32(m_pos + m_len); 3346 if __lzo_unlikely(v == 0) { 3347 do { 3348 m_len += 4; 3349 v = UA_GET32(ip + m_len) ^ UA_GET32(m_pos + m_len); 3350 if __lzo_unlikely(ip + m_len >= ip_end) 3351 goto m_len_done; 3352 } while (v == 0); 3353 } 3354#if (LZO_ABI_BIG_ENDIAN) && defined(lzo_bitops_clz32) 3355 m_len += lzo_bitops_clz32(v) / CHAR_BIT; 3356#elif (LZO_ABI_BIG_ENDIAN) 3357 if ((v >> (32 - CHAR_BIT)) == 0) do { 3358 v <<= CHAR_BIT; 3359 m_len += 1; 3360 } while ((v >> (32 - CHAR_BIT)) == 0); 3361#elif (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_ctz32) 3362 m_len += lzo_bitops_ctz32(v) / CHAR_BIT; 3363#elif (LZO_ABI_LITTLE_ENDIAN) 3364 if ((v & UCHAR_MAX) == 0) do { 3365 v >>= CHAR_BIT; 3366 m_len += 1; 3367 } while ((v & UCHAR_MAX) == 0); 3368#else 3369 if (ip[m_len] == m_pos[m_len]) do { 3370 m_len += 1; 3371 } while (ip[m_len] == m_pos[m_len]); 3372#endif 3373#else 3374 if __lzo_unlikely(ip[m_len] == m_pos[m_len]) { 3375 do { 3376 m_len += 1; 3377 if __lzo_unlikely(ip + m_len >= ip_end) 3378 goto m_len_done; 3379 } while (ip[m_len] == m_pos[m_len]); 3380 } 3381#endif 3382 } 3383m_len_done: 3384 m_off = pd(ip,m_pos); 3385 ip += m_len; 3386 ii = ip; 3387 if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET) 3388 { 3389 m_off -= 1; 3390#if defined(LZO1X) 3391 *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2)); 3392 *op++ = LZO_BYTE(m_off >> 3); 3393#elif defined(LZO1Y) 3394 *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2)); 3395 *op++ = LZO_BYTE(m_off >> 2); 3396#endif 3397 } 3398 else if (m_off <= M3_MAX_OFFSET) 3399 { 3400 m_off -= 1; 3401 if (m_len <= M3_MAX_LEN) 3402 *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); 3403 else 3404 { 3405 m_len -= M3_MAX_LEN; 3406 *op++ = M3_MARKER | 0; 3407 while __lzo_unlikely(m_len > 255) 3408 { 3409 m_len -= 255; 3410#if 1 && (LZO_CC_MSC && (_MSC_VER >= 1400)) 3411 * (volatile unsigned char *) op++ = 0; 3412#else 3413 *op++ = 0; 3414#endif 3415 } 3416 *op++ = LZO_BYTE(m_len); 3417 } 3418 *op++ = LZO_BYTE(m_off << 2); 3419 *op++ = LZO_BYTE(m_off >> 6); 3420 } 3421 else 3422 { 3423 m_off -= 0x4000; 3424 if (m_len <= M4_MAX_LEN) 3425 *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8) | (m_len - 2)); 3426 else 3427 { 3428 m_len -= M4_MAX_LEN; 3429 *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8)); 3430 while __lzo_unlikely(m_len > 255) 3431 { 3432 m_len -= 255; 3433#if 1 && (LZO_CC_MSC && (_MSC_VER >= 1400)) 3434 * (volatile unsigned char *) op++ = 0; 3435#else 3436 *op++ = 0; 3437#endif 3438 } 3439 *op++ = LZO_BYTE(m_len); 3440 } 3441 *op++ = LZO_BYTE(m_off << 2); 3442 *op++ = LZO_BYTE(m_off >> 6); 3443 } 3444 goto next; 3445 } 3446 3447 *out_len = pd(op, out); 3448 return pd(in_end,ii-ti); 3449} 3450 3451LZO_PUBLIC(int) 3452DO_COMPRESS ( const lzo_bytep in , lzo_uint in_len, 3453 lzo_bytep out, lzo_uintp out_len, 3454 lzo_voidp wrkmem ) 3455{ 3456 const lzo_bytep ip = in; 3457 lzo_bytep op = out; 3458 lzo_uint l = in_len; 3459 lzo_uint t = 0; 3460 3461 while (l > 20) 3462 { 3463 lzo_uint ll = l; 3464 lzo_uintptr_t ll_end; 3465#if 0 || (LZO_DETERMINISTIC) 3466 ll = LZO_MIN(ll, 49152); 3467#endif 3468 ll_end = (lzo_uintptr_t)ip + ll; 3469 if ((ll_end + ((t + ll) >> 5)) <= ll_end || (const lzo_bytep)(ll_end + ((t + ll) >> 5)) <= ip + ll) 3470 break; 3471#if (LZO_DETERMINISTIC) 3472 lzo_memset(wrkmem, 0, ((lzo_uint)1 << D_BITS) * sizeof(lzo_dict_t)); 3473#endif 3474 t = do_compress(ip,ll,op,out_len,t,wrkmem); 3475 ip += ll; 3476 op += *out_len; 3477 l -= ll; 3478 } 3479 t += l; 3480 3481 if (t > 0) 3482 { 3483 const lzo_bytep ii = in + in_len - t; 3484 3485 if (op == out && t <= 238) 3486 *op++ = LZO_BYTE(17 + t); 3487 else if (t <= 3) 3488 op[-2] |= LZO_BYTE(t); 3489 else if (t <= 18) 3490 *op++ = LZO_BYTE(t - 3); 3491 else 3492 { 3493 lzo_uint tt = t - 18; 3494 3495 *op++ = 0; 3496 while (tt > 255) 3497 { 3498 tt -= 255; 3499#if 1 && (LZO_CC_MSC && (_MSC_VER >= 1400)) 3500 3501 * (volatile unsigned char *) op++ = 0; 3502#else 3503 *op++ = 0; 3504#endif 3505 } 3506 assert(tt > 0); 3507 *op++ = LZO_BYTE(tt); 3508 } 3509 do *op++ = *ii++; while (--t > 0); 3510 } 3511 3512 *op++ = M4_MARKER | 1; 3513 *op++ = 0; 3514 *op++ = 0; 3515 3516 *out_len = pd(op, out); 3517 return LZO_E_OK; 3518} 3519 3520#endif 3521 3522#undef do_compress 3523#undef DO_COMPRESS 3524#undef LZO_HASH 3525 3526#undef LZO_TEST_OVERRUN 3527#undef DO_DECOMPRESS 3528#define DO_DECOMPRESS lzo1x_decompress 3529 3530#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS) 3531 3532#if defined(LZO_TEST_OVERRUN) 3533# if !defined(LZO_TEST_OVERRUN_INPUT) 3534# define LZO_TEST_OVERRUN_INPUT 2 3535# endif 3536# if !defined(LZO_TEST_OVERRUN_OUTPUT) 3537# define LZO_TEST_OVERRUN_OUTPUT 2 3538# endif 3539# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) 3540# define LZO_TEST_OVERRUN_LOOKBEHIND 1 3541# endif 3542#endif 3543 3544#undef TEST_IP 3545#undef TEST_OP 3546#undef TEST_LB 3547#undef TEST_LBO 3548#undef NEED_IP 3549#undef NEED_OP 3550#undef HAVE_TEST_IP 3551#undef HAVE_TEST_OP 3552#undef HAVE_NEED_IP 3553#undef HAVE_NEED_OP 3554#undef HAVE_ANY_IP 3555#undef HAVE_ANY_OP 3556 3557#if defined(LZO_TEST_OVERRUN_INPUT) 3558# if (LZO_TEST_OVERRUN_INPUT >= 1) 3559# define TEST_IP (ip < ip_end) 3560# endif 3561# if (LZO_TEST_OVERRUN_INPUT >= 2) 3562# define NEED_IP(x) \ 3563 if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun 3564# endif 3565#endif 3566 3567#if defined(LZO_TEST_OVERRUN_OUTPUT) 3568# if (LZO_TEST_OVERRUN_OUTPUT >= 1) 3569# define TEST_OP (op <= op_end) 3570# endif 3571# if (LZO_TEST_OVERRUN_OUTPUT >= 2) 3572# undef TEST_OP 3573# define NEED_OP(x) \ 3574 if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun 3575# endif 3576#endif 3577 3578#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 3579# define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun 3580# define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun 3581#else 3582# define TEST_LB(m_pos) ((void) 0) 3583# define TEST_LBO(m_pos,o) ((void) 0) 3584#endif 3585 3586#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) 3587# define TEST_IP (ip < ip_end) 3588#endif 3589 3590#if defined(TEST_IP) 3591# define HAVE_TEST_IP 1 3592#else 3593# define TEST_IP 1 3594#endif 3595#if defined(TEST_OP) 3596# define HAVE_TEST_OP 1 3597#else 3598# define TEST_OP 1 3599#endif 3600 3601#if defined(NEED_IP) 3602# define HAVE_NEED_IP 1 3603#else 3604# define NEED_IP(x) ((void) 0) 3605#endif 3606#if defined(NEED_OP) 3607# define HAVE_NEED_OP 1 3608#else 3609# define NEED_OP(x) ((void) 0) 3610#endif 3611 3612#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) 3613# define HAVE_ANY_IP 1 3614#endif 3615#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) 3616# define HAVE_ANY_OP 1 3617#endif 3618 3619#if defined(DO_DECOMPRESS) 3620LZO_PUBLIC(int) 3621DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, 3622 lzo_bytep out, lzo_uintp out_len, 3623 lzo_voidp wrkmem ) 3624#endif 3625{ 3626 register lzo_bytep op; 3627 register const lzo_bytep ip; 3628 register lzo_uint t; 3629#if defined(COPY_DICT) 3630 lzo_uint m_off; 3631 const lzo_bytep dict_end; 3632#else 3633 register const lzo_bytep m_pos; 3634#endif 3635 3636 const lzo_bytep const ip_end = in + in_len; 3637#if defined(HAVE_ANY_OP) 3638 lzo_bytep const op_end = out + *out_len; 3639#endif 3640#if defined(LZO1Z) 3641 lzo_uint last_m_off = 0; 3642#endif 3643 3644 LZO_UNUSED(wrkmem); 3645 3646#if defined(COPY_DICT) 3647 if (dict) 3648 { 3649 if (dict_len > M4_MAX_OFFSET) 3650 { 3651 dict += dict_len - M4_MAX_OFFSET; 3652 dict_len = M4_MAX_OFFSET; 3653 } 3654 dict_end = dict + dict_len; 3655 } 3656 else 3657 { 3658 dict_len = 0; 3659 dict_end = NULL; 3660 } 3661#endif 3662 3663 *out_len = 0; 3664 3665 op = out; 3666 ip = in; 3667 3668 if (*ip > 17) 3669 { 3670 t = *ip++ - 17; 3671 if (t < 4) 3672 goto match_next; 3673 assert(t > 0); NEED_OP(t); NEED_IP(t+1); 3674 do *op++ = *ip++; while (--t > 0); 3675 goto first_literal_run; 3676 } 3677 3678 while (TEST_IP && TEST_OP) 3679 { 3680 t = *ip++; 3681 if (t >= 16) 3682 goto match; 3683 if (t == 0) 3684 { 3685 NEED_IP(1); 3686 while (*ip == 0) 3687 { 3688 t += 255; 3689 ip++; 3690 NEED_IP(1); 3691 } 3692 t += 15 + *ip++; 3693 } 3694 assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); 3695#if defined(LZO_UNALIGNED_OK_8) && defined(LZO_UNALIGNED_OK_4) 3696 t += 3; 3697 if (t >= 8) do 3698 { 3699 UA_COPY64(op,ip); 3700 op += 8; ip += 8; t -= 8; 3701 } while (t >= 8); 3702 if (t >= 4) 3703 { 3704 UA_COPY32(op,ip); 3705 op += 4; ip += 4; t -= 4; 3706 } 3707 if (t > 0) 3708 { 3709 *op++ = *ip++; 3710 if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 3711 } 3712#elif defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 3713#if !defined(LZO_UNALIGNED_OK_4) 3714 if (PTR_ALIGNED2_4(op,ip)) 3715 { 3716#endif 3717 UA_COPY32(op,ip); 3718 op += 4; ip += 4; 3719 if (--t > 0) 3720 { 3721 if (t >= 4) 3722 { 3723 do { 3724 UA_COPY32(op,ip); 3725 op += 4; ip += 4; t -= 4; 3726 } while (t >= 4); 3727 if (t > 0) do *op++ = *ip++; while (--t > 0); 3728 } 3729 else 3730 do *op++ = *ip++; while (--t > 0); 3731 } 3732#if !defined(LZO_UNALIGNED_OK_4) 3733 } 3734 else 3735#endif 3736#endif 3737#if !defined(LZO_UNALIGNED_OK_4) && !defined(LZO_UNALIGNED_OK_8) 3738 { 3739 *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; 3740 do *op++ = *ip++; while (--t > 0); 3741 } 3742#endif 3743 3744first_literal_run: 3745 3746 t = *ip++; 3747 if (t >= 16) 3748 goto match; 3749#if defined(COPY_DICT) 3750#if defined(LZO1Z) 3751 m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 3752 last_m_off = m_off; 3753#else 3754 m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); 3755#endif 3756 NEED_OP(3); 3757 t = 3; COPY_DICT(t,m_off) 3758#else 3759#if defined(LZO1Z) 3760 t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 3761 m_pos = op - t; 3762 last_m_off = t; 3763#else 3764 m_pos = op - (1 + M2_MAX_OFFSET); 3765 m_pos -= t >> 2; 3766 m_pos -= *ip++ << 2; 3767#endif 3768 TEST_LB(m_pos); NEED_OP(3); 3769 *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; 3770#endif 3771 goto match_done; 3772 3773 do { 3774match: 3775 if (t >= 64) 3776 { 3777#if defined(COPY_DICT) 3778#if defined(LZO1X) 3779 m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); 3780 t = (t >> 5) - 1; 3781#elif defined(LZO1Y) 3782 m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); 3783 t = (t >> 4) - 3; 3784#elif defined(LZO1Z) 3785 m_off = t & 0x1f; 3786 if (m_off >= 0x1c) 3787 m_off = last_m_off; 3788 else 3789 { 3790 m_off = 1 + (m_off << 6) + (*ip++ >> 2); 3791 last_m_off = m_off; 3792 } 3793 t = (t >> 5) - 1; 3794#endif 3795#else 3796#if defined(LZO1X) 3797 m_pos = op - 1; 3798 m_pos -= (t >> 2) & 7; 3799 m_pos -= *ip++ << 3; 3800 t = (t >> 5) - 1; 3801#elif defined(LZO1Y) 3802 m_pos = op - 1; 3803 m_pos -= (t >> 2) & 3; 3804 m_pos -= *ip++ << 2; 3805 t = (t >> 4) - 3; 3806#elif defined(LZO1Z) 3807 { 3808 lzo_uint off = t & 0x1f; 3809 m_pos = op; 3810 if (off >= 0x1c) 3811 { 3812 assert(last_m_off > 0); 3813 m_pos -= last_m_off; 3814 } 3815 else 3816 { 3817 off = 1 + (off << 6) + (*ip++ >> 2); 3818 m_pos -= off; 3819 last_m_off = off; 3820 } 3821 } 3822 t = (t >> 5) - 1; 3823#endif 3824 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 3825 goto copy_match; 3826#endif 3827 } 3828 else if (t >= 32) 3829 { 3830 t &= 31; 3831 if (t == 0) 3832 { 3833 NEED_IP(1); 3834 while (*ip == 0) 3835 { 3836 t += 255; 3837 ip++; 3838 NEED_IP(1); 3839 } 3840 t += 31 + *ip++; 3841 } 3842#if defined(COPY_DICT) 3843#if defined(LZO1Z) 3844 m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); 3845 last_m_off = m_off; 3846#else 3847 m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); 3848#endif 3849#else 3850#if defined(LZO1Z) 3851 { 3852 lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); 3853 m_pos = op - off; 3854 last_m_off = off; 3855 } 3856#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 3857 m_pos = op - 1; 3858 m_pos -= UA_GET16(ip) >> 2; 3859#else 3860 m_pos = op - 1; 3861 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 3862#endif 3863#endif 3864 ip += 2; 3865 } 3866 else if (t >= 16) 3867 { 3868#if defined(COPY_DICT) 3869 m_off = (t & 8) << 11; 3870#else 3871 m_pos = op; 3872 m_pos -= (t & 8) << 11; 3873#endif 3874 t &= 7; 3875 if (t == 0) 3876 { 3877 NEED_IP(1); 3878 while (*ip == 0) 3879 { 3880 t += 255; 3881 ip++; 3882 NEED_IP(1); 3883 } 3884 t += 7 + *ip++; 3885 } 3886#if defined(COPY_DICT) 3887#if defined(LZO1Z) 3888 m_off += (ip[0] << 6) + (ip[1] >> 2); 3889#else 3890 m_off += (ip[0] >> 2) + (ip[1] << 6); 3891#endif 3892 ip += 2; 3893 if (m_off == 0) 3894 goto eof_found; 3895 m_off += 0x4000; 3896#if defined(LZO1Z) 3897 last_m_off = m_off; 3898#endif 3899#else 3900#if defined(LZO1Z) 3901 m_pos -= (ip[0] << 6) + (ip[1] >> 2); 3902#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 3903 m_pos -= UA_GET16(ip) >> 2; 3904#else 3905 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 3906#endif 3907 ip += 2; 3908 if (m_pos == op) 3909 goto eof_found; 3910 m_pos -= 0x4000; 3911#if defined(LZO1Z) 3912 last_m_off = pd((const lzo_bytep)op, m_pos); 3913#endif 3914#endif 3915 } 3916 else 3917 { 3918#if defined(COPY_DICT) 3919#if defined(LZO1Z) 3920 m_off = 1 + (t << 6) + (*ip++ >> 2); 3921 last_m_off = m_off; 3922#else 3923 m_off = 1 + (t >> 2) + (*ip++ << 2); 3924#endif 3925 NEED_OP(2); 3926 t = 2; COPY_DICT(t,m_off) 3927#else 3928#if defined(LZO1Z) 3929 t = 1 + (t << 6) + (*ip++ >> 2); 3930 m_pos = op - t; 3931 last_m_off = t; 3932#else 3933 m_pos = op - 1; 3934 m_pos -= t >> 2; 3935 m_pos -= *ip++ << 2; 3936#endif 3937 TEST_LB(m_pos); NEED_OP(2); 3938 *op++ = *m_pos++; *op++ = *m_pos; 3939#endif 3940 goto match_done; 3941 } 3942 3943#if defined(COPY_DICT) 3944 3945 NEED_OP(t+3-1); 3946 t += 3-1; COPY_DICT(t,m_off) 3947 3948#else 3949 3950 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 3951#if defined(LZO_UNALIGNED_OK_8) && defined(LZO_UNALIGNED_OK_4) 3952 if (op - m_pos >= 8) 3953 { 3954 t += (3 - 1); 3955 if (t >= 8) do 3956 { 3957 UA_COPY64(op,m_pos); 3958 op += 8; m_pos += 8; t -= 8; 3959 } while (t >= 8); 3960 if (t >= 4) 3961 { 3962 UA_COPY32(op,m_pos); 3963 op += 4; m_pos += 4; t -= 4; 3964 } 3965 if (t > 0) 3966 { 3967 *op++ = m_pos[0]; 3968 if (t > 1) { *op++ = m_pos[1]; if (t > 2) { *op++ = m_pos[2]; } } 3969 } 3970 } 3971 else 3972#elif defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 3973#if !defined(LZO_UNALIGNED_OK_4) 3974 if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) 3975 { 3976 assert((op - m_pos) >= 4); 3977#else 3978 if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) 3979 { 3980#endif 3981 UA_COPY32(op,m_pos); 3982 op += 4; m_pos += 4; t -= 4 - (3 - 1); 3983 do { 3984 UA_COPY32(op,m_pos); 3985 op += 4; m_pos += 4; t -= 4; 3986 } while (t >= 4); 3987 if (t > 0) do *op++ = *m_pos++; while (--t > 0); 3988 } 3989 else 3990#endif 3991 { 3992copy_match: 3993 *op++ = *m_pos++; *op++ = *m_pos++; 3994 do *op++ = *m_pos++; while (--t > 0); 3995 } 3996 3997#endif 3998 3999match_done: 4000#if defined(LZO1Z) 4001 t = ip[-1] & 3; 4002#else 4003 t = ip[-2] & 3; 4004#endif 4005 if (t == 0) 4006 break; 4007 4008match_next: 4009 assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); 4010#if 0 4011 do *op++ = *ip++; while (--t > 0); 4012#else 4013 *op++ = *ip++; 4014 if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 4015#endif 4016 t = *ip++; 4017 } while (TEST_IP && TEST_OP); 4018 } 4019 4020#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) 4021 *out_len = pd(op, out); 4022 return LZO_E_EOF_NOT_FOUND; 4023#endif 4024 4025eof_found: 4026 assert(t == 1); 4027 *out_len = pd(op, out); 4028 return (ip == ip_end ? LZO_E_OK : 4029 (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); 4030 4031#if defined(HAVE_NEED_IP) 4032input_overrun: 4033 *out_len = pd(op, out); 4034 return LZO_E_INPUT_OVERRUN; 4035#endif 4036 4037#if defined(HAVE_NEED_OP) 4038output_overrun: 4039 *out_len = pd(op, out); 4040 return LZO_E_OUTPUT_OVERRUN; 4041#endif 4042 4043#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 4044lookbehind_overrun: 4045 *out_len = pd(op, out); 4046 return LZO_E_LOOKBEHIND_OVERRUN; 4047#endif 4048} 4049 4050#endif 4051 4052#define LZO_TEST_OVERRUN 1 4053#undef DO_DECOMPRESS 4054#define DO_DECOMPRESS lzo1x_decompress_safe 4055 4056#if !defined(MINILZO_CFG_SKIP_LZO1X_DECOMPRESS_SAFE) 4057 4058#if defined(LZO_TEST_OVERRUN) 4059# if !defined(LZO_TEST_OVERRUN_INPUT) 4060# define LZO_TEST_OVERRUN_INPUT 2 4061# endif 4062# if !defined(LZO_TEST_OVERRUN_OUTPUT) 4063# define LZO_TEST_OVERRUN_OUTPUT 2 4064# endif 4065# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) 4066# define LZO_TEST_OVERRUN_LOOKBEHIND 1 4067# endif 4068#endif 4069 4070#undef TEST_IP 4071#undef TEST_OP 4072#undef TEST_LB 4073#undef TEST_LBO 4074#undef NEED_IP 4075#undef NEED_OP 4076#undef HAVE_TEST_IP 4077#undef HAVE_TEST_OP 4078#undef HAVE_NEED_IP 4079#undef HAVE_NEED_OP 4080#undef HAVE_ANY_IP 4081#undef HAVE_ANY_OP 4082 4083#if defined(LZO_TEST_OVERRUN_INPUT) 4084# if (LZO_TEST_OVERRUN_INPUT >= 1) 4085# define TEST_IP (ip < ip_end) 4086# endif 4087# if (LZO_TEST_OVERRUN_INPUT >= 2) 4088# define NEED_IP(x) \ 4089 if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun 4090# endif 4091#endif 4092 4093#if defined(LZO_TEST_OVERRUN_OUTPUT) 4094# if (LZO_TEST_OVERRUN_OUTPUT >= 1) 4095# define TEST_OP (op <= op_end) 4096# endif 4097# if (LZO_TEST_OVERRUN_OUTPUT >= 2) 4098# undef TEST_OP 4099# define NEED_OP(x) \ 4100 if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun 4101# endif 4102#endif 4103 4104#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 4105# define TEST_LB(m_pos) if (m_pos < out || m_pos >= op) goto lookbehind_overrun 4106# define TEST_LBO(m_pos,o) if (m_pos < out || m_pos >= op - (o)) goto lookbehind_overrun 4107#else 4108# define TEST_LB(m_pos) ((void) 0) 4109# define TEST_LBO(m_pos,o) ((void) 0) 4110#endif 4111 4112#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) 4113# define TEST_IP (ip < ip_end) 4114#endif 4115 4116#if defined(TEST_IP) 4117# define HAVE_TEST_IP 1 4118#else 4119# define TEST_IP 1 4120#endif 4121#if defined(TEST_OP) 4122# define HAVE_TEST_OP 1 4123#else 4124# define TEST_OP 1 4125#endif 4126 4127#if defined(NEED_IP) 4128# define HAVE_NEED_IP 1 4129#else 4130# define NEED_IP(x) ((void) 0) 4131#endif 4132#if defined(NEED_OP) 4133# define HAVE_NEED_OP 1 4134#else 4135# define NEED_OP(x) ((void) 0) 4136#endif 4137 4138#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) 4139# define HAVE_ANY_IP 1 4140#endif 4141#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) 4142# define HAVE_ANY_OP 1 4143#endif 4144 4145#if defined(DO_DECOMPRESS) 4146LZO_PUBLIC(int) 4147DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, 4148 lzo_bytep out, lzo_uintp out_len, 4149 lzo_voidp wrkmem ) 4150#endif 4151{ 4152 register lzo_bytep op; 4153 register const lzo_bytep ip; 4154 register lzo_uint t; 4155#if defined(COPY_DICT) 4156 lzo_uint m_off; 4157 const lzo_bytep dict_end; 4158#else 4159 register const lzo_bytep m_pos; 4160#endif 4161 4162 const lzo_bytep const ip_end = in + in_len; 4163#if defined(HAVE_ANY_OP) 4164 lzo_bytep const op_end = out + *out_len; 4165#endif 4166#if defined(LZO1Z) 4167 lzo_uint last_m_off = 0; 4168#endif 4169 4170 LZO_UNUSED(wrkmem); 4171 4172#if defined(COPY_DICT) 4173 if (dict) 4174 { 4175 if (dict_len > M4_MAX_OFFSET) 4176 { 4177 dict += dict_len - M4_MAX_OFFSET; 4178 dict_len = M4_MAX_OFFSET; 4179 } 4180 dict_end = dict + dict_len; 4181 } 4182 else 4183 { 4184 dict_len = 0; 4185 dict_end = NULL; 4186 } 4187#endif 4188 4189 *out_len = 0; 4190 4191 op = out; 4192 ip = in; 4193 4194 if (*ip > 17) 4195 { 4196 t = *ip++ - 17; 4197 if (t < 4) 4198 goto match_next; 4199 assert(t > 0); NEED_OP(t); NEED_IP(t+1); 4200 do *op++ = *ip++; while (--t > 0); 4201 goto first_literal_run; 4202 } 4203 4204 while (TEST_IP && TEST_OP) 4205 { 4206 t = *ip++; 4207 if (t >= 16) 4208 goto match; 4209 if (t == 0) 4210 { 4211 NEED_IP(1); 4212 while (*ip == 0) 4213 { 4214 t += 255; 4215 ip++; 4216 NEED_IP(1); 4217 } 4218 t += 15 + *ip++; 4219 } 4220 assert(t > 0); NEED_OP(t+3); NEED_IP(t+4); 4221#if defined(LZO_UNALIGNED_OK_8) && defined(LZO_UNALIGNED_OK_4) 4222 t += 3; 4223 if (t >= 8) do 4224 { 4225 UA_COPY64(op,ip); 4226 op += 8; ip += 8; t -= 8; 4227 } while (t >= 8); 4228 if (t >= 4) 4229 { 4230 UA_COPY32(op,ip); 4231 op += 4; ip += 4; t -= 4; 4232 } 4233 if (t > 0) 4234 { 4235 *op++ = *ip++; 4236 if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 4237 } 4238#elif defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 4239#if !defined(LZO_UNALIGNED_OK_4) 4240 if (PTR_ALIGNED2_4(op,ip)) 4241 { 4242#endif 4243 UA_COPY32(op,ip); 4244 op += 4; ip += 4; 4245 if (--t > 0) 4246 { 4247 if (t >= 4) 4248 { 4249 do { 4250 UA_COPY32(op,ip); 4251 op += 4; ip += 4; t -= 4; 4252 } while (t >= 4); 4253 if (t > 0) do *op++ = *ip++; while (--t > 0); 4254 } 4255 else 4256 do *op++ = *ip++; while (--t > 0); 4257 } 4258#if !defined(LZO_UNALIGNED_OK_4) 4259 } 4260 else 4261#endif 4262#endif 4263#if !defined(LZO_UNALIGNED_OK_4) && !defined(LZO_UNALIGNED_OK_8) 4264 { 4265 *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; 4266 do *op++ = *ip++; while (--t > 0); 4267 } 4268#endif 4269 4270first_literal_run: 4271 4272 t = *ip++; 4273 if (t >= 16) 4274 goto match; 4275#if defined(COPY_DICT) 4276#if defined(LZO1Z) 4277 m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 4278 last_m_off = m_off; 4279#else 4280 m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); 4281#endif 4282 NEED_OP(3); 4283 t = 3; COPY_DICT(t,m_off) 4284#else 4285#if defined(LZO1Z) 4286 t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); 4287 m_pos = op - t; 4288 last_m_off = t; 4289#else 4290 m_pos = op - (1 + M2_MAX_OFFSET); 4291 m_pos -= t >> 2; 4292 m_pos -= *ip++ << 2; 4293#endif 4294 TEST_LB(m_pos); NEED_OP(3); 4295 *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; 4296#endif 4297 goto match_done; 4298 4299 do { 4300match: 4301 if (t >= 64) 4302 { 4303#if defined(COPY_DICT) 4304#if defined(LZO1X) 4305 m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); 4306 t = (t >> 5) - 1; 4307#elif defined(LZO1Y) 4308 m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); 4309 t = (t >> 4) - 3; 4310#elif defined(LZO1Z) 4311 m_off = t & 0x1f; 4312 if (m_off >= 0x1c) 4313 m_off = last_m_off; 4314 else 4315 { 4316 m_off = 1 + (m_off << 6) + (*ip++ >> 2); 4317 last_m_off = m_off; 4318 } 4319 t = (t >> 5) - 1; 4320#endif 4321#else 4322#if defined(LZO1X) 4323 m_pos = op - 1; 4324 m_pos -= (t >> 2) & 7; 4325 m_pos -= *ip++ << 3; 4326 t = (t >> 5) - 1; 4327#elif defined(LZO1Y) 4328 m_pos = op - 1; 4329 m_pos -= (t >> 2) & 3; 4330 m_pos -= *ip++ << 2; 4331 t = (t >> 4) - 3; 4332#elif defined(LZO1Z) 4333 { 4334 lzo_uint off = t & 0x1f; 4335 m_pos = op; 4336 if (off >= 0x1c) 4337 { 4338 assert(last_m_off > 0); 4339 m_pos -= last_m_off; 4340 } 4341 else 4342 { 4343 off = 1 + (off << 6) + (*ip++ >> 2); 4344 m_pos -= off; 4345 last_m_off = off; 4346 } 4347 } 4348 t = (t >> 5) - 1; 4349#endif 4350 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 4351 goto copy_match; 4352#endif 4353 } 4354 else if (t >= 32) 4355 { 4356 t &= 31; 4357 if (t == 0) 4358 { 4359 NEED_IP(1); 4360 while (*ip == 0) 4361 { 4362 t += 255; 4363 ip++; 4364 NEED_IP(1); 4365 } 4366 t += 31 + *ip++; 4367 } 4368#if defined(COPY_DICT) 4369#if defined(LZO1Z) 4370 m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); 4371 last_m_off = m_off; 4372#else 4373 m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); 4374#endif 4375#else 4376#if defined(LZO1Z) 4377 { 4378 lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); 4379 m_pos = op - off; 4380 last_m_off = off; 4381 } 4382#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 4383 m_pos = op - 1; 4384 m_pos -= UA_GET16(ip) >> 2; 4385#else 4386 m_pos = op - 1; 4387 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 4388#endif 4389#endif 4390 ip += 2; 4391 } 4392 else if (t >= 16) 4393 { 4394#if defined(COPY_DICT) 4395 m_off = (t & 8) << 11; 4396#else 4397 m_pos = op; 4398 m_pos -= (t & 8) << 11; 4399#endif 4400 t &= 7; 4401 if (t == 0) 4402 { 4403 NEED_IP(1); 4404 while (*ip == 0) 4405 { 4406 t += 255; 4407 ip++; 4408 NEED_IP(1); 4409 } 4410 t += 7 + *ip++; 4411 } 4412#if defined(COPY_DICT) 4413#if defined(LZO1Z) 4414 m_off += (ip[0] << 6) + (ip[1] >> 2); 4415#else 4416 m_off += (ip[0] >> 2) + (ip[1] << 6); 4417#endif 4418 ip += 2; 4419 if (m_off == 0) 4420 goto eof_found; 4421 m_off += 0x4000; 4422#if defined(LZO1Z) 4423 last_m_off = m_off; 4424#endif 4425#else 4426#if defined(LZO1Z) 4427 m_pos -= (ip[0] << 6) + (ip[1] >> 2); 4428#elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN) 4429 m_pos -= UA_GET16(ip) >> 2; 4430#else 4431 m_pos -= (ip[0] >> 2) + (ip[1] << 6); 4432#endif 4433 ip += 2; 4434 if (m_pos == op) 4435 goto eof_found; 4436 m_pos -= 0x4000; 4437#if defined(LZO1Z) 4438 last_m_off = pd((const lzo_bytep)op, m_pos); 4439#endif 4440#endif 4441 } 4442 else 4443 { 4444#if defined(COPY_DICT) 4445#if defined(LZO1Z) 4446 m_off = 1 + (t << 6) + (*ip++ >> 2); 4447 last_m_off = m_off; 4448#else 4449 m_off = 1 + (t >> 2) + (*ip++ << 2); 4450#endif 4451 NEED_OP(2); 4452 t = 2; COPY_DICT(t,m_off) 4453#else 4454#if defined(LZO1Z) 4455 t = 1 + (t << 6) + (*ip++ >> 2); 4456 m_pos = op - t; 4457 last_m_off = t; 4458#else 4459 m_pos = op - 1; 4460 m_pos -= t >> 2; 4461 m_pos -= *ip++ << 2; 4462#endif 4463 TEST_LB(m_pos); NEED_OP(2); 4464 *op++ = *m_pos++; *op++ = *m_pos; 4465#endif 4466 goto match_done; 4467 } 4468 4469#if defined(COPY_DICT) 4470 4471 NEED_OP(t+3-1); 4472 t += 3-1; COPY_DICT(t,m_off) 4473 4474#else 4475 4476 TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); 4477#if defined(LZO_UNALIGNED_OK_8) && defined(LZO_UNALIGNED_OK_4) 4478 if (op - m_pos >= 8) 4479 { 4480 t += (3 - 1); 4481 if (t >= 8) do 4482 { 4483 UA_COPY64(op,m_pos); 4484 op += 8; m_pos += 8; t -= 8; 4485 } while (t >= 8); 4486 if (t >= 4) 4487 { 4488 UA_COPY32(op,m_pos); 4489 op += 4; m_pos += 4; t -= 4; 4490 } 4491 if (t > 0) 4492 { 4493 *op++ = m_pos[0]; 4494 if (t > 1) { *op++ = m_pos[1]; if (t > 2) { *op++ = m_pos[2]; } } 4495 } 4496 } 4497 else 4498#elif defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4) 4499#if !defined(LZO_UNALIGNED_OK_4) 4500 if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) 4501 { 4502 assert((op - m_pos) >= 4); 4503#else 4504 if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) 4505 { 4506#endif 4507 UA_COPY32(op,m_pos); 4508 op += 4; m_pos += 4; t -= 4 - (3 - 1); 4509 do { 4510 UA_COPY32(op,m_pos); 4511 op += 4; m_pos += 4; t -= 4; 4512 } while (t >= 4); 4513 if (t > 0) do *op++ = *m_pos++; while (--t > 0); 4514 } 4515 else 4516#endif 4517 { 4518copy_match: 4519 *op++ = *m_pos++; *op++ = *m_pos++; 4520 do *op++ = *m_pos++; while (--t > 0); 4521 } 4522 4523#endif 4524 4525match_done: 4526#if defined(LZO1Z) 4527 t = ip[-1] & 3; 4528#else 4529 t = ip[-2] & 3; 4530#endif 4531 if (t == 0) 4532 break; 4533 4534match_next: 4535 assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1); 4536#if 0 4537 do *op++ = *ip++; while (--t > 0); 4538#else 4539 *op++ = *ip++; 4540 if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } 4541#endif 4542 t = *ip++; 4543 } while (TEST_IP && TEST_OP); 4544 } 4545 4546#if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP) 4547 *out_len = pd(op, out); 4548 return LZO_E_EOF_NOT_FOUND; 4549#endif 4550 4551eof_found: 4552 assert(t == 1); 4553 *out_len = pd(op, out); 4554 return (ip == ip_end ? LZO_E_OK : 4555 (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); 4556 4557#if defined(HAVE_NEED_IP) 4558input_overrun: 4559 *out_len = pd(op, out); 4560 return LZO_E_INPUT_OVERRUN; 4561#endif 4562 4563#if defined(HAVE_NEED_OP) 4564output_overrun: 4565 *out_len = pd(op, out); 4566 return LZO_E_OUTPUT_OVERRUN; 4567#endif 4568 4569#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) 4570lookbehind_overrun: 4571 *out_len = pd(op, out); 4572 return LZO_E_LOOKBEHIND_OVERRUN; 4573#endif 4574} 4575 4576#endif 4577 4578/***** End of minilzo.c *****/ 4579 4580