[FFmpeg-devel] [PATCH][RFC] Fix MMX rgb24 to yuv conversion with gcc 4.6

Zuxy Meng zuxy.meng
Sun Feb 13 10:35:09 CET 2011


2011/2/13 Mans Rullgard <mans at mansr.com>:
> When built with gcc 4.6, the MMX rgb24 to yuv conversion gives
> wrong output. ?The compiler produces this warning:
>
> libswscale/swscale_template.c:1885:5: warning: use of memory input without lvalue in asm operand 4 is deprecated
>
> Changing the memory operand to a register makes it work, though
> a better solution is perhaps possible.
> ---
> ?libswscale/swscale_template.c | ? 16 ++++++++--------
> ?1 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/libswscale/swscale_template.c b/libswscale/swscale_template.c
> index 9da6b41..9863a7c 100644
> --- a/libswscale/swscale_template.c
> +++ b/libswscale/swscale_template.c
> @@ -1883,7 +1883,7 @@ static inline void RENAME(bgr24ToY_mmx)(uint8_t *dst, const uint8_t *src, long w
> ?static inline void RENAME(bgr24ToUV_mmx)(uint8_t *dstU, uint8_t *dstV, const uint8_t *src, long width, enum PixelFormat srcFormat)
> ?{
> ? ? __asm__ volatile(
> - ? ? ? ?"movq ? ? ? ? ? ? ? ? ? ?24+%4, %%mm6 ? ? ? \n\t"
> + ? ? ? ?"movq ? ? ? ? ? ? ? ? ? 24(%4), %%mm6 ? ? ? \n\t"
> ? ? ? ? "mov ? ? ? ? ? ? ? ? ? ? ? ?%3, %%"REG_a" ? \n\t"
> ? ? ? ? "pxor ? ? ? ? ? ? ? ? ? ?%%mm7, %%mm7 ? ? ? \n\t"
> ? ? ? ? "1: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \n\t"
> @@ -1894,9 +1894,9 @@ static inline void RENAME(bgr24ToUV_mmx)(uint8_t *dstU, uint8_t *dstV, const uin
> ? ? ? ? "punpcklbw ? ? ? ? ? ? ? %%mm7, %%mm1 ? ? ? \n\t"
> ? ? ? ? "movq ? ? ? ? ? ? ? ? ? ?%%mm0, %%mm2 ? ? ? \n\t"
> ? ? ? ? "movq ? ? ? ? ? ? ? ? ? ?%%mm1, %%mm3 ? ? ? \n\t"
> - ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? ? ?%4, %%mm0 ? ? ? \n\t"
> - ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? ?8+%4, %%mm1 ? ? ? \n\t"
> - ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? 16+%4, %%mm2 ? ? ? \n\t"
> + ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? ?(%4), %%mm0 ? ? ? \n\t"
> + ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? 8(%4), %%mm1 ? ? ? \n\t"
> + ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ?16(%4), %%mm2 ? ? ? \n\t"
> ? ? ? ? "pmaddwd ? ? ? ? ? ? ? ? %%mm6, %%mm3 ? ? ? \n\t"
> ? ? ? ? "paddd ? ? ? ? ? ? ? ? ? %%mm1, %%mm0 ? ? ? \n\t"
> ? ? ? ? "paddd ? ? ? ? ? ? ? ? ? %%mm3, %%mm2 ? ? ? \n\t"
> @@ -1908,9 +1908,9 @@ static inline void RENAME(bgr24ToUV_mmx)(uint8_t *dstU, uint8_t *dstV, const uin
> ? ? ? ? "punpcklbw ? ? ? ? ? ? ? %%mm7, %%mm3 ? ? ? \n\t"
> ? ? ? ? "movq ? ? ? ? ? ? ? ? ? ?%%mm1, %%mm4 ? ? ? \n\t"
> ? ? ? ? "movq ? ? ? ? ? ? ? ? ? ?%%mm3, %%mm5 ? ? ? \n\t"
> - ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? ? ?%4, %%mm1 ? ? ? \n\t"
> - ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? ?8+%4, %%mm3 ? ? ? \n\t"
> - ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? 16+%4, %%mm4 ? ? ? \n\t"
> + ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? ?(%4), %%mm1 ? ? ? \n\t"
> + ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ? 8(%4), %%mm3 ? ? ? \n\t"
> + ? ? ? ?"pmaddwd ? ? ? ? ? ? ? ?16(%4), %%mm4 ? ? ? \n\t"
> ? ? ? ? "pmaddwd ? ? ? ? ? ? ? ? %%mm6, %%mm5 ? ? ? \n\t"
> ? ? ? ? "paddd ? ? ? ? ? ? ? ? ? %%mm3, %%mm1 ? ? ? \n\t"
> ? ? ? ? "paddd ? ? ? ? ? ? ? ? ? %%mm5, %%mm4 ? ? ? \n\t"
> @@ -1933,7 +1933,7 @@ static inline void RENAME(bgr24ToUV_mmx)(uint8_t *dstU, uint8_t *dstV, const uin
> ? ? ? ? "add ? ? ? ? ? ? ? ? ? ? ? ?$4, %%"REG_a" ? \n\t"
> ? ? ? ? " js ? ? ? ? ? ? ? ? ? ? ? ?1b ? ? ? ? ? ? ?\n\t"
> ? ? : "+r" (src)
> - ? ?: "r" (dstU+width), "r" (dstV+width), "g" ((x86_reg)-width), "m"(ff_bgr24toUV[srcFormat == PIX_FMT_RGB24][0])
> + ? ?: "r" (dstU+width), "r" (dstV+width), "g" ((x86_reg)-width), "r"(ff_bgr24toUV[srcFormat == PIX_FMT_RGB24])
> ? ? : "%"REG_a
> ? ? );
> ?}
> --

IIRC the code was written as such to make it compile on Darwin.

-- 
Zuxy
Beauty is truth,
While truth is beauty.
PGP KeyID: E8555ED6



More information about the ffmpeg-devel mailing list