Spaces:
Build error
Build error
/* SPDX-License-Identifier: 0BSD */ | |
/* | |
* Private includes and definitions for userspace use of XZ Embedded | |
* | |
* Author: Lasse Collin <lasse.collin@tukaani.org> | |
*/ | |
/* Uncomment to enable building of xz_dec_catrun(). */ | |
/* #define XZ_DEC_CONCATENATED */ | |
/* Uncomment to enable CRC64 support. */ | |
/* #define XZ_USE_CRC64 */ | |
/* Uncomment as needed to enable BCJ filter decoders. */ | |
/* #define XZ_DEC_X86 */ | |
/* #define XZ_DEC_ARM */ | |
/* #define XZ_DEC_ARMTHUMB */ | |
/* #define XZ_DEC_ARM64 */ | |
/* #define XZ_DEC_RISCV */ | |
/* #define XZ_DEC_POWERPC */ | |
/* #define XZ_DEC_IA64 */ | |
/* #define XZ_DEC_SPARC */ | |
/* | |
* Visual Studio 2013 update 2 supports only __inline, not inline. | |
* MSVC v19.0 / VS 2015 and newer support both. | |
*/ | |
/* | |
* Some functions have been marked with __always_inline to keep the | |
* performance reasonable even when the compiler is optimizing for | |
* small code size. You may be able to save a few bytes by #defining | |
* __always_inline to plain inline, but don't complain if the code | |
* becomes slow. | |
* | |
* NOTE: System headers on GNU/Linux may #define this macro already, | |
* so if you want to change it, you need to #undef it first. | |
*/ | |
inline __attribute__((__always_inline__)) | |
/* Inline functions to access unaligned unsigned 32-bit integers */ | |
static inline uint32_t get_unaligned_le32(const uint8_t *buf) | |
{ | |
return (uint32_t)buf[0] | |
| ((uint32_t)buf[1] << 8) | |
| ((uint32_t)buf[2] << 16) | |
| ((uint32_t)buf[3] << 24); | |
} | |
static inline uint32_t get_unaligned_be32(const uint8_t *buf) | |
{ | |
return (uint32_t)(buf[0] << 24) | |
| ((uint32_t)buf[1] << 16) | |
| ((uint32_t)buf[2] << 8) | |
| (uint32_t)buf[3]; | |
} | |
static inline void put_unaligned_le32(uint32_t val, uint8_t *buf) | |
{ | |
buf[0] = (uint8_t)val; | |
buf[1] = (uint8_t)(val >> 8); | |
buf[2] = (uint8_t)(val >> 16); | |
buf[3] = (uint8_t)(val >> 24); | |
} | |
static inline void put_unaligned_be32(uint32_t val, uint8_t *buf) | |
{ | |
buf[0] = (uint8_t)(val >> 24); | |
buf[1] = (uint8_t)(val >> 16); | |
buf[2] = (uint8_t)(val >> 8); | |
buf[3] = (uint8_t)val; | |
} | |
/* | |
* Use get_unaligned_le32() also for aligned access for simplicity. On | |
* little endian systems, #define get_le32(ptr) (*(const uint32_t *)(ptr)) | |
* could save a few bytes in code size. | |
*/ | |