diff --git a/libavcodec/x86/h264_chromamc.asm b/libavcodec/x86/h264_chromamc.asm index 8cdc0fe5a1..6a65d5cabd 100644 --- a/libavcodec/x86/h264_chromamc.asm +++ b/libavcodec/x86/h264_chromamc.asm @@ -25,39 +25,6 @@ SECTION_RODATA -rnd_rv40_2d_tbl: times 4 dw 0 - times 4 dw 16 - times 4 dw 32 - times 4 dw 16 - times 4 dw 32 - times 4 dw 28 - times 4 dw 32 - times 4 dw 28 - times 4 dw 0 - times 4 dw 32 - times 4 dw 16 - times 4 dw 32 - times 4 dw 32 - times 4 dw 28 - times 4 dw 32 - times 4 dw 28 -rnd_rv40_1d_tbl: times 4 dw 0 - times 4 dw 2 - times 4 dw 4 - times 4 dw 2 - times 4 dw 4 - times 4 dw 3 - times 4 dw 4 - times 4 dw 3 - times 4 dw 0 - times 4 dw 4 - times 4 dw 2 - times 4 dw 4 - times 4 dw 4 - times 4 dw 3 - times 4 dw 4 - times 4 dw 3 - cextern pw_3 cextern pw_4 cextern pw_8 @@ -92,285 +59,6 @@ SECTION .text jne .next4rows %endmacro -%macro chroma_mc8_mmx_func 2-3 -%ifidn %2, rv40 -%if PIC -%define rnd_1d_rv40 r8 -%define rnd_2d_rv40 r8 -%define extra_regs 2 -%else ; no-PIC -%define rnd_1d_rv40 rnd_rv40_1d_tbl -%define rnd_2d_rv40 rnd_rv40_2d_tbl -%define extra_regs 1 -%endif ; PIC -%else -%define extra_regs 0 -%endif ; rv40 -; void ff_put/avg_h264_chroma_mc8_*(uint8_t *dst /* align 8 */, -; const uint8_t *src /* align 1 */, -; ptrdiff_t stride, int h, int mx, int my) -cglobal %1_%2_chroma_mc8%3, 6, 7 + extra_regs, 0 - mov r6d, r5d - or r6d, r4d - jne .at_least_one_non_zero - ; mx == 0 AND my == 0 - no filter needed - mv0_pixels_mc8 - RET - -.at_least_one_non_zero: -%ifidn %2, rv40 -%if ARCH_X86_64 - mov r7, r5 - and r7, 6 ; &~1 for mx/my=[0,7] - lea r7, [r7*4+r4] - sar r7d, 1 -%define rnd_bias r7 -%define dest_reg r0 -%else ; x86-32 - mov r0, r5 - and r0, 6 ; &~1 for mx/my=[0,7] - lea r0, [r0*4+r4] - sar r0d, 1 -%define rnd_bias r0 -%define dest_reg r5 -%endif -%else ; vc1, h264 -%define rnd_bias 0 -%define dest_reg r0 -%endif - - test r5d, r5d - mov r6, 1 - je .my_is_zero - test r4d, r4d - mov r6, r2 ; dxy = x ? 1 : stride - jne .both_non_zero -.my_is_zero: - ; mx == 0 XOR my == 0 - 1 dimensional filter only - or r4d, r5d ; x + y - -%ifidn %2, rv40 -%if PIC - lea r8, [rnd_rv40_1d_tbl] -%endif -%if ARCH_X86_64 == 0 - mov r5, r0m -%endif -%endif - - movd m5, r4d - movq m4, [pw_8] - movq m6, [rnd_1d_%2+rnd_bias*8] ; mm6 = rnd >> 3 - punpcklwd m5, m5 - punpckldq m5, m5 ; mm5 = B = x - pxor m7, m7 - psubw m4, m5 ; mm4 = A = 8-x - -.next1drow: - movq m0, [r1 ] ; mm0 = src[0..7] - movq m2, [r1+r6] ; mm1 = src[1..8] - - movq m1, m0 - movq m3, m2 - punpcklbw m0, m7 - punpckhbw m1, m7 - punpcklbw m2, m7 - punpckhbw m3, m7 - pmullw m0, m4 ; [mm0,mm1] = A * src[0..7] - pmullw m1, m4 - pmullw m2, m5 ; [mm2,mm3] = B * src[1..8] - pmullw m3, m5 - - paddw m0, m6 - paddw m1, m6 - paddw m0, m2 - paddw m1, m3 - psrlw m0, 3 - psrlw m1, 3 - packuswb m0, m1 - CHROMAMC_AVG m0, [dest_reg] - movq [dest_reg], m0 ; dst[0..7] = (A * src[0..7] + B * src[1..8] + (rnd >> 3)) >> 3 - - add dest_reg, r2 - add r1, r2 - dec r3d - jne .next1drow - RET - -.both_non_zero: ; general case, bilinear - movd m4, r4d ; x - movd m6, r5d ; y -%ifidn %2, rv40 -%if PIC - lea r8, [rnd_rv40_2d_tbl] -%endif -%if ARCH_X86_64 == 0 - mov r5, r0m -%endif -%endif - mov r6, rsp ; backup stack pointer - and rsp, ~(mmsize-1) ; align stack - sub rsp, 16 ; AA and DD - - punpcklwd m4, m4 - punpcklwd m6, m6 - punpckldq m4, m4 ; mm4 = x words - punpckldq m6, m6 ; mm6 = y words - movq m5, m4 - pmullw m4, m6 ; mm4 = x * y - psllw m5, 3 - psllw m6, 3 - movq m7, m5 - paddw m7, m6 - movq [rsp+8], m4 ; DD = x * y - psubw m5, m4 ; mm5 = B = 8x - xy - psubw m6, m4 ; mm6 = C = 8y - xy - paddw m4, [pw_64] - psubw m4, m7 ; mm4 = A = xy - (8x+8y) + 64 - pxor m7, m7 - movq [rsp ], m4 - - movq m0, [r1 ] ; mm0 = src[0..7] - movq m1, [r1+1] ; mm1 = src[1..8] -.next2drow: - add r1, r2 - - movq m2, m0 - movq m3, m1 - punpckhbw m0, m7 - punpcklbw m1, m7 - punpcklbw m2, m7 - punpckhbw m3, m7 - pmullw m0, [rsp] - pmullw m2, [rsp] - pmullw m1, m5 - pmullw m3, m5 - paddw m2, m1 ; mm2 = A * src[0..3] + B * src[1..4] - paddw m3, m0 ; mm3 = A * src[4..7] + B * src[5..8] - - movq m0, [r1] - movq m1, m0 - punpcklbw m0, m7 - punpckhbw m1, m7 - pmullw m0, m6 - pmullw m1, m6 - paddw m2, m0 - paddw m3, m1 ; [mm2,mm3] += C * src[0..7] - - movq m1, [r1+1] - movq m0, m1 - movq m4, m1 - punpcklbw m0, m7 - punpckhbw m4, m7 - pmullw m0, [rsp+8] - pmullw m4, [rsp+8] - paddw m2, m0 - paddw m3, m4 ; [mm2,mm3] += D * src[1..8] - movq m0, [r1] - - paddw m2, [rnd_2d_%2+rnd_bias*8] - paddw m3, [rnd_2d_%2+rnd_bias*8] - psrlw m2, 6 - psrlw m3, 6 - packuswb m2, m3 - CHROMAMC_AVG m2, [dest_reg] - movq [dest_reg], m2 ; dst[0..7] = ([mm2,mm3] + rnd) >> 6 - - add dest_reg, r2 - dec r3d - jne .next2drow - mov rsp, r6 ; restore stack pointer - RET -%endmacro - -%macro chroma_mc4_mmx_func 2 -%define extra_regs 0 -%ifidn %2, rv40 -%if PIC -%define extra_regs 1 -%endif ; PIC -%endif ; rv40 -cglobal %1_%2_chroma_mc4, 6, 6 + extra_regs, 0 - pxor m7, m7 - movd m2, r4d ; x - movd m3, r5d ; y - movq m4, [pw_8] - movq m5, [pw_8] - punpcklwd m2, m2 - punpcklwd m3, m3 - punpcklwd m2, m2 - punpcklwd m3, m3 - psubw m4, m2 - psubw m5, m3 - -%ifidn %2, rv40 -%if PIC - lea r6, [rnd_rv40_2d_tbl] -%define rnd_2d_rv40 r6 -%else -%define rnd_2d_rv40 rnd_rv40_2d_tbl -%endif - and r5, 6 ; &~1 for mx/my=[0,7] - lea r5, [r5*4+r4] - sar r5d, 1 -%define rnd_bias r5 -%else ; vc1, h264 -%define rnd_bias 0 -%endif - - movd m0, [r1 ] - movd m6, [r1+1] - add r1, r2 - punpcklbw m0, m7 - punpcklbw m6, m7 - pmullw m0, m4 - pmullw m6, m2 - paddw m6, m0 - -.next2rows: - movd m0, [r1 ] - movd m1, [r1+1] - add r1, r2 - punpcklbw m0, m7 - punpcklbw m1, m7 - pmullw m0, m4 - pmullw m1, m2 - paddw m1, m0 - movq m0, m1 - - pmullw m6, m5 - pmullw m1, m3 - paddw m6, [rnd_2d_%2+rnd_bias*8] - paddw m1, m6 - psrlw m1, 6 - packuswb m1, m1 - CHROMAMC_AVG4 m1, m6, [r0] - movd [r0], m1 - add r0, r2 - - movd m6, [r1 ] - movd m1, [r1+1] - add r1, r2 - punpcklbw m6, m7 - punpcklbw m1, m7 - pmullw m6, m4 - pmullw m1, m2 - paddw m1, m6 - movq m6, m1 - pmullw m0, m5 - pmullw m1, m3 - paddw m0, [rnd_2d_%2+rnd_bias*8] - paddw m1, m0 - psrlw m1, 6 - packuswb m1, m1 - CHROMAMC_AVG4 m1, m0, [r0] - movd [r0], m1 - add r0, r2 - sub r3d, 2 - jnz .next2rows - RET -%endmacro - %macro chroma_mc2_mmx_func 2 cglobal %1_%2_chroma_mc2, 6, 7, 0 mov r6d, r4d @@ -428,25 +116,14 @@ cglobal %1_%2_chroma_mc2, 6, 7, 0 PAVGB %1, %2 %endmacro -INIT_MMX mmx -%define CHROMAMC_AVG NOTHING -%define CHROMAMC_AVG4 NOTHING -chroma_mc8_mmx_func put, h264, _rnd -chroma_mc8_mmx_func put, vc1, _nornd -chroma_mc8_mmx_func put, rv40 -chroma_mc4_mmx_func put, h264 -chroma_mc4_mmx_func put, rv40 INIT_MMX mmxext +%define CHROMAMC_AVG NOTHING +%define CHROMAMC_AVG4 NOTHING chroma_mc2_mmx_func put, h264 %define CHROMAMC_AVG DIRECT_AVG %define CHROMAMC_AVG4 COPY_AVG -chroma_mc8_mmx_func avg, h264, _rnd -chroma_mc8_mmx_func avg, vc1, _nornd -chroma_mc8_mmx_func avg, rv40 -chroma_mc4_mmx_func avg, h264 -chroma_mc4_mmx_func avg, rv40 chroma_mc2_mmx_func avg, h264 %macro chroma_mc8_ssse3_func 2-3 diff --git a/libavcodec/x86/h264chroma_init.c b/libavcodec/x86/h264chroma_init.c index 34934b6ad0..6eb52746ad 100644 --- a/libavcodec/x86/h264chroma_init.c +++ b/libavcodec/x86/h264chroma_init.c @@ -24,16 +24,6 @@ #include "libavutil/x86/cpu.h" #include "libavcodec/h264chroma.h" -void ff_put_h264_chroma_mc8_rnd_mmx (uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); -void ff_avg_h264_chroma_mc8_rnd_mmxext(uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); - -void ff_put_h264_chroma_mc4_mmx (uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); -void ff_avg_h264_chroma_mc4_mmxext (uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); - void ff_put_h264_chroma_mc2_mmxext (uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y); void ff_avg_h264_chroma_mc2_mmxext (uint8_t *dst, const uint8_t *src, @@ -68,14 +58,7 @@ av_cold void ff_h264chroma_init_x86(H264ChromaContext *c, int bit_depth) int high_bit_depth = bit_depth > 8; int cpu_flags = av_get_cpu_flags(); - if (EXTERNAL_MMX(cpu_flags) && !high_bit_depth) { - c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_rnd_mmx; - c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_mmx; - } - if (EXTERNAL_MMXEXT(cpu_flags) && !high_bit_depth) { - c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_rnd_mmxext; - c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_mmxext; c->avg_h264_chroma_pixels_tab[2] = ff_avg_h264_chroma_mc2_mmxext; c->put_h264_chroma_pixels_tab[2] = ff_put_h264_chroma_mc2_mmxext; } diff --git a/libavcodec/x86/rv40dsp_init.c b/libavcodec/x86/rv40dsp_init.c index ce2c955cb1..a07acae6bc 100644 --- a/libavcodec/x86/rv40dsp_init.c +++ b/libavcodec/x86/rv40dsp_init.c @@ -40,16 +40,6 @@ static void op##_rv40_qpel##size##_mc33_##insn(uint8_t *dst, const uint8_t *src, } #if HAVE_X86ASM -void ff_put_rv40_chroma_mc8_mmx (uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); -void ff_avg_rv40_chroma_mc8_mmxext(uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); - -void ff_put_rv40_chroma_mc4_mmx (uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); -void ff_avg_rv40_chroma_mc4_mmxext(uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); - #define DECLARE_WEIGHT(opt) \ void ff_rv40_weight_func_rnd_16_##opt(uint8_t *dst, uint8_t *src1, uint8_t *src2, \ int w1, int w2, ptrdiff_t stride); \ @@ -191,14 +181,6 @@ av_cold void ff_rv40dsp_init_x86(RV34DSPContext *c) av_unused int cpu_flags = av_get_cpu_flags(); #if HAVE_X86ASM - if (EXTERNAL_MMX(cpu_flags)) { - c->put_chroma_pixels_tab[0] = ff_put_rv40_chroma_mc8_mmx; - c->put_chroma_pixels_tab[1] = ff_put_rv40_chroma_mc4_mmx; - } - if (EXTERNAL_MMXEXT(cpu_flags)) { - c->avg_chroma_pixels_tab[0] = ff_avg_rv40_chroma_mc8_mmxext; - c->avg_chroma_pixels_tab[1] = ff_avg_rv40_chroma_mc4_mmxext; - } if (EXTERNAL_SSE2(cpu_flags)) { c->put_pixels_tab[0][15] = put_rv40_qpel16_mc33_sse2; c->avg_pixels_tab[0][15] = avg_rv40_qpel16_mc33_sse2; diff --git a/libavcodec/x86/vc1dsp_init.c b/libavcodec/x86/vc1dsp_init.c index e7874d2a5a..5cebc1f6f2 100644 --- a/libavcodec/x86/vc1dsp_init.c +++ b/libavcodec/x86/vc1dsp_init.c @@ -80,10 +80,6 @@ DECLARE_FUNCTION(avg_, 16, _sse2) #endif /* HAVE_X86ASM */ -void ff_put_vc1_chroma_mc8_nornd_mmx (uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); -void ff_avg_vc1_chroma_mc8_nornd_mmxext(uint8_t *dst, const uint8_t *src, - ptrdiff_t stride, int h, int x, int y); void ff_put_vc1_chroma_mc8_nornd_ssse3(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y); void ff_avg_vc1_chroma_mc8_nornd_ssse3(uint8_t *dst, const uint8_t *src, @@ -122,13 +118,8 @@ av_cold void ff_vc1dsp_init_x86(VC1DSPContext *dsp) dsp->vc1_h_loop_filter16 = vc1_h_loop_filter16_ ## EXT #if HAVE_X86ASM - if (EXTERNAL_MMX(cpu_flags)) { - dsp->put_no_rnd_vc1_chroma_pixels_tab[0] = ff_put_vc1_chroma_mc8_nornd_mmx; - - } if (EXTERNAL_MMXEXT(cpu_flags)) { ASSIGN_LF4(mmxext); - dsp->avg_no_rnd_vc1_chroma_pixels_tab[0] = ff_avg_vc1_chroma_mc8_nornd_mmxext; dsp->avg_vc1_mspel_pixels_tab[1][0] = avg_vc1_mspel_mc00_8_mmxext;