From 6f02d3277d8d18208c83c27cc056232358992ac8 Mon Sep 17 00:00:00 2001 From: cognet Date: Tue, 24 May 2005 21:43:16 +0000 Subject: Asm version of bswap16(). Obtained from: NetBSD --- sys/arm/include/endian.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'sys') diff --git a/sys/arm/include/endian.h b/sys/arm/include/endian.h index 093a570..16a3b66 100644 --- a/sys/arm/include/endian.h +++ b/sys/arm/include/endian.h @@ -87,16 +87,17 @@ __bswap32_var(__uint32_t v) { __uint32_t t1; - t1 = v ^ ((v << 16) | (v >> 16)); - t1 &= 0xff00ffffU; - v = (v >> 8) | (v << 24); - v ^= (t1 >> 8); + __asm __volatile("eor %1, %0, %0, ror #16\n" + "bic %1, %1, #0x00ff0000\n" + "mov %0, %0, ror #8\n" + "eor %0, %0, %1, lsr #8\n" + : "+r" (v), "=r" (t1)); return (v); } static __inline __uint16_t -__bswap16_var(__uint32_t v) +__bswap16_var(__uint16_t v) { __asm __volatile( "mov %0, %1, ror #8\n" -- cgit v1.1