summaryrefslogtreecommitdiff
path: root/libavcodec/i386
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2003-01-09 20:42:37 +0000
committerMichael Niedermayer <michaelni@gmx.at>2003-01-09 20:42:37 +0000
commitdb794953762b813d506501b3f6f4796ffd423a65 (patch)
tree1f7fa9477e2644725fa1f76a8c2effa0abc299f5 /libavcodec/i386
parent2826984994807ef03d559da119594eddb8331651 (diff)
qpel fix
Originally committed as revision 1426 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/i386')
-rw-r--r--libavcodec/i386/dsputil_mmx.c152
-rw-r--r--libavcodec/i386/dsputil_mmx_rnd.h268
2 files changed, 89 insertions, 331 deletions
diff --git a/libavcodec/i386/dsputil_mmx.c b/libavcodec/i386/dsputil_mmx.c
index 5fce7f914c..595881f784 100644
--- a/libavcodec/i386/dsputil_mmx.c
+++ b/libavcodec/i386/dsputil_mmx.c
@@ -1085,7 +1085,7 @@ static void OPNAME ## qpel8_mc00_ ## MMX (UINT8 *dst, UINT8 *src, int stride){\
}\
\
static void OPNAME ## qpel8_mc10_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t temp[32];\
+ uint64_t temp[8];\
uint8_t * const half= (uint8_t*)temp;\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(half, src, 8, stride, 8);\
OPNAME ## pixels8_l2_mmx(dst, src, half, stride, stride, 8);\
@@ -1096,14 +1096,14 @@ static void OPNAME ## qpel8_mc20_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
}\
\
static void OPNAME ## qpel8_mc30_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t temp[32];\
+ uint64_t temp[8];\
uint8_t * const half= (uint8_t*)temp;\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(half, src, 8, stride, 8);\
OPNAME ## pixels8_l2_mmx(dst, src+1, half, stride, stride, 8);\
}\
\
static void OPNAME ## qpel8_mc01_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t temp[32];\
+ uint64_t temp[8];\
uint8_t * const half= (uint8_t*)temp;\
put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(half, src, 8, stride);\
OPNAME ## pixels8_l2_mmx(dst, src, half, stride, stride, 8);\
@@ -1114,53 +1114,49 @@ static void OPNAME ## qpel8_mc02_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
}\
\
static void OPNAME ## qpel8_mc03_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t temp[32];\
+ uint64_t temp[8];\
uint8_t * const half= (uint8_t*)temp;\
put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(half, src, 8, stride);\
OPNAME ## pixels8_l2_mmx(dst, src+stride, half, stride, stride, 8);\
}\
static void OPNAME ## qpel8_mc11_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[8*2 + 8*2 + 18*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*64 + 8;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 64;\
+ uint64_t half[8 + 9];\
+ uint8_t * const halfH= ((uint8_t*)half) + 64;\
+ uint8_t * const halfHV= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\
- put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfV, src, 8, stride);\
+ put ## RND ## pixels8_l2_mmx(halfH, src, halfH, 8, stride, 9);\
put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
- OPNAME ## pixels8_l4_mmx(dst, src, (uint8_t*)half, stride, 8);\
+ OPNAME ## pixels8_l2_mmx(dst, halfH, halfHV, stride, 8, 8);\
}\
static void OPNAME ## qpel8_mc31_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[8*2 + 8*2 + 18*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*64 + 8;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 64;\
+ uint64_t half[8 + 9];\
+ uint8_t * const halfH= ((uint8_t*)half) + 64;\
+ uint8_t * const halfHV= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\
- put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfV, src+1, 8, stride);\
+ put ## RND ## pixels8_l2_mmx(halfH, src+1, halfH, 8, stride, 9);\
put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
- OPNAME ## pixels8_l4_mmx(dst, src+1, (uint8_t*)half, stride, 8);\
+ OPNAME ## pixels8_l2_mmx(dst, halfH, halfHV, stride, 8, 8);\
}\
static void OPNAME ## qpel8_mc13_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[8*2 + 8*2 + 9*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*64;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 64;\
+ uint64_t half[8 + 9];\
+ uint8_t * const halfH= ((uint8_t*)half) + 64;\
+ uint8_t * const halfHV= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\
- put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfV, src, 8, stride);\
+ put ## RND ## pixels8_l2_mmx(halfH, src, halfH, 8, stride, 9);\
put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
- OPNAME ## pixels8_l4_mmx(dst, src+stride, (uint8_t*)half, stride, 8);\
+ OPNAME ## pixels8_l2_mmx(dst, halfH+8, halfHV, stride, 8, 8);\
}\
static void OPNAME ## qpel8_mc33_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[8*2 + 8*2 + 9*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*64;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 64;\
- put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src , 8, stride, 9);\
- put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfV, src+1, 8, stride);\
+ uint64_t half[8 + 9];\
+ uint8_t * const halfH= ((uint8_t*)half) + 64;\
+ uint8_t * const halfHV= ((uint8_t*)half);\
+ put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\
+ put ## RND ## pixels8_l2_mmx(halfH, src+1, halfH, 8, stride, 9);\
put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
- OPNAME ## pixels8_l4_mmx(dst, src+stride+1, (uint8_t*)half, stride, 8);\
+ OPNAME ## pixels8_l2_mmx(dst, halfH+8, halfHV, stride, 8, 8);\
}\
static void OPNAME ## qpel8_mc21_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[8*2 + 9*2];\
+ uint64_t half[8 + 9];\
uint8_t * const halfH= ((uint8_t*)half) + 64;\
uint8_t * const halfHV= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\
@@ -1168,7 +1164,7 @@ static void OPNAME ## qpel8_mc21_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
OPNAME ## pixels8_l2_mmx(dst, halfH, halfHV, stride, 8, 8);\
}\
static void OPNAME ## qpel8_mc23_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[8*2 + 9*2];\
+ uint64_t half[8 + 9];\
uint8_t * const halfH= ((uint8_t*)half) + 64;\
uint8_t * const halfHV= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\
@@ -1176,27 +1172,21 @@ static void OPNAME ## qpel8_mc23_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
OPNAME ## pixels8_l2_mmx(dst, halfH+8, halfHV, stride, 8, 8);\
}\
static void OPNAME ## qpel8_mc12_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[8*2 + 8*2 + 9*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*64;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 64;\
+ uint64_t half[8 + 9];\
+ uint8_t * const halfH= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\
- put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfV, src, 8, stride);\
- put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
- OPNAME ## pixels8_l2_mmx(dst, halfV, halfHV, stride, 8, 8);\
+ put ## RND ## pixels8_l2_mmx(halfH, src, halfH, 8, stride, 9);\
+ OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, stride, 8);\
}\
static void OPNAME ## qpel8_mc32_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[8*2 + 8*2 + 9*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*64;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 64;\
+ uint64_t half[8 + 9];\
+ uint8_t * const halfH= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\
- put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfV, src+1, 8, stride);\
- put ## RND ## mpeg4_qpel8_v_lowpass_ ## MMX(halfHV, halfH, 8, 8);\
- OPNAME ## pixels8_l2_mmx(dst, halfV, halfHV, stride, 8, 8);\
+ put ## RND ## pixels8_l2_mmx(halfH, src+1, halfH, 8, stride, 9);\
+ OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, stride, 8);\
}\
static void OPNAME ## qpel8_mc22_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[9*2];\
+ uint64_t half[9];\
uint8_t * const halfH= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel8_h_lowpass_ ## MMX(halfH, src, 8, stride, 9);\
OPNAME ## mpeg4_qpel8_v_lowpass_ ## MMX(dst, halfH, stride, 8);\
@@ -1241,44 +1231,40 @@ static void OPNAME ## qpel16_mc03_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
OPNAME ## pixels16_l2_mmx(dst, src+stride, half, stride, stride, 16);\
}\
static void OPNAME ## qpel16_mc11_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[16*2 + 16*2 + 18*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*256 + 16;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 256;\
+ uint64_t half[16*2 + 17*2];\
+ uint8_t * const halfH= ((uint8_t*)half) + 256;\
+ uint8_t * const halfHV= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\
- put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfV, src, 16, stride);\
+ put ## RND ## pixels16_l2_mmx(halfH, src, halfH, 16, stride, 17);\
put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\
- OPNAME ## pixels16_l4_mmx(dst, src, (uint8_t*)half, stride, 16);\
+ OPNAME ## pixels16_l2_mmx(dst, halfH, halfHV, stride, 16, 16);\
}\
static void OPNAME ## qpel16_mc31_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[16*2 + 16*2 + 18*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*256 + 16;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 256;\
+ uint64_t half[16*2 + 17*2];\
+ uint8_t * const halfH= ((uint8_t*)half) + 256;\
+ uint8_t * const halfHV= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\
- put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfV, src+1, 16, stride);\
+ put ## RND ## pixels16_l2_mmx(halfH, src+1, halfH, 16, stride, 17);\
put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\
- OPNAME ## pixels16_l4_mmx(dst, src+1, (uint8_t*)half, stride, 16);\
+ OPNAME ## pixels16_l2_mmx(dst, halfH, halfHV, stride, 16, 16);\
}\
static void OPNAME ## qpel16_mc13_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[16*2 + 16*2 + 17*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*256;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 256;\
+ uint64_t half[16*2 + 17*2];\
+ uint8_t * const halfH= ((uint8_t*)half) + 256;\
+ uint8_t * const halfHV= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\
- put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfV, src, 16, stride);\
+ put ## RND ## pixels16_l2_mmx(halfH, src, halfH, 16, stride, 17);\
put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\
- OPNAME ## pixels16_l4_mmx(dst, src+stride, (uint8_t*)half, stride, 16);\
+ OPNAME ## pixels16_l2_mmx(dst, halfH+16, halfHV, stride, 16, 16);\
}\
static void OPNAME ## qpel16_mc33_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[16*2 + 16*2 + 17*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*256;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 256;\
- put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src , 16, stride, 17);\
- put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfV, src+1, 16, stride);\
+ uint64_t half[16*2 + 17*2];\
+ uint8_t * const halfH= ((uint8_t*)half) + 256;\
+ uint8_t * const halfHV= ((uint8_t*)half);\
+ put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\
+ put ## RND ## pixels16_l2_mmx(halfH, src+1, halfH, 16, stride, 17);\
put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\
- OPNAME ## pixels16_l4_mmx(dst, src+stride+1, (uint8_t*)half, stride, 16);\
+ OPNAME ## pixels16_l2_mmx(dst, halfH+16, halfHV, stride, 16, 16);\
}\
static void OPNAME ## qpel16_mc21_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
uint64_t half[16*2 + 17*2];\
@@ -1297,24 +1283,18 @@ static void OPNAME ## qpel16_mc23_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
OPNAME ## pixels16_l2_mmx(dst, halfH+16, halfHV, stride, 16, 16);\
}\
static void OPNAME ## qpel16_mc12_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[16*2 + 16*2 + 17*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*256;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 256;\
+ uint64_t half[17*2];\
+ uint8_t * const halfH= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\
- put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfV, src, 16, stride);\
- put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\
- OPNAME ## pixels16_l2_mmx(dst, halfV, halfHV, stride, 16, 16);\
+ put ## RND ## pixels16_l2_mmx(halfH, src, halfH, 16, stride, 17);\
+ OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, halfH, stride, 16);\
}\
static void OPNAME ## qpel16_mc32_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
- uint64_t half[16*2 + 16*2 + 17*2];\
- uint8_t * const halfH= ((uint8_t*)half) + 2*256;\
- uint8_t * const halfV= ((uint8_t*)half);\
- uint8_t * const halfHV= ((uint8_t*)half) + 256;\
+ uint64_t half[17*2];\
+ uint8_t * const halfH= ((uint8_t*)half);\
put ## RND ## mpeg4_qpel16_h_lowpass_ ## MMX(halfH, src, 16, stride, 17);\
- put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfV, src+1, 16, stride);\
- put ## RND ## mpeg4_qpel16_v_lowpass_ ## MMX(halfHV, halfH, 16, 16);\
- OPNAME ## pixels16_l2_mmx(dst, halfV, halfHV, stride, 16, 16);\
+ put ## RND ## pixels16_l2_mmx(halfH, src+1, halfH, 16, stride, 17);\
+ OPNAME ## mpeg4_qpel16_v_lowpass_ ## MMX(dst, halfH, stride, 16);\
}\
static void OPNAME ## qpel16_mc22_ ## MMX(UINT8 *dst, UINT8 *src, int stride){\
uint64_t half[17*2];\
@@ -1525,7 +1505,7 @@ void dsputil_init_mmx(DSPContext* c, unsigned mask)
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;
-
+
SET_QPEL_FUNC(qpel_pixels_tab[0][ 0], qpel16_mc00_3dnow)
SET_QPEL_FUNC(qpel_pixels_tab[0][ 1], qpel16_mc10_3dnow)
SET_QPEL_FUNC(qpel_pixels_tab[0][ 2], qpel16_mc20_3dnow)
diff --git a/libavcodec/i386/dsputil_mmx_rnd.h b/libavcodec/i386/dsputil_mmx_rnd.h
index 0ae1cd99de..924972fc3a 100644
--- a/libavcodec/i386/dsputil_mmx_rnd.h
+++ b/libavcodec/i386/dsputil_mmx_rnd.h
@@ -58,6 +58,16 @@ static void DEF(put, pixels8_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int
{
MOVQ_BFE(mm6);
__asm __volatile(
+ "test $1, %0 \n\t"
+ " jz 1f \n\t"
+ "movq (%1), %%mm0 \n\t"
+ "movq (%2), %%mm1 \n\t"
+ "addl %4, %1 \n\t"
+ "addl $8, %2 \n\t"
+ PAVGB(%%mm0, %%mm1, %%mm4, %%mm6)
+ "movq %%mm4, (%3) \n\t"
+ "addl %5, %3 \n\t"
+ "decl %0 \n\t"
".balign 8 \n\t"
"1: \n\t"
"movq (%1), %%mm0 \n\t"
@@ -144,6 +154,19 @@ static void DEF(put, pixels16_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, in
{
MOVQ_BFE(mm6);
__asm __volatile(
+ "test $1, %0 \n\t"
+ " jz 1f \n\t"
+ "movq (%1), %%mm0 \n\t"
+ "movq (%2), %%mm1 \n\t"
+ "movq 8(%1), %%mm2 \n\t"
+ "movq 8(%2), %%mm3 \n\t"
+ "addl %4, %1 \n\t"
+ "addl $16, %2 \n\t"
+ PAVGBP(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
+ "movq %%mm4, (%3) \n\t"
+ "movq %%mm5, 8(%3) \n\t"
+ "addl %5, %3 \n\t"
+ "decl %0 \n\t"
".balign 8 \n\t"
"1: \n\t"
"movq (%1), %%mm0 \n\t"
@@ -271,124 +294,6 @@ static void DEF(put, pixels8_xy2)(UINT8 *block, const UINT8 *pixels, int line_si
:"eax", "memory");
}
-static void DEF(put, pixels8_l4)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int stride, int h)
-{
- MOVQ_ZERO(mm7);
- SET_RND(mm6); // =2 for rnd and =1 for no_rnd version
- __asm __volatile(
- ".balign 8 \n\t"
- "1: \n\t"
- "movq (%1), %%mm0 \n\t"
- "movq (%2), %%mm1 \n\t"
- "movq 64(%2), %%mm2 \n\t"
- "movq 136(%2), %%mm3 \n\t"
- "punpcklbw %%mm7, %%mm0 \n\t"
- "punpcklbw %%mm7, %%mm1 \n\t"
- "punpcklbw %%mm7, %%mm2 \n\t"
- "punpcklbw %%mm7, %%mm3 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm3 \n\t"
- "paddusw %%mm1, %%mm3 \n\t"
- "psrlw $2, %%mm3 \n\t"
- "movq (%1), %%mm0 \n\t"
- "movq (%2), %%mm1 \n\t"
- "movq 64(%2), %%mm2 \n\t"
- "movq 136(%2), %%mm4 \n\t"
- "punpckhbw %%mm7, %%mm0 \n\t"
- "punpckhbw %%mm7, %%mm1 \n\t"
- "punpckhbw %%mm7, %%mm2 \n\t"
- "punpckhbw %%mm7, %%mm4 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm4 \n\t"
- "paddusw %%mm1, %%mm4 \n\t"
- "psrlw $2, %%mm4 \n\t"
- "packuswb %%mm4, %%mm3 \n\t"
- "movq %%mm3, (%0) \n\t"
- "addl %4, %0 \n\t"
- "addl %4, %1 \n\t"
- "addl $8, %2 \n\t"
- "decl %3 \n\t"
- "jnz 1b \n\t"
- :"+r"(dst), "+r"(src1), "+r"(src2), "+r"(h)
- :"r"(stride)
- :"memory");
-}
-
-static void DEF(put, pixels16_l4)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int stride, int h)
-{
- MOVQ_ZERO(mm7);
- SET_RND(mm6); // =2 for rnd and =1 for no_rnd version
- __asm __volatile(
- ".balign 8 \n\t"
- "1: \n\t"
- "movq (%1), %%mm0 \n\t"
- "movq (%2), %%mm1 \n\t"
- "movq 256(%2), %%mm2 \n\t"
- "movq 528(%2), %%mm3 \n\t"
- "punpcklbw %%mm7, %%mm0 \n\t"
- "punpcklbw %%mm7, %%mm1 \n\t"
- "punpcklbw %%mm7, %%mm2 \n\t"
- "punpcklbw %%mm7, %%mm3 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm3 \n\t"
- "paddusw %%mm1, %%mm3 \n\t"
- "psrlw $2, %%mm3 \n\t"
- "movq (%1), %%mm0 \n\t"
- "movq (%2), %%mm1 \n\t"
- "movq 256(%2), %%mm2 \n\t"
- "movq 528(%2), %%mm4 \n\t"
- "punpckhbw %%mm7, %%mm0 \n\t"
- "punpckhbw %%mm7, %%mm1 \n\t"
- "punpckhbw %%mm7, %%mm2 \n\t"
- "punpckhbw %%mm7, %%mm4 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm4 \n\t"
- "paddusw %%mm1, %%mm4 \n\t"
- "psrlw $2, %%mm4 \n\t"
- "packuswb %%mm4, %%mm3 \n\t"
- "movq %%mm3, (%0) \n\t"
- "movq 8(%1), %%mm0 \n\t"
- "movq 8(%2), %%mm1 \n\t"
- "movq 264(%2), %%mm2 \n\t"
- "movq 536(%2), %%mm3 \n\t"
- "punpcklbw %%mm7, %%mm0 \n\t"
- "punpcklbw %%mm7, %%mm1 \n\t"
- "punpcklbw %%mm7, %%mm2 \n\t"
- "punpcklbw %%mm7, %%mm3 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm3 \n\t"
- "paddusw %%mm1, %%mm3 \n\t"
- "psrlw $2, %%mm3 \n\t"
- "movq 8(%1), %%mm0 \n\t"
- "movq 8(%2), %%mm1 \n\t"
- "movq 264(%2), %%mm2 \n\t"
- "movq 536(%2), %%mm4 \n\t"
- "punpckhbw %%mm7, %%mm0 \n\t"
- "punpckhbw %%mm7, %%mm1 \n\t"
- "punpckhbw %%mm7, %%mm2 \n\t"
- "punpckhbw %%mm7, %%mm4 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm4 \n\t"
- "paddusw %%mm1, %%mm4 \n\t"
- "psrlw $2, %%mm4 \n\t"
- "packuswb %%mm4, %%mm3 \n\t"
- "movq %%mm3, 8(%0) \n\t"
- "addl %4, %0 \n\t"
- "addl %4, %1 \n\t"
- "addl $16, %2 \n\t"
- "decl %3 \n\t"
- "jnz 1b \n\t"
- :"+r"(dst), "+r"(src1), "+r"(src2), "+r"(h)
- :"r"(stride)
- :"memory");
-}
-
// avg_pixels
// in case more speed is needed - unroling would certainly help
static void DEF(avg, pixels8)(UINT8 *block, const UINT8 *pixels, int line_size, int h)
@@ -641,133 +546,6 @@ static void DEF(avg, pixels8_xy2)(UINT8 *block, const UINT8 *pixels, int line_si
:"eax", "memory");
}
-static void DEF(avg, pixels8_l4)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int stride, int h)
-{
- MOVQ_ZERO(mm7);
- SET_RND(mm6); // =2 for rnd and =1 for no_rnd version
- MOVQ_BFE(mm5);
- __asm __volatile(
- ".balign 8 \n\t"
- "1: \n\t"
- "movq (%1), %%mm0 \n\t"
- "movq (%2), %%mm1 \n\t"
- "movq 64(%2), %%mm2 \n\t"
- "movq 136(%2), %%mm3 \n\t"
- "punpcklbw %%mm7, %%mm0 \n\t"
- "punpcklbw %%mm7, %%mm1 \n\t"
- "punpcklbw %%mm7, %%mm2 \n\t"
- "punpcklbw %%mm7, %%mm3 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm3 \n\t"
- "paddusw %%mm1, %%mm3 \n\t"
- "psrlw $2, %%mm3 \n\t"
- "movq (%1), %%mm0 \n\t"
- "movq (%2), %%mm1 \n\t"
- "movq 64(%2), %%mm2 \n\t"
- "movq 136(%2), %%mm4 \n\t"
- "punpckhbw %%mm7, %%mm0 \n\t"
- "punpckhbw %%mm7, %%mm1 \n\t"
- "punpckhbw %%mm7, %%mm2 \n\t"
- "punpckhbw %%mm7, %%mm4 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm4 \n\t"
- "paddusw %%mm1, %%mm4 \n\t"
- "psrlw $2, %%mm4 \n\t"
- "packuswb %%mm4, %%mm3 \n\t"
- "movq (%0), %%mm4 \n\t"
- PAVGB(%%mm3, %%mm4, %%mm0, %%mm5)
- "movq %%mm0, (%0) \n\t"
- "addl %4, %0 \n\t"
- "addl %4, %1 \n\t"
- "addl $8, %2 \n\t"
- "decl %3 \n\t"
- "jnz 1b \n\t"
- :"+r"(dst), "+r"(src1), "+r"(src2), "+r"(h)
- :"r"(stride)
- :"memory");
-}
-
-static void DEF(avg, pixels16_l4)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int stride, int h)
-{
- MOVQ_ZERO(mm7);
- SET_RND(mm6); // =2 for rnd and =1 for no_rnd version
- MOVQ_BFE(mm5);
- __asm __volatile(
- ".balign 8 \n\t"
- "1: \n\t"
- "movq (%1), %%mm0 \n\t"
- "movq (%2), %%mm1 \n\t"
- "movq 256(%2), %%mm2 \n\t"
- "movq 528(%2), %%mm3 \n\t"
- "punpcklbw %%mm7, %%mm0 \n\t"
- "punpcklbw %%mm7, %%mm1 \n\t"
- "punpcklbw %%mm7, %%mm2 \n\t"
- "punpcklbw %%mm7, %%mm3 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm3 \n\t"
- "paddusw %%mm1, %%mm3 \n\t"
- "psrlw $2, %%mm3 \n\t"
- "movq (%1), %%mm0 \n\t"
- "movq (%2), %%mm1 \n\t"
- "movq 256(%2), %%mm2 \n\t"
- "movq 528(%2), %%mm4 \n\t"
- "punpckhbw %%mm7, %%mm0 \n\t"
- "punpckhbw %%mm7, %%mm1 \n\t"
- "punpckhbw %%mm7, %%mm2 \n\t"
- "punpckhbw %%mm7, %%mm4 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm4 \n\t"
- "paddusw %%mm1, %%mm4 \n\t"
- "psrlw $2, %%mm4 \n\t"
- "packuswb %%mm4, %%mm3 \n\t"
- "movq (%0), %%mm4 \n\t"
- PAVGB(%%mm3, %%mm4, %%mm0, %%mm5)
- "movq %%mm0, (%0) \n\t"
- "movq 8(%1), %%mm0 \n\t"
- "movq 8(%2), %%mm1 \n\t"
- "movq 264(%2), %%mm2 \n\t"
- "movq 536(%2), %%mm3 \n\t"
- "punpcklbw %%mm7, %%mm0 \n\t"
- "punpcklbw %%mm7, %%mm1 \n\t"
- "punpcklbw %%mm7, %%mm2 \n\t"
- "punpcklbw %%mm7, %%mm3 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm3 \n\t"
- "paddusw %%mm1, %%mm3 \n\t"
- "psrlw $2, %%mm3 \n\t"
- "movq 8(%1), %%mm0 \n\t"
- "movq 8(%2), %%mm1 \n\t"
- "movq 264(%2), %%mm2 \n\t"
- "movq 536(%2), %%mm4 \n\t"
- "punpckhbw %%mm7, %%mm0 \n\t"
- "punpckhbw %%mm7, %%mm1 \n\t"
- "punpckhbw %%mm7, %%mm2 \n\t"
- "punpckhbw %%mm7, %%mm4 \n\t"
- "paddusw %%mm6, %%mm0 \n\t"
- "paddusw %%mm0, %%mm1 \n\t"
- "paddusw %%mm2, %%mm4 \n\t"
- "paddusw %%mm1, %%mm4 \n\t"
- "psrlw $2, %%mm4 \n\t"
- "packuswb %%mm4, %%mm3 \n\t"
- "movq 8(%0), %%mm4 \n\t"
- PAVGB(%%mm3, %%mm4, %%mm0, %%mm5)
- "movq %%mm0, 8(%0) \n\t"
- "addl %4, %0 \n\t"
- "addl %4, %1 \n\t"
- "addl $16, %2 \n\t"
- "decl %3 \n\t"
- "jnz 1b \n\t"
- :"+r"(dst), "+r"(src1), "+r"(src2), "+r"(h)
- :"r"(stride)
- :"memory");
-}
-
-
//FIXME optimize
static void DEF(put, pixels16_y2)(UINT8 *block, const UINT8 *pixels, int line_size, int h){
DEF(put, pixels8_y2)(block , pixels , line_size, h);