diff options
Diffstat (limited to 'arch/sh/lib64/strlen.S')
-rw-r--r-- | arch/sh/lib64/strlen.S | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/sh/lib64/strlen.S b/arch/sh/lib64/strlen.S new file mode 100644 index 000000000000..cbc0d912e5f3 --- /dev/null +++ b/arch/sh/lib64/strlen.S | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * Simplistic strlen() implementation for SHmedia. | ||
3 | * | ||
4 | * Copyright (C) 2003 Paul Mundt <lethal@linux-sh.org> | ||
5 | */ | ||
6 | |||
7 | .section .text..SHmedia32,"ax" | ||
8 | .globl strlen | ||
9 | .type strlen,@function | ||
10 | |||
11 | .balign 16 | ||
12 | strlen: | ||
13 | ptabs r18, tr4 | ||
14 | |||
15 | /* | ||
16 | * Note: We could easily deal with the NULL case here with a simple | ||
17 | * sanity check, though it seems that the behavior we want is to fault | ||
18 | * in the event that r2 == NULL, so we don't bother. | ||
19 | */ | ||
20 | /* beqi r2, 0, tr4 */ ! Sanity check | ||
21 | |||
22 | movi -1, r0 | ||
23 | pta/l loop, tr0 | ||
24 | loop: | ||
25 | ld.b r2, 0, r1 | ||
26 | addi r2, 1, r2 | ||
27 | addi r0, 1, r0 | ||
28 | bnei/l r1, 0, tr0 | ||
29 | |||
30 | or r0, r63, r2 | ||
31 | blink tr4, r63 | ||
32 | |||
33 | .size strlen,.-strlen | ||