summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2012-01-17 15:13:34 +0100
committerThomas Martitz <kugel@rockbox.org>2012-01-21 18:39:19 +0100
commita0d54b09a6b33beb710ad4c9507d7b615eb7d1e8 (patch)
treedafd2ef8ed750d44f8c3a3bfe626e71b8d4941a9
parent6d19275876bf8a92d966e1b64d433a7edabb3a91 (diff)
downloadrockbox-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.S15
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
2920: 2910:
293 ldr r7, [r0], #4 292 ldr r7, [r0], #4