diff options
Diffstat (limited to 'libavcodec/bswap.h')
-rw-r--r-- | libavcodec/bswap.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/libavcodec/bswap.h b/libavcodec/bswap.h index 2e55337f9a..50fd571787 100644 --- a/libavcodec/bswap.h +++ b/libavcodec/bswap.h @@ -94,10 +94,23 @@ static always_inline uint16_t bswap_16(uint16_t x){ return (x>>8) | (x<<8); } +#ifdef ARCH_ARM +static always_inline uint32_t bswap_32(uint32_t x){ + uint32_t t; + __asm__ ( + "eor %1, %0, %0, ror #16 \n\t" + "bic %1, %1, #0xFF0000 \n\t" + "mov %0, %0, ror #8 \n\t" + "eor %0, %0, %1, lsr #8 \n\t" + : "+r"(x), "+r"(t)); + return x; +} +#else static always_inline uint32_t bswap_32(uint32_t x){ x= ((x<<8)&0xFF00FF00) | ((x>>8)&0x00FF00FF); return (x>>16) | (x<<16); } +#endif static inline uint64_t bswap_64(uint64_t x) { |