summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2009-07-12 22:43:24 +0000
committerJens Arnold <amiconn@rockbox.org>2009-07-12 22:43:24 +0000
commit36eeecbe9a91a5da8bd82ee3974c359f4534dd14 (patch)
tree81cf3005af179420e469b07c883db5e6a35a7adb
parentafe43d3fcba11eadf9960d48ae461f6e429b9a88 (diff)
downloadrockbox-36eeecbe9a91a5da8bd82ee3974c359f4534dd14.tar.gz
rockbox-36eeecbe9a91a5da8bd82ee3974c359f4534dd14.zip
* Fix overlooked r12 usage possibility in mpegplayer ARM idct
* ARM dualcore: Don't save r12 in switch_thread_core() git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21830 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/mpegplayer/idct_arm.S24
-rw-r--r--apps/plugins/mpegplayer/idct_armv6.S20
-rw-r--r--firmware/thread.c4
3 files changed, 24 insertions, 24 deletions
diff --git a/apps/plugins/mpegplayer/idct_arm.S b/apps/plugins/mpegplayer/idct_arm.S
index 3cb1554de2..7253d890bf 100644
--- a/apps/plugins/mpegplayer/idct_arm.S
+++ b/apps/plugins/mpegplayer/idct_arm.S
@@ -387,7 +387,7 @@ mpeg2_idct_add:
387 blo 2b 387 blo 2b
388 ldmfd sp!, { r4-r11, pc } 388 ldmfd sp!, { r4-r11, pc }
3893: 3893:
390 stmfd sp!, { r4-r6, lr } 390 stmfd sp!, { r4-r5, lr }
391 ldrsh r1, [r0, #0] /* r1 = block[0] */ 391 ldrsh r1, [r0, #0] /* r1 = block[0] */
392 mov r4, #0 392 mov r4, #0
393 strh r4, [r0, #0] /* block[0] = 0 */ 393 strh r4, [r0, #0] /* block[0] = 0 */
@@ -397,7 +397,7 @@ mpeg2_idct_add:
3974: 3974:
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 r12, [r2, #2]
401 ldrb lr, [r2, #3] 401 ldrb lr, [r2, #3]
402 add r4, r4, r1, asr #7 402 add r4, r4, r1, asr #7
403 cmp r4, #255 403 cmp r4, #255
@@ -407,17 +407,17 @@ mpeg2_idct_add:
407 cmp r5, #255 407 cmp r5, #255
408 mvnhi r5, r5, asr #31 408 mvnhi r5, r5, asr #31
409 strb r5, [r2, #1] 409 strb r5, [r2, #1]
410 add r6, r6, r1, asr #7 410 add r12, r12, r1, asr #7
411 cmp r6, #255 411 cmp r12, #255
412 mvnhi r6, r6, asr #31 412 mvnhi r12, r12, asr #31
413 strb r6, [r2, #2] 413 strb r12, [r2, #2]
414 add lr, lr, r1, asr #7 414 add lr, lr, r1, asr #7
415 cmp lr, #255 415 cmp lr, #255
416 mvnhi lr, lr, asr #31 416 mvnhi lr, lr, asr #31
417 strb lr, [r2, #3] 417 strb lr, [r2, #3]
418 ldrb r4, [r2, #4] 418 ldrb r4, [r2, #4]
419 ldrb r5, [r2, #5] 419 ldrb r5, [r2, #5]
420 ldrb r6, [r2, #6] 420 ldrb r12, [r2, #6]
421 ldrb lr, [r2, #7] 421 ldrb lr, [r2, #7]
422 add r4, r4, r1, asr #7 422 add r4, r4, r1, asr #7
423 cmp r4, #255 423 cmp r4, #255
@@ -427,10 +427,10 @@ mpeg2_idct_add:
427 cmp r5, #255 427 cmp r5, #255
428 mvnhi r5, r5, asr #31 428 mvnhi r5, r5, asr #31
429 strb r5, [r2, #5] 429 strb r5, [r2, #5]
430 add r6, r6, r1, asr #7 430 add r12, r12, r1, asr #7
431 cmp r6, #255 431 cmp r12, #255
432 mvnhi r6, r6, asr #31 432 mvnhi r12, r12, asr #31
433 strb r6, [r2, #6] 433 strb r12, [r2, #6]
434 add lr, lr, r1, asr #7 434 add lr, lr, r1, asr #7
435 cmp lr, #255 435 cmp lr, #255
436 mvnhi lr, lr, asr #31 436 mvnhi lr, lr, asr #31
@@ -438,4 +438,4 @@ mpeg2_idct_add:
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-r6, pc } 441 ldmfd sp!, { r4-r5, pc }
diff --git a/apps/plugins/mpegplayer/idct_armv6.S b/apps/plugins/mpegplayer/idct_armv6.S
index ca97d12b83..6b940065c8 100644
--- a/apps/plugins/mpegplayer/idct_armv6.S
+++ b/apps/plugins/mpegplayer/idct_armv6.S
@@ -290,7 +290,7 @@ mpeg2_idct_add:
290 ldmfd sp!, {r4-r11, pc} 290 ldmfd sp!, {r4-r11, pc}
291 291
2923: 2923:
293 stmfd sp!, {r4-r6, lr} 293 stmfd sp!, {r4-r5, lr}
294 ldrsh r1, [r0, #0] /* r1 = block[0] */ 294 ldrsh r1, [r0, #0] /* r1 = block[0] */
295 mov r4, #0 295 mov r4, #0
296 strh r4, [r0, #0] /* block[0] = 0 */ 296 strh r4, [r0, #0] /* block[0] = 0 */
@@ -300,7 +300,7 @@ mpeg2_idct_add:
3004: 3004:
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 r12, [r2, #2]
304 ldrb lr, [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
@@ -308,15 +308,15 @@ mpeg2_idct_add:
308 add r5, r5, r1, asr #7 308 add r5, r5, r1, asr #7
309 usat r5, #8, r5 309 usat r5, #8, r5
310 strb r5, [r2, #1] 310 strb r5, [r2, #1]
311 add r6, r6, r1, asr #7 311 add r12, r12, r1, asr #7
312 usat r6, #8, r6 312 usat r12, #8, r12
313 strb r6, [r2, #2] 313 strb r12, [r2, #2]
314 add lr, lr, r1, asr #7 314 add lr, lr, r1, asr #7
315 usat lr, #8, lr 315 usat lr, #8, lr
316 strb lr, [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 r12, [r2, #6]
320 ldrb lr, [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
@@ -324,13 +324,13 @@ mpeg2_idct_add:
324 add r5, r5, r1, asr #7 324 add r5, r5, r1, asr #7
325 usat r5, #8, r5 325 usat r5, #8, r5
326 strb r5, [r2, #5] 326 strb r5, [r2, #5]
327 add r6, r6, r1, asr #7 327 add r12, r12, r1, asr #7
328 usat r6, #8, r6 328 usat r12, #8, r12
329 strb r6, [r2, #6] 329 strb r12, [r2, #6]
330 add lr, lr, r1, asr #7 330 add lr, lr, r1, asr #7
331 usat lr, #8, lr 331 usat lr, #8, lr
332 strb lr, [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-r6, pc} 336 ldmfd sp!, {r4-r5, pc}
diff --git a/firmware/thread.c b/firmware/thread.c
index 755dd7af3a..3754f55867 100644
--- a/firmware/thread.c
+++ b/firmware/thread.c
@@ -696,7 +696,7 @@ static void __attribute__((naked))
696 * Stack access also isn't permitted until restoring the original stack and 696 * Stack access also isn't permitted until restoring the original stack and
697 * context. */ 697 * context. */
698 asm volatile ( 698 asm volatile (
699 "stmfd sp!, { r4-r12, lr } \n" /* Stack all non-volatile context on current core */ 699 "stmfd sp!, { r4-r11, lr } \n" /* Stack all non-volatile context on current core */
700 "ldr r2, =idle_stacks \n" /* r2 = &idle_stacks[core][IDLE_STACK_WORDS] */ 700 "ldr r2, =idle_stacks \n" /* r2 = &idle_stacks[core][IDLE_STACK_WORDS] */
701 "ldr r2, [r2, r0, lsl #2] \n" 701 "ldr r2, [r2, r0, lsl #2] \n"
702 "add r2, r2, %0*4 \n" 702 "add r2, r2, %0*4 \n"
@@ -712,7 +712,7 @@ static void __attribute__((naked))
712 "ldr r0, =cpucache_invalidate \n" /* Invalidate new core's cache */ 712 "ldr r0, =cpucache_invalidate \n" /* Invalidate new core's cache */
713 "mov lr, pc \n" 713 "mov lr, pc \n"
714 "bx r0 \n" 714 "bx r0 \n"
715 "ldmfd sp!, { r4-r12, pc } \n" /* Restore non-volatile context to new core and return */ 715 "ldmfd sp!, { r4-r11, pc } \n" /* Restore non-volatile context to new core and return */
716 ".ltorg \n" /* Dump constant pool */ 716 ".ltorg \n" /* Dump constant pool */
717 : : "i"(IDLE_STACK_WORDS) 717 : : "i"(IDLE_STACK_WORDS)
718 ); 718 );