Mercurial > libavcodec.hg
diff i386/dsputil_mmx.c @ 853:eacc2dd8fd9d libavcodec
* using DSPContext - so each codec could use its local (sub)set of CPU extension
author | kabi |
---|---|
date | Mon, 11 Nov 2002 09:40:17 +0000 |
parents | e65798d228ea |
children | 725ef4ea3ecc |
line wrap: on
line diff
--- a/i386/dsputil_mmx.c Mon Nov 11 09:37:40 2002 +0000 +++ b/i386/dsputil_mmx.c Mon Nov 11 09:40:17 2002 +0000 @@ -22,7 +22,7 @@ #include "../dsputil.h" int mm_flags; /* multimedia extension flags */ - +/* FIXME use them in static form */ int pix_abs16x16_mmx(UINT8 *blk1, UINT8 *blk2, int lx); int pix_abs16x16_x2_mmx(UINT8 *blk1, UINT8 *blk2, int lx); int pix_abs16x16_y2_mmx(UINT8 *blk1, UINT8 *blk2, int lx); @@ -242,7 +242,7 @@ ); } -static void put_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line_size) +void put_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line_size) { const DCTELEM *p; UINT8 *pix; @@ -297,7 +297,7 @@ :"memory"); } -static void add_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line_size) +void add_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line_size) { const DCTELEM *p; UINT8 *pix; @@ -457,7 +457,7 @@ static void just_return() { return; } #endif -void dsputil_init_mmx(void) +void dsputil_init_mmx(DSPContext* c, unsigned mask) { mm_flags = mm_support(); #if 0 @@ -476,112 +476,112 @@ #endif if (mm_flags & MM_MMX) { - get_pixels = get_pixels_mmx; - diff_pixels = diff_pixels_mmx; - put_pixels_clamped = put_pixels_clamped_mmx; - add_pixels_clamped = add_pixels_clamped_mmx; - clear_blocks= clear_blocks_mmx; - pix_sum= pix_sum16_mmx; + c->get_pixels = get_pixels_mmx; + c->diff_pixels = diff_pixels_mmx; + c->put_pixels_clamped = put_pixels_clamped_mmx; + c->add_pixels_clamped = add_pixels_clamped_mmx; + c->clear_blocks = clear_blocks_mmx; + c->pix_sum = pix_sum16_mmx; - pix_abs16x16 = pix_abs16x16_mmx; - pix_abs16x16_x2 = pix_abs16x16_x2_mmx; - pix_abs16x16_y2 = pix_abs16x16_y2_mmx; - pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx; - pix_abs8x8 = pix_abs8x8_mmx; - pix_abs8x8_x2 = pix_abs8x8_x2_mmx; - pix_abs8x8_y2 = pix_abs8x8_y2_mmx; - pix_abs8x8_xy2= pix_abs8x8_xy2_mmx; + c->pix_abs16x16 = pix_abs16x16_mmx; + c->pix_abs16x16_x2 = pix_abs16x16_x2_mmx; + c->pix_abs16x16_y2 = pix_abs16x16_y2_mmx; + c->pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx; + c->pix_abs8x8 = pix_abs8x8_mmx; + c->pix_abs8x8_x2 = pix_abs8x8_x2_mmx; + c->pix_abs8x8_y2 = pix_abs8x8_y2_mmx; + c->pix_abs8x8_xy2 = pix_abs8x8_xy2_mmx; - put_pixels_tab[0][0] = put_pixels16_mmx; - put_pixels_tab[0][1] = put_pixels16_x2_mmx; - put_pixels_tab[0][2] = put_pixels16_y2_mmx; - put_pixels_tab[0][3] = put_pixels16_xy2_mmx; + c->put_pixels_tab[0][0] = put_pixels16_mmx; + c->put_pixels_tab[0][1] = put_pixels16_x2_mmx; + c->put_pixels_tab[0][2] = put_pixels16_y2_mmx; + c->put_pixels_tab[0][3] = put_pixels16_xy2_mmx; - put_no_rnd_pixels_tab[0][0] = put_pixels16_mmx; - put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx; - put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx; - put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_mmx; + c->put_no_rnd_pixels_tab[0][0] = put_pixels16_mmx; + c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx; + c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx; + c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_mmx; - avg_pixels_tab[0][0] = avg_pixels16_mmx; - avg_pixels_tab[0][1] = avg_pixels16_x2_mmx; - avg_pixels_tab[0][2] = avg_pixels16_y2_mmx; - avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx; + c->avg_pixels_tab[0][0] = avg_pixels16_mmx; + c->avg_pixels_tab[0][1] = avg_pixels16_x2_mmx; + c->avg_pixels_tab[0][2] = avg_pixels16_y2_mmx; + c->avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx; - avg_no_rnd_pixels_tab[0][0] = avg_no_rnd_pixels16_mmx; - avg_no_rnd_pixels_tab[0][1] = avg_no_rnd_pixels16_x2_mmx; - avg_no_rnd_pixels_tab[0][2] = avg_no_rnd_pixels16_y2_mmx; - avg_no_rnd_pixels_tab[0][3] = avg_no_rnd_pixels16_xy2_mmx; - - put_pixels_tab[1][0] = put_pixels8_mmx; - put_pixels_tab[1][1] = put_pixels8_x2_mmx; - put_pixels_tab[1][2] = put_pixels8_y2_mmx; - put_pixels_tab[1][3] = put_pixels8_xy2_mmx; + c->avg_no_rnd_pixels_tab[0][0] = avg_no_rnd_pixels16_mmx; + c->avg_no_rnd_pixels_tab[0][1] = avg_no_rnd_pixels16_x2_mmx; + c->avg_no_rnd_pixels_tab[0][2] = avg_no_rnd_pixels16_y2_mmx; + c->avg_no_rnd_pixels_tab[0][3] = avg_no_rnd_pixels16_xy2_mmx; + + c->put_pixels_tab[1][0] = put_pixels8_mmx; + c->put_pixels_tab[1][1] = put_pixels8_x2_mmx; + c->put_pixels_tab[1][2] = put_pixels8_y2_mmx; + c->put_pixels_tab[1][3] = put_pixels8_xy2_mmx; - put_no_rnd_pixels_tab[1][0] = put_pixels8_mmx; - put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx; - put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx; - put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_mmx; + c->put_no_rnd_pixels_tab[1][0] = put_pixels8_mmx; + c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx; + c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx; + c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_mmx; - avg_pixels_tab[1][0] = avg_pixels8_mmx; - avg_pixels_tab[1][1] = avg_pixels8_x2_mmx; - avg_pixels_tab[1][2] = avg_pixels8_y2_mmx; - avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx; + c->avg_pixels_tab[1][0] = avg_pixels8_mmx; + c->avg_pixels_tab[1][1] = avg_pixels8_x2_mmx; + c->avg_pixels_tab[1][2] = avg_pixels8_y2_mmx; + c->avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx; - avg_no_rnd_pixels_tab[1][0] = avg_no_rnd_pixels8_mmx; - avg_no_rnd_pixels_tab[1][1] = avg_no_rnd_pixels8_x2_mmx; - avg_no_rnd_pixels_tab[1][2] = avg_no_rnd_pixels8_y2_mmx; - avg_no_rnd_pixels_tab[1][3] = avg_no_rnd_pixels8_xy2_mmx; + c->avg_no_rnd_pixels_tab[1][0] = avg_no_rnd_pixels8_mmx; + c->avg_no_rnd_pixels_tab[1][1] = avg_no_rnd_pixels8_x2_mmx; + c->avg_no_rnd_pixels_tab[1][2] = avg_no_rnd_pixels8_y2_mmx; + c->avg_no_rnd_pixels_tab[1][3] = avg_no_rnd_pixels8_xy2_mmx; if (mm_flags & MM_MMXEXT) { - pix_abs16x16 = pix_abs16x16_mmx2; - pix_abs16x16_x2 = pix_abs16x16_x2_mmx2; - pix_abs16x16_y2 = pix_abs16x16_y2_mmx2; - pix_abs16x16_xy2= pix_abs16x16_xy2_mmx2; + c->pix_abs16x16 = pix_abs16x16_mmx2; + c->pix_abs16x16_x2 = pix_abs16x16_x2_mmx2; + c->pix_abs16x16_y2 = pix_abs16x16_y2_mmx2; + c->pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx2; - pix_abs8x8 = pix_abs8x8_mmx2; - pix_abs8x8_x2 = pix_abs8x8_x2_mmx2; - pix_abs8x8_y2 = pix_abs8x8_y2_mmx2; - pix_abs8x8_xy2= pix_abs8x8_xy2_mmx2; + c->pix_abs8x8 = pix_abs8x8_mmx2; + c->pix_abs8x8_x2 = pix_abs8x8_x2_mmx2; + c->pix_abs8x8_y2 = pix_abs8x8_y2_mmx2; + c->pix_abs8x8_xy2 = pix_abs8x8_xy2_mmx2; - put_pixels_tab[0][1] = put_pixels16_x2_mmx2; - put_pixels_tab[0][2] = put_pixels16_y2_mmx2; - put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx2; - put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx2; + c->put_pixels_tab[0][1] = put_pixels16_x2_mmx2; + c->put_pixels_tab[0][2] = put_pixels16_y2_mmx2; + c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx2; + c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx2; - avg_pixels_tab[0][0] = avg_pixels16_mmx2; - avg_pixels_tab[0][1] = avg_pixels16_x2_mmx2; - avg_pixels_tab[0][2] = avg_pixels16_y2_mmx2; - avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx2; + c->avg_pixels_tab[0][0] = avg_pixels16_mmx2; + c->avg_pixels_tab[0][1] = avg_pixels16_x2_mmx2; + c->avg_pixels_tab[0][2] = avg_pixels16_y2_mmx2; + c->avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx2; - put_pixels_tab[1][1] = put_pixels8_x2_mmx2; - put_pixels_tab[1][2] = put_pixels8_y2_mmx2; - put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx2; - put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx2; + c->put_pixels_tab[1][1] = put_pixels8_x2_mmx2; + c->put_pixels_tab[1][2] = put_pixels8_y2_mmx2; + c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx2; + c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx2; - avg_pixels_tab[1][0] = avg_pixels8_mmx2; - avg_pixels_tab[1][1] = avg_pixels8_x2_mmx2; - avg_pixels_tab[1][2] = avg_pixels8_y2_mmx2; - avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx2; + c->avg_pixels_tab[1][0] = avg_pixels8_mmx2; + c->avg_pixels_tab[1][1] = avg_pixels8_x2_mmx2; + c->avg_pixels_tab[1][2] = avg_pixels8_y2_mmx2; + c->avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx2; } else if (mm_flags & MM_3DNOW) { - put_pixels_tab[0][1] = put_pixels16_x2_3dnow; - put_pixels_tab[0][2] = put_pixels16_y2_3dnow; - put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_3dnow; - put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_3dnow; + c->put_pixels_tab[0][1] = put_pixels16_x2_3dnow; + c->put_pixels_tab[0][2] = put_pixels16_y2_3dnow; + c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_3dnow; + c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_3dnow; - avg_pixels_tab[0][0] = avg_pixels16_3dnow; - avg_pixels_tab[0][1] = avg_pixels16_x2_3dnow; - avg_pixels_tab[0][2] = avg_pixels16_y2_3dnow; - avg_pixels_tab[0][3] = avg_pixels16_xy2_3dnow; - - put_pixels_tab[1][1] = put_pixels8_x2_3dnow; - put_pixels_tab[1][2] = put_pixels8_y2_3dnow; - put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_3dnow; - put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_3dnow; + c->avg_pixels_tab[0][0] = avg_pixels16_3dnow; + c->avg_pixels_tab[0][1] = avg_pixels16_x2_3dnow; + c->avg_pixels_tab[0][2] = avg_pixels16_y2_3dnow; + c->avg_pixels_tab[0][3] = avg_pixels16_xy2_3dnow; - avg_pixels_tab[1][0] = avg_pixels8_3dnow; - avg_pixels_tab[1][1] = avg_pixels8_x2_3dnow; - avg_pixels_tab[1][2] = avg_pixels8_y2_3dnow; - avg_pixels_tab[1][3] = avg_pixels8_xy2_3dnow; + c->put_pixels_tab[1][1] = put_pixels8_x2_3dnow; + c->put_pixels_tab[1][2] = put_pixels8_y2_3dnow; + c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_3dnow; + c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_3dnow; + + c->avg_pixels_tab[1][0] = avg_pixels8_3dnow; + c->avg_pixels_tab[1][1] = avg_pixels8_x2_3dnow; + c->avg_pixels_tab[1][2] = avg_pixels8_y2_3dnow; + c->avg_pixels_tab[1][3] = avg_pixels8_xy2_3dnow; } } @@ -624,25 +624,24 @@ /* remove any non bit exact operation (testing purpose). NOTE that this function should be kept as small as possible because it is always difficult to test automatically non bit exact cases. */ -void dsputil_set_bit_exact_mmx(void) +void dsputil_set_bit_exact_mmx(DSPContext* c, unsigned mask) { if (mm_flags & MM_MMX) { - /* MMX2 & 3DNOW */ - put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx; - put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx; - avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx; - put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx; - put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx; - avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx; + c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx; + c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmx; + c->avg_pixels_tab[0][3] = avg_pixels16_xy2_mmx; + c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_mmx; + c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_mmx; + c->avg_pixels_tab[1][3] = avg_pixels8_xy2_mmx; if (mm_flags & MM_MMXEXT) { - pix_abs16x16_x2 = pix_abs16x16_x2_mmx; - pix_abs16x16_y2 = pix_abs16x16_y2_mmx; - pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx; - pix_abs8x8_x2 = pix_abs8x8_x2_mmx; - pix_abs8x8_y2 = pix_abs8x8_y2_mmx; - pix_abs8x8_xy2= pix_abs8x8_xy2_mmx; + c->pix_abs16x16_x2 = pix_abs16x16_x2_mmx; + c->pix_abs16x16_y2 = pix_abs16x16_y2_mmx; + c->pix_abs16x16_xy2 = pix_abs16x16_xy2_mmx; + c->pix_abs8x8_x2 = pix_abs8x8_x2_mmx; + c->pix_abs8x8_y2 = pix_abs8x8_y2_mmx; + c->pix_abs8x8_xy2= pix_abs8x8_xy2_mmx; } } }