tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

jpeg_nbits.h (1701B)


      1 /*
      2 * Copyright (C) 2014, 2021, 2024, D. R. Commander.
      3 * Copyright (C) 2014, Olle Liljenzin.
      4 * Copyright (C) 2020, Arm Limited.
      5 *
      6 * For conditions of distribution and use, see the accompanying README.ijg
      7 * file.
      8 */
      9 
     10 /*
     11 * NOTE: If USE_CLZ_INTRINSIC is defined, then clz/bsr instructions will be
     12 * used for bit counting rather than the lookup table.  This will reduce the
     13 * memory footprint by 64k, which is important for some mobile applications
     14 * that create many isolated instances of libjpeg-turbo (web browsers, for
     15 * instance.)  This may improve performance on some mobile platforms as well.
     16 * This feature is enabled by default only on Arm processors, because some x86
     17 * chips have a slow implementation of bsr, and the use of clz/bsr cannot be
     18 * shown to have a significant performance impact even on the x86 chips that
     19 * have a fast implementation of it.  When building for Armv6, you can
     20 * explicitly disable the use of clz/bsr by adding -mthumb to the compiler
     21 * flags (this defines __thumb__).
     22 */
     23 
     24 /* NOTE: Both GCC and Clang define __GNUC__ */
     25 #if (defined(__GNUC__) && (defined(__arm__) || defined(__aarch64__))) || \
     26    defined(_M_ARM) || defined(_M_ARM64)
     27 #if !defined(__thumb__) || defined(__thumb2__)
     28 #define USE_CLZ_INTRINSIC
     29 #endif
     30 #endif
     31 
     32 #ifdef USE_CLZ_INTRINSIC
     33 #if defined(_MSC_VER) && !defined(__clang__)
     34 #define JPEG_NBITS_NONZERO(x)  (32 - _CountLeadingZeros(x))
     35 #else
     36 #define JPEG_NBITS_NONZERO(x)  (32 - __builtin_clz(x))
     37 #endif
     38 #define JPEG_NBITS(x)          (x ? JPEG_NBITS_NONZERO(x) : 0)
     39 #else
     40 extern const unsigned char jpeg_nbits_table[65536];
     41 #define JPEG_NBITS(x)          (jpeg_nbits_table[x])
     42 #define JPEG_NBITS_NONZERO(x)  JPEG_NBITS(x)
     43 #endif