forked from len0rd/rockbox
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
This commit is contained in:
parent
81fe625a62
commit
113c285045
1 changed files with 17 additions and 12 deletions
|
|
@ -67,21 +67,26 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
|
||||||
.macro LDR2OFS reg1, reg2, base, offset
|
.macro LDR2OFS reg1, reg2, base, offset
|
||||||
#if ARM_ARCH >= 5
|
#if ARM_ARCH >= 5
|
||||||
ldrd \reg1, [\base, \offset]
|
ldrd \reg1, [\base, \offset]
|
||||||
#else
|
#else /* ARM_ARCH < 5 */
|
||||||
|
#ifdef CPU_ARM7TDMI
|
||||||
add \reg1, \base, \offset
|
add \reg1, \base, \offset
|
||||||
ldmia \reg1, {\reg1, \reg2}
|
ldmia \reg1, {\reg1, \reg2}
|
||||||
|
#else
|
||||||
|
ldr \reg1, [\base, \offset]
|
||||||
|
ldr \reg2, [\base, \offset+4]
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* ARM_ARCH */
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
@ Macro for storing 2 registers, for various ARM versions.
|
@ Macro for storing 2 registers, for various ARM versions.
|
||||||
@ Registers must start with an even register, and must be consecutive.
|
@ Registers must start with an even register, and must be consecutive.
|
||||||
|
|
||||||
.macro STR2OFS reg1, reg2, base, offset, scratch
|
.macro STR2OFS reg1, reg2, base, offset
|
||||||
#if ARM_ARCH >= 5
|
#if ARM_ARCH >= 5
|
||||||
strd \reg1, [\base, \offset]
|
strd \reg1, [\base, \offset]
|
||||||
#else
|
#else
|
||||||
add \scratch, \base, \offset
|
str \reg1, [\base, \offset]
|
||||||
stmia \scratch, {\reg1, \reg2}
|
str \reg2, [\base, \offset+4]
|
||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
|
@ -127,7 +132,7 @@ loop:
|
||||||
|
|
||||||
subs r10, r11, r10 @ r10 := r11 - r10
|
subs r10, r11, r10 @ r10 := r11 - r10
|
||||||
|
|
||||||
STR2OFS r10, r11, r14, #YDELAYA-4, r1 @ r1 -> scratch
|
STR2OFS r10, r11, r14, #YDELAYA-4
|
||||||
@ p->buf[YDELAYA-1] = r10
|
@ p->buf[YDELAYA-1] = r10
|
||||||
@ p->buf[YDELAYA] = r11
|
@ p->buf[YDELAYA] = r11
|
||||||
|
|
||||||
|
|
@ -144,7 +149,7 @@ loop:
|
||||||
mvngt r11, #0
|
mvngt r11, #0
|
||||||
movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
|
movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
|
||||||
|
|
||||||
STR2OFS r10, r11, r14, #YADAPTCOEFFSA-4, r1 @r1 -> scratch
|
STR2OFS r10, r11, r14, #YADAPTCOEFFSA-4
|
||||||
@ p->buf[YADAPTCOEFFSA-1] := r10
|
@ p->buf[YADAPTCOEFFSA-1] := r10
|
||||||
@ p->buf[YADAPTCOEFFSA] := r11
|
@ p->buf[YADAPTCOEFFSA] := r11
|
||||||
|
|
||||||
|
|
@ -175,7 +180,7 @@ loop:
|
||||||
|
|
||||||
subs r10, r11, r10 @ r10 := r11 - r10
|
subs r10, r11, r10 @ r10 := r11 - r10
|
||||||
|
|
||||||
STR2OFS r10, r11, r14, #YDELAYB-4, r1 @ r1 -> scratch
|
STR2OFS r10, r11, r14, #YDELAYB-4
|
||||||
@ p->buf[YDELAYB-1] = r10
|
@ p->buf[YDELAYB-1] = r10
|
||||||
@ p->buf[YDELAYB] = r11
|
@ p->buf[YDELAYB] = r11
|
||||||
|
|
||||||
|
|
@ -193,7 +198,7 @@ loop:
|
||||||
mvngt r11, #0
|
mvngt r11, #0
|
||||||
movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
|
movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
|
||||||
|
|
||||||
STR2OFS r10, r11, r14, #YADAPTCOEFFSB-4, r2 @ r2 -> scratch
|
STR2OFS r10, r11, r14, #YADAPTCOEFFSB-4
|
||||||
@ p->buf[YADAPTCOEFFSB-1] := r10
|
@ p->buf[YADAPTCOEFFSB-1] := r10
|
||||||
@ p->buf[YADAPTCOEFFSB] := r11
|
@ p->buf[YADAPTCOEFFSB] := r11
|
||||||
|
|
||||||
|
|
@ -313,7 +318,7 @@ loop:
|
||||||
|
|
||||||
subs r10, r11, r10 @ r10 := r11 - r10
|
subs r10, r11, r10 @ r10 := r11 - r10
|
||||||
|
|
||||||
STR2OFS r10, r11, r14, #XDELAYA-4, r1 @ r1 -> scratch
|
STR2OFS r10, r11, r14, #XDELAYA-4
|
||||||
@ p->buf[XDELAYA-1] = r10
|
@ p->buf[XDELAYA-1] = r10
|
||||||
@ p->buf[XDELAYA] = r11
|
@ p->buf[XDELAYA] = r11
|
||||||
|
|
||||||
|
|
@ -330,7 +335,7 @@ loop:
|
||||||
mvngt r11, #0
|
mvngt r11, #0
|
||||||
movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
|
movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
|
||||||
|
|
||||||
STR2OFS r10, r11, r14, #XADAPTCOEFFSA-4, r1 @ r1 -> scratch
|
STR2OFS r10, r11, r14, #XADAPTCOEFFSA-4
|
||||||
@ p->buf[XADAPTCOEFFSA-1] := r10
|
@ p->buf[XADAPTCOEFFSA-1] := r10
|
||||||
@ p->buf[XADAPTCOEFFSA] := r11
|
@ p->buf[XADAPTCOEFFSA] := r11
|
||||||
|
|
||||||
|
|
@ -361,7 +366,7 @@ loop:
|
||||||
|
|
||||||
subs r10, r11, r10 @ r10 := r11 - r10
|
subs r10, r11, r10 @ r10 := r11 - r10
|
||||||
|
|
||||||
STR2OFS r10, r11, r14, #XDELAYB-4, r1 @ r1 -> scratch
|
STR2OFS r10, r11, r14, #XDELAYB-4
|
||||||
@ p->buf[XDELAYB-1] = r10
|
@ p->buf[XDELAYB-1] = r10
|
||||||
@ p->buf[XDELAYB] = r11
|
@ p->buf[XDELAYB] = r11
|
||||||
|
|
||||||
|
|
@ -379,7 +384,7 @@ loop:
|
||||||
mvngt r11, #0
|
mvngt r11, #0
|
||||||
movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
|
movlt r11, #1 @ r11 := SIGN(r11) (see .c for SIGN macro)
|
||||||
|
|
||||||
STR2OFS r10, r11, r14, #XADAPTCOEFFSB-4, r2 @ r2 -> scratch
|
STR2OFS r10, r11, r14, #XADAPTCOEFFSB-4
|
||||||
@ p->buf[XADAPTCOEFFSB-1] := r10
|
@ p->buf[XADAPTCOEFFSB-1] := r10
|
||||||
@ p->buf[XADAPTCOEFFSB] := r11
|
@ p->buf[XADAPTCOEFFSB] := r11
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue