Module Name: src Committed By: matt Date: Mon Aug 19 03:44:47 UTC 2013
Modified Files: src/common/lib/libc/arch/arm/gen: byte_swap_4.S Log Message: Add thumb version Use STRONG_ALIAS To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/arch/arm/gen/byte_swap_4.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/common/lib/libc/arch/arm/gen/byte_swap_4.S diff -u src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.6 src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.7 --- src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.6 Wed Jan 16 21:48:56 2013 +++ src/common/lib/libc/arch/arm/gen/byte_swap_4.S Mon Aug 19 03:44:47 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: byte_swap_4.S,v 1.6 2013/01/16 21:48:56 matt Exp $ */ +/* $NetBSD: byte_swap_4.S,v 1.7 2013/08/19 03:44:47 matt Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -32,21 +32,34 @@ #include <machine/asm.h> #if defined(_KERNEL) || defined(_STANDALONE) -_ENTRY(_C_LABEL(bswap32)) +#define FUNC _C_LABEL(bswap32) #else -_ENTRY(_C_LABEL(__bswap32)) +#define FUNC _C_LABEL(__bswap32) #endif -#if BYTE_ORDER == LITTLE_ENDIAN -_ENTRY(_C_LABEL(ntohl)) -_ENTRY(_C_LABEL(htonl)) -#endif -_PROF_PROLOGUE +ENTRY(FUNC) #ifdef _ARM_ARCH_6 rev r0, r0 -#else +#elif !defined(__thumb__) eor r1, r0, r0, ror #16 /* 4.3.2.1 -> 42.31.42.31 */ bic r1, r1, #0x00FF0000 /* 42.31.42.31 -> 42.0.42.31 */ mov r0, r0, ror #8 /* 4.3.2.1 -> 1.4.3.2 */ eor r0, r0, r1, lsr #8 /* 1.4.3.2 ^ 0.42.0.42 -> 1.2.3.4 */ +#else + movs r3, #16 + lsls r1, r0, #8 /* 4.3.2.1 -> 3.2.1.0 /* + lsrs r0, r0, #8 /* 4.3.2.1 -> 0.4.3.2 */ + rors r1, r3 /* 3.2.1.0 -> 1.0.3.2 */ + rors r0, r3 /* 0.4.3.2 -> 3.2.0.4 */ + lsrs r1, r1, #8 /* 1.0.3.2 -> 0.1.0.3 */ + lsls r1, r1, #8 /* 0.1.0.3 -> 1.0.3.0 */ + lsls r0, r0, #8 /* 3.2.0.4 -> 2.0.4.0 */ + lsrs r0, r0, #8 /* 2.0.4.0 -> 0.2.0.4 */ + orrs r0, r0, r1 /* 1.0.3.0 | 0.2.0.4 -> 1.2.3.4 */ #endif RET +END(FUNC) + +#if BYTE_ORDER == LITTLE_ENDIAN +STRONG_ALIAS(_C_LABEL(ntohl), FUNC) +STRONG_ALIAS(_C_LABEL(htonl), FUNC) +#endif