summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/i386/dsputil_mmx.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libffmpeg/libavcodec/i386/dsputil_mmx.c')
-rw-r--r--src/libffmpeg/libavcodec/i386/dsputil_mmx.c241
1 files changed, 120 insertions, 121 deletions
diff --git a/src/libffmpeg/libavcodec/i386/dsputil_mmx.c b/src/libffmpeg/libavcodec/i386/dsputil_mmx.c
index 708d0b091..94b88b70e 100644
--- a/src/libffmpeg/libavcodec/i386/dsputil_mmx.c
+++ b/src/libffmpeg/libavcodec/i386/dsputil_mmx.c
@@ -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 diff_pixels_mmx(DCTELEM *block, const UINT8 *s1, const UINT8 *s2, in
);
}
-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 @@ static void put_pixels_clamped_mmx(const DCTELEM *block, UINT8 *pixels, int line
:"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 int pix_sum16_mmx(UINT8 * pix, int line_size){
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 @@ void dsputil_init_mmx(void)
#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;
-
- 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;
-
- 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;
-
- 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;
-
- 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;
-
- 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;
-
- 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;
-
- 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;
-
- 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->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;
+
+ 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;
+
+ 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;
+
+ 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;
+
+ 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;
+
+ 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;
+
+ 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;
+
+ 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;
+
+ 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;
-
- 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;
-
- 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;
-
- 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;
-
- 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;
-
- 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->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;
+
+ 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;
+
+ 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;
+
+ 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;
+
+ 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;
+
+ 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;
-
- 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;
-
- 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[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;
+
+ 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;
+
+ 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 @@ void dsputil_init_mmx(void)
/* 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;
}
}
}