From 6aa6ea8e11ce58543d45e99c37cd3d6179a76af0 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Wed, 29 May 2002 19:57:21 +0000 Subject: [PATCH] * reenabled original xy2 put routine - rounding error is really bad with the new code * added PAVGP macros for parallel processing to safe few more cycles on celerons Originally committed as revision 625 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/i386/dsputil_mmx.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/libavcodec/i386/dsputil_mmx.c b/libavcodec/i386/dsputil_mmx.c index 58b0c23..2e8baef 100644 --- a/libavcodec/i386/dsputil_mmx.c +++ b/libavcodec/i386/dsputil_mmx.c @@ -107,17 +107,47 @@ static const uint64_t mm_wtwo __attribute__ ((aligned(8))) = 0x0002000200020002U "psrlq $1, " #regb " \n\t"\ "psubb " #regb ", " #regr " \n\t" +#define PAVGBP_MMX_NO_RND(rega, regb, regr, regc, regd, regp) \ + "movq " #rega ", " #regr " \n\t"\ + "movq " #regc ", " #regp " \n\t"\ + "pand " #regb ", " #regr " \n\t"\ + "pand " #regd ", " #regp " \n\t"\ + "pxor " #rega ", " #regb " \n\t"\ + "pxor " #regc ", " #regd " \n\t"\ + "pand %%mm7, " #regb " \n\t"\ + "pand %%mm7, " #regd " \n\t"\ + "psrlq $1, " #regb " \n\t"\ + "psrlq $1, " #regd " \n\t"\ + "paddb " #regb ", " #regr " \n\t"\ + "paddb " #regd ", " #regp " \n\t" + +#define PAVGBP_MMX(rega, regb, regr, regc, regd, regp) \ + "movq " #rega ", " #regr " \n\t"\ + "movq " #regc ", " #regp " \n\t"\ + "por " #regb ", " #regr " \n\t"\ + "por " #regd ", " #regp " \n\t"\ + "pxor " #rega ", " #regb " \n\t"\ + "pxor " #regc ", " #regd " \n\t"\ + "pand %%mm7, " #regb " \n\t"\ + "pand %%mm7, " #regd " \n\t"\ + "psrlq $1, " #regd " \n\t"\ + "psrlq $1, " #regb " \n\t"\ + "psubb " #regb ", " #regr " \n\t"\ + "psubb " #regd ", " #regp " \n\t" + /***********************************/ /* MMX no rounding */ #define DEF(x, y) x ## _no_rnd_ ## y ##_mmx #define PAVGB(a, b) PAVGB_MMX_NO_RND(a, b, %%mm6) #define PAVGBR(a, b, c) PAVGB_MMX_NO_RND(a, b, c) +#define PAVGBP(a, b, c, d, e, f) PAVGBP_MMX_NO_RND(a, b, c, d, e, f) #include "dsputil_mmx_rnd.h" #undef DEF #undef PAVGB #undef PAVGBR +#undef PAVGBP /***********************************/ /* MMX rounding */ @@ -125,11 +155,13 @@ static const uint64_t mm_wtwo __attribute__ ((aligned(8))) = 0x0002000200020002U #define PAVGB(a, b) PAVGB_MMX(a, b, %%mm6) #define PAVGBR(a, b, c) PAVGB_MMX(a, b, c) +#define PAVGBP(a, b, c, d, e, f) PAVGBP_MMX(a, b, c, d, e, f) #include "dsputil_mmx_rnd.h" #undef DEF #undef PAVGB #undef PAVGBR +#undef PAVGBP /***********************************/ /* 3Dnow specific */ @@ -339,7 +371,7 @@ static void put_pixels_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int ); } -#if 0 +#if 1 static void put_pixels_xy2_mmx(UINT8 *block, const UINT8 *pixels, int line_size, int h) { UINT8 *p; -- 2.7.4