<div dir="ltr">please ignore this patch ,need to modify this to support for 12xN, 24xN sizes. I will resend it.</div><div class="gmail_extra"><br><div class="gmail_quote">2015-04-06 10:40 GMT+05:30  <span dir="ltr"><<a href="mailto:rajesh@multicorewareinc.com" target="_blank">rajesh@multicorewareinc.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Rajesh Paulraj<<a href="mailto:rajesh@multicorewareinc.com">rajesh@multicorewareinc.com</a>><br>
# Date 1428296987 -19800<br>
#      Mon Apr 06 10:39:47 2015 +0530<br>
# Node ID 6e9471155dec62e653db0a96df14e62df53041bd<br>
# Parent  ebe5e57c4b45b45338035a1009b64585f21d66d5<br>
asm: ssse3 8bpp code for convert_p2s[12x16](9.82x), convert_p2s[24x32](13.61x)<br>
                         convert_p2s[48x64](11.12x)<br>
<br>
diff -r ebe5e57c4b45 -r 6e9471155dec source/common/x86/asm-primitives.cpp<br>
--- a/source/common/x86/asm-primitives.cpp      Sat Apr 04 15:11:39 2015 -0500<br>
+++ b/source/common/x86/asm-primitives.cpp      Mon Apr 06 10:39:47 2015 +0530<br>
@@ -1332,6 +1332,9 @@<br>
         p.pu[LUMA_64x32].convert_p2s = x265_filterPixelToShort_64x32_ssse3;<br>
         p.pu[LUMA_64x48].convert_p2s = x265_filterPixelToShort_64x48_ssse3;<br>
         p.pu[LUMA_64x64].convert_p2s = x265_filterPixelToShort_64x64_ssse3;<br>
+        p.pu[LUMA_12x16].convert_p2s = x265_filterPixelToShort_12x16_ssse3;<br>
+        p.pu[LUMA_24x32].convert_p2s = x265_filterPixelToShort_24x32_ssse3;<br>
+        p.pu[LUMA_48x64].convert_p2s = x265_filterPixelToShort_48x64_ssse3;<br>
<br>
         p.chroma[X265_CSP_I420].pu[CHROMA_420_8x2].p2s = x265_filterPixelToShort_8x2_ssse3;<br>
         p.chroma[X265_CSP_I420].pu[CHROMA_420_8x4].p2s = x265_filterPixelToShort_8x4_ssse3;<br>
diff -r ebe5e57c4b45 -r 6e9471155dec source/common/x86/ipfilter8.asm<br>
--- a/source/common/x86/ipfilter8.asm   Sat Apr 04 15:11:39 2015 -0500<br>
+++ b/source/common/x86/ipfilter8.asm   Mon Apr 06 10:39:47 2015 +0530<br>
@@ -8248,6 +8248,274 @@<br>
 P2S_H_64xN 32<br>
 P2S_H_64xN 48<br>
