Go to the documentation of this file.
24#if defined(HAVE_CONFIG_H) && !defined(__XINE_LIB_CONFIG_H__)
25# error config.h not included
28#define always_inline inline
33#define _X_ABE_16(x) (be2me_16(*(const uint16_t*)(x)))
34#define _X_ABE_32(x) (be2me_32(*(const uint32_t*)(x)))
35#define _X_ABE_64(x) (be2me_64(*(const uint64_t*)(x)))
36#define _X_ALE_16(x) (le2me_16(*(const uint16_t*)(x)))
37#define _X_ALE_32(x) (le2me_32(*(const uint32_t*)(x)))
38#define _X_ALE_64(x) (le2me_64(*(const uint64_t*)(x)))
40#define _X_BE_16(x) (((uint16_t)(((const uint8_t*)(x))[0]) << 8) | \
41 ((uint16_t)((const uint8_t*)(x))[1]))
42#define _X_BE_24(x) (((uint32_t)(((const uint8_t*)(x))[0]) << 16) | \
43 ((uint32_t)(((const uint8_t*)(x))[1]) << 8) | \
44 ((uint32_t)(((const uint8_t*)(x))[2])))
45#define _X_BE_32(x) (((uint32_t)(((const uint8_t*)(x))[0]) << 24) | \
46 ((uint32_t)(((const uint8_t*)(x))[1]) << 16) | \
47 ((uint32_t)(((const uint8_t*)(x))[2]) << 8) | \
48 ((uint32_t)((const uint8_t*)(x))[3]))
49#define _X_BE_64(x) (((uint64_t)(((const uint8_t*)(x))[0]) << 56) | \
50 ((uint64_t)(((const uint8_t*)(x))[1]) << 48) | \
51 ((uint64_t)(((const uint8_t*)(x))[2]) << 40) | \
52 ((uint64_t)(((const uint8_t*)(x))[3]) << 32) | \
53 ((uint64_t)(((const uint8_t*)(x))[4]) << 24) | \
54 ((uint64_t)(((const uint8_t*)(x))[5]) << 16) | \
55 ((uint64_t)(((const uint8_t*)(x))[6]) << 8) | \
56 ((uint64_t)((const uint8_t*)(x))[7]))
58#define _X_LE_16(x) (((uint16_t)(((const uint8_t*)(x))[1]) << 8) | \
59 ((uint16_t)((const uint8_t*)(x))[0]))
60#define _X_LE_24(x) (((uint32_t)(((const uint8_t*)(x))[2]) << 16) | \
61 ((uint32_t)(((const uint8_t*)(x))[1]) << 8) | \
62 ((uint32_t)(((const uint8_t*)(x))[0])))
63#define _X_LE_32(x) (((uint32_t)(((const uint8_t*)(x))[3]) << 24) | \
64 ((uint32_t)(((const uint8_t*)(x))[2]) << 16) | \
65 ((uint32_t)(((const uint8_t*)(x))[1]) << 8) | \
66 ((uint32_t)((const uint8_t*)(x))[0]))
67#define _X_LE_64(x) (((uint64_t)(((const uint8_t*)(x))[7]) << 56) | \
68 ((uint64_t)(((const uint8_t*)(x))[6]) << 48) | \
69 ((uint64_t)(((const uint8_t*)(x))[5]) << 40) | \
70 ((uint64_t)(((const uint8_t*)(x))[4]) << 32) | \
71 ((uint64_t)(((const uint8_t*)(x))[3]) << 24) | \
72 ((uint64_t)(((const uint8_t*)(x))[2]) << 16) | \
73 ((uint64_t)(((const uint8_t*)(x))[1]) << 8) | \
74 ((uint64_t)((const uint8_t*)(x))[0]))
77#if defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ > 3)) || defined(__clang__)
84# ifdef WORDS_BIGENDIAN
85# define _X_LE_24(x) ({ int32_t tempi; __builtin_memcpy (&tempi, (x), 3); (uint32_t)(__builtin_bswap32 (tempi)) & 0xffffff; })
86# define _X_LE_32(x) ({ int32_t tempi; __builtin_memcpy (&tempi, (x), 4); (uint32_t)(__builtin_bswap32 (tempi)); })
87# define _X_LE_64(x) ({ int64_t tempi; __builtin_memcpy (&tempi, (x), 8); (uint64_t)(__builtin_bswap64 (tempi)); })
88# define _X_BE_24(x) ({ uint32_t tempi; __builtin_memcpy (&tempi, (x), 3); tempi >> 8; })
89# define _X_BE_32(x) ({ uint32_t tempi; __builtin_memcpy (&tempi, (x), 4); tempi; })
90# define _X_BE_64(x) ({ uint64_t tempi; __builtin_memcpy (&tempi, (x), 8); tempi; })
92# define _X_BE_24(x) ({ int32_t tempi; __builtin_memcpy (&tempi, (x), 3); (uint32_t)(__builtin_bswap32 (tempi)) >> 8; })
93# define _X_BE_32(x) ({ int32_t tempi; __builtin_memcpy (&tempi, (x), 4); (uint32_t)(__builtin_bswap32 (tempi)); })
94# define _X_BE_64(x) ({ int64_t tempi; __builtin_memcpy (&tempi, (x), 8); (uint64_t)(__builtin_bswap64 (tempi)); })
95# define _X_LE_24(x) ({ uint32_t tempi; __builtin_memcpy (&tempi, (x), 3); tempi & 0xffffff; })
96# define _X_LE_32(x) ({ uint32_t tempi; __builtin_memcpy (&tempi, (x), 4); tempi; })
97# define _X_LE_64(x) ({ uint64_t tempi; __builtin_memcpy (&tempi, (x), 8); tempi; })
103# define _X_BE_16(x) ({ \
105 __builtin_memcpy (&tempi, (x), 2); \
106 __asm__ __volatile__ ( \
113# define _X_LE_16(x) ({ uint16_t tempi; __builtin_memcpy (&tempi, (x), 2); tempi; })
117#ifdef WORDS_BIGENDIAN
118#define _X_ME_16(x) _X_BE_16(x)
119#define _X_ME_32(x) _X_BE_32(x)
120#define _X_ME_64(x) _X_BE_64(x)
121#define _X_AME_16(x) _X_ABE_16(x)
122#define _X_AME_32(x) _X_ABE_32(x)
123#define _X_AME_64(x) _X_ABE_64(x)
125#define _X_ME_16(x) _X_LE_16(x)
126#define _X_ME_32(x) _X_LE_32(x)
127#define _X_ME_64(x) _X_LE_64(x)
128#define _X_AME_16(x) _X_ALE_16(x)
129#define _X_AME_32(x) _X_ALE_32(x)
130#define _X_AME_64(x) _X_ALE_64(x)
133#define BE_FOURCC( ch0, ch1, ch2, ch3 ) \
134 ( (uint32_t)(unsigned char)(ch3) | \
135 ( (uint32_t)(unsigned char)(ch2) << 8 ) | \
136 ( (uint32_t)(unsigned char)(ch1) << 16 ) | \
137 ( (uint32_t)(unsigned char)(ch0) << 24 ) )
139#define LE_FOURCC( ch0, ch1, ch2, ch3 ) \
140 ( (uint32_t)(unsigned char)(ch0) | \
141 ( (uint32_t)(unsigned char)(ch1) << 8 ) | \
142 ( (uint32_t)(unsigned char)(ch2) << 16 ) | \
143 ( (uint32_t)(unsigned char)(ch3) << 24 ) )
145#ifdef WORDS_BIGENDIAN
146#define ME_FOURCC BE_FOURCC
148#define ME_FOURCC LE_FOURCC