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_dct_18.s
21;
22;------------------------------------------------------------------------------
23; REVISION HISTORY
24;
25;
26; Who:                                   Date: MM/DD/YYYY
27; Description:
28;
29;------------------------------------------------------------------------------
30
31        EXPORT pvmp3_mdct_18
32
33        IMPORT ||Lib$$Request$$armlib|| [WEAK]
34        IMPORT ||Lib$$Request$$cpplib|| [WEAK]
35        IMPORT pvmp3_dct_9
36
37
38;------------------------------------------------------------------------------
39
40 AREA |.text|, CODE, READONLY, ALIGN=2
41
42
43;------------------------------------------------------------------------------
44
45|pvmp3_mdct_18| PROC
46        stmfd    sp!,{r4-r10,lr}
47        mov      r7,r2
48        ldr      r2,table
49        mov      r6,r1
50        add      r3,r2,#0x24
51        add      r12,r3,#0x44
52        add      r1,r0,#0x44
53        mov      r5,r0
54
55;    for ( i=9; i!=0; i--)
56;    {
57
58        mov      r4,#9
59Loop_1
60
61;       tmp  = *(pt_vec);
62;		tmp1 = *(pt_vec_o);
63
64        ldr      lr,[r0]		;; tmp  == lr
65        ldr      r8,[r3],#4		;; tmp1 == r8
66
67;        tmp  = fxp_mul32_Q32( tmp<<1,  *(pt_cos++  ));
68;        tmp1 = fxp_mul32_Q27( tmp1, *(pt_cos_x--));
69
70        mov      lr,lr,lsl #1
71        smull    r10,lr,r8,lr
72        ldr      r8,[r12],#-4
73        ldr      r9,[r1]
74        subs     r4,r4,#1
75        smull    r9,r10,r8,r9
76        mov      r8,r9,lsr #27
77        add      r8,r8,r10,lsl #5
78
79;        *(pt_vec++)   =   tmp + tmp1 ;
80;        *(pt_vec_o--) = fxp_mul32_Q28( (tmp - tmp1), *(pt_cos_split++));
81
82        add      r9,lr,r8
83        sub      r8,lr,r8
84        ldr      lr,[r2],#4
85        str      r9,[r0],#4
86        smull    r8,r9,lr,r8
87        mov      lr,r8,lsr #28
88        add      lr,lr,r9,lsl #4
89        str      lr,[r1],#-4
90        bne      Loop_1
91
92;		}
93
94        mov      r0,r5			;; r0 = vec
95        bl       pvmp3_dct_9
96        add      r0,r5,#0x24	;; r0 = &vec[9]
97        bl       pvmp3_dct_9
98
99        ldr      r0,[r5,#0x20]
100        ldr      r2,[r5,#0x40]
101        str      r0,[r5,#0x40]
102        ldr      r0,[r5,#0x1c]
103        ldr      r3,[r5,#0x38]
104        str      r0,[r5,#0x38]
105        ldr      r1,[r5,#0x18]
106        ldr      r0,[r5,#0x30]
107        str      r1,[r5,#0x30]
108        ldr      r12,[r5,#0x14]
109        ldr      r1,[r5,#0x28]
110        str      r12,[r5,#0x28]
111        ldr      r12,[r5,#0x10]
112        str      r12,[r5,#0x20]
113        ldr      r12,[r5,#0xc]
114        str      r12,[r5,#0x18]
115        ldr      r12,[r5,#8]
116        str      r12,[r5,#0x10]
117        ldr      r12,[r5,#4]
118        str      r12,[r5,#8]
119        ldr      r12,[r5,#0x24]
120        sub      r12,r12,r1
121        str      r12,[r5,#4]
122        ldr      r12,[r5,#0x2c]
123        sub      r1,r12,r1
124        str      r1,[r5,#0xc]
125        sub      r1,r12,r0
126        str      r1,[r5,#0x14]
127        ldr      r1,[r5,#0x34]
128        sub      r0,r1,r0
129        str      r0,[r5,#0x1c]
130        sub      r0,r1,r3
131        str      r0,[r5,#0x24]
132        ldr      r1,[r5,#0x3c]
133        sub      r3,r1,r3
134        sub      r1,r1,r2
135        str      r1,[r5,#0x34]
136        str      r3,[r5,#0x2c]
137        ldr      r1,[r5,#0x44]
138        sub      r1,r1,r2
139        str      r1,[r5,#0x3c]
140        ldr      r12,[r5,#0]
141
142Loop_2
143        add      r1,r5,r4,lsl #2
144        ldr      r2,[r1,#0x28]
145        ldr      r3,[r6,r4,lsl #2]
146        add      r0,r0,r2
147        str      r0,[r1,#0x28]
148        ldr      lr,[r7,r4,lsl #2]
149        ldr      r1,[r1,#4]
150        smlal    r0,r3,lr,r0
151        mov      r0,r2
152        add      r2,r12,r1
153        rsb      r2,r2,#0
154        str      r3,[r5,r4,lsl #2]
155        str      r2,[r6,r4,lsl #2]
156        add      r4,r4,#1
157        cmp      r4,#6
158        mov      r12,r1
159
160        blt      Loop_2
161
162        ldr      r1,[r5,#0x40]
163        ldr      r2,[r6,#0x18]
164        add      r3,r0,r1
165        str      r3,[r5,#0x40]
166        ldr      lr,[r7,r4,lsl #2]
167        mov      r3,r3,lsl #1
168        ldr      r0,[r5,#0x1c]
169        smlal    r3,r2,lr,r3
170        add      r3,r12,r0
171        str      r2,[r5,#0x18]
172        ldr      r2,[r6,#0x1c]
173        rsb      r3,r3,#0
174        str      r3,[r6,#0x18]
175        ldr      r3,[r5,#0x20]
176        add      r0,r3,r0
177        rsb      r0,r0,#0
178        str      r0,[r6,#0x1c]
179        ldr      r3,[r5,#0x44]
180        ldr      r0,[r6,#0x20]
181        add      r3,r3,r1
182        mov      r1,r2
183        ldr      r10,[r7,#0x1c]
184        mov      r2,r3,lsl #1
185        smlal    r12,r1,r10,r2
186        str      r1,[r5,#0x1c]
187        ldr      r1,[r5,#0x20]
188        ldr      r3,[r5,#0x24]
189        add      r1,r1,r3
190        rsb      r1,r1,#0
191        str      r1,[r6,#0x20]
192        ldr      r1,[r5,#0x44]
193        ldr      r3,[r7,#0x20]
194        mov      r1,r1,lsl #1
195        smlal    r12,r0,r3,r1
196        ldr      lr,[r7,#0x24]
197        ldr      r3,[r6,#0x24]
198        str      r0,[r5,#0x20]
199        smlal    r1,r3,lr,r1
200        ldr      r0,[r6,#0x40]
201        ldr      r12,[r6,#0x44]
202        str      r3,[r5,#0x24]
203        ldr      r1,[r5,#0x28]
204        ldr      r3,[r7,#0x44]
205        mov      r1,r1,lsl #1
206        smlal    r1,r12,r3,r1
207        ldr      r1,[r5,#0x40]
208        str      r12,[r5,#0x44]
209        rsb      r8,r1,#0
210        str      r8,[r5,#0x28]
211        ldr      r1,[r5,#0x2c]
212        ldr      r3,[r7,#0x40]
213        mov      r1,r1,lsl #1
214        smlal    r1,r0,r3,r1
215        str      r0,[r5,#0x40]
216        ldr      r0,[r5,#0x3c]
217        ldr      r1,[r6,#0x38]
218        ldr      r3,[r6,#0x3c]
219        rsb      r9,r0,#0
220        str      r9,[r5,#0x2c]
221        ldr      r0,[r5,#0x30]
222        ldr      r12,[r7,#0x3c]
223        mov      r0,r0,lsl #1
224        smlal    r0,r3,r12,r0
225        str      r3,[r5,#0x3c]
226        ldr      r0,[r5,#0x38]
227        rsb      r0,r0,#0
228        str      r0,[r5,#0x30]
229        ldr      r3,[r5,#0x34]
230        ldr      r12,[r7,#0x38]
231        mov      r3,r3,lsl #1
232        smlal    r3,r1,r12,r3
233        mov      r0,r0,lsl #1
234        str      r1,[r5,#0x38]
235        ldr      r4,[r7,#0x34]
236        ldr      r1,[r6,#0x34]
237        ldr      r3,[r6,#0x30]
238        smlal    r0,r1,r4,r0
239        ldr      r12,[r6,#0x2c]
240        ldr      lr,[r6,#0x28]
241        str      r1,[r5,#0x34]
242        ldr      r1,[r7,#0x30]
243        mov      r0,r9,lsl #1
244        smlal    r0,r3,r1,r0
245        mov      r0,r8,lsl #1
246        ldr      r1,[r7,#0x2c]
247        str      r3,[r5,#0x30]
248        smlal    r0,r12,r1,r0
249        ldr      r0,[r7,#0x28]
250        str      r12,[r5,#0x2c]
251        smlal    r2,lr,r0,r2
252        str      lr,[r5,#0x28]
253        ldr      r1,[r6,#4]
254        ldr      r12,[r7,#0x48]
255        mov      r2,r1,lsl #1
256        ldr      r1,[r6,#0x20]
257        ldr      r0,[r6]
258        mov      r1,r1,lsl #1
259        smull    r4,lr,r12,r1
260        ldr      r3,[r6,#0x1c]
261        str      lr,[r6]
262        ldr      r12,[r7,#0x4c]
263        mov      r3,r3,lsl #1
264        smull    r4,lr,r12,r3
265        mov      r0,r0,lsl #1
266        ldr      r12,[r7,#0x64]
267        str      lr,[r6,#4]
268        smull    r4,lr,r12,r2
269        ldr      r12,[r7,#0x68]
270        str      lr,[r6,#0x1c]
271        smull    r4,lr,r12,r0
272        ldr      r12,[r7,#0x6c]
273        str      lr,[r6,#0x20]
274        smull    lr,r0,r12,r0
275        ldr      r12,[r7,#0x70]
276        str      r0,[r6,#0x24]
277        smull    r0,r2,r12,r2
278        ldr      r0,[r7,#0x88]
279        str      r2,[r6,#0x28]
280        smull    r3,r2,r0,r3
281        ldr      r0,[r7,#0x8c]
282        str      r2,[r6,#0x40]
283        smull    r2,r1,r0,r1
284        str      r1,[r6,#0x44]
285        ldr      r0,[r6,#0x18]
286        ldr      lr,[r7,#0x50]
287        mov      r1,r0,lsl #1
288        ldr      r0,[r6,#0x14]
289        smull    r5,r4,lr,r1
290        ldr      r12,[r6,#0x10]
291        mov      r3,r0,lsl #1
292        ldr      r0,[r6,#0xc]
293        mov      r12,r12,lsl #1
294        mov      r2,r0,lsl #1
295        ldr      r0,[r6,#8]
296        str      r4,[r6,#8]
297        ldr      lr,[r7,#0x54]
298        mov      r0,r0,lsl #1
299        smull    r5,r4,lr,r3
300        ldr      lr,[r7,#0x58]
301        str      r4,[r6,#0xc]
302        smull    r5,r4,lr,r12
303        ldr      lr,[r7,#0x5c]
304        str      r4,[r6,#0x10]
305        smull    r5,r4,lr,r2
306        ldr      lr,[r7,#0x60]
307        str      r4,[r6,#0x14]
308        smull    r5,r4,lr,r0
309        ldr      lr,[r7,#0x74]
310        str      r4,[r6,#0x18]
311        smull    r4,r0,lr,r0
312        ldr      lr,[r7,#0x78]
313        str      r0,[r6,#0x2c]
314        smull    r0,r2,lr,r2
315        ldr      r0,[r7,#0x7c]
316        str      r2,[r6,#0x30]
317        smull    r12,r2,r0,r12
318        ldr      r0,[r7,#0x80]
319        str      r2,[r6,#0x34]
320        smull    r3,r2,r0,r3
321        ldr      r0,[r7,#0x84]
322        str      r2,[r6,#0x38]
323        smull    r2,r1,r0,r1
324        str      r1,[r6,#0x3c]
325        ldmfd    sp!,{r4-r10,pc}
326table
327        DCD      ||.constdata$1||
328        ENDP
329
330;------------------------------------------------------------------------------
331
332 AREA |.constdata|, DATA, READONLY, ALIGN=2
333
334;------------------------------------------------------------------------------
335
336||.constdata$1||
337cosTerms_dct18
338        DCD      0x0807d2b0
339        DCD      0x08483ee0
340        DCD      0x08d3b7d0
341        DCD      0x09c42570
342        DCD      0x0b504f30
343        DCD      0x0df29440
344        DCD      0x12edfb20
345        DCD      0x1ee8dd40
346        DCD      0x5bca2a00
347cosTerms_1_ov_cos_phi
348        DCD      0x400f9c00
349        DCD      0x408d6080
350        DCD      0x418dcb80
351        DCD      0x431b1a00
352        DCD      0x4545ea00
353        DCD      0x48270680
354        DCD      0x4be25480
355        DCD      0x50ab9480
356        DCD      0x56ce4d80
357        DCD      0x05ebb630
358        DCD      0x06921a98
359        DCD      0x0771d3a8
360        DCD      0x08a9a830
361        DCD      0x0a73d750
362        DCD      0x0d4d5260
363        DCD      0x127b1ca0
364        DCD      0x1ea52b40
365        DCD      0x5bb3cc80
366
367
368
369        END
370