summaryrefslogtreecommitdiff
path: root/libavcodec/x86/hpeldsp.asm
diff options
context:
space:
mode:
authorDiego Biurrun <diego@biurrun.de>2013-01-29 19:28:07 +0100
committerDiego Biurrun <diego@biurrun.de>2013-01-31 11:19:23 +0100
commit52acd79165e70799871a2feeb02b4fdc0d38a956 (patch)
tree3747787efefbbf6924b87e9fdbe0f860197b9fe7 /libavcodec/x86/hpeldsp.asm
parent197252f1c58b1d53f97c10201990a471dd46d31c (diff)
x86: hpel: Move {avg,put}_pixels16_sse2 to hpeldsp
Diffstat (limited to 'libavcodec/x86/hpeldsp.asm')
-rw-r--r--libavcodec/x86/hpeldsp.asm43
1 files changed, 43 insertions, 0 deletions
diff --git a/libavcodec/x86/hpeldsp.asm b/libavcodec/x86/hpeldsp.asm
index ee5d56293e..920ae67630 100644
--- a/libavcodec/x86/hpeldsp.asm
+++ b/libavcodec/x86/hpeldsp.asm
@@ -463,3 +463,46 @@ INIT_MMX mmxext
AVG_PIXELS8_XY2
INIT_MMX 3dnow
AVG_PIXELS8_XY2
+
+INIT_XMM sse2
+; void put_pixels16_sse2(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+cglobal put_pixels16, 4,5,4
+ movsxdifnidn r2, r2d
+ lea r4, [r2*3]
+.loop:
+ movu m0, [r1]
+ movu m1, [r1+r2]
+ movu m2, [r1+r2*2]
+ movu m3, [r1+r4]
+ lea r1, [r1+r2*4]
+ mova [r0], m0
+ mova [r0+r2], m1
+ mova [r0+r2*2], m2
+ mova [r0+r4], m3
+ sub r3d, 4
+ lea r0, [r0+r2*4]
+ jnz .loop
+ REP_RET
+
+; void avg_pixels16_sse2(uint8_t *block, const uint8_t *pixels, int line_size, int h)
+cglobal avg_pixels16, 4,5,4
+ movsxdifnidn r2, r2d
+ lea r4, [r2*3]
+.loop:
+ movu m0, [r1]
+ movu m1, [r1+r2]
+ movu m2, [r1+r2*2]
+ movu m3, [r1+r4]
+ lea r1, [r1+r2*4]
+ pavgb m0, [r0]
+ pavgb m1, [r0+r2]
+ pavgb m2, [r0+r2*2]
+ pavgb m3, [r0+r4]
+ mova [r0], m0
+ mova [r0+r2], m1
+ mova [r0+r2*2], m2
+ mova [r0+r4], m3
+ sub r3d, 4
+ lea r0, [r0+r2*4]
+ jnz .loop
+ REP_RET