34 lines
		
	
	
	
		
			632 B
			
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
	
		
			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 |