R4R8First_v5.s revision e2e838afcf03e603a41a0455846eaf9614537c16
1@/*
2@ ** Copyright 2003-2010, VisualOn, Inc.
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 express or implied.
13@ ** See the License for the specific language governing permissions and
14@ ** limitations under the License.
15@ */
16
17@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
18@	File:		R4R8First_v5.s
19@
20@	Content:	Radix8First and Radix4First function armv5 assemble
21@
22@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
23
24	.section .text
25	.global	Radix4First
26
27Radix4First:
28	stmdb       sp!, {r4 - r11, lr}
29
30	movs				r10, r1
31	mov					r11, r0
32	beq					Radix4First_END
33
34Radix4First_LOOP:
35	ldrd				r0, [r11]
36	ldrd				r2, [r11, #8]
37	ldrd				r4, [r11, #16]
38	ldrd				r6, [r11, #24]
39
40	add					r8, r0, r2
41	add					r9, r1, r3
42
43	sub					r0, r0, r2
44	sub					r1, r1, r3
45
46	add					r2, r4, r6
47	add					r3, r5, r7
48
49	sub					r4, r4, r6
50	sub					r5, r5, r7
51
52	add					r6, r8, r2
53	add					r7, r9, r3
54
55	sub					r8, r8, r2
56	sub					r9, r9, r3
57
58	add					r2, r0, r5
59	sub					r3, r1, r4
60
61	sub					r0, r0, r5
62	add					r1, r1, r4
63
64	strd				r6, [r11]
65	strd				r2, [r11, #8]
66	strd				r8, [r11, #16]
67	strd				r0, [r11, #24]
68
69	subs				r10, r10, #1
70	add					r11, r11, #32
71	bne					Radix4First_LOOP
72
73Radix4First_END:
74	ldmia       sp!, {r4 - r11, pc}
75	@ENDP  @ |Radix4First|
76
77	.section .text
78	.global	Radix8First
79
80Radix8First:
81	stmdb       sp!, {r4 - r11, lr}
82	sub         sp, sp, #0x24
83
84	mov				  r12, r1
85	mov					r14, r0
86	cmp					r12, #0
87	beq					Radix8First_END
88
89Radix8First_LOOP:
90	ldrd				r0, [r14]
91	ldrd				r2, [r14, #8]
92	ldrd				r4, [r14, #16]
93	ldrd				r6, [r14, #24]
94
95	add					r8, r0, r2					@ r0 = buf[0] + buf[2]@
96	add					r9, r1, r3					@ i0 = buf[1] + buf[3]@
97
98	sub					r0, r0, r2					@ r1 = buf[0] - buf[2]@
99	sub					r1, r1, r3					@ i1 = buf[1] - buf[3]@
100
101	add					r2, r4, r6					@	r2 = buf[4] + buf[6]@
102	add					r3, r5, r7					@ i2 = buf[5] + buf[7]@
103
104	sub					r4, r4, r6					@	r3 = buf[4] - buf[6]@
105	sub					r5, r5, r7					@ i3 = buf[5] - buf[7]@
106
107	add					r6, r8, r2					@ r4 = (r0 + r2) >> 1@
108	add					r7, r9, r3					@ i4 = (i0 + i2) >> 1@
109
110	sub					r8, r8, r2					@	r5 = (r0 - r2) >> 1@
111	sub					r9, r9, r3					@ i5 = (i0 - i2) >> 1@
112
113	sub					r2, r0, r5					@ r6 = (r1 - i3) >> 1@
114	add					r3, r1, r4					@ i6 = (i1 + r3) >> 1@
115
116	add					r0, r0, r5					@ r7 = (r1 + i3) >> 1@
117	sub					r1, r1, r4					@ i7 = (i1 - r3) >> 1@
118
119	mov					r6, r6, asr #1			@
120	mov					r7, r7, asr #1			@
121
122	mov					r8, r8, asr #1
123	mov					r9, r9, asr #1
124
125	mov					r2, r2, asr #1
126	mov					r3, r3, asr #1
127
128	mov					r0, r0, asr #1
129	mov					r1, r1, asr #1
130
131	str					r6, [sp]
132	str					r7, [sp, #4]
133
134	str					r8, [sp, #8]
135	str					r9, [sp, #12]
136
137	str					r2, [sp, #16]
138	str					r3, [sp, #20]
139
140	str					r0, [sp, #24]
141	str					r1, [sp, #28]
142
143	ldrd				r2, [r14, #32]
144	ldrd				r4, [r14, #40]
145	ldrd				r6, [r14, #48]
146	ldrd				r8, [r14, #56]
147
148	add					r0, r2, r4					@ r0 = buf[ 8] + buf[10]@
149	add					r1, r3, r5					@ i0 = buf[ 9] + buf[11]@
150
151	sub					r2, r2, r4					@ r1 = buf[ 8] - buf[10]@
152	sub					r3, r3, r5					@ i1 = buf[ 9] - buf[11]@
153
154	add					r4, r6, r8					@ r2 = buf[12] + buf[14]@
155	add					r5, r7, r9					@ i2 = buf[13] + buf[15]@
156
157	sub					r6, r6, r8					@ r3 = buf[12] - buf[14]@
158	sub					r7, r7, r9					@	i3 = buf[13] - buf[15]@
159
160	add					r8, r0, r4					@ t0 = (r0 + r2)
161	add					r9, r1, r5					@ t1 = (i0 + i2)
162
163	sub					r0, r0, r4					@ t2 = (r0 - r2)
164	sub					r1, r1, r5					@ t3 = (i0 - i2)
165
166	mov					r8, r8, asr #1
167	ldr					r4, [sp]
168
169	mov					r9, r9, asr #1
170	ldr					r5, [sp, #4]
171
172	mov					r0, r0, asr #1
173	mov					r1, r1, asr #1
174
175	add					r10, r4, r8					@ buf[ 0] = r4 + t0@
176	add					r11, r5, r9					@ buf[ 1] = i4 + t1@
177
178	sub					r4,  r4, r8					@ buf[ 8] = r4 - t0@
179	sub					r5,  r5, r9					@	buf[ 9] = i4 - t1@
180
181 	strd				r10, [r14]
182 	strd				r4,  [r14, #32]
183
184 	ldr					r10, [sp, #8]
185 	ldr					r11, [sp, #12]
186
187 	add					r4, r10, r1					@ buf[ 4] = r5 + t3@
188 	sub					r5, r11, r0					@	buf[ 5] = i5 - t2@
189
190 	sub					r10, r10, r1				@ buf[12] = r5 - t3@
191 	add					r11, r11, r0				@ buf[13] = i5 + t2@
192
193 	strd				r4,  [r14, #16]
194 	strd				r10, [r14, #48]
195
196 	sub					r0, r2, r7					@ r0 = r1 - i3@
197 	add					r1, r3, r6					@ i0 = i1 + r3@
198
199  ldr					r11, DATATab
200
201 	add					r2, r2, r7					@ r2 = r1 + i3@
202 	sub					r3, r3, r6					@ i2 = i1 - r3@
203
204	sub					r4, r0, r1					@ r0 - i0
205	add					r5, r0, r1					@ r0 + i0
206
207	sub					r0, r2, r3					@ r2 - i2
208	add					r1, r2, r3					@ r2 + i2
209
210	smull				r8, r6, r4, r11
211	smull				r9, r7, r5, r11
212
213	ldr					r2, [sp, #16]
214	ldr					r3, [sp, #20]
215
216	smull				r8, r4, r0, r11
217	smull				r9, r5, r1, r11
218
219	ldr					r10, [sp, #24]
220	ldr					r11, [sp, #28]
221
222	sub					r8, r2, r6
223	sub					r9, r3, r7
224
225	add					r2, r2, r6
226	add					r3, r3, r7
227
228	add					r6, r10, r5
229	sub					r7, r11, r4
230
231	sub					r0, r10, r5
232	add					r1, r11, r4
233
234	strd				r6, [r14, #8]
235	strd				r8, [r14, #24]
236	strd				r0, [r14, #40]
237	strd				r2, [r14, #56]
238
239	subs				r12, r12, #1
240	add					r14, r14, #64
241
242	bne					Radix8First_LOOP
243
244Radix8First_END:
245	add         sp, sp, #0x24
246	ldmia       sp!, {r4 - r11, pc}
247
248DATATab:
249	.word       0x5a82799a
250
251	@ENDP  @ |Radix8First|
252	.end