<div style="line-height:1.7;color:#000000;font-size:14px;font-family:arial"><DIV>At 2013-11-20 20:21:41,murugan@multicorewareinc.com wrote:<BR>># HG changeset patch<BR>># User Murugan Vairavel <murugan@multicorewareinc.com><BR>># Date 1384950080 -19800<BR>>#      Wed Nov 20 17:51:20 2013 +0530<BR>># Node ID 2ea432a36a03a7ee7e0f788181ff35ac8db20337<BR>># Parent  a059cd5c08133486fb0499aeb77ac34677759d9b<BR>>asm: code for transpose_32x32 routine<BR>><BR>>diff -r a059cd5c0813 -r 2ea432a36a03 source/common/x86/asm-primitives.cpp<BR>>--- a/source/common/x86/asm-primitives.cpp  Wed Nov 20 15:13:48 2013 +0530<BR>>+++ b/source/common/x86/asm-primitives.cpp    Wed Nov 20 17:51:20 2013 +0530<BR>>@@ -547,6 +547,7 @@<BR>>         p.transpose[BLOCK_4x4] = x265_transpose4_sse2;<BR>>         p.transpose[BLOCK_8x8] = x265_transpose8_sse2;<BR>>         p.transpose[BLOCK_16x16] = x265_transpose16_sse2;<BR>>+        p.transpose[BLOCK_32x32] = x265_transpose32_sse2;<BR>>     }<BR>>     if (cpuMask & X265_CPU_SSSE3)<BR>>     {<BR>>diff -r a059cd5c0813 -r 2ea432a36a03 source/common/x86/pixel-a.asm<BR>>--- a/source/common/x86/pixel-a.asm   Wed Nov 20 15:13:48 2013 +0530<BR>>+++ b/source/common/x86/pixel-a.asm   Wed Nov 20 17:51:20 2013 +0530<BR>>@@ -7079,6 +7079,48 @@<BR>> <BR>>     RET<BR>> <BR>>+%macro TRANSPOSE_16x16 1<BR>>+    TRANSPOSE_8x8 %1<BR>>+    lea    r1,    [r1 + 2 * r2]<BR>>+    lea    r0,    [r5 + 8]<BR>>+    TRANSPOSE_8x8 %1<BR>>+    lea    r1,    [r6 + 8]<BR>>+    lea    r0,    [r5 + 8 * %1]<BR>>+    TRANSPOSE_8x8 %1<BR>>+    lea    r1,    [r1 + 2 * r2]<BR>>+    lea    r0,    [r5 + 8 * %1 + 8]<BR>>+    TRANSPOSE_8x8 %1<BR>>+%endmacro<BR>>+<BR>>+;-----------------------------------------------------------------<BR>>+; void transpose_32x32(pixel *dst, pixel *src, intptr_t stride)<BR>>+;-----------------------------------------------------------------<BR>>+INIT_XMM sse2<BR>>+cglobal transpose32, 3, 7, 8, dest, src, stride<BR>>+<BR>>+    mov    r3,    r0<BR>>+    mov    r4,    r1<BR>>+    mov    r5,    r0<BR>>+    mov    r6,    r1<BR>>+    TRANSPOSE_16x16 32<BR>>+    lea    r1,    [r1 - 8 + 2 * r2]<BR>>+    lea    r0,    [r3 + 16]<BR>>+    mov    r5,    r0<BR>>+    mov    r6,    r1<BR>>+    TRANSPOSE_16x16 32<BR>>+    lea    r1,    [r4 + 16]<BR>>+    lea    r0,    [r3 + 16 * 32]<BR>>+    mov    r5,    r0<BR>>+    mov    r6,    r1<BR>>+    TRANSPOSE_16x16 32<BR>>+    lea    r1,    [r1 - 8 + 2 * r2]<BR>>+    lea    r0,    [r3 + 16 * 32 + 16]<BR>>+    mov    r5,    r0<BR>>+    mov    r6,    r1<BR>>+    TRANSPOSE_16x16 32<BR>>+<BR>>+    RET<BR></DIV>
<DIV>The code is right, but all of macro extended, so the obj is large and lower cache performance</DIV></div>