<div dir="ltr">Please ignore this patch. I will remove newline before <span style="font-size:12.8000001907349px">%endrep and RET, will resend the patch</span></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Mar 12, 2015 at 6:33 PM,  <span dir="ltr"><<a href="mailto:rajesh@multicorewareinc.com" target="_blank">rajesh@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 Rajesh Paulraj<<a href="mailto:rajesh@multicorewareinc.com">rajesh@multicorewareinc.com</a>><br>
# Date 1426165275 -19800<br>
#      Thu Mar 12 18:31:15 2015 +0530<br>
# Node ID 7d63cdb0d52b96c37ca59d1bcfe647ed1032158c<br>
# Parent  78f9c9fad129b89c6fe1ade3d59f3619bdf210b3<br>
asm: avx2 8bpp code for sub_ps[16x16](7.65x), sub_ps[32x32](8.37x),<br>
                        sub_ps[64x64](9.27x)<br>
<br>
diff -r 78f9c9fad129 -r 7d63cdb0d52b source/common/x86/asm-primitives.cpp<br>
--- a/source/common/x86/asm-primitives.cpp      Wed Mar 11 18:08:03 2015 +0530<br>
+++ b/source/common/x86/asm-primitives.cpp      Thu Mar 12 18:31:15 2015 +0530<br>
@@ -1419,6 +1419,10 @@<br>
         <a href="http://p.cu" target="_blank">p.cu</a>[BLOCK_32x32].add_ps = x265_pixel_add_ps_32x32_avx2;<br>
         <a href="http://p.cu" target="_blank">p.cu</a>[BLOCK_64x64].add_ps = x265_pixel_add_ps_64x64_avx2;<br>
<br>
+        <a href="http://p.cu" target="_blank">p.cu</a>[BLOCK_16x16].sub_ps = x265_pixel_sub_ps_16x16_avx2;<br>
+        <a href="http://p.cu" target="_blank">p.cu</a>[BLOCK_32x32].sub_ps = x265_pixel_sub_ps_32x32_avx2;<br>
+        <a href="http://p.cu" target="_blank">p.cu</a>[BLOCK_64x64].sub_ps = x265_pixel_sub_ps_64x64_avx2;<br>
+<br>
         p.pu[LUMA_16x4].pixelavg_pp = x265_pixel_avg_16x4_avx2;<br>
         p.pu[LUMA_16x8].pixelavg_pp = x265_pixel_avg_16x8_avx2;<br>
         p.pu[LUMA_16x12].pixelavg_pp = x265_pixel_avg_16x12_avx2;<br>
diff -r 78f9c9fad129 -r 7d63cdb0d52b source/common/x86/pixel-util8.asm<br>
--- a/source/common/x86/pixel-util8.asm Wed Mar 11 18:08:03 2015 +0530<br>
+++ b/source/common/x86/pixel-util8.asm Thu Mar 12 18:31:15 2015 +0530<br>
@@ -4335,6 +4335,43 @@<br>
 PIXELSUB_PS_W16_H4 16, 32<br>
 %endif<br>
<br>
+;-----------------------------------------------------------------------------<br>
+; void pixel_sub_ps_16x16(int16_t *dest, intptr_t destride, pixel *src0, pixel *src1, intptr_t srcstride0, intptr_t srcstride1);<br>
+;-----------------------------------------------------------------------------<br>
+INIT_YMM avx2<br>
+cglobal pixel_sub_ps_16x16, 6, 6, 4, dest, deststride, src0, src1, srcstride0, srcstride1<br>
+    add         r1,     r1<br>
+<br>
+%rep 4<br>
+    pmovzxbw    m0,     [r2]<br>
+    pmovzxbw    m1,     [r3]<br>
+    pmovzxbw    m2,     [r2 + r4]<br>
+    pmovzxbw    m3,     [r3 + r5]<br>
+    lea         r2,     [r2 + r4 * 2]<br>
+    lea         r3,     [r3 + r5 * 2]<br>
+<br>
+    psubw       m0,     m1<br>
+    psubw       m2,     m3<br>
+<br>
+    movu        [r0],            m0<br>
+    movu        [r0 + r1],       m2<br>
+<br>
+    pmovzxbw    m0,     [r2]<br>
+    pmovzxbw    m1,     [r3]<br>
+    pmovzxbw    m2,     [r2 + r4]<br>
+    pmovzxbw    m3,     [r3 + r5]<br>
+<br>
+    psubw       m0,     m1<br>
+    psubw       m2,     m3<br>
+<br>
+    movu        [r0 + r1 * 2],   m0<br>
+    lea         r0,     [r0 + r1 * 2]<br>
+    movu        [r0 + r1],       m2<br>
+    lea         r0,     [r0 + r1 * 2]<br>
+    lea         r2,     [r2 + r4 * 2]<br>
+    lea         r3,     [r3 + r5 * 2]<br>
+%endrep<br>
+    RET<br>
<br>
 ;-----------------------------------------------------------------------------<br>
 ; void pixel_sub_ps_32x%2(int16_t *dest, intptr_t destride, pixel *src0, pixel *src1, intptr_t srcstride0, intptr_t srcstride1);<br>
