Merge commit '2e1704059ae8625beda2ffde847ad22c5ba416dc'
[ffmpeg.git] / libavfilter / x86 / vf_interlace.asm
1 ;*****************************************************************************
2 ;* x86-optimized functions for interlace filter
3 ;*
4 ;* Copyright (C) 2014 Kieran Kunhya <kierank@obe.tv>
5 ;*
6 ;* This file is part of FFmpeg.
7 ;*
8 ;* FFmpeg is free software; you can redistribute it and/or modify
9 ;* it under the terms of the GNU General Public License as published by
10 ;* the Free Software Foundation; either version 2 of the License, or
11 ;* (at your option) any later version.
12 ;*
13 ;* FFmpeg is distributed in the hope that it will be useful,
14 ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 ;* GNU General Public License for more details.
17 ;*
18 ;* You should have received a copy of the GNU General Public License along
19 ;* with FFmpeg; if not, write to the Free Software Foundation, Inc.,
20 ;* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 ;******************************************************************************
22
23 %include "libavutil/x86/x86util.asm"
24
25 SECTION_RODATA
26
27 SECTION .text
28
29 %macro LOWPASS_LINE 0
30 cglobal lowpass_line, 5, 5, 7
31     add r0, r1
32     add r2, r1
33     add r3, r1
34     add r4, r1
35     neg r1
36
37     pxor m6, m6
38
39 .loop
40     mova m0, [r2+r1]
41     punpcklbw m1, m0, m6
42     punpckhbw m0, m6
43     paddw m0, m0
44     paddw m1, m1
45
46     mova m2, [r3+r1]
47     punpcklbw m3, m2, m6
48     punpckhbw m2, m6
49
50     mova m4, [r4+r1]
51     punpcklbw m5, m4, m6
52     punpckhbw m4, m6
53
54     paddw m1, m3
55     pavgw m1, m5
56
57     paddw m0, m2
58     pavgw m0, m4
59
60     psrlw m0, 1
61     psrlw m1, 1
62
63     packuswb m1, m0
64     mova [r0+r1], m1
65
66     add r1, mmsize
67     jl .loop
68 REP_RET
69 %endmacro
70
71 INIT_XMM sse2
72 LOWPASS_LINE
73
74 INIT_XMM avx
75 LOWPASS_LINE