diff options
| author | Rafaël Carré <rafael.carre@gmail.com> | 2010-06-11 14:04:48 +0000 |
|---|---|---|
| committer | Rafaël Carré <rafael.carre@gmail.com> | 2010-06-11 14:04:48 +0000 |
| commit | d5a27c2fb1d653bb133a57acacc06b9efdc3ce4c (patch) | |
| tree | 96a2a4b594608362ce372e66a89724ed4329bdf7 | |
| parent | 9a2b1d612cd887c47254015b1721517494f12ab9 (diff) | |
| download | rockbox-d5a27c2fb1d653bb133a57acacc06b9efdc3ce4c.zip rockbox-d5a27c2fb1d653bb133a57acacc06b9efdc3ce4c.tar.gz rockbox-d5a27c2fb1d653bb133a57acacc06b9efdc3ce4c.tar.bz2 rockbox-d5a27c2fb1d653bb133a57acacc06b9efdc3ce4c.tar.xz | |
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
| -rw-r--r-- | firmware/target/arm/as3525/pcm-as3525.c | 15 |
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 20c34bb..8c5bb67 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 */ |