diff options
author | Thomas Martitz <kugel@rockbox.org> | 2012-01-17 15:13:34 +0100 |
---|---|---|
committer | Thomas Martitz <kugel@rockbox.org> | 2012-01-21 18:39:19 +0100 |
commit | a0d54b09a6b33beb710ad4c9507d7b615eb7d1e8 (patch) | |
tree | dafd2ef8ed750d44f8c3a3bfe626e71b8d4941a9 | |
parent | 6d19275876bf8a92d966e1b64d433a7edabb3a91 (diff) | |
download | rockbox-a0d54b09a6b33beb710ad4c9507d7b615eb7d1e8.tar.gz rockbox-a0d54b09a6b33beb710ad4c9507d7b615eb7d1e8.zip |
libspeex: Get rid of some bad trickery with the stack pointer.
Using the stack pointer for anything else than pointing to the
current stack can have in very bad effects, especially on hosted
platforms (e.g. when mixed with signals). Remove this at a
neglible performance cost.
Change-Id: I9545d701bd13c32456c224b87c708d907880c0ff
-rw-r--r-- | apps/codecs/libspeex/filters_arm4.S | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/apps/codecs/libspeex/filters_arm4.S b/apps/codecs/libspeex/filters_arm4.S index dcd1691982..e652ede554 100644 --- a/apps/codecs/libspeex/filters_arm4.S +++ b/apps/codecs/libspeex/filters_arm4.S | |||
@@ -206,11 +206,9 @@ qmf_synth: | |||
206 | 206 | ||
207 | sub r0, r8, r5 @ r0 = &xx1[N2] | 207 | sub r0, r8, r5 @ r0 = &xx1[N2] |
208 | sub r1, r9, r5 @ r1 = &xx2[N2] | 208 | sub r1, r9, r5 @ r1 = &xx2[N2] |
209 | str r4, [sp, #-4] @ Stack N | 209 | str r4, [sp, #-4]! @ Stack N |
210 | mov r4, r5 | 210 | mov r4, r5 |
211 | str r4, [sp, #-8] @ Stack M | 211 | str r4, [sp, #-4]! @ Stack M |
212 | @ sp doesn't point to the end of the stack frame from here on, but we're not | ||
213 | @ calling anything so it shouldn't matter | ||
214 | @ Main loop, register usage: | 212 | @ Main loop, register usage: |
215 | @ r0 = xx1, r1 = xx2, r2 = a, r3 = y, r4 = M, r5 = x10, r6 = x11, r7 = x20 | 213 | @ r0 = xx1, r1 = xx2, r2 = a, r3 = y, r4 = M, r5 = x10, r6 = x11, r7 = x20 |
216 | @ r8 = x21, r9 = [a1, a0], r10 = acc0, r11 = acc1, r12 = acc2, r14 = acc3 | 214 | @ r8 = x21, r9 = [a1, a0], r10 = acc0, r11 = acc1, r12 = acc2, r14 = acc3 |
@@ -251,7 +249,7 @@ qmf_synth: | |||
251 | subs r4, r4, #4 | 249 | subs r4, r4, #4 |
252 | bne 1b | 250 | bne 1b |
253 | 251 | ||
254 | ldr r4, [sp, #-8] @ r4 = M | 252 | ldr r4, [sp] @ r4 = M |
255 | sub r2, r2, r4, lsl #1 @ r2 = &a[0] | 253 | sub r2, r2, r4, lsl #1 @ r2 = &a[0] |
256 | sub r0, r0, r4 @ r0 = &xx1[N2 - 2 - i] | 254 | sub r0, r0, r4 @ r0 = &xx1[N2 - 2 - i] |
257 | sub r1, r1, r4 @ r1 = &xx2[N2 - 2 - i] | 255 | sub r1, r1, r4 @ r1 = &xx2[N2 - 2 - i] |
@@ -281,13 +279,14 @@ qmf_synth: | |||
281 | strh r11, [r3], #2 | 279 | strh r11, [r3], #2 |
282 | strh r12, [r3], #2 | 280 | strh r12, [r3], #2 |
283 | strh r14, [r3], #2 | 281 | strh r14, [r3], #2 |
284 | ldr r10, [sp, #-4] @ Load N | 282 | ldr r10, [sp, #4] @ Load N |
285 | subs r10, r10, #4 @ Are we done? | 283 | subs r10, r10, #4 @ Are we done? |
286 | strne r10, [sp, #-4] | 284 | strne r10, [sp, #4] @ no -> |
287 | bne 0b | 285 | bne 0b @ do outer loop |
288 | 286 | ||
289 | @ Copy start of xx1 and xx2 back to alternate mem1 and mem2 entries | 287 | @ Copy start of xx1 and xx2 back to alternate mem1 and mem2 entries |
290 | @ r0 and r1 are &xx1[0] and &xx2[0] at this point | 288 | @ r0 and r1 are &xx1[0] and &xx2[0] at this point |
289 | add sp, sp, #8 | ||
291 | ldmia sp, { r5-r6, sp } @ Fetch &mem1[1], &mem2[1], restore sp | 290 | ldmia sp, { r5-r6, sp } @ Fetch &mem1[1], &mem2[1], restore sp |
292 | 0: | 291 | 0: |
293 | ldr r7, [r0], #4 | 292 | ldr r7, [r0], #4 |