[x265] Fwd: [PATCH] asm: avx2 code for weight_sp() 16bpp
Aasaipriya Chandran
aasaipriya at multicorewareinc.com
Tue Jun 30 13:22:53 CEST 2015
Okay will modify and resend the patch.
Thanks,
Aasaipriya
On Tue, Jun 30, 2015 at 3:12 PM, Praveen Tiwari <
praveen at multicorewareinc.com> wrote:
>
>
>
> ---------- Forwarded message ----------
> From: <aasaipriya at multicorewareinc.com>
> Date: Mon, Jun 29, 2015 at 4:51 PM
> Subject: [x265] [PATCH] asm: avx2 code for weight_sp() 16bpp
> To: x265-devel at videolan.org
>
>
> # HG changeset patch
> # User Aasaipriya Chandran <aasaipriya at multicorewareinc.com>
> # Date 1435562395 -19800
> # Mon Jun 29 12:49:55 2015 +0530
> # Node ID bebe4e496a432608cf0a9c495debd1970caa387e
> # Parent 9feee64efa440c25f016d15ae982789e5393a77e
> asm: avx2 code for weight_sp() 16bpp
>
> avx2: weight_sp 11.37x 4496.63 51139.20
> sse4: weight_sp 6.48x 8163.87 52870.36
>
> diff -r 9feee64efa44 -r bebe4e496a43 source/common/x86/asm-primitives.cpp
> --- a/source/common/x86/asm-primitives.cpp Fri Jun 26 15:29:51 2015
> +0530
> +++ b/source/common/x86/asm-primitives.cpp Mon Jun 29 12:49:55 2015
> +0530
> @@ -1517,6 +1517,7 @@
> p.scale1D_128to64 = PFX(scale1D_128to64_avx2);
> p.scale2D_64to32 = PFX(scale2D_64to32_avx2);
> p.weight_pp = PFX(weight_pp_avx2);
> + p.weight_sp = PFX(weight_sp_avx2);
> p.sign = PFX(calSign_avx2);
>
> p.cu[BLOCK_16x16].calcresidual = PFX(getResidual16_avx2);
> diff -r 9feee64efa44 -r bebe4e496a43 source/common/x86/pixel-util8.asm
> --- a/source/common/x86/pixel-util8.asm Fri Jun 26 15:29:51 2015 +0530
> +++ b/source/common/x86/pixel-util8.asm Mon Jun 29 12:49:55 2015 +0530
> @@ -1674,8 +1674,128 @@
> dec r5d
> jnz .loopH
> RET
> -
> -%if ARCH_X86_64
> +%endif
> +
> +
> +%if HIGH_BIT_DEPTH
> +INIT_YMM avx2
> +cglobal weight_sp, 6,7,9
> + mova m1, [pw_1023]
> + mova m2, [pw_1]
> + mov r6d, r7m
>
>
> r7 is 8th register (0-7). so it should be cglobal weight_sp, 6, 8, 9 and ARCH_X86_64
> only code.
>
>
>
> + shl r6d, 16
> + or r6d, r6m
> + vpbroadcastd m3, r6d ; m3 = [round w0]
> + movd xm4, r8m ; m4 = [shift]
> + vpbroadcastd m5, r9m ; m5 = [offset]
> +
> + ; correct row stride
> + add r3d, r3d
> + add r2d, r2d
> + mov r6d, r4d
> + and r6d, ~(mmsize / SIZEOF_PIXEL - 1)
> + sub r3d, r6d
> + sub r3d, r6d
> + sub r2d, r6d
> + sub r2d, r6d
> +
> + ; generate partial width mask (MUST BE IN YMM0)
> + mov r6d, r4d
> + and r6d, (mmsize / SIZEOF_PIXEL - 1)
> + movd xm0, r6d
> + pshuflw m0, m0, 0
> + punpcklqdq m0, m0
> + vinserti128 m0, m0, xm0, 1
> + pcmpgtw m0, [pw_0_15]
> +
> +.loopH:
> + mov r6d, r4d
> +
> +.loopW:
> + movu m6, [r0]
> + paddw m6, [pw_2000]
> +
> + punpcklwd m7, m6, m2
> + pmaddwd m7, m3 ;(round w0)
> + psrad m7, xm4 ;(shift)
> + paddd m7, m5 ;(offset)
> +
> + punpckhwd m6, m2
> + pmaddwd m6, m3
> + psrad m6, xm4
> + paddd m6, m5
> +
> + packusdw m7, m6
> + pminuw m7, m1
> +
> + sub r6d, (mmsize / SIZEOF_PIXEL)
> + jl .width14
> + movu [r1], m7
> + lea r0, [r0 + mmsize]
> + lea r1, [r1 + mmsize]
> + je .nextH
> + jmp .loopW
> +
> +.width14:
> + add r6d, 16
> + cmp r6d, 14
> + jl .width12
> + movu [r1], xm7
> + vextracti128 xm8, m7, 1
> + movq [r1 + 16], xm8
> + pextrd [r1 + 24], xm8, 2
> + je .nextH
> +
> +.width12:
> + cmp r6d, 12
> + jl .width10
> + movu [r1], xm7
> + vextracti128 xm8, m7, 1
> + movq [r1 + 16], xm8
> + je .nextH
> +
> +.width10:
> + cmp r6d, 10
> + jl .width8
> + movu [r1], xm7
> + vextracti128 xm8, m7, 1
> + movd [r1 + 16], xm8
> + je .nextH
> +
> +.width8:
> + cmp r6d, 8
> + jl .width6
> + movu [r1], xm7
> + je .nextH
> +
> +.width6
> + cmp r6d, 6
> + jl .width4
> + movq [r1], xm7
> + pextrd [r1 + 8], xm7, 2
> + je .nextH
> +
> +.width4:
> + cmp r6d, 4
> + jl .width2
> + movq [r1], xm7
> + je .nextH
> + add r1, 4
> + pshufd m6, m6, 1
> + je .nextH
> +
> +.width2:
> + movd [r1], xm7
> +
> +.nextH:
> + add r0, r2
> + add r1, r3
> +
> + dec r5d
> + jnz .loopH
> + RET
> +
> +%else
> INIT_YMM avx2
> cglobal weight_sp, 6, 9, 7
> mov r7d, r7m
> @@ -1752,8 +1872,6 @@
> jnz .loopH
> RET
> %endif
> -%endif ; end of (HIGH_BIT_DEPTH == 0)
> -
>
> ;-----------------------------------------------------------------
> ; void transpose_4x4(pixel *dst, pixel *src, intptr_t stride)
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20150630/c93cbd6b/attachment.html>
More information about the x265-devel
mailing list