34 строки
632 B
ArmAsm
34 строки
632 B
ArmAsm
|
/*
|
||
|
* Simplistic strlen() implementation for SHmedia.
|
||
|
*
|
||
|
* Copyright (C) 2003 Paul Mundt <lethal@linux-sh.org>
|
||
|
*/
|
||
|
|
||
|
.section .text..SHmedia32,"ax"
|
||
|
.globl strlen
|
||
|
.type strlen,@function
|
||
|
|
||
|
.balign 16
|
||
|
strlen:
|
||
|
ptabs r18, tr4
|
||
|
|
||
|
/*
|
||
|
* Note: We could easily deal with the NULL case here with a simple
|
||
|
* sanity check, though it seems that the behavior we want is to fault
|
||
|
* in the event that r2 == NULL, so we don't bother.
|
||
|
*/
|
||
|
/* beqi r2, 0, tr4 */ ! Sanity check
|
||
|
|
||
|
movi -1, r0
|
||
|
pta/l loop, tr0
|
||
|
loop:
|
||
|
ld.b r2, 0, r1
|
||
|
addi r2, 1, r2
|
||
|
addi r0, 1, r0
|
||
|
bnei/l r1, 0, tr0
|
||
|
|
||
|
or r0, r63, r2
|
||
|
blink tr4, r63
|
||
|
|
||
|
.size strlen,.-strlen
|