2 * Copyright (c) 2011 Mans Rullgard <mans@mansr.com>
4 * This file is part of FFmpeg.
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 #include "libavutil/arm/asm.S"
23 .macro skip args:vararg
26 .macro sum8 lo, hi, w, p, t1, t2, t3, t4, rsb=skip, offs=0
27 ldr \t1, [\w, #4*\offs]
31 ldr \t3, [\w, #4*64*\i+4*\offs]
32 ldr \t4, [\p, #4*64*\i]
33 smlal \lo, \hi, \t1, \t2
35 ldr \t1, [\w, #4*64*(\i+1)+4*\offs]
36 ldr \t2, [\p, #4*64*(\i+1)]
37 smlal \lo, \hi, \t3, \t4
40 ldr \t3, [\w, #4*64*7+4*\offs]
41 ldr \t4, [\p, #4*64*7]
42 smlal \lo, \hi, \t1, \t2
44 smlal \lo, \hi, \t3, \t4
47 .macro round rd, lo, hi
49 bic \lo, \lo, #0xff000000
50 orr \rd, \rd, \hi, lsl #8
55 function ff_mpadsp_apply_window_fixed_armv6, export=1
58 add r4, r0, #4*512 @ synth_buf + 512
64 ldr r4, [sp, #40] @ incr
65 sub r0, r0, #4*17 @ synth_buf + 16
66 ldr r8, [r2] @ sum:low
67 add r2, r0, #4*32 @ synth_buf + 48
68 rsb r5, r4, r4, lsl #5 @ 31 * incr
70 asr r9, r8, #31 @ sum:high
71 add r5, r3, r5, lsl #1 @ samples2
72 add r6, r1, #4*32 @ w2
75 sum8 r8, r9, r1, r0, r10, r11, r12, lr
76 sum8 r8, r9, r1, r2, r10, r11, r12, lr, rsb, 32
87 ldr r11, [r6, #4*64*\i]
88 ldr r10, [r1, #4*64*\i]
91 smlal r8, r9, r10, r12
92 ldr r10, [r0, #4*64*(\i+1)]
94 smull r4, r7, r11, r12
96 smlal r4, r7, r11, r12
98 ldr r11, [r6, #4*64*(\i+1)]
99 ldr r12, [r1, #4*64*(\i+1)]
101 smlal r8, r9, r12, r10
103 ldr r12, [r0, #4*64*(\i+2)]
107 smlal r4, r7, r11, r10
110 ldr r10, [r1, #4*64*\i+4*32]
112 ldr r11, [r6, #4*64*\i+4*32]
113 smlal r8, r9, r10, r12
114 ldr r10, [r2, #4*64*(\i+1)]
115 smlal r4, r7, r11, r12
116 ldr r12, [r1, #4*64*(\i+1)+4*32]
118 ldr r11, [r6, #4*64*(\i+1)+4*32]
119 smlal r8, r9, r12, r10
121 ldr r12, [r2, #4*64*(\i+2)]
125 smlal r4, r7, r11, r10
130 strh_post r10, r3, r12
133 strh_dpost r11, r5, r12
136 sum8 r8, r9, r1, r0, r10, r11, r12, lr, rsb, 33