pvmp3_polyphase_filter_window_gcc.s revision d9618f23226f46c752e56f712bc4b505117d8b4b
1@ ------------------------------------------------------------------
2@ Copyright (C) 1998-2009 PacketVideo
3@
4@ Licensed under the Apache License, Version 2.0 (the "License");
5@ you may not use this file except in compliance with the License.
6@ You may obtain a copy of the License at
7@
8@      http://www.apache.org/licenses/LICENSE-2.0
9@
10@ Unless required by applicable law or agreed to in writing, software
11@ distributed under the License is distributed on an "AS IS" BASIS,
12@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13@ express or implied.
14@ See the License for the specific language governing permissions
15@ and limitations under the License.
16@ -------------------------------------------------------------------
17
18@
19@
20@   Filename: pvmp3_polyphase_filter_window.s
21@
22@------------------------------------------------------------------------------
23@ REVISION HISTORY
24@
25@
26@ Who:                                   Date: MM/DD/YYYY
27@ Description:
28@
29@------------------------------------------------------------------------------
30
31.arm
32
33.align 4
34
35.text
36
37.extern pqmfSynthWin
38
39
40
41@------------------------------------------------------------------------------
42
43.global pvmp3_polyphase_filter_window
44
45pvmp3_polyphase_filter_window:
46        stmfd    sp!,{r0-r2,r4-r11,lr}
47
48        sub      sp,sp,#4
49        ldr      r2,[sp,#0xc]
50        ldr      r1,PolyPh_filter_coeff
51
52        sub      r2,r2,#1
53        mov      r10,#1
54        str      r2,[sp]
55
56@ Accumulators r9, r11::> Initialization
57
58Loop_j:
59        mov      r9,  #0x20
60        mov      r11, #0x20
61        mov      r4,  #0x10
62Loop_i:
63        add      r2,r4,r10
64        add      r3,r0,r2,lsl #2
65        sub      r2,r4,r10
66        ldr      r5,[r3]
67        ldr      lr,[r1]
68        add      r12,r0,r2,lsl #2
69        ldr      r6,[r12,#0x780]
70        smlal    r2,r9,lr,r5
71        smlal    r2,r11,lr,r6
72        ldr      r2,[r1,#4]
73        ldr      r7,[r12,#0x80]
74        smlal    r5,r11,r2,r5
75        smull    r6,r5,r2,r6
76        sub      r9,r9,r5
77        ldr      r5,[r1,#8]
78        ldr      r8,[r3,#0x700]
79        add      r4,r4,#0x200
80        smlal    r6,r9,r5,r7
81        smull    r6,r2,r5,r8
82        ldr      r5,[r1,#0xc]
83        sub      r11,r11,r2
84        smlal    r8,r9,r5,r8
85        smlal    r7,r11,r5,r7
86        ldr      r5,[r3,#0x100]
87        ldr      r2,[r1,#0x10]
88        ldr      r6,[r12,#0x680]
89        smlal    lr,r9,r2,r5
90        smlal    lr,r11,r2,r6
91        ldr      r2,[r1,#0x14]
92        ldr      r7,[r12,#0x180]
93        smlal    r5,r11,r2,r5
94        smull    r6,r5,r2,r6
95        ldr      r6,[r1,#0x18]
96        ldr      r8,[r3,#0x600]
97        sub      r9,r9,r5
98        smlal    r5,r9,r6,r7
99        smull    r2,r5,r6,r8
100        ldr      r6,[r1,#0x1c]
101        sub      r11,r11,r5
102        smlal    r8,r9,r6,r8
103        ldr      r2,[r1,#0x20]
104        ldr      r5,[r3,#0x200]
105        smlal    r7,r11,r6,r7
106        ldr      r6,[r12,#0x580]
107        smlal    lr,r9,r2,r5
108        smlal    lr,r11,r2,r6
109        ldr      r2,[r1,#0x24]
110        ldr      r7,[r12,#0x280]
111        smlal    r5,r11,r2,r5
112        smull    r6,r5,r2,r6
113        ldr      r6,[r1,#0x28]
114        ldr      r8,[r3,#0x500]
115        sub      r9,r9,r5
116        smlal    r5,r9,r6,r7
117        smull    r2,r5,r6,r8
118        ldr      r6,[r1,#0x2c]
119        sub      r11,r11,r5
120
121        smlal    r8,r9,r6,r8
122        smlal    r7,r11,r6,r7
123        ldr      r5,[r3,#0x300]
124        ldr      r8,[r1,#0x30]
125        ldr      r6,[r12,#0x480]
126        smlal    r7,r9,r8,r5
127        smlal    r7,r11,r8,r6
128        ldr      r8,[r1,#0x34]
129        ldr      r12,[r12,#0x380]
130        smlal    r5,r11,r8,r5
131        smull    r6,r5,r8,r6
132        ldr      r6,[r1,#0x38]
133
134
135        ldr      r3,[r3,#0x400]
136        sub      r9,r9,r5
137        smlal    r7,r9,r6,r12
138        smull    r8,r7,r6,r3
139        cmp      r4,#0x210
140        sub      r11,r11,r7
141
142        ldr      r2,[r1,#0x3c]
143        add      r1,r1,#0x40
144        smlal    r3,r9,r2,r3
145        smlal    r12,r11,r2,r12
146
147        blt      Loop_i
148
149        mov      r3,r9, asr #6
150        mov      r4,r3, asr #15
151        teq      r4,r3, asr #31
152        ldr      r12,LOW_16BITS
153        ldr      r2,[sp]
154        eorne    r3,r12,r3,asr #31
155        ldr      r4,[sp,#8]
156        mov      r2,r10,lsl r2
157        add      r4,r4,r2,lsl #1
158        strh     r3,[r4]
159
160        mov      r3,r11,asr #6
161        mov      r4,r3,asr #15
162        teq      r4,r3,asr #31
163        eorne    r3,r12,r3,asr #31
164        ldr      r12,[sp,#0xc]
165        ldr      r11,[sp,#8]
166        rsb      r2,r2,r12,lsl #5
167        add      r2,r11,r2,lsl #1
168        strh     r3,[r2]
169
170        add      r10,r10,#1
171        cmp      r10,#0x10
172        blt      Loop_j
173
174@ Accumulators r4, r5 Initialization
175
176        mov      r4,#0x20
177        mov      r5,#0x20
178        mov      r3,#0x10
179PolyPh_filter_loop2:
180        add      r2,r0,r3,lsl #2
181        ldr      r12,[r2]
182        ldr      r8,[r1]
183        ldr      r6,[r2,#0x80]
184        smlal    r12,r4,r8,r12
185        ldr      r12,[r1,#4]
186        ldr      r7,[r2,#0x40]
187        smlal    r6,r4,r12,r6
188
189        ldr      r12,[r1,#8]
190        ldr      r6,[r2,#0x180]
191        smlal    r7,r5,r12,r7
192        ldr      r12,[r2,#0x100]
193        ldr      r7,[r1,#0xc]
194        ldr      r2,[r2,#0x140]
195        smlal    r12,r4,r7,r12
196        ldr      r12,[r1,#0x10]
197        add      r3,r3,#0x80
198        smlal    r6,r4,r12,r6
199        ldr      r6,[r1,#0x14]
200        cmp      r3,#0x210
201        smlal    r2,r5,r6,r2
202        add      r1,r1,#0x18
203
204        blt      PolyPh_filter_loop2
205        mov      r0,r4,asr #6
206        mov      r2,r0,asr #15
207        teq      r2,r0,asr #31
208        ldrne    r12,LOW_16BITS
209        ldr      r1,[sp,#8]
210        eorne    r0,r12,r0,asr #31
211        strh     r0,[r1,#0]
212        mov      r0,r5,asr #6
213        mov      r2,r0,asr #15
214        teq      r2,r0,asr #31
215        ldrne    r12,LOW_16BITS
216        ldr      r2,[sp]
217        mov      r1,#0x10
218        eorne    r0,r12,r0,asr #31
219        ldr      r12,[sp,#8]
220        mov      r1,r1,lsl r2
221        add      r1,r12,r1,lsl #1
222        strh     r0,[r1]
223        add      sp,sp,#0x10
224        ldmfd    sp!,{r4-r11,pc}
225
226PolyPh_filter_coeff:
227        .word      pqmfSynthWin
228LOW_16BITS:
229        .word      0x00007fff
230
231