13507a157SOlivier Houchard/*- 23507a157SOlivier Houchard * Copyright (c) 2005 Olivier Houchard 33507a157SOlivier Houchard * All rights reserved. 43507a157SOlivier Houchard * 53507a157SOlivier Houchard * Redistribution and use in source and binary forms, with or without 63507a157SOlivier Houchard * modification, are permitted provided that the following conditions 73507a157SOlivier Houchard * are met: 83507a157SOlivier Houchard * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. 93507a157SOlivier Houchard * 2. Redistributions in binary form must reproduce the above copyright 103507a157SOlivier Houchard * notice, this list of conditions and the following disclaimer in the 113507a157SOlivier Houchard * documentation and/or other materials provided with the distribution. 123507a157SOlivier Houchard * 133507a157SOlivier Houchard * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 143507a157SOlivier Houchard * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 153507a157SOlivier Houchard * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 163507a157SOlivier Houchard * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 173507a157SOlivier Houchard * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 183507a157SOlivier Houchard * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 193507a157SOlivier Houchard * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 203507a157SOlivier Houchard * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 213507a157SOlivier Houchard * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 223507a157SOlivier Houchard * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 233507a157SOlivier Houchard * SUCH DAMAGE. 243507a157SOlivier Houchard */ 253507a157SOlivier Houchard 263507a157SOlivier Houchard#include <machine/asm.h> 273507a157SOlivier Houchard__FBSDID("$FreeBSD$"); 283507a157SOlivier Houchard 293507a157SOlivier HouchardENTRY(strlen) 303507a157SOlivier Houchard mov r1, #0 313507a157SOlivier Houchard /* Check that the pointer is aligned on 32 bits. */ 323507a157SOlivier Houchard ands r3, r0, #3 333507a157SOlivier Houchard beq .Loop 343507a157SOlivier Houchard sub r0, r0, r3 353507a157SOlivier Houchard ldr r2, [r0] 363507a157SOlivier Houchard add r0, r0, #4 373507a157SOlivier Houchard cmp r3, #2 383507a157SOlivier Houchard blt .Ldo_3 393507a157SOlivier Houchard bgt .Ldo_1 403507a157SOlivier Houchard /* So that the N bit is set. */ 413507a157SOlivier Houchard cmp r3, #0 423507a157SOlivier Houchard b .Ldo_2 433507a157SOlivier Houchard 443507a157SOlivier Houchard.Loop: 453507a157SOlivier Houchard ldr r2, [r0] 463507a157SOlivier Houchard add r0, r0, #4 473507a157SOlivier Houchard#ifndef __ARMEB__ 483507a157SOlivier Houchard ands r3, r2, #0x000000ff 493507a157SOlivier Houchard#else 503507a157SOlivier Houchard ands r3, r2, #0xff000000 513507a157SOlivier Houchard#endif 523507a157SOlivier Houchard addne r1, r1, #1 533507a157SOlivier Houchard.Ldo_3: 543507a157SOlivier Houchard#ifndef __ARMEB__ 553507a157SOlivier Houchard andnes r3, r2, #0x0000ff00 563507a157SOlivier Houchard#else 573507a157SOlivier Houchard andnes r3, r2, #0x00ff0000 583507a157SOlivier Houchard#endif 593507a157SOlivier Houchard addne r1, r1, #1 603507a157SOlivier Houchard.Ldo_2: 613507a157SOlivier Houchard#ifndef __ARMEB__ 623507a157SOlivier Houchard andnes r3, r2, #0x00ff0000 633507a157SOlivier Houchard#else 643507a157SOlivier Houchard andnes r3, r2, #0x0000ff00 653507a157SOlivier Houchard#endif 663507a157SOlivier Houchard addne r1, r1, #1 673507a157SOlivier Houchard.Ldo_1: 683507a157SOlivier Houchard#ifndef __ARMEB__ 693507a157SOlivier Houchard andnes r3, r2, #0xff000000 703507a157SOlivier Houchard#else 713507a157SOlivier Houchard andnes r3, r2, #0x000000ff 723507a157SOlivier Houchard#endif 733507a157SOlivier Houchard addne r1, r1, #1 743507a157SOlivier Houchard bne .Loop 753507a157SOlivier Houchard.Lexit: 763507a157SOlivier Houchard mov r0, r1 773507a157SOlivier Houchard RET 78