diff options
author | Jens Arnold <amiconn@rockbox.org> | 2008-11-16 10:12:38 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2008-11-16 10:12:38 +0000 |
commit | 5ba11af85595ff5bfa84bfb45151e59ce02e6309 (patch) | |
tree | 38c47204661a3d0bfefbeb9a4c0f05ddf5bed80d /apps/codecs/demac/libdemac | |
parent | c41bd04722534a6122f6cd2249d4494ceab4c3a5 (diff) | |
download | rockbox-5ba11af85595ff5bfa84bfb45151e59ce02e6309.tar.gz rockbox-5ba11af85595ff5bfa84bfb45151e59ce02e6309.zip |
Avoid unnecessary register copies on ARMv5.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19112 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/demac/libdemac')
-rw-r--r-- | apps/codecs/demac/libdemac/vector_math16_armv5te.h | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/apps/codecs/demac/libdemac/vector_math16_armv5te.h b/apps/codecs/demac/libdemac/vector_math16_armv5te.h index fef99d9061..a999c0333a 100644 --- a/apps/codecs/demac/libdemac/vector_math16_armv5te.h +++ b/apps/codecs/demac/libdemac/vector_math16_armv5te.h | |||
@@ -127,32 +127,30 @@ static inline int32_t scalarproduct(int16_t* v1, int16_t* v2) | |||
127 | "beq 20f \n" | 127 | "beq 20f \n" |
128 | 128 | ||
129 | "10: \n" | 129 | "10: \n" |
130 | "ldrh r4, [%[v2]], #2 \n" | 130 | "ldrh r7, [%[v2]], #2 \n" |
131 | "mov r4, r4, lsl #16 \n" | 131 | "mov r7, r7, lsl #16 \n" |
132 | "1: \n" | 132 | "1: \n" |
133 | "ldmia %[v1]!, {r0-r3} \n" | 133 | "ldmia %[v1]!, {r0-r3} \n" |
134 | "ldmia %[v2]!, {r5-r8} \n" | 134 | "smlabt %[res], r0, r7, %[res] \n" |
135 | "smlabt %[res], r0, r4, %[res] \n" | 135 | "ldmia %[v2]!, {r4-r7} \n" |
136 | "smlatb %[res], r0, r5, %[res] \n" | 136 | "smlatb %[res], r0, r4, %[res] \n" |
137 | "smlabt %[res], r1, r5, %[res] \n" | 137 | "smlabt %[res], r1, r4, %[res] \n" |
138 | "smlatb %[res], r1, r6, %[res] \n" | 138 | "smlatb %[res], r1, r5, %[res] \n" |
139 | "smlabt %[res], r2, r6, %[res] \n" | 139 | "smlabt %[res], r2, r5, %[res] \n" |
140 | "smlatb %[res], r2, r7, %[res] \n" | 140 | "smlatb %[res], r2, r6, %[res] \n" |
141 | "smlabt %[res], r3, r7, %[res] \n" | 141 | "smlabt %[res], r3, r6, %[res] \n" |
142 | "smlatb %[res], r3, r8, %[res] \n" | 142 | "smlatb %[res], r3, r7, %[res] \n" |
143 | "mov r4, r8 \n" | ||
144 | "ldmia %[v1]!, {r0-r3} \n" | 143 | "ldmia %[v1]!, {r0-r3} \n" |
145 | "ldmia %[v2]!, {r5-r8} \n" | 144 | "smlabt %[res], r0, r7, %[res] \n" |
146 | "smlabt %[res], r0, r4, %[res] \n" | 145 | "ldmia %[v2]!, {r4-r7} \n" |
147 | "smlatb %[res], r0, r5, %[res] \n" | 146 | "smlatb %[res], r0, r4, %[res] \n" |
148 | "smlabt %[res], r1, r5, %[res] \n" | 147 | "smlabt %[res], r1, r4, %[res] \n" |
149 | "smlatb %[res], r1, r6, %[res] \n" | 148 | "smlatb %[res], r1, r5, %[res] \n" |
150 | "smlabt %[res], r2, r6, %[res] \n" | 149 | "smlabt %[res], r2, r5, %[res] \n" |
151 | "smlatb %[res], r2, r7, %[res] \n" | 150 | "smlatb %[res], r2, r6, %[res] \n" |
152 | "smlabt %[res], r3, r7, %[res] \n" | 151 | "smlabt %[res], r3, r6, %[res] \n" |
153 | "smlatb %[res], r3, r8, %[res] \n" | 152 | "smlatb %[res], r3, r7, %[res] \n" |
154 | #if ORDER > 16 | 153 | #if ORDER > 16 |
155 | "mov r4, r8 \n" | ||
156 | "subs %[cnt], %[cnt], #1 \n" | 154 | "subs %[cnt], %[cnt], #1 \n" |
157 | "bne 1b \n" | 155 | "bne 1b \n" |
158 | #endif | 156 | #endif |
@@ -195,8 +193,8 @@ static inline int32_t scalarproduct(int16_t* v1, int16_t* v2) | |||
195 | [res]"+r"(res) | 193 | [res]"+r"(res) |
196 | : /* inputs */ | 194 | : /* inputs */ |
197 | : /* clobbers */ | 195 | : /* clobbers */ |
198 | "r0", "r1", "r2", "r3", "r4", | 196 | "r0", "r1", "r2", "r3", |
199 | "r5", "r6", "r7", "r8" | 197 | "r4", "r5", "r6", "r7" |
200 | ); | 198 | ); |
201 | return res; | 199 | return res; |
202 | } | 200 | } |