00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef AVUTIL_ARM_BSWAP_H
00020 #define AVUTIL_ARM_BSWAP_H
00021
00022 #include <stdint.h>
00023 #include "config.h"
00024 #include "libavutil/common.h"
00025
00026 #if HAVE_ARMV6
00027 #define bswap_16 bswap_16
00028 static av_always_inline av_const uint16_t bswap_16(uint16_t x)
00029 {
00030 __asm__("rev16 %0, %0" : "+r"(x));
00031 return x;
00032 }
00033 #endif
00034
00035 #define bswap_32 bswap_32
00036 static av_always_inline av_const uint32_t bswap_32(uint32_t x)
00037 {
00038 #if HAVE_ARMV6
00039 __asm__("rev %0, %0" : "+r"(x));
00040 #else
00041 uint32_t t;
00042 __asm__ ("eor %1, %0, %0, ror #16 \n\t"
00043 "bic %1, %1, #0xFF0000 \n\t"
00044 "mov %0, %0, ror #8 \n\t"
00045 "eor %0, %0, %1, lsr #8 \n\t"
00046 : "+r"(x), "=&r"(t));
00047 #endif
00048 return x;
00049 }
00050
00051 #endif