@@ -4469,6 +4506,133 @@<br>
 PIXELSUB_PS_W32_H2 32, 64<br>
 %endif<br>
<br>
+;-----------------------------------------------------------------------------<br>
+; void pixel_sub_ps_32x32(int16_t *dest, intptr_t destride, pixel *src0, pixel *src1, intptr_t srcstride0, intptr_t srcstride1);<br>
+;-----------------------------------------------------------------------------<br>
+INIT_YMM avx2<br>
+cglobal pixel_sub_ps_32x32, 6, 6, 4, dest, deststride, src0, src1, srcstride0, srcstride1<br>
+     add         r1,    r1<br>
+<br>
+%rep 4<br>
+    pmovzxbw    m0,     [r2]<br>
+    pmovzxbw    m1,     [r2 + 16]<br>
+    pmovzxbw    m2,     [r3]<br>
+    pmovzxbw    m3,     [r3 + 16]<br>
+<br>
+    psubw       m0,     m2<br>
+    psubw       m1,     m3<br>
+<br>
+    movu        [r0],            m0<br>
+    movu        [r0 + 32],       m1<br>
+<br>
+    pmovzxbw    m0,     [r2 + r4]<br>
+    pmovzxbw    m1,     [r2 + r4 + 16]<br>
+    pmovzxbw    m2,     [r3 + r5]<br>
+    pmovzxbw    m3,     [r3 + r5 + 16]<br>
+<br>
+    psubw       m0,     m2<br>
+    psubw       m1,     m3<br>
+<br>
+    movu        [r0 + r1],       m0<br>
+    movu        [r0 + r1 + 32],  m1<br>
+<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+<br>
+    pmovzxbw    m0,     [r2 + r4]<br>
+    pmovzxbw    m1,     [r2 + r4 + 16]<br>
+    pmovzxbw    m2,     [r3 + r5]<br>
+    pmovzxbw    m3,     [r3 + r5 + 16]<br>
+<br>
+    psubw       m0,     m2<br>
+    psubw       m1,     m3<br>
+    lea         r0,     [r0 + r1 * 2]<br>
+<br>
+    movu        [r0 ],           m0<br>
+    movu        [r0 + 32],       m1<br>
+<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+<br>
+    pmovzxbw    m0,     [r2 + r4]<br>
+    pmovzxbw    m1,     [r2 + r4 + 16]<br>
+    pmovzxbw    m2,     [r3 + r5]<br>
+    pmovzxbw    m3,     [r3 + r5 + 16]<br>
+<br>
+<br>
+    psubw       m0,     m2<br>
+    psubw       m1,     m3<br>
+    lea         r0,     [r0 + r1]<br>
+<br>
+    movu        [r0 ],           m0<br>
+    movu        [r0 + 32],       m1<br>
+<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+<br>
+    pmovzxbw    m0,     [r2 + r4]<br>
+    pmovzxbw    m1,     [r2 + r4 + 16]<br>
+    pmovzxbw    m2,     [r3 + r5]<br>
+    pmovzxbw    m3,     [r3 + r5 + 16]<br>
+<br>
+    psubw       m0,     m2<br>
+    psubw       m1,     m3<br>
+    lea         r0,     [r0 + r1]<br>
+<br>
+    movu        [r0 ],           m0<br>
+    movu        [r0 + 32],       m1<br>
+<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+<br>
+    pmovzxbw    m0,     [r2 + r4]<br>
+    pmovzxbw    m1,     [r2 + r4 + 16]<br>
+    pmovzxbw    m2,     [r3 + r5]<br>
+    pmovzxbw    m3,     [r3 + r5 + 16]<br>
+<br>
+    psubw       m0,     m2<br>
+    psubw       m1,     m3<br>
+    lea         r0,     [r0 + r1]<br>
+<br>
+    movu        [r0 ],           m0<br>
+    movu        [r0 + 32],       m1<br>
+<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+<br>
+    pmovzxbw    m0,     [r2 + r4]<br>
+    pmovzxbw    m1,     [r2 + r4 + 16]<br>
+    pmovzxbw    m2,     [r3 + r5]<br>
+    pmovzxbw    m3,     [r3 + r5 + 16]<br>
+<br>
+    psubw       m0,     m2<br>
+    psubw       m1,     m3<br>
+    lea         r0,     [r0 + r1]<br>
+<br>
+    movu        [r0 ],           m0<br>
+    movu        [r0 + 32],       m1<br>
+<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+<br>
+    pmovzxbw    m0,     [r2 + r4]<br>
+    pmovzxbw    m1,     [r2 + r4 + 16]<br>
+    pmovzxbw    m2,     [r3 + r5]<br>
+    pmovzxbw    m3,     [r3 + r5 + 16]<br>
+<br>
+    psubw       m0,     m2<br>
+    psubw       m1,     m3<br>
+    lea         r0,     [r0 + r1]<br>
+<br>
+    movu        [r0 ],           m0<br>
+    movu        [r0 + 32],       m1<br>
+<br>
+    lea         r0,     [r0 + r1]<br>
+    lea         r2,     [r2 + r4 * 2]<br>
+    lea         r3,     [r3 + r5 * 2]<br>
+<br>
+%endrep<br>
+    RET<br>
<br>
 ;-----------------------------------------------------------------------------<br>
 ; void pixel_sub_ps_64x%2(int16_t *dest, intptr_t destride, pixel *src0, pixel *src1, intptr_t srcstride0, intptr_t srcstride1);<br>
