[x265] [PATCH] asm: fix sse_pp[32x64] sse2 asm for 12 bit
ramya at multicorewareinc.com
ramya at multicorewareinc.com
Thu Sep 10 10:58:52 CEST 2015
# HG changeset patch
# User Ramya Sriraman <ramya at multicorewareinc.com>
# Date 1441875518 -19800
# Thu Sep 10 14:28:38 2015 +0530
# Node ID 4b4597b2007f8d4785180e82854678c8a882f30b
# Parent 365f7ed4d89628d49cd6af8d81d4edc01f73ffad
asm: fix sse_pp[32x64] sse2 asm for 12 bit
diff -r 365f7ed4d896 -r 4b4597b2007f source/common/x86/asm-primitives.cpp
--- a/source/common/x86/asm-primitives.cpp Tue Sep 08 16:38:01 2015 +0530
+++ b/source/common/x86/asm-primitives.cpp Thu Sep 10 14:28:38 2015 +0530
@@ -1001,11 +1001,10 @@
p.chroma[X265_CSP_I422].cu[BLOCK_422_4x8].sse_pp = (pixel_sse_t)PFX(pixel_ssd_ss_4x8_mmx2);
p.chroma[X265_CSP_I422].cu[BLOCK_422_8x16].sse_pp = (pixel_sse_t)PFX(pixel_ssd_ss_8x16_sse2);
p.chroma[X265_CSP_I422].cu[BLOCK_422_16x32].sse_pp = (pixel_sse_t)PFX(pixel_ssd_ss_16x32_sse2);
-
+ p.chroma[X265_CSP_I422].cu[BLOCK_422_32x64].sse_pp = (pixel_sse_t)PFX(pixel_ssd_ss_32x64_sse2);
#if X265_DEPTH <= 10
p.cu[BLOCK_4x4].sse_ss = PFX(pixel_ssd_ss_4x4_mmx2);
ALL_LUMA_CU(sse_ss, pixel_ssd_ss, sse2);
- p.chroma[X265_CSP_I422].cu[BLOCK_422_32x64].sse_pp = (pixel_sse_t)PFX(pixel_ssd_ss_32x64_sse2);
#endif
p.cu[BLOCK_4x4].dct = PFX(dct4_sse2);
diff -r 365f7ed4d896 -r 4b4597b2007f source/common/x86/ssd-a.asm
--- a/source/common/x86/ssd-a.asm Tue Sep 08 16:38:01 2015 +0530
+++ b/source/common/x86/ssd-a.asm Thu Sep 10 14:28:38 2015 +0530
@@ -125,6 +125,63 @@
RET
%endmacro
+
+; Function to find ssd for 32x16 block, sse2, 12 bit depth
+; Defined sepeartely to be called from SSD_ONE_32 macro
+INIT_XMM sse2
+cglobal ssd_ss_32x16
+ pxor m8, m8
+ mov r4d, 16
+.loop:
+ movu m0, [r0]
+ movu m1, [r0+mmsize]
+ movu m2, [r0+2*mmsize]
+ movu m3, [r0+3*mmsize]
+ movu m4, [r2]
+ movu m5, [r2+mmsize]
+ movu m6, [r2+2*mmsize]
+ movu m7, [r2+3*mmsize]
+ psubw m0, m4
+ psubw m1, m5
+ psubw m2, m6
+ psubw m3, m7
+ lea r0, [r0+r1]
+ lea r2, [r2+r3]
+ pmaddwd m0, m0
+ pmaddwd m1, m1
+ pmaddwd m2, m2
+ pmaddwd m3, m3
+ paddd m2, m3
+ paddd m0, m1
+ paddd m0, m2
+ paddd m8, m0
+ dec r4d
+ jnz .loop
+
+ mova m4, m8
+ pxor m5, m5
+ punpckldq m8, m5
+ punpckhdq m4, m5
+ paddq m4, m8
+ movhlps m5, m4
+ paddq m4, m5
+ paddq m9, m4
+ ret
+
+%macro SSD_ONE_32 0
+cglobal pixel_ssd_ss_32x64, 4,7,10
+ add r1, r1
+ add r3, r3
+ pxor m9, m9
+ xor r4, r4
+ call ssd_ss_32x16
+ call ssd_ss_32x16
+ call ssd_ss_32x16
+ call ssd_ss_32x16
+ movq rax, m9
+ RET
+%endmacro
+
%macro SSD_TWO 2
cglobal pixel_ssd_ss_%1x%2, 4,7,8
FIX_STRIDES r1, r3
@@ -468,7 +525,13 @@
SSD_ONE 32, 16
SSD_ONE 32, 24
SSD_ONE 32, 32
-SSD_ONE 32, 64
+
+%if BIT_DEPTH <= 10
+ SSD_ONE 32, 64
+%else
+ SSD_ONE_32
+%endif
+
SSD_TWO 48, 64
SSD_TWO 64, 16
SSD_TWO 64, 32
More information about the x265-devel
mailing list