Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
TO = 1
2
TOE = 2
3
N = 3
4
TMP = 3					/* N and TMP don't overlap */
5
 
6
TEXT memset(SB), $0
7
	MOVW	R0, R(TO)
8
	MOVW	data+4(FP), R(4)
9
	MOVW	n+8(FP), R(N)
10
 
11
	ADD	R(N), R(TO), R(TOE)	/* to end pointer */
12
 
13
	CMP	$4, R(N)		/* need at least 4 bytes to copy */
14
	BLT	_1tail
15
 
16
	AND	$0xFF, R(4)
17
	ORR	R(4)<<8, R(4)
18
	ORR	R(4)<<16, R(4)		/* replicate to word */
19
 
20
_4align:				/* align on 4 */
21
	AND.S	$3, R(TO), R(TMP)
22
	BEQ	_4aligned
23
 
24
	MOVBU.P	R(4), 1(R(TO))		/* implicit write back */
25
	B	_4align
26
 
27
_4aligned:
28
	SUB	$15, R(TOE), R(TMP)	/* do 16-byte chunks if possible */
29
	CMP	R(TMP), R(TO)
30
	BHS	_4tail
31
 
32
	MOVW	R4, R5			/* replicate */
33
	MOVW	R4, R6
34
	MOVW	R4, R7
35
 
36
_f16loop:
37
	CMP	R(TMP), R(TO)
38
	BHS	_4tail
39
 
40
	MOVM.IA.W [R4-R7], (R(TO))
41
	B	_f16loop
42
 
43
_4tail:
44
	SUB	$3, R(TOE), R(TMP)	/* do remaining words if possible */
45
_4loop:
46
	CMP	R(TMP), R(TO)
47
	BHS	_1tail
48
 
49
	MOVW.P	R(4), 4(R(TO))		/* implicit write back */
50
	B	_4loop
51
 
52
_1tail:
53
	CMP	R(TO), R(TOE)
54
	BEQ	_return
55
 
56
	MOVBU.P	R(4), 1(R(TO))		/* implicit write back */
57
	B	_1tail
58
 
59
_return:
60
	RET