From ebedabbcee4595ead67ed3e3f810ebeddf7a2b1d Mon Sep 17 00:00:00 2001 From: rob Date: Fri, 27 Jun 2008 12:39:03 +0000 Subject: [PATCH] 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 --- firmware/target/arm/tcc780x/pcm-tcc780x.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/firmware/target/arm/tcc780x/pcm-tcc780x.c b/firmware/target/arm/tcc780x/pcm-tcc780x.c index 7db775d4c..c20651a99 100644 --- a/firmware/target/arm/tcc780x/pcm-tcc780x.c +++ b/firmware/target/arm/tcc780x/pcm-tcc780x.c @@ -209,8 +209,10 @@ void fiq_handler(void) * r8 and r9 contains local copies of p and size respectively. * r0-r3 and r12 is a working register. */ - asm volatile ( - "stmfd sp!, { r0-r3, lr } \n" /* stack scratch regs and lr */ + asm volatile ( + "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" ); -- 2.11.4.GIT