Mercurial > libavcodec.hg
annotate armv4l/simple_idct_armv5te.S @ 4871:36c3e5333a44 libavcodec
compile mjpeg parser if requested
author | alex |
---|---|
date | Sat, 21 Apr 2007 00:36:53 +0000 |
parents | 97d82c7585b4 |
children | 744e91a36a23 |
rev | line source |
---|---|
3769 | 1 /* |
2 * Simple IDCT | |
3 * | |
4 * Copyright (c) 2001 Michael Niedermayer <michaelni@gmx.at> | |
5 * Copyright (c) 2006 Mans Rullgard <mru@inprovide.com> | |
6 * | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
7 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
8 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
9 * FFmpeg is free software; you can redistribute it and/or |
3769 | 10 * modify it under the terms of the GNU Lesser General Public |
11 * License as published by the Free Software Foundation; either | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
12 * version 2.1 of the License, or (at your option) any later version. |
3769 | 13 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
14 * FFmpeg is distributed in the hope that it will be useful, |
3769 | 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
17 * Lesser General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU Lesser General Public | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3769
diff
changeset
|
20 * License along with FFmpeg; if not, write to the Free Software |
3769 | 21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
22 */ | |
23 | |
24 #define W1 22725 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ | |
25 #define W2 21407 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ | |
26 #define W3 19266 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ | |
27 #define W4 16383 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ | |
28 #define W5 12873 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ | |
29 #define W6 8867 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ | |
30 #define W7 4520 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ | |
31 #define ROW_SHIFT 11 | |
32 #define COL_SHIFT 20 | |
33 | |
34 #define W13 (W1 | (W3 << 16)) | |
35 #define W26 (W2 | (W6 << 16)) | |
36 #define W57 (W5 | (W7 << 16)) | |
37 | |
38 .text | |
39 .align | |
40 w13: .long W13 | |
41 w26: .long W26 | |
42 w57: .long W57 | |
43 | |
44 .align | |
4867
97d82c7585b4
add .type foo, %function directives for the benefit of debuggers
mru
parents:
3947
diff
changeset
|
45 .type idct_row_armv5te, %function |
3769 | 46 .func idct_row_armv5te |
47 idct_row_armv5te: | |
48 str lr, [sp, #-4]! | |
49 | |
50 ldrd v1, [a1, #8] | |
51 ldrd a3, [a1] /* a3 = row[1:0], a4 = row[3:2] */ | |
52 orrs v1, v1, v2 | |
53 cmpeq v1, a4 | |
54 cmpeq v1, a3, lsr #16 | |
55 beq row_dc_only | |
56 | |
57 mov v1, #(1<<(ROW_SHIFT-1)) | |
58 mov ip, #16384 | |
59 sub ip, ip, #1 /* ip = W4 */ | |
60 smlabb v1, ip, a3, v1 /* v1 = W4*row[0]+(1<<(RS-1)) */ | |
61 ldr ip, [pc, #(w26-.-8)] /* ip = W2 | (W6 << 16) */ | |
62 smultb a2, ip, a4 | |
63 smulbb lr, ip, a4 | |
64 add v2, v1, a2 | |
65 sub v3, v1, a2 | |
66 sub v4, v1, lr | |
67 add v1, v1, lr | |
68 | |
69 ldr ip, [pc, #(w13-.-8)] /* ip = W1 | (W3 << 16) */ | |
70 ldr lr, [pc, #(w57-.-8)] /* lr = W5 | (W7 << 16) */ | |
71 smulbt v5, ip, a3 | |
72 smultt v6, lr, a4 | |
73 smlatt v5, ip, a4, v5 | |
74 smultt a2, ip, a3 | |
75 smulbt v7, lr, a3 | |
76 sub v6, v6, a2 | |
77 smulbt a2, ip, a4 | |
78 smultt fp, lr, a3 | |
79 sub v7, v7, a2 | |
80 smulbt a2, lr, a4 | |
81 ldrd a3, [a1, #8] /* a3=row[5:4] a4=row[7:6] */ | |
82 sub fp, fp, a2 | |
83 | |
84 orrs a2, a3, a4 | |
85 beq 1f | |
86 | |
87 smlabt v5, lr, a3, v5 | |
88 smlabt v6, ip, a3, v6 | |
89 smlatt v5, lr, a4, v5 | |
90 smlabt v6, lr, a4, v6 | |
91 smlatt v7, lr, a3, v7 | |
92 smlatt fp, ip, a3, fp | |
93 smulbt a2, ip, a4 | |
94 smlatt v7, ip, a4, v7 | |
95 sub fp, fp, a2 | |
96 | |
97 ldr ip, [pc, #(w26-.-8)] /* ip = W2 | (W6 << 16) */ | |
98 mov a2, #16384 | |
99 sub a2, a2, #1 /* a2 = W4 */ | |
100 smulbb a2, a2, a3 /* a2 = W4*row[4] */ | |
101 smultb lr, ip, a4 /* lr = W6*row[6] */ | |
102 add v1, v1, a2 /* v1 += W4*row[4] */ | |
103 add v1, v1, lr /* v1 += W6*row[6] */ | |
104 add v4, v4, a2 /* v4 += W4*row[4] */ | |
105 sub v4, v4, lr /* v4 -= W6*row[6] */ | |
106 smulbb lr, ip, a4 /* lr = W2*row[6] */ | |
107 sub v2, v2, a2 /* v2 -= W4*row[4] */ | |
108 sub v2, v2, lr /* v2 -= W2*row[6] */ | |
109 sub v3, v3, a2 /* v3 -= W4*row[4] */ | |
110 add v3, v3, lr /* v3 += W2*row[6] */ | |
111 | |
112 1: add a2, v1, v5 | |
113 mov a3, a2, lsr #11 | |
114 bic a3, a3, #0x1f0000 | |
115 sub a2, v2, v6 | |
116 mov a2, a2, lsr #11 | |
117 add a3, a3, a2, lsl #16 | |
118 add a2, v3, v7 | |
119 mov a4, a2, lsr #11 | |
120 bic a4, a4, #0x1f0000 | |
121 add a2, v4, fp | |
122 mov a2, a2, lsr #11 | |
123 add a4, a4, a2, lsl #16 | |
124 strd a3, [a1] | |
125 | |
126 sub a2, v4, fp | |
127 mov a3, a2, lsr #11 | |
128 bic a3, a3, #0x1f0000 | |
129 sub a2, v3, v7 | |
130 mov a2, a2, lsr #11 | |
131 add a3, a3, a2, lsl #16 | |
132 add a2, v2, v6 | |
133 mov a4, a2, lsr #11 | |
134 bic a4, a4, #0x1f0000 | |
135 sub a2, v1, v5 | |
136 mov a2, a2, lsr #11 | |
137 add a4, a4, a2, lsl #16 | |
138 strd a3, [a1, #8] | |
139 | |
140 ldr pc, [sp], #4 | |
141 | |
142 row_dc_only: | |
143 orr a3, a3, a3, lsl #16 | |
144 bic a3, a3, #0xe000 | |
145 mov a3, a3, lsl #3 | |
146 mov a4, a3 | |
147 strd a3, [a1] | |
148 strd a3, [a1, #8] | |
149 | |
150 ldr pc, [sp], #4 | |
151 .endfunc | |
152 | |
153 .macro idct_col | |
154 ldr a4, [a1] /* a4 = col[1:0] */ | |
155 mov ip, #16384 | |
156 sub ip, ip, #1 /* ip = W4 */ | |
157 #if 0 | |
158 mov v1, #(1<<(COL_SHIFT-1)) | |
159 smlabt v2, ip, a4, v1 /* v2 = W4*col[1] + (1<<(COL_SHIFT-1)) */ | |
160 smlabb v1, ip, a4, v1 /* v1 = W4*col[0] + (1<<(COL_SHIFT-1)) */ | |
161 ldr a4, [a1, #(16*4)] | |
162 #else | |
163 mov v1, #((1<<(COL_SHIFT-1))/W4) /* this matches the C version */ | |
164 add v2, v1, a4, asr #16 | |
165 rsb v2, v2, v2, lsl #14 | |
166 mov a4, a4, lsl #16 | |
167 add v1, v1, a4, asr #16 | |
168 ldr a4, [a1, #(16*4)] | |
169 rsb v1, v1, v1, lsl #14 | |
170 #endif | |
171 | |
172 smulbb lr, ip, a4 | |
173 smulbt a3, ip, a4 | |
174 sub v3, v1, lr | |
175 sub v5, v1, lr | |
176 add v7, v1, lr | |
177 add v1, v1, lr | |
178 sub v4, v2, a3 | |
179 sub v6, v2, a3 | |
180 add fp, v2, a3 | |
181 ldr ip, [pc, #(w26-.-8)] | |
182 ldr a4, [a1, #(16*2)] | |
183 add v2, v2, a3 | |
184 | |
185 smulbb lr, ip, a4 | |
186 smultb a3, ip, a4 | |
187 add v1, v1, lr | |
188 sub v7, v7, lr | |
189 add v3, v3, a3 | |
190 sub v5, v5, a3 | |
191 smulbt lr, ip, a4 | |
192 smultt a3, ip, a4 | |
193 add v2, v2, lr | |
194 sub fp, fp, lr | |
195 add v4, v4, a3 | |
196 ldr a4, [a1, #(16*6)] | |
197 sub v6, v6, a3 | |
198 | |
199 smultb lr, ip, a4 | |
200 smulbb a3, ip, a4 | |
201 add v1, v1, lr | |
202 sub v7, v7, lr | |
203 sub v3, v3, a3 | |
204 add v5, v5, a3 | |
205 smultt lr, ip, a4 | |
206 smulbt a3, ip, a4 | |
207 add v2, v2, lr | |
208 sub fp, fp, lr | |
209 sub v4, v4, a3 | |
210 add v6, v6, a3 | |
211 | |
212 stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp} | |
213 | |
214 ldr ip, [pc, #(w13-.-8)] | |
215 ldr a4, [a1, #(16*1)] | |
216 ldr lr, [pc, #(w57-.-8)] | |
217 smulbb v1, ip, a4 | |
218 smultb v3, ip, a4 | |
219 smulbb v5, lr, a4 | |
220 smultb v7, lr, a4 | |
221 smulbt v2, ip, a4 | |
222 smultt v4, ip, a4 | |
223 smulbt v6, lr, a4 | |
224 smultt fp, lr, a4 | |
225 rsb v4, v4, #0 | |
226 ldr a4, [a1, #(16*3)] | |
227 rsb v3, v3, #0 | |
228 | |
229 smlatb v1, ip, a4, v1 | |
230 smlatb v3, lr, a4, v3 | |
231 smulbb a3, ip, a4 | |
232 smulbb a2, lr, a4 | |
233 sub v5, v5, a3 | |
234 sub v7, v7, a2 | |
235 smlatt v2, ip, a4, v2 | |
236 smlatt v4, lr, a4, v4 | |
237 smulbt a3, ip, a4 | |
238 smulbt a2, lr, a4 | |
239 sub v6, v6, a3 | |
240 ldr a4, [a1, #(16*5)] | |
241 sub fp, fp, a2 | |
242 | |
243 smlabb v1, lr, a4, v1 | |
244 smlabb v3, ip, a4, v3 | |
245 smlatb v5, lr, a4, v5 | |
246 smlatb v7, ip, a4, v7 | |
247 smlabt v2, lr, a4, v2 | |
248 smlabt v4, ip, a4, v4 | |
249 smlatt v6, lr, a4, v6 | |
250 ldr a3, [a1, #(16*7)] | |
251 smlatt fp, ip, a4, fp | |
252 | |
253 smlatb v1, lr, a3, v1 | |
254 smlabb v3, lr, a3, v3 | |
255 smlatb v5, ip, a3, v5 | |
256 smulbb a4, ip, a3 | |
257 smlatt v2, lr, a3, v2 | |
258 sub v7, v7, a4 | |
259 smlabt v4, lr, a3, v4 | |
260 smulbt a4, ip, a3 | |
261 smlatt v6, ip, a3, v6 | |
262 sub fp, fp, a4 | |
263 .endm | |
264 | |
265 .align | |
4867
97d82c7585b4
add .type foo, %function directives for the benefit of debuggers
mru
parents:
3947
diff
changeset
|
266 .type idct_col_armv5te, %function |
3769 | 267 .func idct_col_armv5te |
268 idct_col_armv5te: | |
269 str lr, [sp, #-4]! | |
270 | |
271 idct_col | |
272 | |
273 ldmfd sp!, {a3, a4} | |
274 adds a2, a3, v1 | |
275 mov a2, a2, lsr #20 | |
276 orrmi a2, a2, #0xf000 | |
277 add ip, a4, v2 | |
278 mov ip, ip, asr #20 | |
279 orr a2, a2, ip, lsl #16 | |
280 str a2, [a1] | |
281 subs a3, a3, v1 | |
282 mov a2, a3, lsr #20 | |
283 orrmi a2, a2, #0xf000 | |
284 sub a4, a4, v2 | |
285 mov a4, a4, asr #20 | |
286 orr a2, a2, a4, lsl #16 | |
287 ldmfd sp!, {a3, a4} | |
288 str a2, [a1, #(16*7)] | |
289 | |
290 subs a2, a3, v3 | |
291 mov a2, a2, lsr #20 | |
292 orrmi a2, a2, #0xf000 | |
293 sub ip, a4, v4 | |
294 mov ip, ip, asr #20 | |
295 orr a2, a2, ip, lsl #16 | |
296 str a2, [a1, #(16*1)] | |
297 adds a3, a3, v3 | |
298 mov a2, a3, lsr #20 | |
299 orrmi a2, a2, #0xf000 | |
300 add a4, a4, v4 | |
301 mov a4, a4, asr #20 | |
302 orr a2, a2, a4, lsl #16 | |
303 ldmfd sp!, {a3, a4} | |
304 str a2, [a1, #(16*6)] | |
305 | |
306 adds a2, a3, v5 | |
307 mov a2, a2, lsr #20 | |
308 orrmi a2, a2, #0xf000 | |
309 add ip, a4, v6 | |
310 mov ip, ip, asr #20 | |
311 orr a2, a2, ip, lsl #16 | |
312 str a2, [a1, #(16*2)] | |
313 subs a3, a3, v5 | |
314 mov a2, a3, lsr #20 | |
315 orrmi a2, a2, #0xf000 | |
316 sub a4, a4, v6 | |
317 mov a4, a4, asr #20 | |
318 orr a2, a2, a4, lsl #16 | |
319 ldmfd sp!, {a3, a4} | |
320 str a2, [a1, #(16*5)] | |
321 | |
322 adds a2, a3, v7 | |
323 mov a2, a2, lsr #20 | |
324 orrmi a2, a2, #0xf000 | |
325 add ip, a4, fp | |
326 mov ip, ip, asr #20 | |
327 orr a2, a2, ip, lsl #16 | |
328 str a2, [a1, #(16*3)] | |
329 subs a3, a3, v7 | |
330 mov a2, a3, lsr #20 | |
331 orrmi a2, a2, #0xf000 | |
332 sub a4, a4, fp | |
333 mov a4, a4, asr #20 | |
334 orr a2, a2, a4, lsl #16 | |
335 str a2, [a1, #(16*4)] | |
336 | |
337 ldr pc, [sp], #4 | |
338 .endfunc | |
339 | |
340 .align | |
4867
97d82c7585b4
add .type foo, %function directives for the benefit of debuggers
mru
parents:
3947
diff
changeset
|
341 .type idct_col_put_armv5te, %function |
3769 | 342 .func idct_col_put_armv5te |
343 idct_col_put_armv5te: | |
344 str lr, [sp, #-4]! | |
345 | |
346 idct_col | |
347 | |
348 ldmfd sp!, {a3, a4} | |
349 ldr lr, [sp, #32] | |
350 add a2, a3, v1 | |
351 movs a2, a2, asr #20 | |
352 movmi a2, #0 | |
353 cmp a2, #255 | |
354 movgt a2, #255 | |
355 add ip, a4, v2 | |
356 movs ip, ip, asr #20 | |
357 movmi ip, #0 | |
358 cmp ip, #255 | |
359 movgt ip, #255 | |
360 orr a2, a2, ip, lsl #8 | |
361 sub a3, a3, v1 | |
362 movs a3, a3, asr #20 | |
363 movmi a3, #0 | |
364 cmp a3, #255 | |
365 movgt a3, #255 | |
366 sub a4, a4, v2 | |
367 movs a4, a4, asr #20 | |
368 movmi a4, #0 | |
369 cmp a4, #255 | |
370 ldr v1, [sp, #28] | |
371 movgt a4, #255 | |
372 strh a2, [v1] | |
373 add a2, v1, #2 | |
374 str a2, [sp, #28] | |
375 orr a2, a3, a4, lsl #8 | |
376 rsb v2, lr, lr, lsl #3 | |
377 ldmfd sp!, {a3, a4} | |
378 strh a2, [v2, v1]! | |
379 | |
380 sub a2, a3, v3 | |
381 movs a2, a2, asr #20 | |
382 movmi a2, #0 | |
383 cmp a2, #255 | |
384 movgt a2, #255 | |
385 sub ip, a4, v4 | |
386 movs ip, ip, asr #20 | |
387 movmi ip, #0 | |
388 cmp ip, #255 | |
389 movgt ip, #255 | |
390 orr a2, a2, ip, lsl #8 | |
391 strh a2, [v1, lr]! | |
392 add a3, a3, v3 | |
393 movs a2, a3, asr #20 | |
394 movmi a2, #0 | |
395 cmp a2, #255 | |
396 movgt a2, #255 | |
397 add a4, a4, v4 | |
398 movs a4, a4, asr #20 | |
399 movmi a4, #0 | |
400 cmp a4, #255 | |
401 movgt a4, #255 | |
402 orr a2, a2, a4, lsl #8 | |
403 ldmfd sp!, {a3, a4} | |
404 strh a2, [v2, -lr]! | |
405 | |
406 add a2, a3, v5 | |
407 movs a2, a2, asr #20 | |
408 movmi a2, #0 | |
409 cmp a2, #255 | |
410 movgt a2, #255 | |
411 add ip, a4, v6 | |
412 movs ip, ip, asr #20 | |
413 movmi ip, #0 | |
414 cmp ip, #255 | |
415 movgt ip, #255 | |
416 orr a2, a2, ip, lsl #8 | |
417 strh a2, [v1, lr]! | |
418 sub a3, a3, v5 | |
419 movs a2, a3, asr #20 | |
420 movmi a2, #0 | |
421 cmp a2, #255 | |
422 movgt a2, #255 | |
423 sub a4, a4, v6 | |
424 movs a4, a4, asr #20 | |
425 movmi a4, #0 | |
426 cmp a4, #255 | |
427 movgt a4, #255 | |
428 orr a2, a2, a4, lsl #8 | |
429 ldmfd sp!, {a3, a4} | |
430 strh a2, [v2, -lr]! | |
431 | |
432 add a2, a3, v7 | |
433 movs a2, a2, asr #20 | |
434 movmi a2, #0 | |
435 cmp a2, #255 | |
436 movgt a2, #255 | |
437 add ip, a4, fp | |
438 movs ip, ip, asr #20 | |
439 movmi ip, #0 | |
440 cmp ip, #255 | |
441 movgt ip, #255 | |
442 orr a2, a2, ip, lsl #8 | |
443 strh a2, [v1, lr] | |
444 sub a3, a3, v7 | |
445 movs a2, a3, asr #20 | |
446 movmi a2, #0 | |
447 cmp a2, #255 | |
448 movgt a2, #255 | |
449 sub a4, a4, fp | |
450 movs a4, a4, asr #20 | |
451 movmi a4, #0 | |
452 cmp a4, #255 | |
453 movgt a4, #255 | |
454 orr a2, a2, a4, lsl #8 | |
455 strh a2, [v2, -lr] | |
456 | |
457 ldr pc, [sp], #4 | |
458 .endfunc | |
459 | |
460 .align | |
4867
97d82c7585b4
add .type foo, %function directives for the benefit of debuggers
mru
parents:
3947
diff
changeset
|
461 .type idct_col_add_armv5te, %function |
3769 | 462 .func idct_col_add_armv5te |
463 idct_col_add_armv5te: | |
464 str lr, [sp, #-4]! | |
465 | |
466 idct_col | |
467 | |
468 ldr lr, [sp, #36] | |
469 | |
470 ldmfd sp!, {a3, a4} | |
471 ldrh ip, [lr] | |
472 add a2, a3, v1 | |
473 mov a2, a2, asr #20 | |
474 sub a3, a3, v1 | |
475 and v1, ip, #255 | |
476 adds a2, a2, v1 | |
477 movmi a2, #0 | |
478 cmp a2, #255 | |
479 movgt a2, #255 | |
480 add v1, a4, v2 | |
481 mov v1, v1, asr #20 | |
482 adds v1, v1, ip, lsr #8 | |
483 movmi v1, #0 | |
484 cmp v1, #255 | |
485 movgt v1, #255 | |
486 orr a2, a2, v1, lsl #8 | |
487 ldr v1, [sp, #32] | |
488 sub a4, a4, v2 | |
489 rsb v2, v1, v1, lsl #3 | |
490 ldrh ip, [v2, lr]! | |
491 strh a2, [lr] | |
492 mov a3, a3, asr #20 | |
493 and a2, ip, #255 | |
494 adds a3, a3, a2 | |
495 movmi a3, #0 | |
496 cmp a3, #255 | |
497 movgt a3, #255 | |
498 mov a4, a4, asr #20 | |
499 adds a4, a4, ip, lsr #8 | |
500 movmi a4, #0 | |
501 cmp a4, #255 | |
502 movgt a4, #255 | |
503 add a2, lr, #2 | |
504 str a2, [sp, #28] | |
505 orr a2, a3, a4, lsl #8 | |
506 strh a2, [v2] | |
507 | |
508 ldmfd sp!, {a3, a4} | |
509 ldrh ip, [lr, v1]! | |
510 sub a2, a3, v3 | |
511 mov a2, a2, asr #20 | |
512 add a3, a3, v3 | |
513 and v3, ip, #255 | |
514 adds a2, a2, v3 | |
515 movmi a2, #0 | |
516 cmp a2, #255 | |
517 movgt a2, #255 | |
518 sub v3, a4, v4 | |
519 mov v3, v3, asr #20 | |
520 adds v3, v3, ip, lsr #8 | |
521 movmi v3, #0 | |
522 cmp v3, #255 | |
523 movgt v3, #255 | |
524 orr a2, a2, v3, lsl #8 | |
525 add a4, a4, v4 | |
526 ldrh ip, [v2, -v1]! | |
527 strh a2, [lr] | |
528 mov a3, a3, asr #20 | |
529 and a2, ip, #255 | |
530 adds a3, a3, a2 | |
531 movmi a3, #0 | |
532 cmp a3, #255 | |
533 movgt a3, #255 | |
534 mov a4, a4, asr #20 | |
535 adds a4, a4, ip, lsr #8 | |
536 movmi a4, #0 | |
537 cmp a4, #255 | |
538 movgt a4, #255 | |
539 orr a2, a3, a4, lsl #8 | |
540 strh a2, [v2] | |
541 | |
542 ldmfd sp!, {a3, a4} | |
543 ldrh ip, [lr, v1]! | |
544 add a2, a3, v5 | |
545 mov a2, a2, asr #20 | |
546 sub a3, a3, v5 | |
547 and v3, ip, #255 | |
548 adds a2, a2, v3 | |
549 movmi a2, #0 | |
550 cmp a2, #255 | |
551 movgt a2, #255 | |
552 add v3, a4, v6 | |
553 mov v3, v3, asr #20 | |
554 adds v3, v3, ip, lsr #8 | |
555 movmi v3, #0 | |
556 cmp v3, #255 | |
557 movgt v3, #255 | |
558 orr a2, a2, v3, lsl #8 | |
559 sub a4, a4, v6 | |
560 ldrh ip, [v2, -v1]! | |
561 strh a2, [lr] | |
562 mov a3, a3, asr #20 | |
563 and a2, ip, #255 | |
564 adds a3, a3, a2 | |
565 movmi a3, #0 | |
566 cmp a3, #255 | |
567 movgt a3, #255 | |
568 mov a4, a4, asr #20 | |
569 adds a4, a4, ip, lsr #8 | |
570 movmi a4, #0 | |
571 cmp a4, #255 | |
572 movgt a4, #255 | |
573 orr a2, a3, a4, lsl #8 | |
574 strh a2, [v2] | |
575 | |
576 ldmfd sp!, {a3, a4} | |
577 ldrh ip, [lr, v1]! | |
578 add a2, a3, v7 | |
579 mov a2, a2, asr #20 | |
580 sub a3, a3, v7 | |
581 and v3, ip, #255 | |
582 adds a2, a2, v3 | |
583 movmi a2, #0 | |
584 cmp a2, #255 | |
585 movgt a2, #255 | |
586 add v3, a4, fp | |
587 mov v3, v3, asr #20 | |
588 adds v3, v3, ip, lsr #8 | |
589 movmi v3, #0 | |
590 cmp v3, #255 | |
591 movgt v3, #255 | |
592 orr a2, a2, v3, lsl #8 | |
593 sub a4, a4, fp | |
594 ldrh ip, [v2, -v1]! | |
595 strh a2, [lr] | |
596 mov a3, a3, asr #20 | |
597 and a2, ip, #255 | |
598 adds a3, a3, a2 | |
599 movmi a3, #0 | |
600 cmp a3, #255 | |
601 movgt a3, #255 | |
602 mov a4, a4, asr #20 | |
603 adds a4, a4, ip, lsr #8 | |
604 movmi a4, #0 | |
605 cmp a4, #255 | |
606 movgt a4, #255 | |
607 orr a2, a3, a4, lsl #8 | |
608 strh a2, [v2] | |
609 | |
610 ldr pc, [sp], #4 | |
611 .endfunc | |
612 | |
613 .align | |
614 .global simple_idct_armv5te | |
4867
97d82c7585b4
add .type foo, %function directives for the benefit of debuggers
mru
parents:
3947
diff
changeset
|
615 .type simple_idct_armv5te, %function |
3769 | 616 .func simple_idct_armv5te |
617 simple_idct_armv5te: | |
618 stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr} | |
619 | |
620 bl idct_row_armv5te | |
621 add a1, a1, #16 | |
622 bl idct_row_armv5te | |
623 add a1, a1, #16 | |
624 bl idct_row_armv5te | |
625 add a1, a1, #16 | |
626 bl idct_row_armv5te | |
627 add a1, a1, #16 | |
628 bl idct_row_armv5te | |
629 add a1, a1, #16 | |
630 bl idct_row_armv5te | |
631 add a1, a1, #16 | |
632 bl idct_row_armv5te | |
633 add a1, a1, #16 | |
634 bl idct_row_armv5te | |
635 | |
636 sub a1, a1, #(16*7) | |
637 | |
638 bl idct_col_armv5te | |
639 add a1, a1, #4 | |
640 bl idct_col_armv5te | |
641 add a1, a1, #4 | |
642 bl idct_col_armv5te | |
643 add a1, a1, #4 | |
644 bl idct_col_armv5te | |
645 | |
646 ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} | |
647 .endfunc | |
648 | |
649 .align | |
650 .global simple_idct_add_armv5te | |
4867
97d82c7585b4
add .type foo, %function directives for the benefit of debuggers
mru
parents:
3947
diff
changeset
|
651 .type simple_idct_add_armv5te, %function |
3769 | 652 .func simple_idct_add_armv5te |
653 simple_idct_add_armv5te: | |
654 stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr} | |
655 | |
656 mov a1, a3 | |
657 | |
658 bl idct_row_armv5te | |
659 add a1, a1, #16 | |
660 bl idct_row_armv5te | |
661 add a1, a1, #16 | |
662 bl idct_row_armv5te | |
663 add a1, a1, #16 | |
664 bl idct_row_armv5te | |
665 add a1, a1, #16 | |
666 bl idct_row_armv5te | |
667 add a1, a1, #16 | |
668 bl idct_row_armv5te | |
669 add a1, a1, #16 | |
670 bl idct_row_armv5te | |
671 add a1, a1, #16 | |
672 bl idct_row_armv5te | |
673 | |
674 sub a1, a1, #(16*7) | |
675 | |
676 bl idct_col_add_armv5te | |
677 add a1, a1, #4 | |
678 bl idct_col_add_armv5te | |
679 add a1, a1, #4 | |
680 bl idct_col_add_armv5te | |
681 add a1, a1, #4 | |
682 bl idct_col_add_armv5te | |
683 | |
684 add sp, sp, #8 | |
685 ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} | |
686 .endfunc | |
687 | |
688 .align | |
689 .global simple_idct_put_armv5te | |
4867
97d82c7585b4
add .type foo, %function directives for the benefit of debuggers
mru
parents:
3947
diff
changeset
|
690 .type simple_idct_put_armv5te, %function |
3769 | 691 .func simple_idct_put_armv5te |
692 simple_idct_put_armv5te: | |
693 stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr} | |
694 | |
695 mov a1, a3 | |
696 | |
697 bl idct_row_armv5te | |
698 add a1, a1, #16 | |
699 bl idct_row_armv5te | |
700 add a1, a1, #16 | |
701 bl idct_row_armv5te | |
702 add a1, a1, #16 | |
703 bl idct_row_armv5te | |
704 add a1, a1, #16 | |
705 bl idct_row_armv5te | |
706 add a1, a1, #16 | |
707 bl idct_row_armv5te | |
708 add a1, a1, #16 | |
709 bl idct_row_armv5te | |
710 add a1, a1, #16 | |
711 bl idct_row_armv5te | |
712 | |
713 sub a1, a1, #(16*7) | |
714 | |
715 bl idct_col_put_armv5te | |
716 add a1, a1, #4 | |
717 bl idct_col_put_armv5te | |
718 add a1, a1, #4 | |
719 bl idct_col_put_armv5te | |
720 add a1, a1, #4 | |
721 bl idct_col_put_armv5te | |
722 | |
723 add sp, sp, #8 | |
724 ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} | |
725 .endfunc |