<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><div> </div><pre><br>At 2014-08-05 20:48:50,"Satoshi Nakagawa" <nakagawa424@oki.com> wrote:
># HG changeset patch
># User Satoshi Nakagawa <nakagawa424@oki.com>
># Date 1407242513 -32400
>#      Tue Aug 05 21:41:53 2014 +0900
># Node ID 770c40d768d55e68e76c485d5dc61d014257e789
># Parent  0d4723a0080cff763ff20ab9c516c6e082496a0b
>primitives for RExt
>
</pre><pre>>@@ -1494,7 +1599,7 @@
> ;-----------------------------------------------------------------------------------------------------------------
> %macro FILTER_VER_CHROMA_SS 4
> INIT_XMM sse2
>-cglobal interp_4tap_vert_%3_%1x%2, 5, 7, %4 ,0-1
>+cglobal interp_4tap_vert_%3_%1x%2, 5, 7, %4 ,0-gprsize

>     add       r1d, r1d
>     add       r3d, r3d
>@@ -1508,7 +1613,7 @@
>     lea       r6, [tab_ChromaCoeffV + r4]
> %endif

>-    mov       byte [rsp], %2/4
>+    mov       dword [rsp], %2/4
</pre><pre>Why dword? byte is enough for dynamic range</pre><pre> </pre><pre>>diff -r 0d4723a0080c -r 770c40d768d5 source/common/x86/pixel-util8.asm
>--- a/source/common/x86/pixel-util8.asm        Tue Aug 05 01:05:47 2014 -0500
>+++ b/source/common/x86/pixel-util8.asm        Tue Aug 05 21:41:53 2014 +0900
>@@ -2878,6 +2878,61 @@
> RET

> ;-----------------------------------------------------------------------------
>+; void pixel_sub_ps_2x%2(pixel *dest, intptr_t destride, pixel *src0, int16_t *scr1, intptr_t srcStride0, intptr_t srcStride1)
>+;-----------------------------------------------------------------------------
>+%macro PIXEL_SUB_PS_W2_H2 2
>+%if HIGH_BIT_DEPTH
>+INIT_XMM sse2
>+cglobal pixel_sub_ps_2x%2, 6, 7, 4, dest, destride, src0, scr1, srcStride0, srcStride1
>+    add     r1,     r1
>+    add     r4,     r4
>+    add     r5,     r5
>+    mov     r6d,    %2/2
>+.loop:
>+    movd    m0,     [r2]
>+    movd    m1,     [r3]
>+    movd    m2,     [r2 + r4]
>+    movd    m3,     [r3 + r5]
>+    dec     r6d
>+    lea     r2,     [r2 + r4 * 2]
>+    lea     r3,     [r3 + r5 * 2]
>+    psubw   m0,     m1
>+    psubw   m2,     m3
>+    movd    [r0],       m0
>+    movd    [r0 + r1],  m2
>+    lea     r0,     [r0 + 2 * r1]
>+    jnz     .loop
>+    RET
>+%else
>+INIT_XMM sse4
>+cglobal pixel_sub_ps_2x%2, 6, 7, 4, dest, destride, src0, scr1, srcStride0, srcStride1
>+    add         r1,     r1
>+    mov         r6d,    %2/2
>+.loop:
>+    pinsrw      m0,     [r2],       0
>+    pinsrw      m1,     [r3],       0
>+    pinsrw      m2,     [r2 + r4],  0
>+    pinsrw      m3,     [r3 + r5],  0
</pre><pre>pinsrw have 2 uops, movd to load 4 bytes and drop unused is better.</pre><pre>>+    dec         r6d
>+    lea         r2,     [r2 + r4 * 2]
>+    lea         r3,     [r3 + r5 * 2]
>+    pmovzxbw    m0,     m0
>+    pmovzxbw    m1,     m1
>+    pmovzxbw    m2,     m2
>+    pmovzxbw    m3,     m3
>+    psubw       m0,     m1
>+    psubw       m2,     m3
>+    movd        [r0],       m0
>+    movd        [r0 + r1],  m2
>+    lea         r0,     [r0 + r1 * 2]
>+    jnz         .loop
>+    RET
>+%endif
>+%endmacro
</pre></div>