diff options
| author | Torsten Jager <t.jager@gmx.de> | 2015-03-06 19:48:50 +0100 |
|---|---|---|
| committer | Torsten Jager <t.jager@gmx.de> | 2015-03-06 19:48:50 +0100 |
| commit | 965c0ed960d6cf2acf4bdfed6eb9389be101eab3 (patch) | |
| tree | 524db4b25040e69acc3bf2c8006430463979f22b /src/xine-engine | |
| parent | e386bf7cd43aea41f7c32a17a335c53539cec4f6 (diff) | |
| download | xine-lib-965c0ed960d6cf2acf4bdfed6eb9389be101eab3.tar.gz xine-lib-965c0ed960d6cf2acf4bdfed6eb9389be101eab3.tar.bz2 | |
More fast unaligned integer hacks.
Taken from my private "TJtools" project.
Diffstat (limited to 'src/xine-engine')
| -rw-r--r-- | src/xine-engine/bswap.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/xine-engine/bswap.h b/src/xine-engine/bswap.h index 089f4f6db..b1ae34abc 100644 --- a/src/xine-engine/bswap.h +++ b/src/xine-engine/bswap.h @@ -73,18 +73,24 @@ /* Tested with gcc 4.4 */ #if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ > 3)) || defined(__clang__) +# undef _X_BE_24 # undef _X_BE_32 # undef _X_BE_64 +# undef _X_LE_24 # undef _X_LE_32 # undef _X_LE_64 # ifdef WORDS_BIGENDIAN +# define _X_LE_24(x) ({ int32_t tempi; __builtin_memcpy (&tempi, (x), 4); (uint32_t)(__builtin_bswap32 (tempi)) & 0xffffff; }) # define _X_LE_32(x) ({ int32_t tempi; __builtin_memcpy (&tempi, (x), 4); (uint32_t)(__builtin_bswap32 (tempi)); }) # define _X_LE_64(x) ({ int64_t tempi; __builtin_memcpy (&tempi, (x), 8); (uint64_t)(__builtin_bswap64 (tempi)); }) +# define _X_BE_24(x) ({ uint32_t tempi; __builtin_memcpy (&tempi, (x), 4); tempi >> 8; }) # define _X_BE_32(x) ({ uint32_t tempi; __builtin_memcpy (&tempi, (x), 4); tempi; }) # define _X_BE_64(x) ({ uint64_t tempi; __builtin_memcpy (&tempi, (x), 8); tempi; }) # else +# define _X_BE_24(x) ({ int32_t tempi; __builtin_memcpy (&tempi, (x), 4); (uint32_t)(__builtin_bswap32 (tempi)) >> 8; }) # define _X_BE_32(x) ({ int32_t tempi; __builtin_memcpy (&tempi, (x), 4); (uint32_t)(__builtin_bswap32 (tempi)); }) # define _X_BE_64(x) ({ int64_t tempi; __builtin_memcpy (&tempi, (x), 8); (uint64_t)(__builtin_bswap64 (tempi)); }) +# define _X_LE_24(x) ({ uint32_t tempi; __builtin_memcpy (&tempi, (x), 4); tempi & 0xffffff; }) # define _X_LE_32(x) ({ uint32_t tempi; __builtin_memcpy (&tempi, (x), 4); tempi; }) # define _X_LE_64(x) ({ uint64_t tempi; __builtin_memcpy (&tempi, (x), 8); tempi; }) # endif |
