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	CODE32
32
33	AREA	|.drectve|, DRECTVE
34
35	EXPORT	|pvmp3_polyphase_filter_window|
36	IMPORT	|pqmfSynthWin|
37
38	AREA	|.pdata|, PDATA
39
40	AREA	|.text|, CODE, ARM
41
42|pvmp3_polyphase_filter_window| PROC
43        stmfd    sp!,{r0-r2,r4-r11,lr}
44
45        sub      sp,sp,#4
46        ldr      r2,[sp,#0xc]
47        ldr      r1,PolyPh_filter_coeff
48		
49        sub      r2,r2,#1
50        mov      r10,#1
51        str      r2,[sp]
52
53; Accumulators r9, r11::> Initialization
54
55Loop_j
56        mov      r9,  #0x20
57        mov      r11, #0x20
58        mov      r4,  #0x10
59Loop_i
60        add      r2,r4,r10
61        add      r3,r0,r2,lsl #2
62        sub      r2,r4,r10
63        ldr      r5,[r3]
64        ldr      lr,[r1]
65        add      r12,r0,r2,lsl #2
66        ldr      r6,[r12,#0x780]
67        smlal    r2,r9,lr,r5
68        smlal    r2,r11,lr,r6
69        ldr      r2,[r1,#4]
70        ldr      r7,[r12,#0x80]
71        smlal    r5,r11,r2,r5
72        smull    r6,r5,r2,r6
73        sub      r9,r9,r5
74        ldr      r5,[r1,#8]
75        ldr      r8,[r3,#0x700]
76        add      r4,r4,#0x200
77        smlal    r6,r9,r5,r7
78        smull    r6,r2,r5,r8
79        ldr      r5,[r1,#0xc]
80        sub      r11,r11,r2
81        smlal    r8,r9,r5,r8
82        smlal    r7,r11,r5,r7
83        ldr      r5,[r3,#0x100]
84        ldr      r2,[r1,#0x10]
85        ldr      r6,[r12,#0x680]
86        smlal    lr,r9,r2,r5
87        smlal    lr,r11,r2,r6
88        ldr      r2,[r1,#0x14]
89        ldr      r7,[r12,#0x180]
90        smlal    r5,r11,r2,r5
91        smull    r6,r5,r2,r6
92        ldr      r6,[r1,#0x18]
93        ldr      r8,[r3,#0x600]
94        sub      r9,r9,r5
95        smlal    r5,r9,r6,r7
96        smull    r2,r5,r6,r8
97        ldr      r6,[r1,#0x1c]
98        sub      r11,r11,r5
99        smlal    r8,r9,r6,r8
100        ldr      r2,[r1,#0x20]
101        ldr      r5,[r3,#0x200]
102        smlal    r7,r11,r6,r7
103        ldr      r6,[r12,#0x580]
104        smlal    lr,r9,r2,r5
105        smlal    lr,r11,r2,r6
106        ldr      r2,[r1,#0x24]
107        ldr      r7,[r12,#0x280]
108        smlal    r5,r11,r2,r5
109        smull    r6,r5,r2,r6
110        ldr      r6,[r1,#0x28]
111        ldr      r8,[r3,#0x500]
112        sub      r9,r9,r5
113        smlal    r5,r9,r6,r7
114        smull    r2,r5,r6,r8
115        ldr      r6,[r1,#0x2c]
116        sub      r11,r11,r5
117
118        smlal    r8,r9,r6,r8
119        smlal    r7,r11,r6,r7
120        ldr      r5,[r3,#0x300]
121        ldr      r8,[r1,#0x30]
122        ldr      r6,[r12,#0x480]
123        smlal    r7,r9,r8,r5
124        smlal    r7,r11,r8,r6
125        ldr      r8,[r1,#0x34]
126        ldr      r12,[r12,#0x380]
127        smlal    r5,r11,r8,r5
128        smull    r6,r5,r8,r6
129        ldr      r6,[r1,#0x38]
130
131
132        ldr      r3,[r3,#0x400]
133        sub      r9,r9,r5
134        smlal    r7,r9,r6,r12
135        smull    r8,r7,r6,r3
136        cmp      r4,#0x210
137        sub      r11,r11,r7
138
139        ldr      r2,[r1,#0x3c]
140        add      r1,r1,#0x40
141        smlal    r3,r9,r2,r3
142        smlal    r12,r11,r2,r12
143
144        blt      Loop_i
145
146        mov      r3,r9, asr #6
147        mov      r4,r3, asr #15
148        teq      r4,r3, asr #31
149        ldr      r12,LOW_16BITS
150        ldr      r2,[sp]
151        eorne    r3,r12,r3,asr #31
152        ldr      r4,[sp,#8]
153        mov      r2,r10,lsl r2
154        add      r4,r4,r2,lsl #1
155        strh     r3,[r4]
156
157        mov      r3,r11,asr #6
158        mov      r4,r3,asr #15
159        teq      r4,r3,asr #31
160        eorne    r3,r12,r3,asr #31
161        ldr      r12,[sp,#0xc]
162        ldr      r11,[sp,#8]
163        rsb      r2,r2,r12,lsl #5
164        add      r2,r11,r2,lsl #1
165        strh     r3,[r2]
166
167        add      r10,r10,#1
168        cmp      r10,#0x10
169        blt      Loop_j
170
171; Accumulators r4, r5 Initialization
172
173        mov      r4,#0x20
174        mov      r5,#0x20
175        mov      r3,#0x10
176PolyPh_filter_loop2
177        add      r2,r0,r3,lsl #2
178        ldr      r12,[r2]
179        ldr      r8,[r1]
180        ldr      r6,[r2,#0x80]
181        smlal    r12,r4,r8,r12
182        ldr      r12,[r1,#4]
183        ldr      r7,[r2,#0x40]
184        smlal    r6,r4,r12,r6
185
186        ldr      r12,[r1,#8]
187        ldr      r6,[r2,#0x180]
188        smlal    r7,r5,r12,r7
189        ldr      r12,[r2,#0x100]
190        ldr      r7,[r1,#0xc]
191        ldr      r2,[r2,#0x140]
192        smlal    r12,r4,r7,r12
193        ldr      r12,[r1,#0x10]
194        add      r3,r3,#0x80
195        smlal    r6,r4,r12,r6
196        ldr      r6,[r1,#0x14]
197        cmp      r3,#0x210
198        smlal    r2,r5,r6,r2
199        add      r1,r1,#0x18
200
201        blt      PolyPh_filter_loop2
202        mov      r0,r4,asr #6
203        mov      r2,r0,asr #15
204        teq      r2,r0,asr #31
205        ldrne    r12,LOW_16BITS
206        ldr      r1,[sp,#8]
207        eorne    r0,r12,r0,asr #31
208        strh     r0,[r1,#0]
209        mov      r0,r5,asr #6
210        mov      r2,r0,asr #15
211        teq      r2,r0,asr #31
212        ldrne    r12,LOW_16BITS
213        ldr      r2,[sp]
214        mov      r1,#0x10
215        eorne    r0,r12,r0,asr #31
216        ldr      r12,[sp,#8]
217        mov      r1,r1,lsl r2
218        add      r1,r12,r1,lsl #1
219        strh     r0,[r1]
220        add      sp,sp,#0x10
221        ldmfd    sp!,{r4-r11,pc}
222
223
224PolyPh_filter_coeff
225        DCD      pqmfSynthWin
226LOW_16BITS
227        DCD      0x00007fff
228	
229		ENDP  ; |pvmp3_polyphase_filter_window|
230		END
231
232