diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2011-03-15 13:30:24 -0400 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2011-03-15 13:43:47 -0400 |
commit | b181b8fb96f9fdc2b166fcbd048110cec653cdf9 (patch) | |
tree | da7a8190917cc1958f405efeb0ea2dde708dc354 /libavcodec/x86 | |
parent | c76374c6db5f486672f9df223f43e4892bd655c9 (diff) | |
download | ffmpeg-streaming-b181b8fb96f9fdc2b166fcbd048110cec653cdf9.zip ffmpeg-streaming-b181b8fb96f9fdc2b166fcbd048110cec653cdf9.tar.gz |
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')
-rw-r--r-- | libavcodec/x86/mathops.h | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/libavcodec/x86/mathops.h b/libavcodec/x86/mathops.h index 5949dfe..4e54886 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 */ |