summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2005-05-24 21:43:16 +0000
committercognet <cognet@FreeBSD.org>2005-05-24 21:43:16 +0000
commit6f02d3277d8d18208c83c27cc056232358992ac8 (patch)
tree4544ed0a00147e364736c6c4577032df910687da /sys
parent7001627d7dedbce03ba2c066c62efaf50565750a (diff)
downloadFreeBSD-src-6f02d3277d8d18208c83c27cc056232358992ac8.zip
FreeBSD-src-6f02d3277d8d18208c83c27cc056232358992ac8.tar.gz
Asm version of bswap16().
Obtained from: NetBSD
Diffstat (limited to 'sys')
-rw-r--r--sys/arm/include/endian.h11
1 files changed, 6 insertions, 5 deletions
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"
OpenPOWER on IntegriCloud