1250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ ------------------------------------------------------------------
2250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ Copyright (C) 1998-2009 PacketVideo
3250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@
4250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ Licensed under the Apache License, Version 2.0 (the "License");
5250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ you may not use this file except in compliance with the License.
6250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ You may obtain a copy of the License at
7250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@
8250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@      http://www.apache.org/licenses/LICENSE-2.0
9250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@
10250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ Unless required by applicable law or agreed to in writing, software
11250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ distributed under the License is distributed on an "AS IS" BASIS,
12250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ express or implied.
14250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ See the License for the specific language governing permissions
15250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ and limitations under the License.
16250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ -------------------------------------------------------------------
17250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
18250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@
19250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@
20250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@   Filename: pvmp3_dct_9_gcc.s
21250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@
22250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@------------------------------------------------------------------------------
23250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ REVISION HISTORY
24250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@
25250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@
26250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ Who:                                   Date: MM/DD/YYYY
27250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@ Description:
28250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@
29250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@------------------------------------------------------------------------------
30250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
31250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber.arm
32250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
33250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber.align 4
34250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
35250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber.text
36250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
37250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
38250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@------------------------------------------------------------------------------
39250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
40250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber.global pvmp3_dct_9
41250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
42250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberpvmp3_dct_9:
43250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        stmfd    sp!,{r4-r11,lr}
44250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r2, [r0, #0x20]
45250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r3, [r0, #0]
46250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r12,[r0, #4]
47250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r1,r2,r3
48250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        sub      lr,r2,r3
49250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r3,[r0, #0x1c]
50250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r4,[r0, #0x18]
51250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r2,r3,r12
52250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r5,[r0,#8]
53250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        sub      r3,r3,r12
54250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r12,r4,r5
55250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        sub      r4,r4,r5
56250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r5,[r0, #0x14]
57250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r7,[r0, #0xc]
58250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r9,[r0, #0x10]
59250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r6,r5,r7
60250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        sub      r5,r5,r7
61250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r7,r1,r12
62250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r8,r9,r2
63250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r7,r7,r6
64250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r10,r7,r8
65250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        rsb      r7,r8,r7,asr #1
66250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        str      r7,[r0, #0x18]
67250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        rsb      r2,r9,r2,asr #1
68250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        str      r10,[r0,#0]
69250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r11,cos_2pi_9
70250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        rsb      r7,r2,#0
71250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
72250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r10,cos_4pi_9
73250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      r9,r1,lsl #1
74250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      r8,r7
75250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
76250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[4]  = fxp_mac32_Q32( vec[4], tmp0<<1, cos_2pi_9)@
77250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
78250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r1,r8,r11,r9
79250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r11,cos_pi_9
80250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber		mov      r1,r9			@@@@@@  !!!!!!
81250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
82250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[8]  = fxp_mac32_Q32( vec[8], tmp0<<1, cos_4pi_9)@
83250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
84250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r1,r7,r10,r9
85250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
86250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      r1,r12,lsl #1
87250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
88250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
89250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[2]  = fxp_mac32_Q32( vec[2], tmp0<<1, cos_pi_9)@
90250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
91250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r9,r2,r11,r9
92250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        rsb      r9,r10,#0
93250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r11,cos_5pi_9
94250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
95250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r12,r2,r9,r1
96250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
97250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
98250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
99250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[2]  = fxp_mac32_Q32( vec[2], tmp2<<1, cos_5pi_9)@
100250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
101250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r9,cos_2pi_9
102250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      r12,r1			@@@@@@  !!!!!!
103250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r12,r8,r11,r1
104250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
105250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
106250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[8]  = fxp_mac32_Q32( vec[8], tmp2<<1, cos_2pi_9)@
107250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
108250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r1,r7,r9,r1
109250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      r1,r6,lsl #1
110250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r12,r7,r11,r1
111250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        and      r6,r10,r11,asr #14
112250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r12,r8,r6,r1
113250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r10,cos_11pi_18
114250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r12,r11,r6
115250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r1,r2,r12,r1
116250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r9,cos_8pi_9
117250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        str      r2,[r0,#8]
118250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      r1,r5,lsl #1
119250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
120250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[8]  = fxp_mac32_Q32( vec[8], tmp3<<1, cos_8pi_9)@
121250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
122250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smull    r2,r6,r9,r1
123250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        str      r7,[r0,#0x20]
124250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      r2,r4,lsl #1
125250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r7,cos_13pi_18
126250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r12,r6,r10,r2
127250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
128250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      r3,r3,lsl #1
129250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
130250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[5]  = fxp_mac32_Q32( vec[5], tmp8<<1, cos_13pi_18)@
131250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
132250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r12,r6,r7,r3
133250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        add      r4,r5,r4
134250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      r12,lr,lsl #1
135250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        sub      lr,r4,lr
136250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r7,cos_17pi_18
137250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        str      r8,[r0, #0x10]
138250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldr      r4,cos_pi_6
139250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
140250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        mov      lr,lr,lsl #1
141250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
142250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[1]  = fxp_mac32_Q32( vec[1], tmp8<<1, cos_17pi_18)@
143250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
144250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r8,r6,r7,r12
145250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
146250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[3]  = fxp_mul32_Q32((tmp5 + tmp6  - tmp8)<<1, cos_pi_6)@
147250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
148250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smull    r5,lr,r4,lr
149250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        str      r6,[r0, #4]
150250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        str      lr,[r0, #0xc]
151250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
152250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
153250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[5]  = fxp_mul32_Q32(tmp5<<1, cos_17pi_18)@
154250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smull    r5,lr,r7,r1
155250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        rsb      r6,r9,#0
156250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[5]  = fxp_mac32_Q32( vec[5], tmp6<<1,  cos_7pi_18)@
157250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r5,lr,r6,r2
158250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[5]  = fxp_mac32_Q32( vec[5], tmp7<<1,    cos_pi_6)@
159250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r5,lr,r4,r3
160250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[5]  = fxp_mac32_Q32( vec[5], tmp8<<1, cos_13pi_18)@
161250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r5,lr,r10,r12
162250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        str      lr,[r0, #0x14]
163250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        rsb      lr,r10,#0
164250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
165250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[7]  = fxp_mul32_Q32(tmp5<<1, cos_5pi_18)@
166250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smull    r5,r1,lr,r1
167250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[7]  = fxp_mac32_Q32( vec[7], tmp6<<1, cos_17pi_18)@
168250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r2,r1,r7,r2
169250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[7]  = fxp_mac32_Q32( vec[7], tmp7<<1,    cos_pi_6)@
170250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r3,r1,r4,r3
171250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber@    vec[7]  = fxp_mac32_Q32( vec[7], tmp8<<1, cos_11pi_18)@
172250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        smlal    r12,r1,r9,r12
173250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        str      r1,[r0, #0x1c]
174250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        ldmfd    sp!,{r4-r11,pc}
175250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubercos_2pi_9:
176250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        .word      0x620dbe80
177250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubercos_4pi_9:
178250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        .word      0x163a1a80
179250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubercos_pi_9:
180250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        .word      0x7847d900
181250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubercos_5pi_9:
182250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        .word      0x87b82700
183250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubercos_8pi_9:
184250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        .word      0xd438af00
185250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubercos_11pi_18:
186250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        .word      0xadb92280
187250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubercos_13pi_18:
188250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        .word      0x91261480
189250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubercos_17pi_18:
190250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        .word      0x81f1d200
191250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Hubercos_pi_6:
192250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber        .word      0x6ed9eb80
193250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber
194