From 70ab7fc4e90141064c127e1207ee2f8d501f6356 Mon Sep 17 00:00:00 2001 From: Thom Johansen Date: Fri, 17 Mar 2006 02:05:39 +0000 Subject: Assembler optimised swap32 for ARM. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9072 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/system.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/firmware/export/system.h b/firmware/export/system.h index eb5bb52..150f872 100644 --- a/firmware/export/system.h +++ b/firmware/export/system.h @@ -463,9 +463,16 @@ static inline unsigned long swap32(unsigned long value) result[ 7.. 0] = value[31..24]; */ { - unsigned long hi = swap16(value >> 16); - unsigned long lo = swap16(value & 0xffff); - return (lo << 16) | hi; + unsigned int tmp; + + asm volatile ( + "eor %1, %0, %0, ror #16 \n\t" + "bic %1, %1, #0xff0000 \n\t" + "mov %0, %0, ror #8 \n\t" + "eor %0, %0, %1, lsr #8 \n\t" + : "+r" (value), "=r" (tmp) + ); + return value; } -- cgit v1.1