Module Name: src Committed By: matt Date: Mon Aug 19 02:36:27 UTC 2013
Modified Files: src/common/lib/libc/arch/arm/string: strrchr_naive.S Log Message: Thumbify To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/arch/arm/string/strrchr_naive.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/string/strrchr_naive.S diff -u src/common/lib/libc/arch/arm/string/strrchr_naive.S:1.2 src/common/lib/libc/arch/arm/string/strrchr_naive.S:1.3 --- src/common/lib/libc/arch/arm/string/strrchr_naive.S:1.2 Mon Aug 19 02:24:09 2013 +++ src/common/lib/libc/arch/arm/string/strrchr_naive.S Mon Aug 19 02:36:27 2013 @@ -28,17 +28,33 @@ */ #include <machine/asm.h> -RCSID("$NetBSD: strrchr_naive.S,v 1.2 2013/08/19 02:24:09 matt Exp $") +RCSID("$NetBSD: strrchr_naive.S,v 1.3 2013/08/19 02:36:27 matt Exp $") /* LINTSTUB: char * strrchr(const char *, int) */ ENTRY(strrchr) mov r2, r0 /* using r0 as return value */ - mov r0, #0 /* default to no match */ + movs r0, #0 /* default to no match */ +#ifdef __thumb__ + movs r3, #0xff + ands r1, r1, r3 /* restrict to a byte value */ +1: ldrb r3, [r2] /* read a byte */ + cmp r3, r1 /* does it match? */ + bne 2f /* no, go and advance */ + mov r0, r2 /* yes, set return value to point to it */ +2: adds r2, r2, #1 /* advance to next byte */ +#ifdef _ARM_ARCH_T2 + cbnz r3, 1b /* was it a NUL? no, get next byte */ +#else + cmp r3, #0 /* was it a NUL? */ + bne 1b /* no, get next byte */ +#endif +#else and r1, r1, #0xff /* restrict to a byte value */ 1: ldrb r3, [r2], #1 /* read a byte */ cmp r3, r1 /* does it match? */ subeq r0, r2, #1 /* yes, set return value to point to it */ cmp r3, #0 /* was it a NUL? */ bne 1b /* no, get next byte */ +#endif RET END(strrchr)