<br>
+;-----------------------------------------------------------------------------<br>
+; void filterPixelToShort(pixel src, intptr_t srcStride, int16_t dst, int16_t dstStride)<br>
+;-----------------------------------------------------------------------------<br>
+INIT_XMM ssse3<br>
+cglobal filterPixelToShort_12x16, 3, 7, 6<br>
+    mov         r3d, r3m<br>
+    add         r3d, r3d<br>
+    lea         r4, [r1 * 3]<br>
+    lea         r6, [r3 * 3]<br>
+    mov         r5d, 4<br>
+<br>
+    ; load constant<br>
+    mova        m4, [pb_128]<br>
+    mova        m5, [tab_c_64_n64]<br>
+<br>
+.loop:<br>
+    movu        m0, [r0]<br>
+    punpcklbw   m1, m0, m4<br>
+    punpckhbw   m0, m4<br>
+    pmaddubsw   m0, m5<br>
+    pmaddubsw   m1, m5<br>
+<br>
+    movu        m2, [r0 + r1]<br>
+    punpcklbw   m3, m2, m4<br>
+    punpckhbw   m2, m4<br>
+    pmaddubsw   m2, m5<br>
+    pmaddubsw   m3, m5<br>
+<br>
+    movu        [r2 + r3 * 0], m1<br>
+    movu        [r2 + r3 * 1], m3<br>
+<br>
+    movh        [r2 + r3 * 0 + 16], m0<br>
+    movh        [r2 + r3 * 1 + 16], m2<br>
+<br>
+    movu        m0, [r0 + r1 * 2]<br>
+    punpcklbw   m1, m0, m4<br>
+    punpckhbw   m0, m4<br>
+    pmaddubsw   m0, m5<br>
+    pmaddubsw   m1, m5<br>
+<br>
+    movu        m2, [r0 + r4]<br>
+    punpcklbw   m3, m2, m4<br>
+    punpckhbw   m2, m4<br>
+    pmaddubsw   m2, m5<br>
+    pmaddubsw   m3, m5<br>
+<br>
+    movu        [r2 + r3 * 2], m1<br>
+    movu        [r2 + r6], m3<br>
+<br>
+    movh        [r2 + r3 * 2 + 16], m0<br>
+    movh        [r2 + r6 + 16], m2<br>
+<br>
+    lea         r0, [r0 + r1 * 4]<br>
+    lea         r2, [r2 + r3 * 4]<br>
+<br>
+    dec         r5d<br>
+    jnz         .loop<br>
+    RET<br>
+<br>
+;-----------------------------------------------------------------------------<br>
+; void filterPixelToShort(pixel *src, intptr_t srcStride, int16_t *dst, int16_t dstStride)<br>
+;-----------------------------------------------------------------------------<br>
+INIT_XMM ssse3<br>
+cglobal filterPixelToShort_24x32, 3, 7, 5<br>
+    mov         r3d, r3m<br>
+    add         r3d, r3d<br>
+    lea         r4, [r1 * 3]<br>
+    lea         r5, [r3 * 3]<br>
+    mov         r6d, 8<br>
+<br>
+    ; load constant<br>
+    mova        m3, [pb_128]<br>
+    mova        m4, [tab_c_64_n64]<br>
+<br>
+.loop:<br>
+    movu        m0, [r0]<br>
+    punpcklbw   m1, m0, m3<br>
+    punpckhbw   m0, m3<br>
+    pmaddubsw   m0, m4<br>
+    pmaddubsw   m1, m4<br>
+<br>
+    movu        m2, [r0 + 16]<br>
+    punpcklbw   m2, m3<br>
+    pmaddubsw   m2, m4<br>
+<br>
+    movu        [r2 +  r3 * 0], m1<br>
+    movu        [r2 +  r3 * 0 + 16], m0<br>
+    movu        [r2 +  r3 * 0 + 32], m2<br>
+<br>
+    movu        m0, [r0 + r1]<br>
+    punpcklbw   m1, m0, m3<br>
+    punpckhbw   m0, m3<br>
+    pmaddubsw   m0, m4<br>
+    pmaddubsw   m1, m4<br>
+<br>
+    movu        m2, [r0 + r1 + 16]<br>
+    punpcklbw   m2, m3<br>
+    pmaddubsw   m2, m4<br>
+<br>
+    movu        [r2 +  r3 * 1], m1<br>
+    movu        [r2 +  r3 * 1 + 16], m0<br>
+    movu        [r2 +  r3 * 1 + 32], m2<br>
+<br>
+    movu        m0, [r0 + r1 * 2]<br>
+    punpcklbw   m1, m0, m3<br>
+    punpckhbw   m0, m3<br>
+    pmaddubsw   m0, m4<br>
+    pmaddubsw   m1, m4<br>
+<br>
+    movu        m2, [r0 + r1 * 2 + 16]<br>
+    punpcklbw   m2, m3<br>
+    pmaddubsw   m2, m4<br>
+<br>
+    movu        [r2 +  r3 * 2], m1<br>
+    movu        [r2 +  r3 * 2 + 16], m0<br>
+    movu        [r2 +  r3 * 2 + 32], m2<br>
+<br>
+    movu        m0, [r0 + r4]<br>
+    punpcklbw   m1, m0, m3<br>
+    punpckhbw   m0, m3<br>
+    pmaddubsw   m0, m4<br>
+    pmaddubsw   m1, m4<br>
+<br>
+    movu        m2, [r0 + r4 + 16]<br>
+    punpcklbw   m2, m3<br>
+    pmaddubsw   m2, m4<br>
+    movu        [r2 +  r5], m1<br>
+    movu        [r2 +  r5 + 16], m0<br>
+    movu        [r2 +  r5 + 32], m2<br>
+<br>
+    lea         r0, [r0 + r1 * 4]<br>
+    lea         r2, [r2 + r3 * 4]<br>
+<br>
+    dec         r6d<br>
+    jnz         .loop<br>
+    RET<br>
+<br>
+;-----------------------------------------------------------------------------<br>
+; void filterPixelToShort(pixel *src, intptr_t srcStride, int16_t *dst, int16_t dstStride)<br>
+;-----------------------------------------------------------------------------<br>
+INIT_XMM ssse3<br>
+cglobal filterPixelToShort_48x64, 3, 7, 4<br>
+    mov         r3d, r3m<br>
+    add         r3d, r3d<br>
+    lea         r4, [r1 * 3]<br>
+    lea         r5, [r3 * 3]<br>
+    mov         r6d, 16<br>
+<br>
+    ; load constant<br>
+    mova        m2, [pb_128]<br>
+    mova        m3, [tab_c_64_n64]<br>
+<br>
+.loop:<br>
+    movu        m0, [r0]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r3 * 0], m1<br>
+    movu        [r2 +  r3 * 0 + 16], m0<br>
+<br>
+    movu        m0, [r0 + 16]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r3 * 0 + 32], m1<br>
+    movu        [r2 +  r3 * 0 + 48], m0<br>
+<br>
+    movu        m0, [r0 + 32]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r3 * 0 + 64], m1<br>
+    movu        [r2 +  r3 * 0 + 80], m0<br>
+<br>
+    movu        m0, [r0 + r1]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r3 * 1], m1<br>
+    movu        [r2 +  r3 * 1 + 16], m0<br>
+<br>
+    movu        m0, [r0 + r1 + 16]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r3 * 1 + 32], m1<br>
+    movu        [r2 +  r3 * 1 + 48], m0<br>
+<br>
+    movu        m0, [r0 + r1 + 32]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r3 * 1 + 64], m1<br>
+    movu        [r2 +  r3 * 1 + 80], m0<br>
+<br>
+    movu        m0, [r0 + r1 * 2]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r3 * 2], m1<br>
+    movu        [r2 +  r3 * 2 + 16], m0<br>
+<br>
+    movu        m0, [r0 + r1 * 2 + 16]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r3 * 2 + 32], m1<br>
+    movu        [r2 +  r3 * 2 + 48], m0<br>
+<br>
+    movu        m0, [r0 + r1 * 2 + 32]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r3 * 2 + 64], m1<br>
+    movu        [r2 +  r3 * 2 + 80], m0<br>
+<br>
+    movu        m0, [r0 + r4]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r5], m1<br>
+    movu        [r2 +  r5 + 16], m0<br>
+<br>
+    movu        m0, [r0 + r4 + 16]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r5 + 32], m1<br>
+    movu        [r2 +  r5 + 48], m0<br>
+<br>
+    movu        m0, [r0 + r4 + 32]<br>
+    punpcklbw   m1, m0, m2<br>
+    punpckhbw   m0, m2<br>
+    pmaddubsw   m0, m3<br>
+    pmaddubsw   m1, m3<br>
+<br>
+    movu        [r2 +  r5 + 64], m1<br>
+    movu        [r2 +  r5 + 80], m0<br>
+<br>
+    lea         r0, [r0 + r1 * 4]<br>
+    lea         r2, [r2 + r3 * 4]<br>
+<br>
+    dec         r6d<br>
+    jnz         .loop<br>
+    RET<br>
+<br>
 %macro PROCESS_LUMA_W4_4R 0<br>
     movd        m0, [r0]<br>
     movd        m1, [r0 + r1]<br>
diff -r ebe5e57c4b45 -r 6e9471155dec source/common/x86/ipfilter8.h<br>
--- a/source/common/x86/ipfilter8.h     Sat Apr 04 15:11:39 2015 -0500<br>
+++ b/source/common/x86/ipfilter8.h     Mon Apr 06 10:39:47 2015 +0530<br>
@@ -654,6 +654,9 @@<br>
 void x265_filterPixelToShort_64x32_ssse3(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride);<br>
 void x265_filterPixelToShort_64x48_ssse3(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride);<br>
 void x265_filterPixelToShort_64x64_ssse3(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride);<br>
+void x265_filterPixelToShort_12x16_ssse3(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride);<br>
+void x265_filterPixelToShort_24x32_ssse3(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride);<br>
+void x265_filterPixelToShort_48x64_ssse3(const pixel* src, intptr_t srcStride, int16_t* dst, intptr_t dstStride);<br>
 #undef LUMA_FILTERS<br>
 #undef LUMA_SP_FILTERS<br>
 #undef LUMA_SS_FILTERS<br>
</blockquote></div><br></div>