From 36eeecbe9a91a5da8bd82ee3974c359f4534dd14 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Sun, 12 Jul 2009 22:43:24 +0000 Subject: * 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 --- apps/plugins/mpegplayer/idct_arm.S | 24 ++++++++++++------------ apps/plugins/mpegplayer/idct_armv6.S | 20 ++++++++++---------- firmware/thread.c | 4 ++-- 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: blo 2b ldmfd sp!, { r4-r11, pc } 3: - stmfd sp!, { r4-r6, lr } + stmfd sp!, { r4-r5, lr } ldrsh r1, [r0, #0] /* r1 = block[0] */ mov r4, #0 strh r4, [r0, #0] /* block[0] = 0 */ @@ -397,7 +397,7 @@ mpeg2_idct_add: 4: ldrb r4, [r2, #0] ldrb r5, [r2, #1] - ldrb r6, [r2, #2] + ldrb r12, [r2, #2] ldrb lr, [r2, #3] add r4, r4, r1, asr #7 cmp r4, #255 @@ -407,17 +407,17 @@ mpeg2_idct_add: cmp r5, #255 mvnhi r5, r5, asr #31 strb r5, [r2, #1] - add r6, r6, r1, asr #7 - cmp r6, #255 - mvnhi r6, r6, asr #31 - strb r6, [r2, #2] + add r12, r12, r1, asr #7 + cmp r12, #255 + mvnhi r12, r12, asr #31 + strb r12, [r2, #2] add lr, lr, r1, asr #7 cmp lr, #255 mvnhi lr, lr, asr #31 strb lr, [r2, #3] ldrb r4, [r2, #4] ldrb r5, [r2, #5] - ldrb r6, [r2, #6] + ldrb r12, [r2, #6] ldrb lr, [r2, #7] add r4, r4, r1, asr #7 cmp r4, #255 @@ -427,10 +427,10 @@ mpeg2_idct_add: cmp r5, #255 mvnhi r5, r5, asr #31 strb r5, [r2, #5] - add r6, r6, r1, asr #7 - cmp r6, #255 - mvnhi r6, r6, asr #31 - strb r6, [r2, #6] + add r12, r12, r1, asr #7 + cmp r12, #255 + mvnhi r12, r12, asr #31 + strb r12, [r2, #6] add lr, lr, r1, asr #7 cmp lr, #255 mvnhi lr, lr, asr #31 @@ -438,4 +438,4 @@ mpeg2_idct_add: add r2, r2, r3 cmp r2, r0 blo 4b - ldmfd sp!, { r4-r6, pc } + 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: ldmfd sp!, {r4-r11, pc} 3: - stmfd sp!, {r4-r6, lr} + stmfd sp!, {r4-r5, lr} ldrsh r1, [r0, #0] /* r1 = block[0] */ mov r4, #0 strh r4, [r0, #0] /* block[0] = 0 */ @@ -300,7 +300,7 @@ mpeg2_idct_add: 4: ldrb r4, [r2, #0] ldrb r5, [r2, #1] - ldrb r6, [r2, #2] + ldrb r12, [r2, #2] ldrb lr, [r2, #3] add r4, r4, r1, asr #7 usat r4, #8, r4 @@ -308,15 +308,15 @@ mpeg2_idct_add: add r5, r5, r1, asr #7 usat r5, #8, r5 strb r5, [r2, #1] - add r6, r6, r1, asr #7 - usat r6, #8, r6 - strb r6, [r2, #2] + add r12, r12, r1, asr #7 + usat r12, #8, r12 + strb r12, [r2, #2] add lr, lr, r1, asr #7 usat lr, #8, lr strb lr, [r2, #3] ldrb r4, [r2, #4] ldrb r5, [r2, #5] - ldrb r6, [r2, #6] + ldrb r12, [r2, #6] ldrb lr, [r2, #7] add r4, r4, r1, asr #7 usat r4, #8, r4 @@ -324,13 +324,13 @@ mpeg2_idct_add: add r5, r5, r1, asr #7 usat r5, #8, r5 strb r5, [r2, #5] - add r6, r6, r1, asr #7 - usat r6, #8, r6 - strb r6, [r2, #6] + add r12, r12, r1, asr #7 + usat r12, #8, r12 + strb r12, [r2, #6] add lr, lr, r1, asr #7 usat lr, #8, lr strb lr, [r2, #7] add r2, r2, r3 cmp r2, r0 blo 4b - ldmfd sp!, {r4-r6, pc} + 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)) * Stack access also isn't permitted until restoring the original stack and * context. */ asm volatile ( - "stmfd sp!, { r4-r12, lr } \n" /* Stack all non-volatile context on current core */ + "stmfd sp!, { r4-r11, lr } \n" /* Stack all non-volatile context on current core */ "ldr r2, =idle_stacks \n" /* r2 = &idle_stacks[core][IDLE_STACK_WORDS] */ "ldr r2, [r2, r0, lsl #2] \n" "add r2, r2, %0*4 \n" @@ -712,7 +712,7 @@ static void __attribute__((naked)) "ldr r0, =cpucache_invalidate \n" /* Invalidate new core's cache */ "mov lr, pc \n" "bx r0 \n" - "ldmfd sp!, { r4-r12, pc } \n" /* Restore non-volatile context to new core and return */ + "ldmfd sp!, { r4-r11, pc } \n" /* Restore non-volatile context to new core and return */ ".ltorg \n" /* Dump constant pool */ : : "i"(IDLE_STACK_WORDS) ); -- cgit v1.2.3