<div dir="ltr">Most of the code here is reused from chroma hpp. Once all the patches are integrated and running, I will revisit the code and make the necessary changes.</div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Wed, Nov 13, 2013 at 9:12 AM, chen <span dir="ltr"><<a href="mailto:chenm003@163.com" target="_blank">chenm003@163.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="line-height:1.7;font-size:14px;font-family:arial"><div>the code is right</div>
<div>if possible, I suggest do "dec srcq" before loop, so we can modify [srcq -1] to [srcq], it is faster and less a byte</div>
<div><br>At 2013-11-12 23:06:55,<a href="mailto:nabajit@multicorewareinc.com" target="_blank">nabajit@multicorewareinc.com</a> wrote:<div><div class="h5"><br>># HG changeset patch<br>># User Nabajit Deka<br>># Date 1384268074 -19800<br>
>#      Tue Nov 12 20:24:34 2013 +0530<br>># Node ID c9851effbce88c9a70f712fbfaf7e83616c5615f<br>># Parent  968f6df6d50f70d2a4cf569a8c0426f65d927b00<br>>asm: routines for chroma hps filter functions for 2xN, 4xN, 6x8 and 12x16 block sizes.<br>
><br>>diff -r 968f6df6d50f -r c9851effbce8 source/common/x86/ipfilter8.asm<br>>--- a/source/common/x86/ipfilter8.asm       Tue Nov 12 17:34:19 2013 +0530<br>>+++ b/source/common/x86/ipfilter8.asm       Tue Nov 12 20:24:34 2013 +0530<br>
>@@ -3417,3 +3417,186 @@<br>> FILTER_VER_CHROMA_SP_W8_H2 8, 8<br>> FILTER_VER_CHROMA_SP_W8_H2 8, 16<br>> FILTER_VER_CHROMA_SP_W8_H2 8, 32<br>>+<br>>+%macro PROCESS_CHROMA_W2 3<br>>+    movh        %2, [srcq - 1]<br>
>+    pshufb      %2, %2, Tm0<br>>+    movh        %1, [srcq + srcstrideq - 1]<br>>+    pshufb      %1, %1, Tm0<br>>+    punpcklqdq  %2, %1<br>>+    pmaddubsw   %2, coef2<br>>+    phaddw      %2, %2<br>>+    psubw       %2, %3<br>
>+    movd        [dstq], %2<br>>+    pshufd      %2, %2, 1<br>>+    movd        [dstq + dststrideq], %2<br>>+%endmacro<br>>+<br>>+;-------------------------------------------------------------------------------------------------------------<br>
>+; void interp_4tap_horiz_ps_2x%2(pixel *src, intptr_t srcStride, int16_t *dst, intptr_t dstStride, int coeffIdx)<br>>+;-------------------------------------------------------------------------------------------------------------<br>
>+%macro FILTER_HORIZ_CHROMA_2xN 2<br>>+INIT_XMM sse4<br>>+cglobal interp_4tap_horiz_ps_%1x%2, 4, 6, 6, src, srcstride, dst, dststride<br>>+%define coef2       m5<br>>+%define Tm0         m4<br>>+%define Tm1         m3<br>
>+%define t2          m2<br>>+%define t1          m1<br>>+%define t0          m0<br>>+<br>>+mov         r4d, r4m<br>>+add         dststrided, dststrided<br>>+<br>>+%ifdef PIC<br>>+lea         r5, [tab_ChromaCoeff]<br>
>+movd        coef2, [r5 + r4 * 4]<br>>+%else<br>>+movd        coef2, [tab_ChromaCoeff + r4 * 4]<br>>+%endif<br>>+<br>>+pshufd      coef2, coef2, 0<br>>+mova        t2, [tab_c_8192]<br>>+mova        Tm0, [tab_Tm]<br>
>+<br>>+%rep %2/2<br>>+PROCESS_CHROMA_W2   t0, t1, t2<br>>+lea         srcq, [srcq + srcstrideq * 2]<br>>+lea         dstq, [dstq + dststrideq * 2]<br>>+%endrep<br>>+<br>>+RET<br>>+%endmacro<br>
>+<br>>+FILTER_HORIZ_CHROMA_2xN 2, 4<br>>+FILTER_HORIZ_CHROMA_2xN 2, 8<br>>+<br>>+<br>>+%macro PROCESS_CHROMA_W4 3<br>>+    movh        %2, [srcq - 1]<br>>+    pshufb      %2, %2, Tm0<br>>+    pmaddubsw   %2, coef2<br>
>+    movh        %1, [srcq + srcstrideq - 1]<br>>+    pshufb      %1, %1, Tm0<br>>+    pmaddubsw   %1, coef2<br>>+    phaddw      %2, %1<br>>+    psubw       %2, %3<br>>+    movlps        [dstq], %2<br>
>+    movhps        [dstq + dststrideq], %2<br>>+%endmacro<br>>+<br>>+;-------------------------------------------------------------------------------------------------------------<br>>+; void interp_4tap_horiz_ps_4x%2(pixel *src, intptr_t srcStride, int16_t *dst, intptr_t dstStride, int coeffIdx)<br>
>+;-------------------------------------------------------------------------------------------------------------<br>>+%macro FILTER_HORIZ_CHROMA_4xN 2<br>>+INIT_XMM sse4<br>>+cglobal interp_4tap_horiz_ps_%1x%2, 4, 6, 6, src, srcstride, dst, dststride<br>
>+%define coef2       m5<br>>+%define Tm0         m4<br>>+%define Tm1         m3<br>>+%define t2          m2<br>>+%define t1          m1<br>>+%define t0          m0<br>>+<br>>+mov         r4d, r4m<br>
>+add         dststrided, dststrided<br>>+<br>>+%ifdef PIC<br>>+lea         r5, [tab_ChromaCoeff]<br>>+movd        coef2, [r5 + r4 * 4]<br>>+%else<br>>+movd        coef2, [tab_ChromaCoeff + r4 * 4]<br>
>+%endif<br>>+<br>>+pshufd      coef2, coef2, 0<br>>+mova        t2, [tab_c_8192]<br>>+mova        Tm0, [tab_Tm]<br>>+<br>>+%rep %2/2<br>>+PROCESS_CHROMA_W4   t0, t1, t2<br>>+lea         srcq, [srcq + srcstrideq * 2]<br>
>+lea         dstq, [dstq + dststrideq * 2]<br>>+%endrep<br>>+<br>>+RET<br>>+%endmacro<br>>+<br>>+FILTER_HORIZ_CHROMA_4xN 4, 2<br>>+FILTER_HORIZ_CHROMA_4xN 4, 4<br>>+FILTER_HORIZ_CHROMA_4xN 4, 8<br>
>+FILTER_HORIZ_CHROMA_4xN 4, 16<br>>+<br>>+<br>>+%macro PROCESS_CHROMA_W6 3<br>>+    movu        %1, [srcq - 1]<br>>+    pshufb      %2, %1, Tm0<br>>+    pmaddubsw   %2, coef2<br>>+    pshufb      %1, %1, Tm1<br>
>+    pmaddubsw   %1, coef2<br>>+    phaddw      %2, %1<br>>+    psubw       %2, %3<br>>+    movh        [dstq], %2<br>>+    pshufd      %2, %2, 2<br>>+    movd        [dstq + 8], %2<br>>+%endmacro<br>
>+<br>>+%macro PROCESS_CHROMA_W12 3<br>>+    movu        %1, [srcq - 1]<br>>+    pshufb      %2, %1, Tm0<br>>+    pmaddubsw   %2, coef2<br>>+    pshufb      %1, %1, Tm1<br>>+    pmaddubsw   %1, coef2<br>
>+    phaddw      %2, %1<br>>+    psubw       %2, %3<br>>+    movu        [dstq], %2<br>>+    movu        %1, [srcq - 1 + 8]<br>>+    pshufb      %1, %1, Tm0<br>>+    pmaddubsw   %1, coef2<br>>+    phaddw      %1, %1<br>
>+    psubw       %1, %3<br>>+    movh       [dstq + 16], %1<br>>+%endmacro<br>>+<br>>+;-----------------------------------------------------------------------------<br>>+; void interp_4tap_horiz_ps_6x%2(pixel *src, intptr_t srcStride, pixel *dst, intptr_t dstStride, int coeffIdx)<br>
>+;-----------------------------------------------------------------------------<br>>+%macro FILTER_HORIZ_CHROMA 2<br>>+INIT_XMM sse4<br>>+cglobal interp_4tap_horiz_ps_%1x%2, 4, 6, 6, src, srcstride, dst, dststride<br>
>+%define coef2       m5<br>>+%define Tm0         m4<br>>+%define Tm1         m3<br>>+%define t2          m2<br>>+%define t1          m1<br>>+%define t0          m0<br>>+<br>>+mov         r4d, r4m<br>
>+add         dststrided, dststrided<br>>+<br>>+%ifdef PIC<br>>+lea         r5, [tab_ChromaCoeff]<br>>+movd        coef2, [r5 + r4 * 4]<br>>+%else<br>>+movd        coef2, [tab_ChromaCoeff + r4 * 4]<br>
>+%endif<br>>+<br>>+mov           r5d, %2<br>>+<br>>+pshufd      coef2, coef2, 0<br>>+mova        t2, [tab_c_8192]<br>>+mova        Tm0, [tab_Tm]<br>>+mova        Tm1, [tab_Tm + 16]<br>>+<br>>+.loop<br>
>+PROCESS_CHROMA_W%1   t0, t1, t2<br>>+add         srcq, srcstrideq<br>>+add         dstq, dststrideq<br>>+<br>>+dec         r5d<br>>+jnz        .loop<br>>+<br>>+RET<br>>+%endmacro<br>>+<br>>+FILTER_HORIZ_CHROMA 6, 8<br>
>+FILTER_HORIZ_CHROMA 12, 16<br></div></div>>_______________________________________________<br>>x265-devel mailing list<br>><a href="mailto:x265-devel@videolan.org" target="_blank">x265-devel@videolan.org</a><br>
><a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br></div></div><br>_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
<br></blockquote></div><br></div>