memset.s

来自「KPIT GNU Tools is a set of GNU developme」· S 代码 · 共 103 行

S
103
字号
#include "setarch.h"#include "defines.h"#if defined (__H8300SX__)	.global	_memset_memset:	; Use er3 is a temporary since er0 must remain unchanged on exit.	mov.l	er0,er3	; Fill er1 with the byte to copy.	mov.b	r1l,r1h	mov.w	r1,e1	; Account for any excess bytes and words that will be copied after	; the main loop.  r2 >= 0 if there is a longword to copy.	sub	#4,LEN(r2)	blo	longs_done	; Copy one byte if doing so will make er3 word-aligned.	; This isn't needed for correctness but it makes the main loop	; slightly faster.	bld	#0,r3l	bcc	word_aligned	mov.b	r1l,@er3+	sub	#1,LEN(r2)	blo	longs_doneword_aligned:	; Likewise one word for longword alignment.	bld	#1,r3l	bcc	long_copy	mov.w	r1,@er3+	sub	#2,LEN(r2)	blo	longs_donelong_copy:	; Copy longwords.	mov.l	er1,@er3+	sub	#4,LEN(r2)	bhs	long_copylongs_done:	; At this point, we need to copy r2 & 3 bytes.  Copy a word	; if necessary.	bld	#1,r2l	bcc	words_done	mov.w	r1,@er3+words_done:	; Copy a byte.	bld	#0,r2l	bcc	bytes_done	mov.b	r1l,@er3+bytes_done:	rts#else; A0P pointer to cursor; A1P thing to copy	.global	_memset_memset:;	MOVP	@(2/4,r7),A2P	; dst;	MOVP	@(4/8,r7),A1	; src thing;	MOVP	@(6/12,r7),A3P	; len	MOVP	A2P,A2P	beq	quit	; A3 points to the end of the area	MOVP	A0P,A3P	ADDP	A2P,A3P	; see if we can do it in words	; by oring in the start of the buffer to the end address	or	A0L,A2L	btst	#0,A2L	bne	byteloop		; we can do it a word at a time	mov.b	A1L,A1H	wordloop:	mov.w	A1,@-A3P	CMPP	A3P,A0P	bne	wordloopquit:	rts	byteloop:	mov.b	A1L,@-A3P	CMPP	A3P,A0P	bne	byteloop	rts#endif

⌨️ 快捷键说明

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