summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2006-08-08 23:15:17 +0000
committerJens Arnold <amiconn@rockbox.org>2006-08-08 23:15:17 +0000
commite72820f5e2c96a9218be21986e3e22d26adb6cd8 (patch)
treeb08c08cba03ce68d18bca37542c98f4dd24cdb8a
parentb888fb25315ba1dd24b5bdb95246e0912bb76dca (diff)
downloadrockbox-e72820f5e2c96a9218be21986e3e22d26adb6cd8.tar.gz
rockbox-e72820f5e2c96a9218be21986e3e22d26adb6cd8.zip
Slightly optimised range_limit() for arm targets.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10494 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/jpeg.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/apps/plugins/jpeg.c b/apps/plugins/jpeg.c
index 5ecd394d26..9a32a8c6ca 100644
--- a/apps/plugins/jpeg.c
+++ b/apps/plugins/jpeg.c
@@ -200,12 +200,11 @@ INLINE unsigned range_limit(int value)
200 ); 200 );
201 return value; 201 return value;
202#elif defined(CPU_ARM) 202#elif defined(CPU_ARM)
203 asm ( 203 asm ( /* Note: Uses knowledge that only the low byte of the result is used */
204 "adds %[v], %[v], #128\n" /* value += 128 */ 204 "add %[v], %[v], #128 \n" /* value += 128 */
205 "movmi %[v], #0 \n" /* clip to 0 if negative result */ 205 "cmp %[v], #255 \n" /* out of range 0..255? */
206 "cmp %[v], #255 \n" /* did we exceed 255? */ 206 "mvnhi %[v], %[v], asr #31 \n" /* yes: set all bits to ~(sign_bit) */
207 "movgt %[v], #255 \n" /* yes, clip to limit */ 207 : /* outputs */
208 :
209 [v]"+r"(value) 208 [v]"+r"(value)
210 ); 209 );
211 return value; 210 return value;