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/string Thumbify



details:   https://anonhg.NetBSD.org/src/rev/818713148e4c
branches:  trunk
changeset: 789433:818713148e4c
user:      matt <matt%NetBSD.org@localhost>
date:      Mon Aug 19 02:13:13 2013 +0000

description:
Thumbify

diffstat:

 common/lib/libc/arch/arm/string/strlen_naive.S |  17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diffs (44 lines):

diff -r a94fd70136b6 -r 818713148e4c common/lib/libc/arch/arm/string/strlen_naive.S
--- a/common/lib/libc/arch/arm/string/strlen_naive.S    Mon Aug 19 02:11:03 2013 +0000
+++ b/common/lib/libc/arch/arm/string/strlen_naive.S    Mon Aug 19 02:13:13 2013 +0000
@@ -28,16 +28,26 @@
  */
 #include <machine/asm.h>
 
-RCSID("$NetBSD: strlen_naive.S,v 1.6 2013/08/19 02:11:03 matt Exp $")
+RCSID("$NetBSD: strlen_naive.S,v 1.7 2013/08/19 02:13:13 matt Exp $")
 
 #ifdef STRNLEN
 /* LINTSTUB: size_t strnlen(const char *, size_t) */
 ENTRY(strnlen)
        adds    r3, r0, #1      /* start of src + NUL */
+#ifdef __thumb__
+       adds    r2, r0, r1      /* &src[maxlen] */
+       mov     ip, r2
+#else
        adds    ip, r0, r1      /* &src[maxlen] */
+#endif
 1:     cmp     r0, ip          /* is this of string? */
        beq     2f              /*   yes it is */
+#ifdef __thumb__
+       ldrb    r2, [r0]        /* read a byte */
+       adds    r0, r0, #1      /* advance to next byte */
+#else
        ldrb    r2, [r0], #1    /* read a byte */
+#endif
        cmp     r2, #0          /* is it a NUL? */
        bne     1b              /*   no, get next byte */
        subs    r0, r0, r3      /* get difference between start and end */
@@ -50,7 +60,12 @@
 ENTRY(strlen)
        adds    r2, r0, #1      /* start of src + NUL */
 1:
+#ifdef __thumb__
+       ldrb    r3, [r0]        /* read a byte */
+       adds    r0, r0, #1
+#else
        ldrb    r3, [r0], #1    /* read a byte */
+#endif
        cmp     r3, #0          /* is it a NUL? */
        bne     1b              /*   no, get next byte */
        subs    r0, r0, r2      /* return difference between start and end */



Home | Main Index | Thread Index | Old Index