summaryrefslogtreecommitdiff
path: root/apps/codecs/demac/libdemac
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2008-11-27 22:07:46 +0000
committerJens Arnold <amiconn@rockbox.org>2008-11-27 22:07:46 +0000
commit113c285045c45a48636bdec91825c53763ae747e (patch)
tree349c9c1628a06a8704d68afc792af390552348cb /apps/codecs/demac/libdemac
parent81fe625a6205e9a0a103e76bed13e4701205cf97 (diff)
downloadrockbox-113c285045c45a48636bdec91825c53763ae747e.tar.gz
rockbox-113c285045c45a48636bdec91825c53763ae747e.zip
On ARM9TDMI (e.g. Gigabeat F) it's faster to use a ldr/str pair than add+ldmia/stmia for 2 registers. On ARM7TDMI a str pair is equally fast, so go for the simpler macro and use it for all ARMv4.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19250 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/demac/libdemac')
-rw-r--r--apps/codecs/demac/libdemac/predictor-arm.S29
1 files changed, 17 insertions, 12 deletions
diff --git a/apps/codecs/demac/libdemac/predictor-arm.S b/apps/codecs/demac/libdemac/predictor-arm.S
index 6bb3ee1cf0..1ffba75318 100644
--- a/apps/codecs/demac/libdemac/predictor-arm.S
+++ b/apps/codecs/demac/libdemac/predictor-arm.S
@@ -67,21 +67,26 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
67.macro LDR2OFS reg1, reg2, base, offset 67.macro LDR2OFS reg1, reg2, base, offset
68#if ARM_ARCH >= 5 68#if ARM_ARCH >= 5
69 ldrd \reg1, [\base, \offset] 69 ldrd \reg1, [\base, \offset]
70#else 70#else /* ARM_ARCH < 5 */
71#ifdef CPU_ARM7TDMI
71 add \reg1, \base, \offset 72 add \reg1, \base, \offset
72 ldmia \reg1, {\reg1, \reg2} 73 ldmia \reg1, {\reg1, \reg2}
74#else
75 ldr \reg1, [\base, \offset]
76 ldr \reg2, [\base, \offset+4]
73#endif 77#endif
78#endif /* ARM_ARCH */
74.endm 79.endm
75 80
76@ Macro for storing 2 registers, for various ARM versions. 81@ Macro for storing 2 registers, for various ARM versions.
77@ Registers must start with an even register, and must be consecutive. 82@ Registers must start with an even register, and must be consecutive.
78 83
79.macro STR2OFS reg1, reg2, base, offset, scratch 84.macro STR2OFS reg1, reg2, base, offset
80#if ARM_ARCH >= 5 85#if ARM_ARCH >= 5
81 strd \reg1, [\base, \offset] 86 strd \reg1, [\base, \offset]
82#else 87#else
83 add \scratch, \base, \offset 88 str \reg1, [\base, \offset]
84 stmia \scratch, {\reg1, \reg2} 89 str \reg2, [\base, \offset+4]
85#endif 90#endif
86.endm 91.endm
87 92
@@ -127,7 +132,7 @@ loop:
127 132
128 subs r10, r11, r10 @ r10 := r11 - r10 133 subs r10, r11, r10 @ r10 := r11 - r10
129 134
130 STR2OFS r10, r11, r14, #YDELAYA-4, r1 @ r1 -> scratch 135 STR2OFS r10, r11, r14, #YDELAYA-4
131 @ p->buf[YDELAYA-1] = r10 136 @ p->buf[YDELAYA-1] = r10
132 @ p->buf[YDELAYA] = r11 137 @ p->buf[YDELAYA] = r11
133 138
@@ -144,7 +149,7 @@ loop:
144 mvngt r11, #0 149 mvngt r11, #0
145 movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro) 150 movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
146 151
147 STR2OFS r10, r11, r14, #YADAPTCOEFFSA-4, r1 @r1 -> scratch 152 STR2OFS r10, r11, r14, #YADAPTCOEFFSA-4
148 @ p->buf[YADAPTCOEFFSA-1] := r10 153 @ p->buf[YADAPTCOEFFSA-1] := r10
149 @ p->buf[YADAPTCOEFFSA] := r11 154 @ p->buf[YADAPTCOEFFSA] := r11
150 155
@@ -175,7 +180,7 @@ loop:
175 180
176 subs r10, r11, r10 @ r10 := r11 - r10 181 subs r10, r11, r10 @ r10 := r11 - r10
177 182
178 STR2OFS r10, r11, r14, #YDELAYB-4, r1 @ r1 -> scratch 183 STR2OFS r10, r11, r14, #YDELAYB-4
179 @ p->buf[YDELAYB-1] = r10 184 @ p->buf[YDELAYB-1] = r10
180 @ p->buf[YDELAYB] = r11 185 @ p->buf[YDELAYB] = r11
181 186
@@ -193,7 +198,7 @@ loop:
193 mvngt r11, #0 198 mvngt r11, #0
194 movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro) 199 movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
195 200
196 STR2OFS r10, r11, r14, #YADAPTCOEFFSB-4, r2 @ r2 -> scratch 201 STR2OFS r10, r11, r14, #YADAPTCOEFFSB-4
197 @ p->buf[YADAPTCOEFFSB-1] := r10 202 @ p->buf[YADAPTCOEFFSB-1] := r10
198 @ p->buf[YADAPTCOEFFSB] := r11 203 @ p->buf[YADAPTCOEFFSB] := r11
199 204
@@ -313,7 +318,7 @@ loop:
313 318
314 subs r10, r11, r10 @ r10 := r11 - r10 319 subs r10, r11, r10 @ r10 := r11 - r10
315 320
316 STR2OFS r10, r11, r14, #XDELAYA-4, r1 @ r1 -> scratch 321 STR2OFS r10, r11, r14, #XDELAYA-4
317 @ p->buf[XDELAYA-1] = r10 322 @ p->buf[XDELAYA-1] = r10
318 @ p->buf[XDELAYA] = r11 323 @ p->buf[XDELAYA] = r11
319 324
@@ -330,7 +335,7 @@ loop:
330 mvngt r11, #0 335 mvngt r11, #0
331 movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro) 336 movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
332 337
333 STR2OFS r10, r11, r14, #XADAPTCOEFFSA-4, r1 @ r1 -> scratch 338 STR2OFS r10, r11, r14, #XADAPTCOEFFSA-4
334 @ p->buf[XADAPTCOEFFSA-1] := r10 339 @ p->buf[XADAPTCOEFFSA-1] := r10
335 @ p->buf[XADAPTCOEFFSA] := r11 340 @ p->buf[XADAPTCOEFFSA] := r11
336 341
@@ -361,7 +366,7 @@ loop:
361 366
362 subs r10, r11, r10 @ r10 := r11 - r10 367 subs r10, r11, r10 @ r10 := r11 - r10
363 368
364 STR2OFS r10, r11, r14, #XDELAYB-4, r1 @ r1 -> scratch 369 STR2OFS r10, r11, r14, #XDELAYB-4
365 @ p->buf[XDELAYB-1] = r10 370 @ p->buf[XDELAYB-1] = r10
366 @ p->buf[XDELAYB] = r11 371 @ p->buf[XDELAYB] = r11
367 372
@@ -379,7 +384,7 @@ loop:
379 mvngt r11, #0 384 mvngt r11, #0
380 movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro) 385 movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
381 386
382 STR2OFS r10, r11, r14, #XADAPTCOEFFSB-4, r2 @ r2 -> scratch 387 STR2OFS r10, r11, r14, #XADAPTCOEFFSB-4
383 @ p->buf[XADAPTCOEFFSB-1] := r10 388 @ p->buf[XADAPTCOEFFSB-1] := r10
384 @ p->buf[XADAPTCOEFFSB] := r11 389 @ p->buf[XADAPTCOEFFSB] := r11
385 390