Mercurial > libavcodec.hg
diff i386/dsputil_mmx.c @ 1984:ef919e9ef73e libavcodec
separate out put_signed_pixels_clamped() into its own function and
implement an optimized MMX version of the function
author | melanson |
---|---|
date | Tue, 27 Apr 2004 03:58:06 +0000 |
parents | 89422281f6f6 |
children | b2bc62fdecc0 |
line wrap: on
line diff
--- a/i386/dsputil_mmx.c Mon Apr 26 21:46:01 2004 +0000 +++ b/i386/dsputil_mmx.c Tue Apr 27 03:58:06 2004 +0000 @@ -22,6 +22,7 @@ #include "../dsputil.h" #include "../simple_idct.h" +#include "mmx.h" //#undef NDEBUG //#include <assert.h> @@ -293,6 +294,23 @@ :"memory"); } +void put_signed_pixels_clamped_mmx(const DCTELEM *block, uint8_t *pixels, int line_size) +{ + int i; + unsigned char __align8 vector128[8] = + { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }; + + movq_m2r(*vector128, mm1); + for (i = 0; i < 8; i++) { + movq_m2r(*(block), mm0); + packsswb_m2r(*(block + 4), mm0); + block += 8; + paddb_r2r(mm1, mm0); + movq_r2m(mm0, *pixels); + pixels += line_size; + } +} + void add_pixels_clamped_mmx(const DCTELEM *block, uint8_t *pixels, int line_size) { const DCTELEM *p; @@ -2160,6 +2178,7 @@ c->diff_pixels = diff_pixels_mmx; #endif //CONFIG_ENCODERS c->put_pixels_clamped = put_pixels_clamped_mmx; + c->put_signed_pixels_clamped = put_signed_pixels_clamped_mmx; c->add_pixels_clamped = add_pixels_clamped_mmx; c->clear_blocks = clear_blocks_mmx; #ifdef CONFIG_ENCODERS