diff options
author | Jian Zhou <zhoujian@google.com> | 2015-11-25 12:28:39 -0800 |
---|---|---|
committer | Jian Zhou <zhoujian@google.com> | 2015-12-04 11:36:44 -0800 |
commit | da3f08fac3f35a4d0a6f2d170ba5a27e9719eb73 (patch) | |
tree | 1b1e683c6c02461d4b4c1deb6887954ca53116f9 /vpx_dsp/x86/intrapred_sse2.asm | |
parent | aa2764abdd6af72730a130975c2b86d49e2ced70 (diff) | |
download | libvpx-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.asm | 23 |
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 |