forked from len0rd/rockbox
* 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
This commit is contained in:
parent
afe43d3fcb
commit
36eeecbe9a
3 changed files with 24 additions and 24 deletions
|
@ -387,7 +387,7 @@ mpeg2_idct_add:
|
||||||
blo 2b
|
blo 2b
|
||||||
ldmfd sp!, { r4-r11, pc }
|
ldmfd sp!, { r4-r11, pc }
|
||||||
3:
|
3:
|
||||||
stmfd sp!, { r4-r6, lr }
|
stmfd sp!, { r4-r5, lr }
|
||||||
ldrsh r1, [r0, #0] /* r1 = block[0] */
|
ldrsh r1, [r0, #0] /* r1 = block[0] */
|
||||||
mov r4, #0
|
mov r4, #0
|
||||||
strh r4, [r0, #0] /* block[0] = 0 */
|
strh r4, [r0, #0] /* block[0] = 0 */
|
||||||
|
@ -397,7 +397,7 @@ mpeg2_idct_add:
|
||||||
4:
|
4:
|
||||||
ldrb r4, [r2, #0]
|
ldrb r4, [r2, #0]
|
||||||
ldrb r5, [r2, #1]
|
ldrb r5, [r2, #1]
|
||||||
ldrb r6, [r2, #2]
|
ldrb r12, [r2, #2]
|
||||||
ldrb lr, [r2, #3]
|
ldrb lr, [r2, #3]
|
||||||
add r4, r4, r1, asr #7
|
add r4, r4, r1, asr #7
|
||||||
cmp r4, #255
|
cmp r4, #255
|
||||||
|
@ -407,17 +407,17 @@ mpeg2_idct_add:
|
||||||
cmp r5, #255
|
cmp r5, #255
|
||||||
mvnhi r5, r5, asr #31
|
mvnhi r5, r5, asr #31
|
||||||
strb r5, [r2, #1]
|
strb r5, [r2, #1]
|
||||||
add r6, r6, r1, asr #7
|
add r12, r12, r1, asr #7
|
||||||
cmp r6, #255
|
cmp r12, #255
|
||||||
mvnhi r6, r6, asr #31
|
mvnhi r12, r12, asr #31
|
||||||
strb r6, [r2, #2]
|
strb r12, [r2, #2]
|
||||||
add lr, lr, r1, asr #7
|
add lr, lr, r1, asr #7
|
||||||
cmp lr, #255
|
cmp lr, #255
|
||||||
mvnhi lr, lr, asr #31
|
mvnhi lr, lr, asr #31
|
||||||
strb lr, [r2, #3]
|
strb lr, [r2, #3]
|
||||||
ldrb r4, [r2, #4]
|
ldrb r4, [r2, #4]
|
||||||
ldrb r5, [r2, #5]
|
ldrb r5, [r2, #5]
|
||||||
ldrb r6, [r2, #6]
|
ldrb r12, [r2, #6]
|
||||||
ldrb lr, [r2, #7]
|
ldrb lr, [r2, #7]
|
||||||
add r4, r4, r1, asr #7
|
add r4, r4, r1, asr #7
|
||||||
cmp r4, #255
|
cmp r4, #255
|
||||||
|
@ -427,10 +427,10 @@ mpeg2_idct_add:
|
||||||
cmp r5, #255
|
cmp r5, #255
|
||||||
mvnhi r5, r5, asr #31
|
mvnhi r5, r5, asr #31
|
||||||
strb r5, [r2, #5]
|
strb r5, [r2, #5]
|
||||||
add r6, r6, r1, asr #7
|
add r12, r12, r1, asr #7
|
||||||
cmp r6, #255
|
cmp r12, #255
|
||||||
mvnhi r6, r6, asr #31
|
mvnhi r12, r12, asr #31
|
||||||
strb r6, [r2, #6]
|
strb r12, [r2, #6]
|
||||||
add lr, lr, r1, asr #7
|
add lr, lr, r1, asr #7
|
||||||
cmp lr, #255
|
cmp lr, #255
|
||||||
mvnhi lr, lr, asr #31
|
mvnhi lr, lr, asr #31
|
||||||
|
@ -438,4 +438,4 @@ mpeg2_idct_add:
|
||||||
add r2, r2, r3
|
add r2, r2, r3
|
||||||
cmp r2, r0
|
cmp r2, r0
|
||||||
blo 4b
|
blo 4b
|
||||||
ldmfd sp!, { r4-r6, pc }
|
ldmfd sp!, { r4-r5, pc }
|
||||||
|
|
|
@ -290,7 +290,7 @@ mpeg2_idct_add:
|
||||||
ldmfd sp!, {r4-r11, pc}
|
ldmfd sp!, {r4-r11, pc}
|
||||||
|
|
||||||
3:
|
3:
|
||||||
stmfd sp!, {r4-r6, lr}
|
stmfd sp!, {r4-r5, lr}
|
||||||
ldrsh r1, [r0, #0] /* r1 = block[0] */
|
ldrsh r1, [r0, #0] /* r1 = block[0] */
|
||||||
mov r4, #0
|
mov r4, #0
|
||||||
strh r4, [r0, #0] /* block[0] = 0 */
|
strh r4, [r0, #0] /* block[0] = 0 */
|
||||||
|
@ -300,7 +300,7 @@ mpeg2_idct_add:
|
||||||
4:
|
4:
|
||||||
ldrb r4, [r2, #0]
|
ldrb r4, [r2, #0]
|
||||||
ldrb r5, [r2, #1]
|
ldrb r5, [r2, #1]
|
||||||
ldrb r6, [r2, #2]
|
ldrb r12, [r2, #2]
|
||||||
ldrb lr, [r2, #3]
|
ldrb lr, [r2, #3]
|
||||||
add r4, r4, r1, asr #7
|
add r4, r4, r1, asr #7
|
||||||
usat r4, #8, r4
|
usat r4, #8, r4
|
||||||
|
@ -308,15 +308,15 @@ mpeg2_idct_add:
|
||||||
add r5, r5, r1, asr #7
|
add r5, r5, r1, asr #7
|
||||||
usat r5, #8, r5
|
usat r5, #8, r5
|
||||||
strb r5, [r2, #1]
|
strb r5, [r2, #1]
|
||||||
add r6, r6, r1, asr #7
|
add r12, r12, r1, asr #7
|
||||||
usat r6, #8, r6
|
usat r12, #8, r12
|
||||||
strb r6, [r2, #2]
|
strb r12, [r2, #2]
|
||||||
add lr, lr, r1, asr #7
|
add lr, lr, r1, asr #7
|
||||||
usat lr, #8, lr
|
usat lr, #8, lr
|
||||||
strb lr, [r2, #3]
|
strb lr, [r2, #3]
|
||||||
ldrb r4, [r2, #4]
|
ldrb r4, [r2, #4]
|
||||||
ldrb r5, [r2, #5]
|
ldrb r5, [r2, #5]
|
||||||
ldrb r6, [r2, #6]
|
ldrb r12, [r2, #6]
|
||||||
ldrb lr, [r2, #7]
|
ldrb lr, [r2, #7]
|
||||||
add r4, r4, r1, asr #7
|
add r4, r4, r1, asr #7
|
||||||
usat r4, #8, r4
|
usat r4, #8, r4
|
||||||
|
@ -324,13 +324,13 @@ mpeg2_idct_add:
|
||||||
add r5, r5, r1, asr #7
|
add r5, r5, r1, asr #7
|
||||||
usat r5, #8, r5
|
usat r5, #8, r5
|
||||||
strb r5, [r2, #5]
|
strb r5, [r2, #5]
|
||||||
add r6, r6, r1, asr #7
|
add r12, r12, r1, asr #7
|
||||||
usat r6, #8, r6
|
usat r12, #8, r12
|
||||||
strb r6, [r2, #6]
|
strb r12, [r2, #6]
|
||||||
add lr, lr, r1, asr #7
|
add lr, lr, r1, asr #7
|
||||||
usat lr, #8, lr
|
usat lr, #8, lr
|
||||||
strb lr, [r2, #7]
|
strb lr, [r2, #7]
|
||||||
add r2, r2, r3
|
add r2, r2, r3
|
||||||
cmp r2, r0
|
cmp r2, r0
|
||||||
blo 4b
|
blo 4b
|
||||||
ldmfd sp!, {r4-r6, pc}
|
ldmfd sp!, {r4-r5, pc}
|
||||||
|
|
|
@ -696,7 +696,7 @@ static void __attribute__((naked))
|
||||||
* Stack access also isn't permitted until restoring the original stack and
|
* Stack access also isn't permitted until restoring the original stack and
|
||||||
* context. */
|
* context. */
|
||||||
asm volatile (
|
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, =idle_stacks \n" /* r2 = &idle_stacks[core][IDLE_STACK_WORDS] */
|
||||||
"ldr r2, [r2, r0, lsl #2] \n"
|
"ldr r2, [r2, r0, lsl #2] \n"
|
||||||
"add r2, r2, %0*4 \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 */
|
"ldr r0, =cpucache_invalidate \n" /* Invalidate new core's cache */
|
||||||
"mov lr, pc \n"
|
"mov lr, pc \n"
|
||||||
"bx r0 \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 */
|
".ltorg \n" /* Dump constant pool */
|
||||||
: : "i"(IDLE_STACK_WORDS)
|
: : "i"(IDLE_STACK_WORDS)
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue