summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm/as3525/pcm-as3525.c
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-06-11 14:04:48 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-06-11 14:04:48 +0000
commitd5a27c2fb1d653bb133a57acacc06b9efdc3ce4c (patch)
tree96a2a4b594608362ce372e66a89724ed4329bdf7 /firmware/target/arm/as3525/pcm-as3525.c
parent9a2b1d612cd887c47254015b1721517494f12ab9 (diff)
downloadrockbox-d5a27c2fb1d653bb133a57acacc06b9efdc3ce4c.tar.gz
rockbox-d5a27c2fb1d653bb133a57acacc06b9efdc3ce4c.zip
pcm as3525v1: revert 26761 to use faster ASM code
Fix the asm constraints to mark the left output variable as earlyclobber Thanks to amiconn git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26777 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/as3525/pcm-as3525.c')
-rw-r--r--firmware/target/arm/as3525/pcm-as3525.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c
index 20c34bba36..8c5bb67076 100644
--- a/firmware/target/arm/as3525/pcm-as3525.c
+++ b/firmware/target/arm/as3525/pcm-as3525.c
@@ -263,7 +263,7 @@ static inline void mono2stereo(int16_t *end)
{
if(audio_channels != 1) /* only for microphone */
return;
-
+#if 0
/* load pointer in a register and avoid updating it in each loop */
register int16_t *samples = mono_samples;
@@ -273,6 +273,19 @@ static inline void mono2stereo(int16_t *end)
} while(samples != end);
mono_samples = samples; /* update pointer */
+#else
+ /* gcc doesn't use pre indexing : let's save 1 cycle */
+ int16_t left;
+ asm (
+ "1: ldrh %0, [%1], #2 \n" // load 1 sample of the left-channel
+ " strh %0, [%1], #2 \n" // copy it in the right-channel
+ " cmp %1, %2 \n" // are we finished?
+ " bne 1b \n"
+ : "=&r"(left), "+r"(mono_samples)
+ : "r"(end)
+ : "memory"
+ );
+#endif /* C / ASM */
}
#endif /* CONFIG_CPU == AS3525 */