@@ -4688,6 +4852,112 @@<br>
 PIXELSUB_PS_W64_H2 64, 64<br>
 %endif<br>
<br>
+;-----------------------------------------------------------------------------<br>
+; void pixel_sub_ps_64x64(int16_t *dest, intptr_t destride, pixel *src0, pixel *src1, intptr_t srcstride0, intptr_t srcstride1);<br>
+;-----------------------------------------------------------------------------<br>
+INIT_YMM avx2<br>
+cglobal pixel_sub_ps_64x64, 6, 6, 8, dest, deststride, src0, src1, srcstride0, srcstride1<br>
+     add         r1,    r1<br>
+<br>
+%rep 16<br>
+    pmovzxbw    m0,     [r2]<br>
+    pmovzxbw    m1,     [r2 + 16]<br>
+    pmovzxbw    m2,     [r2 + 32]<br>
+    pmovzxbw    m3,     [r2 + 48]<br>
+<br>
+    pmovzxbw    m4,     [r3]<br>
+    pmovzxbw    m5,     [r3 + 16]<br>
+    pmovzxbw    m6,     [r3 + 32]<br>
+    pmovzxbw    m7,     [r3 + 48]<br>
+<br>
+    psubw       m0,     m4<br>
+    psubw       m1,     m5<br>
+    psubw       m2,     m6<br>
+    psubw       m3,     m7<br>
+<br>
+    movu        [r0],         m0<br>
+    movu        [r0 + 32],    m1<br>
+    movu        [r0 + 64],    m2<br>
+    movu        [r0 + 96],    m3<br>
+<br>
+    lea         r0,     [r0 + r1]<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+<br>
+    pmovzxbw    m0,     [r2]<br>
+    pmovzxbw    m1,     [r2 + 16]<br>
+    pmovzxbw    m2,     [r2 + 32]<br>
+    pmovzxbw    m3,     [r2 + 48]<br>
+<br>
+    pmovzxbw    m4,     [r3]<br>
+    pmovzxbw    m5,     [r3 + 16]<br>
+    pmovzxbw    m6,     [r3 + 32]<br>
+    pmovzxbw    m7,     [r3 + 48]<br>
+<br>
+    psubw       m0,     m4<br>
+    psubw       m1,     m5<br>
+    psubw       m2,     m6<br>
+    psubw       m3,     m7<br>
+<br>
+    movu        [r0],         m0<br>
+    movu        [r0 + 32],    m1<br>
+    movu        [r0 + 64],    m2<br>
+    movu        [r0 + 96],    m3<br>
+<br>
+    lea         r0,     [r0 + r1]<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+<br>
+    pmovzxbw    m0,     [r2]<br>
+    pmovzxbw    m1,     [r2 + 16]<br>
+    pmovzxbw    m2,     [r2 + 32]<br>
+    pmovzxbw    m3,     [r2 + 48]<br>
+<br>
+    pmovzxbw    m4,     [r3]<br>
+    pmovzxbw    m5,     [r3 + 16]<br>
+    pmovzxbw    m6,     [r3 + 32]<br>
+    pmovzxbw    m7,     [r3 + 48]<br>
+<br>
+    psubw       m0,     m4<br>
+    psubw       m1,     m5<br>
+    psubw       m2,     m6<br>
+    psubw       m3,     m7<br>
+<br>
+    movu        [r0],         m0<br>
+    movu        [r0 + 32],    m1<br>
+    movu        [r0 + 64],    m2<br>
+    movu        [r0 + 96],    m3<br>
+<br>
+    lea         r0,     [r0 + r1]<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+<br>
+    pmovzxbw    m0,     [r2]<br>
+    pmovzxbw    m1,     [r2 + 16]<br>
+    pmovzxbw    m2,     [r2 + 32]<br>
+    pmovzxbw    m3,     [r2 + 48]<br>
+<br>
+    pmovzxbw    m4,     [r3]<br>
+    pmovzxbw    m5,     [r3 + 16]<br>
+    pmovzxbw    m6,     [r3 + 32]<br>
+    pmovzxbw    m7,     [r3 + 48]<br>
+<br>
+    psubw       m0,     m4<br>
+    psubw       m1,     m5<br>
+    psubw       m2,     m6<br>
+    psubw       m3,     m7<br>
+<br>
+    movu        [r0],         m0<br>
+    movu        [r0 + 32],    m1<br>
+    movu        [r0 + 64],    m2<br>
+    movu        [r0 + 96],    m3<br>
+<br>
+    lea         r0,     [r0 + r1]<br>
+    lea         r2,     [r2 + r4]<br>
+    lea         r3,     [r3 + r5]<br>
+%endrep<br>
+<br>
+    RET<br>
<br>
 ;=============================================================================<br>
 ; variance<br>
