diff options
author | Ronald S. Bultje <rbultje@google.com> | 2013-07-09 14:52:20 -0700 |
---|---|---|
committer | Ronald S. Bultje <rbultje@google.com> | 2013-07-10 09:28:03 -0700 |
commit | 92c5d3665dabe8b55b9b32df9fac92171d5f7947 (patch) | |
tree | c2ad4b9737041fe4650d66ba8fc4c9d1e47b6baf /vp9/common/x86 | |
parent | b1df674a99c37ff8dea0609d1f6d7864fa6a05f4 (diff) | |
download | libvpx-92c5d3665dabe8b55b9b32df9fac92171d5f7947.tar libvpx-92c5d3665dabe8b55b9b32df9fac92171d5f7947.tar.gz libvpx-92c5d3665dabe8b55b9b32df9fac92171d5f7947.tar.bz2 libvpx-92c5d3665dabe8b55b9b32df9fac92171d5f7947.zip |
SSE/SSE2 assembly for 4x4/8x8/16x16/32x32 DC intra prediction.
Change-Id: Ibe1690afc5459f3b3beca401e7734fcd03da6dd0
Diffstat (limited to 'vp9/common/x86')
-rw-r--r-- | vp9/common/x86/vp9_intrapred_sse2.asm | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/vp9/common/x86/vp9_intrapred_sse2.asm b/vp9/common/x86/vp9_intrapred_sse2.asm new file mode 100644 index 000000000..550df2457 --- /dev/null +++ b/vp9/common/x86/vp9_intrapred_sse2.asm @@ -0,0 +1,127 @@ +; +; Copyright (c) 2010 The WebM project authors. All Rights Reserved. +; +; Use of this source code is governed by a BSD-style license +; that can be found in the LICENSE file in the root of the source +; tree. An additional intellectual property rights grant can be found +; in the file PATENTS. All contributing project authors may +; be found in the AUTHORS file in the root of the source tree. +; + +%include "third_party/x86inc/x86inc.asm" + +SECTION_RODATA +pw_4: times 8 dw 4 +pw_8: times 8 dw 8 +pw_16: times 8 dw 16 +pw_32: times 8 dw 32 + +SECTION .text + +INIT_MMX sse +cglobal dc_predictor_4x4, 4, 4, 2, dst, stride, above, left + pxor m1, m1 + movd m0, [aboveq] + punpckldq m0, [leftq] + psadbw m0, m1 + paddw m0, [pw_4] + psraw m0, 3 + pshufw m0, m0, 0x0 + packuswb m0, m0 + movd [dstq ], m0 + movd [dstq+strideq], m0 + lea dstq, [dstq+strideq*2] + movd [dstq ], m0 + movd [dstq+strideq], m0 + RET + +INIT_MMX sse +cglobal dc_predictor_8x8, 4, 4, 3, dst, stride, above, left + pxor m1, m1 + movq m0, [aboveq] + movq m2, [leftq] + DEFINE_ARGS dst, stride, stride3 + lea stride3q, [strideq*3] + psadbw m0, m1 + psadbw m2, m1 + paddw m0, m2 + paddw m0, [pw_8] + psraw m0, 4 + pshufw m0, m0, 0x0 + packuswb m0, m0 + movq [dstq ], m0 + movq [dstq+strideq ], m0 + movq [dstq+strideq*2], m0 + movq [dstq+stride3q ], m0 + lea dstq, [dstq+strideq*4] + movq [dstq ], m0 + movq [dstq+strideq ], m0 + movq [dstq+strideq*2], m0 + movq [dstq+stride3q ], m0 + RET + +INIT_XMM sse2 +cglobal dc_predictor_16x16, 4, 4, 3, dst, stride, above, left + pxor m1, m1 + mova m0, [aboveq] + mova m2, [leftq] + DEFINE_ARGS dst, stride, stride3, lines4 + lea stride3q, [strideq*3] + mov lines4d, 4 + psadbw m0, m1 + psadbw m2, m1 + paddw m0, m2 + movhlps m2, m0 + paddw m0, m2 + paddw m0, [pw_16] + psraw m0, 5 + pshuflw m0, m0, 0x0 + punpcklqdq m0, m0 + packuswb m0, m0 +.loop: + mova [dstq ], m0 + mova [dstq+strideq ], m0 + mova [dstq+strideq*2], m0 + mova [dstq+stride3q ], m0 + lea dstq, [dstq+strideq*4] + dec lines4d + jnz .loop + REP_RET + +INIT_XMM sse2 +cglobal dc_predictor_32x32, 4, 4, 5, dst, stride, above, left + pxor m1, m1 + mova m0, [aboveq] + mova m2, [aboveq+16] + mova m3, [leftq] + mova m4, [leftq+16] + DEFINE_ARGS dst, stride, stride3, lines4 + lea stride3q, [strideq*3] + mov lines4d, 8 + psadbw m0, m1 + psadbw m2, m1 + psadbw m3, m1 + psadbw m4, m1 + paddw m0, m2 + paddw m0, m3 + paddw m0, m4 + movhlps m2, m0 + paddw m0, m2 + paddw m0, [pw_32] + psraw m0, 6 + pshuflw m0, m0, 0x0 + punpcklqdq m0, m0 + packuswb m0, m0 +.loop: + mova [dstq ], m0 + mova [dstq +16], m0 + mova [dstq+strideq ], m0 + mova [dstq+strideq +16], m0 + mova [dstq+strideq*2 ], m0 + mova [dstq+strideq*2+16], m0 + mova [dstq+stride3q ], m0 + mova [dstq+stride3q +16], m0 + lea dstq, [dstq+strideq*4] + dec lines4d + jnz .loop + REP_RET |