<div dir="ltr">Function prototype is wrong here, dst should be int16_t *dst.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Nov 12, 2013 at 8:36 PM,  <span dir="ltr"><<a href="mailto:nabajit@multicorewareinc.com" target="_blank">nabajit@multicorewareinc.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Nabajit Deka<br>
# Date 1384268787 -19800<br>
#      Tue Nov 12 20:36:27 2013 +0530<br>
# Node ID 3587c6ea492c0e10403fb07b02c28b4e7fb571d9<br>
# Parent  676529ca9c45a14e54a1ad0976252b03fdcd9cd2<br>
asm: routines for chroma hps filter functions for 16xN, 24xN and 32xN.<br>
<br>
diff -r 676529ca9c45 -r 3587c6ea492c source/common/x86/ipfilter8.asm<br>
--- a/source/common/x86/ipfilter8.asm   Tue Nov 12 20:33:07 2013 +0530<br>
+++ b/source/common/x86/ipfilter8.asm   Tue Nov 12 20:36:27 2013 +0530<br>
@@ -3648,7 +3648,7 @@<br>
 add         dstq,        dststrideq<br>
<br>
 dec         r5d<br>
-jnz         .loop<br>
+jnz        .loop<br>
<br>
 RET<br>
 %endmacro<br>
@@ -3659,3 +3659,137 @@<br>
 FILTER_HORIZ_CHROMA_8xN 8, 8<br>
 FILTER_HORIZ_CHROMA_8xN 8, 16<br>
 FILTER_HORIZ_CHROMA_8xN 8, 32<br>
+<br>
+%macro PROCESS_CHROMA_W16 4<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>
+    movu        %1, [srcq - 1 + 8]<br>
+    pshufb      %4, %1, Tm0<br>
+    pmaddubsw   %4, coef2<br>
+    pshufb      %1, %1, Tm1<br>
+    pmaddubsw   %1, coef2<br>
+    phaddw      %4, %1<br>
+    psubw       %2, %3<br>
+    psubw       %4, %3<br>
+    movu        [dstq], %2<br>
+    movu        [dstq + 16], %4<br>
+%endmacro<br>
+<br>
+%macro PROCESS_CHROMA_W24 4<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>
+    movu        %1, [srcq - 1 + 8]<br>
+    pshufb      %4, %1, Tm0<br>
+    pmaddubsw   %4, coef2<br>
+    pshufb      %1, %1, Tm1<br>
+    pmaddubsw   %1, coef2<br>
+    phaddw      %4, %1<br>
+    psubw       %2, %3<br>
+    psubw       %4, %3<br>
+    movu        [dstq], %2<br>
+    movu        [dstq + 16], %4<br>
+    movu        %1, [srcq - 1 + 16]<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 + 32],     %2<br>
+%endmacro<br>
+<br>
+%macro PROCESS_CHROMA_W32 4<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>
+    movu        %1, [srcq - 1 + 8]<br>
+    pshufb      %4, %1, Tm0<br>
+    pmaddubsw   %4, coef2<br>
+    pshufb      %1, %1, Tm1<br>
+    pmaddubsw   %1, coef2<br>
+    phaddw      %4, %1<br>
+    psubw       %2, %3<br>
+    psubw       %4, %3<br>
+    movu        [dstq], %2<br>
+    movu        [dstq + 16], %4<br>
+    movu        %1, [srcq - 1 + 16]<br>
+    pshufb      %2, %1, Tm0<br>
+    pmaddubsw   %2, coef2<br>
+    pshufb      %1, %1, Tm1<br>
+    pmaddubsw   %1, coef2<br>
+    phaddw      %2, %1<br>
+    movu        %1, [srcq - 1 + 24]<br>
+    pshufb      %4, %1, Tm0<br>
+    pmaddubsw   %4, coef2<br>
+    pshufb      %1, %1, Tm1<br>
+    pmaddubsw   %1, coef2<br>
+    phaddw      %4, %1<br>
+    psubw       %2, %3<br>
+    psubw       %4, %3<br>
+    movu        [dstq + 32],      %2<br>
+    movu        [dstq + 48],      %4<br>
+%endmacro<br>
+<br>
+;-----------------------------------------------------------------------------<br>
+; void interp_4tap_horiz_pp_%1x%2(pixel *src, intptr_t srcStride, pixel *dst, intptr_t dstStride, int coeffIdx)<br>
+;-----------------------------------------------------------------------------<br>
+%macro FILTER_HORIZ_CHROMA_WxN 2<br>
+INIT_XMM sse4<br>
+cglobal interp_4tap_horiz_ps_%1x%2, 4, 6, 7, src, srcstride, dst, dststride<br>
+%define coef2       m6<br>
+%define Tm0         m5<br>
+%define Tm1         m4<br>
+%define t3          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, t3<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_WxN 16, 4<br>
+FILTER_HORIZ_CHROMA_WxN 16, 8<br>
+FILTER_HORIZ_CHROMA_WxN 16, 12<br>
+FILTER_HORIZ_CHROMA_WxN 16, 16<br>
+FILTER_HORIZ_CHROMA_WxN 16, 32<br>
+FILTER_HORIZ_CHROMA_WxN 24, 32<br>
+FILTER_HORIZ_CHROMA_WxN 32,  8<br>
+FILTER_HORIZ_CHROMA_WxN 32, 16<br>
+FILTER_HORIZ_CHROMA_WxN 32, 24<br>
+FILTER_HORIZ_CHROMA_WxN 32, 32<br>
</blockquote></div><br></div>