strlen.s

来自「用于嵌入式Linux系统的标准C的库函数」· S 代码 · 共 88 行

S
88
字号
! Entry: arg0: string start address! Exit:  result: length!! Copyright 2002 SuperH Ltd.#include "asm.h"ENTRY(strlen)#if __SHMEDIA__	ldlo.q r2,0,r3	ptabs/l r18,tr0	pta/l loop,tr1	andi r2,-8,r0	shlli r2,3,r1	mcmpeq.b r3,r63,r3	SHHI r3,r1,r4	beqi/u r4,0,tr1 // loop#ifdef __LITTLE_ENDIAN__	movi -1,r2	addi r3,-1,r4	msad.ubq r3,r4,r2#else	shlri r3,1,r3	nsb r3,r3	shlri r3,3,r2#endif	blink tr0,r63loop:	ldlo.q r0,8,r3	addi r0,8,r0	ldlo.q r0,8,r63	mcmpeq.b r3,r63,r3	beqi/l r3,0,tr1 // loop	sub r0,r2,r2#ifdef __LITTLE_ENDIAN__	addi r3,-1,r4	addi r2,-1,r2	msad.ubq r3,r4,r2#else	shlri r3,1,r3	nsb r3,r3	shlri r3,3,r3	add r2,r3,r2#endif	blink tr0,r63#else /* ! __SHMEDIA__, i.e. SH 1..4 / SHcompact */#ifdef __SH5__#define STR_INIT r2#define STR_ORIG r0#define STR_COPY STR_ORIG#define MASK r1#define TMP r3#define RESULT r2!        r0,r1,r3: clobbered#else#define STR_INIT r4#define STR_ORIG STR_INIT#define STR_COPY STR#define MASK r1#define TMP r3#define RESULT r0!        r1,r3: clobbered#endif#define STR RESULT	mov #3,MASK	and STR_INIT,MASK	tst MASK,MASK	SL(bf, L_char_loop, mov STR_INIT, STR_COPY)L_word_loop:	mov.l @STR+,TMP	cmp/str MASK,TMP	bf L_word_loop	add #-4,STRL_char_loop:	mov.b @STR+,TMP	tst TMP,TMP	bf L_char_loop	add #-1,STR	rts	sub STR_ORIG,STR#endif /* ! __SHMEDIA__ */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?