summaryrefslogtreecommitdiff
path: root/libavcodec/x86/mathops.h
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2011-03-15 13:30:24 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2011-03-15 13:43:47 -0400
commitb181b8fb96f9fdc2b166fcbd048110cec653cdf9 (patch)
treeda7a8190917cc1958f405efeb0ea2dde708dc354 /libavcodec/x86/mathops.h
parentc76374c6db5f486672f9df223f43e4892bd655c9 (diff)
mathops: convert MULL/MULH/MUL64 to inline functions rather than macros.
This fixes unexpected name collisions that were occurring with variables declared within the macros. It also fixes the fate-acodec-ac3_fixed regression test on x86-32.
Diffstat (limited to 'libavcodec/x86/mathops.h')
-rw-r--r--libavcodec/x86/mathops.h53
1 files changed, 37 insertions, 16 deletions
diff --git a/libavcodec/x86/mathops.h b/libavcodec/x86/mathops.h
index 5949dfe3d4..4e54886227 100644
--- a/libavcodec/x86/mathops.h
+++ b/libavcodec/x86/mathops.h
@@ -26,24 +26,45 @@
#include "libavutil/common.h"
#if ARCH_X86_32
-#define MULL(ra, rb, shift) \
- ({ int rt, dummy; __asm__ (\
- "imull %3 \n\t"\
- "shrdl %4, %%edx, %%eax \n\t"\
- : "=a"(rt), "=d"(dummy)\
- : "a" ((int)(ra)), "rm" ((int)(rb)), "i"(shift));\
- rt; })
-#define MULH(ra, rb) \
- ({ int rt, dummy;\
- __asm__ ("imull %3\n\t" : "=d"(rt), "=a"(dummy): "a" ((int)(ra)), "rm" ((int)(rb)));\
- rt; })
+#define MULL MULL
+static av_always_inline av_const int MULL(int a, int b, unsigned shift)
+{
+ int rt, dummy;
+ __asm__ (
+ "imull %3 \n\t"
+ "shrdl %4, %%edx, %%eax \n\t"
+ :"=a"(rt), "=d"(dummy)
+ :"a"(a), "rm"(b), "i"(shift)
+ );
+ return rt;
+}
-#define MUL64(ra, rb) \
- ({ int64_t rt;\
- __asm__ ("imull %2\n\t" : "=A"(rt) : "a" ((int)(ra)), "g" ((int)(rb)));\
- rt; })
-#endif
+#define MULH MULH
+static av_always_inline av_const int MULH(int a, int b)
+{
+ int rt, dummy;
+ __asm__ (
+ "imull %3"
+ :"=d"(rt), "=a"(dummy)
+ :"a"(a), "rm"(b)
+ );
+ return rt;
+}
+
+#define MUL64 MUL64
+static av_always_inline av_const int64_t MUL64(int a, int b)
+{
+ int64_t rt;
+ __asm__ (
+ "imull %2"
+ :"=A"(rt)
+ :"a"(a), "g"(b)
+ );
+ return rt;
+}
+
+#endif /* ARCH_X86_32 */
#if HAVE_CMOV
/* median of 3 */