Subversion Repositories planix.SVN

Rev

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

Rev Author Line No. Line
2 - 1
TEXT strcpy(SB), $0
2
	MOVW		R0, to+0(FP)	/* need to save for return value */
3
	MOVW		from+4(FP), R1
4
	MOVW		$0xFF, R2	/* mask */
5
 
6
salign:					/* align source on 4 */
7
	AND.S		$3, R1, R3
8
	BEQ		dalign
9
	MOVBU.P		1(R1), R3	/* implicit write back */
10
	TST		R3, R2
11
	MOVBU.P		R3, 1(R0)	/* implicit write back */
12
	BNE		salign
13
	B		return
14
 
15
dalign:				/* is destination now aligned? */
16
	AND.S		$3, R0, R3
17
	BNE		uloop
18
 
19
aloop:
20
	MOVW.P		4(R1), R4	/* read 4, write 4 */
21
	TST		R4, R2		/* AND.S R3, R2, Rx */
22
	TST.NE		R4>>8, R2
23
	TST.NE		R4>>16, R2
24
	TST.NE		R4>>24, R2
25
	BEQ		tail
26
	MOVW.P		R4, 4(R0)
27
	B		aloop
28
 
29
uloop:
30
	MOVW.P		4(R1), R4	/* read 4, write 1,1,1,1 */
31
 
32
tail:
33
	AND.S		R4, R2, R3
34
	MOVBU.NE.P	R3, 1(R0)
35
	AND.NE.S	R4>>8, R2, R3
36
	MOVBU.NE.P	R3, 1(R0)
37
	AND.NE.S	R4>>16, R2, R3
38
	MOVBU.NE.P	R3, 1(R0)
39
	AND.NE.S	R4>>24, R2, R3
40
	MOVBU.P		R3, 1(R0)
41
	BNE		uloop
42
	B		return
43
 
44
return:
45
	MOVW		to+0(FP), R0
46
	RET