mirror of https://git.ffmpeg.org/ffmpeg.git
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.
This commit is contained in:
parent
c76374c6db
commit
b181b8fb96
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue