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