diff -r 78f9c9fad129 -r 7d63cdb0d52b source/common/x86/pixel.h<br>
--- a/source/common/x86/pixel.h Wed Mar 11 18:08:03 2015 +0530<br>
+++ b/source/common/x86/pixel.h Thu Mar 12 18:31:15 2015 +0530<br>
@@ -255,6 +255,10 @@<br>
 void x265_pixel_add_ps_32x32_avx2(pixel* a, intptr_t dstride, const pixel* b0, const int16_t* b1, intptr_t sstride0, intptr_t sstride1);<br>
 void x265_pixel_add_ps_64x64_avx2(pixel* a, intptr_t dstride, const pixel* b0, const int16_t* b1, intptr_t sstride0, intptr_t sstride1);<br>
<br>
+void x265_pixel_sub_ps_16x16_avx2(int16_t* a, intptr_t dstride, const pixel* b0, const pixel* b1, intptr_t sstride0, intptr_t sstride1);<br>
+void x265_pixel_sub_ps_32x32_avx2(int16_t* a, intptr_t dstride, const pixel* b0, const pixel* b1, intptr_t sstride0, intptr_t sstride1);<br>
+void x265_pixel_sub_ps_64x64_avx2(int16_t* a, intptr_t dstride, const pixel* b0, const pixel* b1, intptr_t sstride0, intptr_t sstride1);<br>
+<br>
 #undef DECL_PIXELS<br>
 #undef DECL_HEVC_SSD<br>
 #undef DECL_X1<br>
</blockquote></div><br></div>