1
2
3
4 #include <linux/linkage.h>
5 #include "sysdep.h"
6
7 ENTRY(strcmp)
8 mov a3, a0
9
10 xor a2, a3, a1
11 andi a2, 0x3
12 bnez a2, 7f
13 andi t1, a0, 0x3
14 bnez t1, 5f
15
16 1:
17
18 ldw t0, (a3, 0)
19 ldw t1, (a1, 0)
20
21 cmpne t0, t1
22 bt 2f
23
24 tstnbz t0
25
26 bf 3f
27
28 ldw t0, (a3, 4)
29 ldw t1, (a1, 4)
30 cmpne t0, t1
31 bt 2f
32 tstnbz t0
33 bf 3f
34
35 ldw t0, (a3, 8)
36 ldw t1, (a1, 8)
37 cmpne t0, t1
38 bt 2f
39 tstnbz t0
40 bf 3f
41
42 ldw t0, (a3, 12)
43 ldw t1, (a1, 12)
44 cmpne t0, t1
45 bt 2f
46 tstnbz t0
47 bf 3f
48
49 ldw t0, (a3, 16)
50 ldw t1, (a1, 16)
51 cmpne t0, t1
52 bt 2f
53 tstnbz t0
54 bf 3f
55
56 ldw t0, (a3, 20)
57 ldw t1, (a1, 20)
58 cmpne t0, t1
59 bt 2f
60 tstnbz t0
61 bf 3f
62
63 ldw t0, (a3, 24)
64 ldw t1, (a1, 24)
65 cmpne t0, t1
66 bt 2f
67 tstnbz t0
68 bf 3f
69
70 ldw t0, (a3, 28)
71 ldw t1, (a1, 28)
72 cmpne t0, t1
73 bt 2f
74 tstnbz t0
75 bf 3f
76
77 addi a3, 32
78 addi a1, 32
79
80 br 1b
81
82 # ifdef __CSKYBE__
83
84 2:
85 xtrb0 a0, t0
86 xtrb0 a2, t1
87 subu a0, a2
88 bez a2, 4f
89 bnez a0, 4f
90
91
92 xtrb1 a0, t0
93 xtrb1 a2, t1
94 subu a0, a2
95 bez a2, 4f
96 bnez a0, 4f
97
98
99 xtrb2 a0, t0
100 xtrb2 a2, t1
101 subu a0, a2
102 bez a2, 4f
103 bnez a0, 4f
104
105
106 xtrb3 a0, t0
107 xtrb3 a2, t1
108 subu a0, a2
109 # else
110
111 2:
112 xtrb3 a0, t0
113 xtrb3 a2, t1
114 subu a0, a2
115 bez a2, 4f
116 bnez a0, 4f
117
118
119 xtrb2 a0, t0
120 xtrb2 a2, t1
121 subu a0, a2
122 bez a2, 4f
123 bnez a0, 4f
124
125
126 xtrb1 a0, t0
127 xtrb1 a2, t1
128 subu a0, a2
129 bez a2, 4f
130 bnez a0, 4f
131
132
133 xtrb0 a0, t0
134 xtrb0 a2, t1
135 subu a0, a2
136
137 # endif
138 jmp lr
139 3:
140 movi a0, 0
141 4:
142 jmp lr
143
144
145 5:
146 subi t1, 4
147 6:
148 ldb a0, (a3, 0)
149 ldb a2, (a1, 0)
150 subu a0, a2
151 bez a2, 4b
152 bnez a0, 4b
153 addi t1, 1
154 addi a1, 1
155 addi a3, 1
156 bnez t1, 6b
157 br 1b
158
159 7:
160 ldb a0, (a3, 0)
161 addi a3, 1
162 ldb a2, (a1, 0)
163 addi a1, 1
164 subu a0, a2
165 bnez a0, 4b
166 bnez a2, 7b
167 jmp r15
168 ENDPROC(strcmp)