diff options
author | Mike Melanson <mike@multimedia.cx> | 2004-04-27 03:58:06 +0000 |
---|---|---|
committer | Mike Melanson <mike@multimedia.cx> | 2004-04-27 03:58:06 +0000 |
commit | f9ed9d8584d762142cf5e579b38bfe649cc5c8e8 (patch) | |
tree | 790114f1ba563c9f673933792b8f5f8811cf656e /libavcodec/i386 | |
parent | c0c37848d8c571b13c5fe443f6d0811ac2d3cc36 (diff) | |
download | ffmpeg-f9ed9d8584d762142cf5e579b38bfe649cc5c8e8.tar.gz |
separate out put_signed_pixels_clamped() into its own function and
implement an optimized MMX version of the function
Originally committed as revision 3082 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/i386')
-rw-r--r-- | libavcodec/i386/dsputil_mmx.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libavcodec/i386/dsputil_mmx.c b/libavcodec/i386/dsputil_mmx.c index 61bfc89ac5..d117b0ca86 100644 --- a/libavcodec/i386/dsputil_mmx.c +++ b/libavcodec/i386/dsputil_mmx.c @@ -22,6 +22,7 @@ #include "../dsputil.h" #include "../simple_idct.h" +#include "mmx.h" //#undef NDEBUG //#include <assert.h> @@ -293,6 +294,23 @@ void put_pixels_clamped_mmx(const DCTELEM *block, uint8_t *pixels, int line_size :"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 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx) 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 |