OSDN Git Service

0f99488d5beb8fbc9c813d0d278ef088686da122
[uclinux-h8/uClibc.git] / libc / string / sh64 / strlen.S
1 /* vi: set sw=8 ts=8: */
2 /*
3  * libc/string/sh64/strlen.S
4  *
5  * Simplistic strlen() implementation for SHmedia.
6  *
7  * Copyright (C) 2003  Paul Mundt <lethal@linux-sh.org>
8  *
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. The name of the above contributors may not be
17  *    used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  */
32
33         .section .text..SHmedia32,"ax"
34         .globl  strlen
35         .set    strlen,__strlen
36         .globl  __strlen
37         .hidden __strlen
38         .type   __strlen,@function
39
40         .balign 16
41 __strlen:
42         ptabs   r18, tr4
43
44         /*
45          * Note: We could easily deal with the NULL case here with a simple
46          * sanity check, though it seems that the behavior we want is to fault
47          * in the event that r2 == NULL, so we don't bother.
48          */
49 /*      beqi    r2, 0, tr4 */   ! Sanity check
50
51         movi    -1, r0
52         pta/l   loop, tr0
53 loop:
54         ld.b    r2, 0, r1
55         addi    r2, 1, r2
56         addi    r0, 1, r0
57         bnei/l  r1, 0, tr0
58
59         or      r0, r63, r2
60         blink   tr4, r63
61
62         .size   __strlen,.-__strlen