forked from len0rd/rockbox
D2: Small optimisation to the PCM FIQ (only stack registers when necessary).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17806 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
38b02f3d7a
commit
39aaa2f2b5
1 changed files with 7 additions and 6 deletions
|
|
@ -210,7 +210,9 @@ void fiq_handler(void)
|
|||
* r0-r3 and r12 is a working register.
|
||||
*/
|
||||
asm volatile (
|
||||
"stmfd sp!, { r0-r3, lr } \n" /* stack scratch regs and lr */
|
||||
"mov r8, #0xc000 \n" /* DAI_TX_IRQ_MASK | DAI_RX_IRQ_MASK */
|
||||
"ldr r9, =0xf3001004 \n" /* CREQ */
|
||||
"str r8, [r9] \n" /* clear DAI IRQs */
|
||||
|
||||
"ldmia r11, { r8-r9 } \n" /* r8 = p, r9 = size */
|
||||
"cmp r9, #0x10 \n" /* is size <16? */
|
||||
|
|
@ -237,13 +239,10 @@ void fiq_handler(void)
|
|||
"stmia r11, { r8-r9 } \n" /* save p and size */
|
||||
|
||||
".exit: \n"
|
||||
"mov r8, #0xc000 \n" /* DAI_TX_IRQ_MASK | DAI_RX_IRQ_MASK */
|
||||
"ldr r9, =0xf3001004 \n" /* CREQ */
|
||||
"str r8, [r9] \n" /* clear DAI IRQs */
|
||||
"ldmfd sp!, { r0-r3, lr } \n"
|
||||
"subs pc, lr, #4 \n" /* FIQ specific return sequence */
|
||||
|
||||
".more_data: \n"
|
||||
"stmfd sp!, { r0-r3, lr } \n" /* stack scratch regs and lr */
|
||||
"ldr r2, =pcm_callback_for_more \n"
|
||||
"ldr r2, [r2] \n" /* get callback address */
|
||||
"cmp r2, #0 \n" /* check for null pointer */
|
||||
|
|
@ -252,11 +251,13 @@ void fiq_handler(void)
|
|||
"blxne r2 \n" /* call pcm_callback_for_more */
|
||||
"ldmia r11, { r8-r9 } \n" /* reload p and size */
|
||||
"cmp r9, #0x10 \n" /* did we actually get more data? */
|
||||
"ldmgefd sp!, { r0-r3, lr } \n"
|
||||
"bge .fill_fifo \n" /* yes: fill the fifo */
|
||||
"ldr r12, =pcm_play_dma_stop \n"
|
||||
"blx r12 \n" /* no: stop playback */
|
||||
"ldr r12, =pcm_play_dma_stopped_callback \n"
|
||||
"blx r12 \n"
|
||||
"ldmfd sp!, { r0-r3, lr } \n"
|
||||
"b .exit \n"
|
||||
".ltorg \n"
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue