2.6 times faster (366 vs. 142 cycles)
Unified · Split
| @@ -864,7 +864,50 @@ ff_chroma_inter_body_mmxext: · 863 unmodified lines | ||
| 864 | 864 | DEBLOCK_P0_Q0 |
| 865 | 865 | ret |
| 866 | 866 | |
| 867 | +%define t5 r4 | |
| 868 | +%define t6 r5 | |
| 869 | + | |
| 870 | +cglobal deblock_h_chroma422_8, 5, 6, 0, 0-(1+ARCH_X86_64*2)*mmsize | |
| 871 | + %if ARCH_X86_64 | |
| 872 | + %define buf0 [rsp+16] | |
| 873 | + %define buf1 [rsp+8] | |
| 874 | + %else | |
| 875 | + %define buf0 r0m | |
| 876 | + %define buf1 r2m | |
| 877 | + %endif | |
| 878 | + | |
| 879 | + movd m6, [r4] | |
| 880 | + punpcklbw m6, m6 | |
| 881 | + movq [rsp], m6 | |
| 882 | + CHROMA_H_START | |
| 883 | + | |
| 884 | + TRANSPOSE4x8B_LOAD PASS8ROWS(t5, r0, r1, t6) | |
| 885 | + movq buf0, m0 | |
| 886 | + movq buf1, m3 | |
| 887 | + LOAD_MASK r2d, r3d | |
| 888 | + movd m6, [rsp] | |
| 889 | + punpcklwd m6, m6 | |
| 890 | + pand m7, m6 | |
| 891 | + DEBLOCK_P0_Q0 | |
| 892 | + movq m0, buf0 | |
| 893 | + movq m3, buf1 | |
| 894 | + TRANSPOSE8x4B_STORE PASS8ROWS(t5, r0, r1, t6) | |
| 867 | 895 | |
| 896 | + lea r0, [r0+r1*8] | |
| 897 | + lea t5, [t5+r1*8] | |
| 898 | + | |
| 899 | + TRANSPOSE4x8B_LOAD PASS8ROWS(t5, r0, r1, t6) | |
| 900 | + movq buf0, m0 | |
| 901 | + movq buf1, m3 | |
| 902 | + LOAD_MASK r2d, r3d | |
| 903 | + movd m6, [rsp+4] | |
| 904 | + punpcklwd m6, m6 | |
| 905 | + pand m7, m6 | |
| 906 | + DEBLOCK_P0_Q0 | |
| 907 | + movq m0, buf0 | |
| 908 | + movq m3, buf1 | |
| 909 | + TRANSPOSE8x4B_STORE PASS8ROWS(t5, r0, r1, t6) | |
| 910 | +RET | |
| 868 | 911 | |
| 869 | 912 | ; in: %1=p0 %2=p1 %3=q1 |
| 870 | 913 | ; out: p0 = (p0 + q1 + 2*p1 + 2) >> 2 |
| @@ -877,9 +920,6 @@ ff_chroma_inter_body_mmxext: · 6 unmodified lines | ||
| 877 | 920 | pavgb %1, %2 ; dst = avg(p1, avg(p0,q1) - ((p0^q1)&1)) |
| 878 | 921 | %endmacro |
| 879 | 922 | |
| 880 | −%define t5 r4 | |
| 881 | −%define t6 r5 | |
| 882 | − | |
| 883 | 923 | ;------------------------------------------------------------------------------ |
| 884 | 924 | ; void ff_deblock_v_chroma_intra(uint8_t *pix, int stride, int alpha, int beta) |
| 885 | 925 | ;------------------------------------------------------------------------------ |
| @@ -129,6 +129,8 @@ LF_IFUNC(v, chroma_intra, depth, avx) · 128 unmodified lines | ||
| 129 | 129 | LF_FUNCS(uint8_t, 8) |
| 130 | 130 | LF_FUNCS(uint16_t, 10) |
| 131 | 131 | |
| 132 | +void ff_deblock_h_chroma422_8_mmxext(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0); | |
| 133 | + | |
| 132 | 134 | #if ARCH_X86_32 && HAVE_MMXEXT_EXTERNAL |
| 133 | 135 | LF_FUNC(v8, luma, 8, mmxext) |
| 134 | 136 | static void deblock_v_luma_8_mmxext(uint8_t *pix, int stride, int alpha, |
| @@ -245,6 +247,8 @@ av_cold void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, · 110 unmodified lines | ||
| 245 | 247 | if (chroma_format_idc <= 1) { |
| 246 | 248 | c->h264_h_loop_filter_chroma = ff_deblock_h_chroma_8_mmxext; |
| 247 | 249 | c->h264_h_loop_filter_chroma_intra = ff_deblock_h_chroma_intra_8_mmxext; |
| 250 | + } else { | |
| 251 | + c->h264_h_loop_filter_chroma = ff_deblock_h_chroma422_8_mmxext; | |
| 248 | 252 | } |
| 249 | 253 | #if ARCH_X86_32 && HAVE_MMXEXT_EXTERNAL |
| 250 | 254 | c->h264_v_loop_filter_luma = deblock_v_luma_8_mmxext; |