Add explicit (int) cast to i386 optimized MUL* macros.

Wrong result is returned when 16-bit value is passed as value.
Also fixes "Warning: using `%edx' instead of `%dx' due to `l' suffix".

Originally committed as revision 14981 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Vladimir Voroshilov 16 years ago
parent 51f2a119cb
commit 2ccddc0211
  1. 6
      libavcodec/i386/mathops.h

@ -28,18 +28,18 @@
"imull %3 \n\t"\
"shrdl %4, %%edx, %%eax \n\t"\
: "=a"(rt), "=d"(dummy)\
: "a" (ra), "rm" (rb), "i"(FRAC_BITS));\
: "a" ((int)ra), "rm" ((int)rb), "i"(FRAC_BITS));\
rt; })
#endif
#define MULH(ra, rb) \
({ int rt, dummy;\
asm ("imull %3\n\t" : "=d"(rt), "=a"(dummy): "a" (ra), "rm" (rb));\
asm ("imull %3\n\t" : "=d"(rt), "=a"(dummy): "a" ((int)ra), "rm" ((int)rb));\
rt; })
#define MUL64(ra, rb) \
({ int64_t rt;\
asm ("imull %2\n\t" : "=A"(rt) : "a" (ra), "g" (rb));\
asm ("imull %2\n\t" : "=A"(rt) : "a" ((int)ra), "g" ((int)rb));\
rt; })
#endif /* FFMPEG_I386_MATHOPS_H */

Loading…
Cancel
Save