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