summaryrefslogtreecommitdiff
path: root/libavutil/bswap.h
diff options
context:
space:
mode:
authorMåns Rullgård <mans@mansr.com>2008-03-18 22:28:33 +0000
committerMåns Rullgård <mans@mansr.com>2008-03-18 22:28:33 +0000
commit3662d880ed9fdc3aa952f174f620f53d1fc1f789 (patch)
treec8d8716c648eb17dbdc79ecd7604e34a5a4fc366 /libavutil/bswap.h
parentc5fec7d76c6bae70aa0f700a86f43d45337e8a92 (diff)
32/64-bit agnostic x86 bswap
Originally committed as revision 12496 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavutil/bswap.h')
-rw-r--r--libavutil/bswap.h20
1 files changed, 6 insertions, 14 deletions
diff --git a/libavutil/bswap.h b/libavutil/bswap.h
index e78c981b02..64ac5d2384 100644
--- a/libavutil/bswap.h
+++ b/libavutil/bswap.h
@@ -34,16 +34,10 @@
#include <byteswap.h>
#else
-#ifdef ARCH_X86_64
-# define LEGACY_REGS "=Q"
-#else
-# define LEGACY_REGS "=q"
-#endif
-
static av_always_inline uint16_t bswap_16(uint16_t x)
{
#if defined(ARCH_X86)
- asm("rorw $8, %0" : LEGACY_REGS (x) : "0" (x));
+ asm("rorw $8, %0" : "+r"(x));
#elif defined(ARCH_SH4)
asm("swap.b %0,%0" : "=r"(x) : "0"(x));
#else
@@ -56,15 +50,13 @@ static av_always_inline uint32_t bswap_32(uint32_t x)
{
#if defined(ARCH_X86)
#ifdef HAVE_BSWAP
- asm("bswap %0":
- "=r" (x) :
+ asm("bswap %0" : "+r" (x));
#else
- asm("xchgb %b0,%h0\n"
- "rorl $16,%0 \n"
- "xchgb %b0,%h0":
- LEGACY_REGS (x) :
+ asm("rorw $8, %w0 \n\t"
+ "rorl $16, %0 \n\t"
+ "rorw $8, %w0"
+ : "+r"(x));
#endif
- "0" (x));
#elif defined(ARCH_SH4)
asm("swap.b %0,%0\n"
"swap.w %0,%0\n"