Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature-vt/sys/src/libc/mips/strcpy.s – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
TEXT	strcpy(SB), $0
2
 
3
	MOVW	s2+4(FP),R2		/* R2 is from pointer */
4
	MOVW	R1, R3			/* R3 is to pointer */
5
 
6
/*
7
 * align 'from' pointer
8
 */
9
l1:
10
	AND	$3, R2, R5
11
	ADDU	$1, R2
12
	BEQ	R5, l2
13
	MOVB	-1(R2), R5
14
	ADDU	$1, R3
15
	MOVB	R5, -1(R3)
16
	BNE	R5, l1
17
	RET
18
 
19
/*
20
 * test if 'to' is also alligned
21
 */
22
l2:
23
	AND	$3,R3, R5
24
	BEQ	R5, l4
25
 
26
/*
27
 * copy 4 at a time, 'to' not aligned
28
 */
29
l3:
30
	MOVW	-1(R2), R4
31
	ADD	$4, R2
32
	ADD	$4, R3
33
	SRL	$24,R4, R5
34
	MOVB	R5, -4(R3)
35
	BEQ	R5, out
36
 
37
	SRL	$16,R4, R5
38
	AND	$0xff, R5
39
	MOVB	R5, -3(R3)
40
	BEQ	R5, out
41
 
42
	SRL	$8,R4, R5
43
	AND	$0xff, R5
44
	MOVB	R5, -2(R3)
45
	BEQ	R5, out
46
 
47
	AND	$0xff,R4, R5
48
	MOVB	R5, -1(R3)
49
	BNE	R5, l3
50
 
51
out:
52
	RET
53
 
54
/*
55
 * word at a time both aligned
56
 */
57
l4:
58
	MOVW	$0xff000000, R7
59
	MOVW	$0x00ff0000, R8
60
 
61
l5:
62
	ADDU	$4, R3
63
	MOVW	-1(R2), R4	/* fetch */
64
 
65
	ADDU	$4, R2
66
	AND	R7,R4, R5	/* is it byte 0 */
67
	AND	R8,R4, R6	/* is it byte 1 */
68
	BEQ	R5, b0
69
 
70
	AND	$0xff00,R4, R5	/* is it byte 2 */
71
	BEQ	R6, b1
72
 
73
	AND	$0xff,R4, R6	/* is it byte 3 */
74
	BEQ	R5, b2
75
 
76
	MOVW	R4, -4(R3)	/* store */
77
	BNE	R6, l5
78
	JMP	out
79
 
80
b0:
81
	MOVB	$0, -4(R3)
82
	JMP	out
83
 
84
b1:
85
	SRL	$24, R4
86
	MOVB	R4, -4(R3)
87
	MOVB	$0, -3(R3)
88
	JMP	out
89
 
90
b2:
91
	SRL	$24,R4, R5
92
	MOVB	R5, -4(R3)
93
	SRL	$16, R4
94
	MOVB	R4, -3(R3)
95
	MOVB	$0, -2(R3)
96
	JMP	out