diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2008-09-11 10:48:12 +0300 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2008-09-11 10:48:12 +0300 |
commit | 962f2231d49409fe6852e44ffe8c5dbabb04bc7d (patch) | |
tree | 97c20e7a2012af59d5d6998185647ccb340e87d0 /src/common/integer.h | |
parent | Silence a compiler warning. (diff) | |
download | xz-962f2231d49409fe6852e44ffe8c5dbabb04bc7d.tar.xz |
Fix a compiler error on big endian systems that don't
support unaligned memory access.
Diffstat (limited to '')
-rw-r--r-- | src/common/integer.h | 32 |
1 files changed, 18 insertions, 14 deletions
diff --git a/src/common/integer.h b/src/common/integer.h index a6e43be2..9addf965 100644 --- a/src/common/integer.h +++ b/src/common/integer.h @@ -14,6 +14,20 @@ #ifndef LZMA_INTEGER_H #define LZMA_INTEGER_H +// On big endian, we need byte swapping. These macros may be used outside +// this file, so don't put these inside HAVE_FAST_UNALIGNED_ACCESS. +#ifdef WORDS_BIGENDIAN +# include "bswap.h" +# define integer_le_16(n) bswap_16(n) +# define integer_le_32(n) bswap_32(n) +# define integer_le_64(n) bswap_64(n) +#else +# define integer_le_16(n) (n) +# define integer_le_32(n) (n) +# define integer_le_64(n) (n) +#endif + + // I'm aware of AC_CHECK_ALIGNED_ACCESS_REQUIRED from Autoconf archive, but // it's not useful here. We don't care if unaligned access is supported, // we care if it is fast. Some systems can emulate unaligned access in @@ -24,23 +38,13 @@ // NOTE: HAVE_FAST_UNALIGNED_ACCESS indicates only support for 16-bit and // 32-bit integer loads and stores. 64-bit integers may or may not work. // That's why 64-bit functions are commented out. -#ifdef HAVE_FAST_UNALIGNED_ACCESS - -// On big endian, we need byte swapping. // // TODO: Big endian PowerPC supports byte swapping load and store instructions // that also allow unaligned access. Inline assembler could be OK for that. -#ifdef WORDS_BIGENDIAN -# include "bswap.h" -# define integer_le_16(n) bswap_16(n) -# define integer_le_32(n) bswap_32(n) -# define integer_le_64(n) bswap_64(n) -#else -# define integer_le_16(n) (n) -# define integer_le_32(n) (n) -# define integer_le_64(n) (n) -#endif - +// +// Performance of these functions isn't that important until LZMA3, but it +// doesn't hurt to have these ready already. +#ifdef HAVE_FAST_UNALIGNED_ACCESS static inline uint16_t integer_read_16(const uint8_t buf[static 2]) |