diff options
author | Jens Arnold <amiconn@rockbox.org> | 2009-07-12 13:14:35 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2009-07-12 13:14:35 +0000 |
commit | 02c031709c931da6f1ee9db0c6aadda2b37ae0aa (patch) | |
tree | 8bbe5490c0a5fe3c40b18d599e36103ac3eb72fa /apps/plugins/mpegplayer | |
parent | e12c1c0a62a9ffd3456146f16a497ee3e9d5e089 (diff) | |
download | rockbox-02c031709c931da6f1ee9db0c6aadda2b37ae0aa.tar.gz rockbox-02c031709c931da6f1ee9db0c6aadda2b37ae0aa.zip |
* ARM asm DSP and codec/plugin functions: Use r12 scratch register properly
* Fix saving another unused reg in dsp code
* Use less regs in the generic ARM mpegplayer adding idct pure DC case
* Fix ARMv6 mpegplayer adding idct using an unsaved register in pure DC case
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21803 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/mpegplayer')
-rw-r--r-- | apps/plugins/mpegplayer/idct_arm.S | 69 | ||||
-rw-r--r-- | apps/plugins/mpegplayer/idct_armv6.S | 35 |
2 files changed, 51 insertions, 53 deletions
diff --git a/apps/plugins/mpegplayer/idct_arm.S b/apps/plugins/mpegplayer/idct_arm.S index 7de2d7f881..3cb1554de2 100644 --- a/apps/plugins/mpegplayer/idct_arm.S +++ b/apps/plugins/mpegplayer/idct_arm.S | |||
@@ -268,7 +268,7 @@ | |||
268 | bx lr | 268 | bx lr |
269 | 269 | ||
270 | mpeg2_idct_copy: | 270 | mpeg2_idct_copy: |
271 | stmfd sp!, { r1-r2, r4-r12, lr } | 271 | stmfd sp!, { r1-r2, r4-r11, lr } |
272 | bl .idct | 272 | bl .idct |
273 | ldmfd sp!, { r1-r2 } | 273 | ldmfd sp!, { r1-r2 } |
274 | mov r11, #0 | 274 | mov r11, #0 |
@@ -313,7 +313,7 @@ mpeg2_idct_copy: | |||
313 | add r1, r1, r2 | 313 | add r1, r1, r2 |
314 | cmp r0, r12 | 314 | cmp r0, r12 |
315 | blo 1b | 315 | blo 1b |
316 | ldmfd sp!, { r4-r12, pc } | 316 | ldmfd sp!, { r4-r11, pc } |
317 | 317 | ||
318 | mpeg2_idct_add: | 318 | mpeg2_idct_add: |
319 | cmp r0, #129 | 319 | cmp r0, #129 |
@@ -324,7 +324,7 @@ mpeg2_idct_add: | |||
324 | cmp r1, #0x40 | 324 | cmp r1, #0x40 |
325 | bne 3f | 325 | bne 3f |
326 | 1: | 326 | 1: |
327 | stmfd sp!, { r2-r12, lr } | 327 | stmfd sp!, { r2-r11, lr } |
328 | bl .idct | 328 | bl .idct |
329 | ldmfd sp!, { r1-r2 } | 329 | ldmfd sp!, { r1-r2 } |
330 | mov r11, #0 | 330 | mov r11, #0 |
@@ -385,24 +385,20 @@ mpeg2_idct_add: | |||
385 | add r1, r1, r2 | 385 | add r1, r1, r2 |
386 | cmp r0, r12 | 386 | cmp r0, r12 |
387 | blo 2b | 387 | blo 2b |
388 | ldmfd sp!, { r4-r12, pc } | 388 | ldmfd sp!, { r4-r11, pc } |
389 | 3: | 389 | 3: |
390 | stmfd sp!, { r4-r11 } | 390 | stmfd sp!, { r4-r6, lr } |
391 | ldrsh r1, [r0, #0] /* r1 = block[0] */ | 391 | ldrsh r1, [r0, #0] /* r1 = block[0] */ |
392 | mov r11, #0 | 392 | mov r4, #0 |
393 | strh r11, [r0, #0] /* block[0] = 0 */ | 393 | strh r4, [r0, #0] /* block[0] = 0 */ |
394 | strh r11, [r0, #126] /* block[63] = 0 */ | 394 | strh r4, [r0, #126] /* block[63] = 0 */ |
395 | add r1, r1, #64 /* r1 = DC << 7 */ | 395 | add r1, r1, #64 /* r1 = DC << 7 */ |
396 | add r0, r2, r3, asl #3 | 396 | add r0, r2, r3, asl #3 |
397 | 4: | 397 | 4: |
398 | ldrb r4, [r2, #0] | 398 | ldrb r4, [r2, #0] |
399 | ldrb r5, [r2, #1] | 399 | ldrb r5, [r2, #1] |
400 | ldrb r6, [r2, #2] | 400 | ldrb r6, [r2, #2] |
401 | ldrb r7, [r2, #3] | 401 | ldrb lr, [r2, #3] |
402 | ldrb r8, [r2, #4] | ||
403 | ldrb r9, [r2, #5] | ||
404 | ldrb r10, [r2, #6] | ||
405 | ldrb r11, [r2, #7] | ||
406 | add r4, r4, r1, asr #7 | 402 | add r4, r4, r1, asr #7 |
407 | cmp r4, #255 | 403 | cmp r4, #255 |
408 | mvnhi r4, r4, asr #31 | 404 | mvnhi r4, r4, asr #31 |
@@ -415,28 +411,31 @@ mpeg2_idct_add: | |||
415 | cmp r6, #255 | 411 | cmp r6, #255 |
416 | mvnhi r6, r6, asr #31 | 412 | mvnhi r6, r6, asr #31 |
417 | strb r6, [r2, #2] | 413 | strb r6, [r2, #2] |
418 | add r7, r7, r1, asr #7 | 414 | add lr, lr, r1, asr #7 |
419 | cmp r7, #255 | 415 | cmp lr, #255 |
420 | mvnhi r7, r7, asr #31 | 416 | mvnhi lr, lr, asr #31 |
421 | strb r7, [r2, #3] | 417 | strb lr, [r2, #3] |
422 | add r8, r8, r1, asr #7 | 418 | ldrb r4, [r2, #4] |
423 | cmp r8, #255 | 419 | ldrb r5, [r2, #5] |
424 | mvnhi r8, r8, asr #31 | 420 | ldrb r6, [r2, #6] |
425 | strb r8, [r2, #4] | 421 | ldrb lr, [r2, #7] |
426 | add r9, r9, r1, asr #7 | 422 | add r4, r4, r1, asr #7 |
427 | cmp r9, #255 | 423 | cmp r4, #255 |
428 | mvnhi r9, r9, asr #31 | 424 | mvnhi r4, r4, asr #31 |
429 | strb r9, [r2, #5] | 425 | strb r4, [r2, #4] |
430 | add r10, r10, r1, asr #7 | 426 | add r5, r5, r1, asr #7 |
431 | cmp r10, #255 | 427 | cmp r5, #255 |
432 | mvnhi r10, r10, asr #31 | 428 | mvnhi r5, r5, asr #31 |
433 | strb r10, [r2, #6] | 429 | strb r5, [r2, #5] |
434 | add r11, r11, r1, asr #7 | 430 | add r6, r6, r1, asr #7 |
435 | cmp r11, #255 | 431 | cmp r6, #255 |
436 | mvnhi r11, r11, asr #31 | 432 | mvnhi r6, r6, asr #31 |
437 | strb r11, [r2, #7] | 433 | strb r6, [r2, #6] |
434 | add lr, lr, r1, asr #7 | ||
435 | cmp lr, #255 | ||
436 | mvnhi lr, lr, asr #31 | ||
437 | strb lr, [r2, #7] | ||
438 | add r2, r2, r3 | 438 | add r2, r2, r3 |
439 | cmp r2, r0 | 439 | cmp r2, r0 |
440 | blo 4b | 440 | blo 4b |
441 | ldmfd sp!, { r4-r11 } | 441 | ldmfd sp!, { r4-r6, pc } |
442 | bx lr | ||
diff --git a/apps/plugins/mpegplayer/idct_armv6.S b/apps/plugins/mpegplayer/idct_armv6.S index 73feed4785..ca97d12b83 100644 --- a/apps/plugins/mpegplayer/idct_armv6.S +++ b/apps/plugins/mpegplayer/idct_armv6.S | |||
@@ -196,7 +196,7 @@ L_W0246: | |||
196 | 196 | ||
197 | 197 | ||
198 | mpeg2_idct_copy: | 198 | mpeg2_idct_copy: |
199 | stmfd sp!, {r1-r2, r4-r12, lr} | 199 | stmfd sp!, {r1-r2, r4-r11, lr} |
200 | bl .idct | 200 | bl .idct |
201 | ldmfd sp!, {r1-r2} | 201 | ldmfd sp!, {r1-r2} |
202 | 202 | ||
@@ -230,7 +230,7 @@ mpeg2_idct_copy: | |||
230 | cmp r0, r12 | 230 | cmp r0, r12 |
231 | blo 1b | 231 | blo 1b |
232 | 232 | ||
233 | ldmfd sp!, {r4-r12, pc} | 233 | ldmfd sp!, {r4-r11, pc} |
234 | 234 | ||
235 | mpeg2_idct_add: | 235 | mpeg2_idct_add: |
236 | cmp r0, #129 | 236 | cmp r0, #129 |
@@ -241,7 +241,7 @@ mpeg2_idct_add: | |||
241 | cmp r1, #0x40 | 241 | cmp r1, #0x40 |
242 | bne 3f | 242 | bne 3f |
243 | 1: | 243 | 1: |
244 | stmfd sp!, {r2-r12, lr} | 244 | stmfd sp!, {r2-r11, lr} |
245 | bl .idct | 245 | bl .idct |
246 | ldmfd sp!, {r1-r2} | 246 | ldmfd sp!, {r1-r2} |
247 | mov r11, #0 | 247 | mov r11, #0 |
@@ -287,21 +287,21 @@ mpeg2_idct_add: | |||
287 | add r1, r1, r2 | 287 | add r1, r1, r2 |
288 | cmp r0, r12 | 288 | cmp r0, r12 |
289 | blo 2b | 289 | blo 2b |
290 | ldmfd sp!, {r4-r12, pc} | 290 | ldmfd sp!, {r4-r11, pc} |
291 | 291 | ||
292 | 3: | 292 | 3: |
293 | stmfd sp!, {r4-r7} | 293 | stmfd sp!, {r4-r6, lr} |
294 | ldrsh r1, [r0, #0] /* r1 = block[0] */ | 294 | ldrsh r1, [r0, #0] /* r1 = block[0] */ |
295 | mov r11, #0 | 295 | mov r4, #0 |
296 | strh r11, [r0, #0] /* block[0] = 0 */ | 296 | strh r4, [r0, #0] /* block[0] = 0 */ |
297 | strh r11, [r0, #126] /* block[63] = 0 */ | 297 | strh r4, [r0, #126] /* block[63] = 0 */ |
298 | add r1, r1, #64 /* r1 = DC << 7 */ | 298 | add r1, r1, #64 /* r1 = DC << 7 */ |
299 | add r0, r2, r3, asl #3 | 299 | add r0, r2, r3, asl #3 |
300 | 4: | 300 | 4: |
301 | ldrb r4, [r2, #0] | 301 | ldrb r4, [r2, #0] |
302 | ldrb r5, [r2, #1] | 302 | ldrb r5, [r2, #1] |
303 | ldrb r6, [r2, #2] | 303 | ldrb r6, [r2, #2] |
304 | ldrb r7, [r2, #3] | 304 | ldrb lr, [r2, #3] |
305 | add r4, r4, r1, asr #7 | 305 | add r4, r4, r1, asr #7 |
306 | usat r4, #8, r4 | 306 | usat r4, #8, r4 |
307 | strb r4, [r2, #0] | 307 | strb r4, [r2, #0] |
@@ -311,13 +311,13 @@ mpeg2_idct_add: | |||
311 | add r6, r6, r1, asr #7 | 311 | add r6, r6, r1, asr #7 |
312 | usat r6, #8, r6 | 312 | usat r6, #8, r6 |
313 | strb r6, [r2, #2] | 313 | strb r6, [r2, #2] |
314 | add r7, r7, r1, asr #7 | 314 | add lr, lr, r1, asr #7 |
315 | usat r7, #8, r7 | 315 | usat lr, #8, lr |
316 | strb r7, [r2, #3] | 316 | strb lr, [r2, #3] |
317 | ldrb r4, [r2, #4] | 317 | ldrb r4, [r2, #4] |
318 | ldrb r5, [r2, #5] | 318 | ldrb r5, [r2, #5] |
319 | ldrb r6, [r2, #6] | 319 | ldrb r6, [r2, #6] |
320 | ldrb r7, [r2, #7] | 320 | ldrb lr, [r2, #7] |
321 | add r4, r4, r1, asr #7 | 321 | add r4, r4, r1, asr #7 |
322 | usat r4, #8, r4 | 322 | usat r4, #8, r4 |
323 | strb r4, [r2, #4] | 323 | strb r4, [r2, #4] |
@@ -327,11 +327,10 @@ mpeg2_idct_add: | |||
327 | add r6, r6, r1, asr #7 | 327 | add r6, r6, r1, asr #7 |
328 | usat r6, #8, r6 | 328 | usat r6, #8, r6 |
329 | strb r6, [r2, #6] | 329 | strb r6, [r2, #6] |
330 | add r7, r7, r1, asr #7 | 330 | add lr, lr, r1, asr #7 |
331 | usat r7, #8, r7 | 331 | usat lr, #8, lr |
332 | strb r7, [r2, #7] | 332 | strb lr, [r2, #7] |
333 | add r2, r2, r3 | 333 | add r2, r2, r3 |
334 | cmp r2, r0 | 334 | cmp r2, r0 |
335 | blo 4b | 335 | blo 4b |
336 | ldmfd sp!, {r4-r7} | 336 | ldmfd sp!, {r4-r6, pc} |
337 | bx lr | ||