summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/aacenc/src/asm/ARMV5E/R4R8First_v5.s
blob: 370daf46d776e4e5e213589d6df2962117715109 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
@/*
@ ** Copyright 2003-2010, VisualOn, Inc.
@ **
@ ** Licensed under the Apache License, Version 2.0 (the "License");
@ ** you may not use this file except in compliance with the License.
@ ** You may obtain a copy of the License at
@ **
@ **     http://www.apache.org/licenses/LICENSE-2.0
@ **
@ ** Unless required by applicable law or agreed to in writing, software
@ ** distributed under the License is distributed on an "AS IS" BASIS,
@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ ** See the License for the specific language governing permissions and
@ ** limitations under the License.
@ */

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@	File:		R4R8First_v5.s
@
@	Content:	Radix8First and Radix4First function armv5 assemble
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

	.section .text
	.global	Radix4First

Radix4First:
	stmdb       sp!, {r4 - r11, lr}
	
	movs				r10, r1
	mov					r11, r0
	beq					Radix4First_END
		
Radix4First_LOOP:
	ldrd				r0, [r11]
	ldrd				r2, [r11, #8]
	ldrd				r4, [r11, #16]
	ldrd				r6, [r11, #24]
	
	add					r8, r0, r2
	add					r9, r1, r3
	
	sub					r0, r0, r2
	sub					r1, r1, r3
	
	add					r2, r4, r6
	add					r3, r5, r7
	
	sub					r4, r4, r6
	sub					r5, r5, r7
	
	add					r6, r8, r2
	add					r7, r9, r3
	
	sub					r8, r8, r2
	sub					r9, r9, r3
	
	add					r2, r0, r5
	sub					r3, r1, r4
	
	sub					r0, r0, r5
	add					r1, r1, r4
	
	strd				r6, [r11]
	strd				r2, [r11, #8]
	strd				r8, [r11, #16]
	strd				r0, [r11, #24]
	
	subs				r10, r10, #1
	add					r11, r11, #32
	bne					Radix4First_LOOP

Radix4First_END:
	ldmia       sp!, {r4 - r11, pc}
	@ENDP  @ |Radix4First|
	
	.section .text
	.global	Radix8First

Radix8First:
	stmdb       sp!, {r4 - r11, lr}
	sub         sp, sp, #0x24
	
	mov				  r12, r1
	mov					r14, r0
	cmp					r12, #0
	beq					Radix8First_END
	
Radix8First_LOOP:
	ldrd				r0, [r14]		
	ldrd				r2, [r14, #8]
	ldrd				r4, [r14, #16]
	ldrd				r6, [r14, #24]
	
	add					r8, r0, r2					@ r0 = buf[0] + buf[2]@
	add					r9, r1, r3					@ i0 = buf[1] + buf[3]@
	
	sub					r0, r0, r2					@ r1 = buf[0] - buf[2]@
	sub					r1, r1, r3					@ i1 = buf[1] - buf[3]@
	
	add					r2, r4, r6					@	r2 = buf[4] + buf[6]@
	add					r3, r5, r7					@ i2 = buf[5] + buf[7]@
	
	sub					r4, r4, r6					@	r3 = buf[4] - buf[6]@
	sub					r5, r5, r7					@ i3 = buf[5] - buf[7]@
	
	add					r6, r8, r2					@ r4 = (r0 + r2) >> 1@
	add					r7, r9, r3					@ i4 = (i0 + i2) >> 1@
	
	sub					r8, r8, r2					@	r5 = (r0 - r2) >> 1@
	sub					r9, r9, r3					@ i5 = (i0 - i2) >> 1@
	
	sub					r2, r0, r5					@ r6 = (r1 - i3) >> 1@
	add					r3, r1, r4					@ i6 = (i1 + r3) >> 1@
	
	add					r0, r0, r5					@ r7 = (r1 + i3) >> 1@
	sub					r1, r1, r4					@ i7 = (i1 - r3) >> 1@
	
	mov					r6, r6, asr #1			@
	mov					r7, r7, asr #1			@
	
	mov					r8, r8, asr #1
	mov					r9, r9, asr #1
	
	mov					r2, r2, asr #1
	mov					r3, r3, asr #1
	
	mov					r0, r0, asr #1
	mov					r1, r1, asr #1	
	
	str					r6, [sp]
	str					r7, [sp, #4]
	
	str					r8, [sp, #8]
	str					r9, [sp, #12]
	
	str					r2, [sp, #16]
	str					r3, [sp, #20]	
	
	str					r0, [sp, #24]
	str					r1, [sp, #28]	
	
	ldrd				r2, [r14, #32]		
	ldrd				r4, [r14, #40]
	ldrd				r6, [r14, #48]
	ldrd				r8, [r14, #56]
	
	add					r0, r2, r4					@ r0 = buf[ 8] + buf[10]@
	add					r1, r3, r5					@ i0 = buf[ 9] + buf[11]@
	
	sub					r2, r2, r4					@ r1 = buf[ 8] - buf[10]@
	sub					r3, r3, r5					@ i1 = buf[ 9] - buf[11]@
	
	add					r4, r6, r8					@ r2 = buf[12] + buf[14]@
	add					r5, r7, r9					@ i2 = buf[13] + buf[15]@
	
	sub					r6, r6, r8					@ r3 = buf[12] - buf[14]@
	sub					r7, r7, r9					@	i3 = buf[13] - buf[15]@
	
	add					r8, r0, r4					@ t0 = (r0 + r2)
	add					r9, r1, r5					@ t1 = (i0 + i2)
	
	sub					r0, r0, r4					@ t2 = (r0 - r2)
	sub					r1, r1, r5					@ t3 = (i0 - i2)
	
	mov					r8, r8, asr #1
	ldr					r4, [sp]
	
	mov					r9, r9, asr #1
	ldr					r5, [sp, #4]
	
	mov					r0, r0, asr #1		
	mov					r1, r1, asr #1
	
	add					r10, r4, r8					@ buf[ 0] = r4 + t0@
	add					r11, r5, r9					@ buf[ 1] = i4 + t1@
	
	sub					r4,  r4, r8					@ buf[ 8] = r4 - t0@
	sub					r5,  r5, r9					@	buf[ 9] = i4 - t1@
	
 	strd				r10, [r14]
 	strd				r4,  [r14, #32]
 	
 	ldr					r10, [sp, #8]
 	ldr					r11, [sp, #12]
 	
 	add					r4, r10, r1					@ buf[ 4] = r5 + t3@
 	sub					r5, r11, r0					@	buf[ 5] = i5 - t2@
 	
 	sub					r10, r10, r1				@ buf[12] = r5 - t3@
 	add					r11, r11, r0				@ buf[13] = i5 + t2@
 	
 	strd				r4,  [r14, #16]
 	strd				r10, [r14, #48]
 	
 	sub					r0, r2, r7					@ r0 = r1 - i3@
 	add					r1, r3, r6					@ i0 = i1 + r3@
 
  ldr					r11, DATATab
 	
 	add					r2, r2, r7					@ r2 = r1 + i3@
 	sub					r3, r3, r6					@ i2 = i1 - r3@
 	
	sub					r4, r0, r1					@ r0 - i0
	add					r5, r0, r1					@ r0 + i0
	
	sub					r0, r2, r3					@ r2 - i2
	add					r1, r2, r3					@ r2 + i2
	
	smull				r8, r6, r4, r11								
	smull				r9, r7, r5, r11								
	
	ldr					r2, [sp, #16]
	ldr					r3, [sp, #20]
	
	smull				r8, r4, r0, r11								
	smull				r9, r5, r1, r11								
	
	ldr					r10, [sp, #24]
	ldr					r11, [sp, #28]
	
	sub					r8, r2, r6
	sub					r9, r3, r7
	
	add					r2, r2, r6
	add					r3, r3, r7
	
	add					r6, r10, r5
	sub					r7, r11, r4
	
	sub					r0, r10, r5
	add					r1, r11, r4
	
	strd				r6, [r14, #8]
	strd				r8, [r14, #24]
	strd				r0, [r14, #40]
	strd				r2, [r14, #56]
	
	subs				r12, r12, #1
	add					r14, r14, #64
	
	bne					Radix8First_LOOP
	
Radix8First_END:
	add         sp, sp, #0x24
	ldmia       sp!, {r4 - r11, pc}
	
DATATab:
	.word       0x5a82799a
	
	@ENDP  @ |Radix8First|
	.end