|
|
@@ -141,25 +141,34 @@ typedef struct RL_VLC_ELEM { |
|
|
|
|
|
|
|
/* used to avoid missaligned exceptions on some archs (alpha, ...) */ |
|
|
|
#if defined(ARCH_X86) || defined(ARCH_X86_64) |
|
|
|
# define unaligned16(a) (*(const uint16_t*)(a)) |
|
|
|
# define unaligned32(a) (*(const uint32_t*)(a)) |
|
|
|
# define unaligned64(a) (*(const uint64_t*)(a)) |
|
|
|
#else |
|
|
|
# ifdef __GNUC__ |
|
|
|
static inline uint32_t unaligned32(const void *v) { |
|
|
|
struct Unaligned { |
|
|
|
uint32_t i; |
|
|
|
} __attribute__((packed)); |
|
|
|
|
|
|
|
return ((const struct Unaligned *) v)->i; |
|
|
|
# define unaligned(x) \ |
|
|
|
static inline uint##x##_t unaligned##x(const void *v) { \ |
|
|
|
struct Unaligned { \ |
|
|
|
uint##x##_t i; \ |
|
|
|
} __attribute__((packed)); \ |
|
|
|
\ |
|
|
|
return ((const struct Unaligned *) v)->i; \ |
|
|
|
} |
|
|
|
# elif defined(__DECC) |
|
|
|
static inline uint32_t unaligned32(const void *v) { |
|
|
|
return *(const __unaligned uint32_t *) v; |
|
|
|
# define unaligned(x) \ |
|
|
|
static inline uint##x##_t unaligned##x##(const void *v) { \ |
|
|
|
return *(const __unaligned uint##x##_t *) v; \ |
|
|
|
} |
|
|
|
# else |
|
|
|
static inline uint32_t unaligned32(const void *v) { |
|
|
|
return *(const uint32_t *) v; |
|
|
|
# define unaligned(x) \ |
|
|
|
static inline uint##x##_t unaligned##x##(const void *v) { \ |
|
|
|
return *(const uint##x##_t *) v; \ |
|
|
|
} |
|
|
|
# endif |
|
|
|
unaligned(16) |
|
|
|
unaligned(32) |
|
|
|
unaligned(64) |
|
|
|
#undef unaligned |
|
|
|
#endif //!ARCH_X86 |
|
|
|
|
|
|
|
#ifndef ALT_BITSTREAM_WRITER |
|
|
|