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	memcmp(SB), $0
2
MOVW R1, 0(FP)
3
 
4
/*
5
 * performance:
6
 *	alligned about 1.0us/call and 17.4mb/sec
7
 *	unalligned is about 3.1mb/sec
8
 */
9
 
10
	MOVW	n+8(FP), R3		/* R3 is count */
11
	MOVW	s1+0(FP), R4		/* R4 is pointer1 */
12
	MOVW	s2+4(FP), R5		/* R5 is pointer2 */
13
	ADDU	R3,R4, R6		/* R6 is end pointer1 */
14
 
15
/*
16
 * if not at least 4 chars,
17
 * dont even mess around.
18
 * 3 chars to guarantee any
19
 * rounding up to a word
20
 * boundary and 4 characters
21
 * to get at least maybe one
22
 * full word cmp.
23
 */
24
	SGT	$4,R3, R1
25
	BNE	R1, out
26
 
27
/*
28
 * test if both pointers
29
 * are similarly word alligned
30
 */
31
	XOR	R4,R5, R1
32
	AND	$3, R1
33
	BNE	R1, out
34
 
35
/*
36
 * byte at a time to word allign
37
 */
38
l1:
39
	AND	$3,R4, R1
40
	BEQ	R1, l2
41
	MOVBU	0(R4), R8
42
	MOVBU	0(R5), R9
43
	ADDU	$1, R4
44
	BNE	R8,R9, ne
45
	ADDU	$1, R5
46
	JMP	l1
47
 
48
/*
49
 * turn R3 into end pointer1-15
50
 * cmp 16 at a time while theres room
51
 */
52
l2:
53
	ADDU	$-15,R6, R3
54
l3:
55
	SGTU	R3,R4, R1
56
	BEQ	R1, l4
57
	MOVW	0(R4), R8
58
	MOVW	0(R5), R9
59
	MOVW	4(R4), R10
60
	BNE	R8,R9, ne
61
	MOVW	4(R5), R11
62
	MOVW	8(R4), R8
63
	BNE	R10,R11, ne1
64
	MOVW	8(R5), R9
65
	MOVW	12(R4), R10
66
	BNE	R8,R9, ne
67
	MOVW	12(R5), R11
68
	ADDU	$16, R4
69
	BNE	R10,R11, ne1
70
	BNE	R8,R9, ne
71
	ADDU	$16, R5
72
	JMP	l3
73
 
74
/*
75
 * turn R3 into end pointer1-3
76
 * cmp 4 at a time while theres room
77
 */
78
l4:
79
	ADDU	$-3,R6, R3
80
l5:
81
	SGTU	R3,R4, R1
82
	BEQ	R1, out
83
	MOVW	0(R4), R8
84
	MOVW	0(R5), R9
85
	ADDU	$4, R4
86
	BNE	R8,R9, ne	/* only works because big endian */
87
	ADDU	$4, R5
88
	JMP	l5
89
 
90
/*
91
 * last loop, cmp byte at a time
92
 */
93
out:
94
	SGTU	R6,R4, R1
95
	BEQ	R1, ret
96
	MOVBU	0(R4), R8
97
	MOVBU	0(R5), R9
98
	ADDU	$1, R4
99
	BNE	R8,R9, ne
100
	ADDU	$1, R5
101
	JMP	out
102
 
103
ne1:
104
	SGTU	R10,R11, R1
105
	BNE	R1, ret
106
	MOVW	$-1,R1
107
	RET
108
ne:
109
	SGTU	R8,R9, R1
110
	BNE	R1, ret
111
	MOVW	$-1,R1
112
ret:
113
	RET
114
	END