summaryrefslogtreecommitdiff
path: root/libavcodec/bswap.h
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/bswap.h')
-rw-r--r--libavcodec/bswap.h13
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)
{