summaryrefslogtreecommitdiff
path: root/vpx_dsp/x86/intrapred_sse2.asm
diff options
context:
space:
mode:
authorJian Zhou <zhoujian@google.com>2015-11-25 12:28:39 -0800
committerJian Zhou <zhoujian@google.com>2015-12-04 11:36:44 -0800
commitda3f08fac3f35a4d0a6f2d170ba5a27e9719eb73 (patch)
tree1b1e683c6c02461d4b4c1deb6887954ca53116f9 /vpx_dsp/x86/intrapred_sse2.asm
parentaa2764abdd6af72730a130975c2b86d49e2ced70 (diff)
downloadlibvpx-da3f08fac3f35a4d0a6f2d170ba5a27e9719eb73.tar
libvpx-da3f08fac3f35a4d0a6f2d170ba5a27e9719eb73.tar.gz
libvpx-da3f08fac3f35a4d0a6f2d170ba5a27e9719eb73.tar.bz2
libvpx-da3f08fac3f35a4d0a6f2d170ba5a27e9719eb73.zip
Speed up h_predictor_8x8
Relocate the function from SSSE3 to SSE2, Unroll loop from 4 to 2, and reduce mem access to left. Speed up by >20% in ./test_intra_pred_speed. Change-Id: Ib9f1846819783b6e05e2a310c930eb844b2b4d2e
Diffstat (limited to 'vpx_dsp/x86/intrapred_sse2.asm')
-rw-r--r--vpx_dsp/x86/intrapred_sse2.asm23
1 files changed, 23 insertions, 0 deletions
diff --git a/vpx_dsp/x86/intrapred_sse2.asm b/vpx_dsp/x86/intrapred_sse2.asm
index c3b7d2b7e..8b6fcc2bd 100644
--- a/vpx_dsp/x86/intrapred_sse2.asm
+++ b/vpx_dsp/x86/intrapred_sse2.asm
@@ -534,6 +534,29 @@ cglobal h_predictor_4x4, 2, 4, 4, dst, stride, line, left
RET
INIT_XMM sse2
+cglobal h_predictor_8x8, 2, 5, 3, dst, stride, line, left
+ movifnidn leftq, leftmp
+ mov lineq, -2
+ DEFINE_ARGS dst, stride, line, left, stride3
+ lea stride3q, [strideq*3]
+ movq m0, [leftq ]
+ punpcklbw m0, m0 ; l1 l1 l2 l2 ... l8 l8
+.loop:
+ pshuflw m1, m0, 0x0 ; l1 l1 l1 l1 l1 l1 l1 l1
+ pshuflw m2, m0, 0x55 ; l2 l2 l2 l2 l2 l2 l2 l2
+ movq [dstq ], m1
+ movq [dstq+strideq], m2
+ pshuflw m1, m0, 0xaa
+ pshuflw m2, m0, 0xff
+ movq [dstq+strideq*2], m1
+ movq [dstq+stride3q ], m2
+ pshufd m0, m0, 0xe ; [63:0] l5 l5 l6 l6 l7 l7 l8 l8
+ inc lineq
+ lea dstq, [dstq+strideq*4]
+ jnz .loop
+ REP_RET
+
+INIT_XMM sse2
cglobal tm_predictor_4x4, 4, 4, 5, dst, stride, above, left
pxor m1, m1
movq m0, [aboveq-1]; [63:0] tl t1 t2 t3 t4 x x x