diff options
author | Paul Mundt <lethal@linux-sh.org> | 2008-12-12 02:34:44 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2008-12-22 04:44:05 -0500 |
commit | 4466b20cfcfa718ff515b9e3886749cc025e2005 (patch) | |
tree | f12402e006de74df252dff03d455af0a9e2bfa0b /arch/sh/lib64/strlen.S | |
parent | 776d6c298aad42c2b8f191fa9ad826075e4d588c (diff) |
sh: Add SH-5 optimized memcpy()/memset()/strcpy()/strlen().
Adopted from the uClibc optimized string versions.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
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 | ||