Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/common/lib/libc/arch/arm/gen Add thumb version



details:   https://anonhg.NetBSD.org/src/rev/81a981da1606
branches:  trunk
changeset: 789445:81a981da1606
user:      matt <matt%NetBSD.org@localhost>
date:      Mon Aug 19 03:44:47 2013 +0000

description:
Add thumb version
Use STRONG_ALIAS

diffstat:

 common/lib/libc/arch/arm/gen/byte_swap_4.S |  31 +++++++++++++++++++++--------
 1 files changed, 22 insertions(+), 9 deletions(-)

diffs (52 lines):

diff -r 576fde4ee9c8 -r 81a981da1606 common/lib/libc/arch/arm/gen/byte_swap_4.S
--- a/common/lib/libc/arch/arm/gen/byte_swap_4.S        Mon Aug 19 03:44:18 2013 +0000
+++ b/common/lib/libc/arch/arm/gen/byte_swap_4.S        Mon Aug 19 03:44:47 2013 +0000
@@ -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



Home | Main Index | Thread Index | Old Index