| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | /* $Id: strlen.S,v 1.2 2001/06/29 14:07:15 gniibe Exp $ * * "strlen" implementation of SuperH * * Copyright (C) 1999  Kaz Kojima * * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. *//* size_t strlen (const char *s)  */#include <sysdep.h>#include <endian.h>ENTRY(strlen)	mov	r4,r0	and	#3,r0	tst	r0,r0	bt/s	1f	 mov	#0,r2	add	#-1,r0	shll2	r0	shll	r0	braf	r0	 nop	mov.b	@r4+,r1	tst	r1,r1	bt	8f	add	#1,r2	mov.b	@r4+,r1	tst	r1,r1	bt	8f	add	#1,r2	mov.b	@r4+,r1	tst	r1,r1	bt	8f	add	#1,r21:	mov	#0,r32:	mov.l	@r4+,r1	cmp/str	r3,r1	bf/s	2b	 add	#4,r2	add	#-4,r2#ifndef __LITTLE_ENDIAN__	swap.b	r1,r1	swap.w	r1,r1	swap.b	r1,r1#endif	extu.b	r1,r0	tst	r0,r0	bt/s	8f	 shlr8	r1	add	#1,r2	extu.b	r1,r0	tst	r0,r0	bt/s	8f	 shlr8	r1	add	#1,r2	extu.b	r1,r0	tst	r0,r0	bt	8f	add	#1,r28:	rts	 mov	r2,r0END(strlen)libc_hidden_def (strlen)
 |