Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc
[linux-2.6] / arch / sparc / lib / memcmp.S
1         .text
2         .align 4
3         .global __memcmp, memcmp
4 __memcmp:
5 memcmp:
6 #if 1
7         cmp     %o2, 0
8         ble     L3
9          mov    0, %g3
10 L5:
11         ldub    [%o0], %g2
12         ldub    [%o1], %g3
13         sub     %g2, %g3, %g2
14         mov     %g2, %g3
15         sll     %g2, 24, %g2
16
17         cmp     %g2, 0
18         bne     L3
19          add    %o0, 1, %o0
20
21         add     %o2, -1, %o2
22
23         cmp     %o2, 0
24         bg      L5
25          add    %o1, 1, %o1
26 L3:
27         sll     %g3, 24, %o0
28         sra     %o0, 24, %o0
29
30         retl
31          nop
32 #else
33         save    %sp, -104, %sp
34         mov     %i2, %o4
35         mov     %i0, %o0
36
37         cmp     %o4, 15
38         ble     L72
39          mov    %i1, %i2
40
41         andcc   %i2, 3, %g0
42         be      L161
43          andcc  %o0, 3, %g2
44 L75:
45         ldub    [%o0], %g3
46         ldub    [%i2], %g2
47         add     %o0,1, %o0
48
49         subcc   %g3, %g2, %i0
50         bne     L156
51          add    %i2, 1, %i2
52
53         andcc   %i2, 3, %g0
54         bne     L75
55          add    %o4, -1, %o4
56
57         andcc   %o0, 3, %g2
58 L161:
59         bne,a   L78
60          mov    %i2, %i1
61
62         mov     %o0, %i5
63         mov     %i2, %i3
64         srl     %o4, 2, %i4
65
66         cmp     %i4, 0
67         bge     L93
68          mov    %i4, %g2
69
70         add %i4, 3, %g2
71 L93:
72         sra     %g2, 2, %g2
73         sll     %g2, 2, %g2
74         sub     %i4, %g2, %g2
75
76         cmp     %g2, 1
77         be,a    L88
78          add    %o0, 4, %i5
79
80         bg      L94
81          cmp    %g2, 2
82
83         cmp     %g2, 0
84         be,a    L86
85          ld     [%o0], %g3
86
87         b       L162
88          ld     [%i5], %g3
89 L94:
90         be      L81
91          cmp    %g2, 3
92
93         be,a    L83
94          add    %o0, -4, %i5
95
96         b       L162
97          ld     [%i5], %g3
98 L81:
99         add     %o0, -8, %i5
100         ld      [%o0], %g3
101         add     %i2, -8, %i3
102         ld      [%i2], %g2
103
104         b       L82
105          add    %i4, 2, %i4
106 L83:
107         ld      [%o0], %g4
108         add     %i2, -4, %i3
109         ld      [%i2], %g1
110
111         b       L84
112          add    %i4, 1, %i4
113 L86:
114         b       L87
115          ld     [%i2], %g2
116 L88:
117         add     %i2, 4, %i3
118         ld      [%o0], %g4
119         add     %i4, -1, %i4
120         ld      [%i2], %g1
121 L95:
122         ld      [%i5], %g3
123 L162:
124         cmp     %g4, %g1
125         be      L87
126          ld     [%i3], %g2
127
128         cmp     %g4, %g1
129 L163:
130         bleu    L114
131          mov    -1, %i0
132
133         b       L114
134          mov    1, %i0
135 L87:
136         ld      [%i5 + 4], %g4
137         cmp     %g3, %g2
138         bne     L163
139          ld     [%i3 + 4], %g1
140 L84:
141         ld      [%i5 + 8], %g3
142
143         cmp     %g4, %g1
144         bne     L163
145          ld     [%i3 + 8], %g2
146 L82:
147         ld      [%i5 + 12], %g4
148         cmp     %g3, %g2
149         bne     L163
150          ld     [%i3 + 12], %g1
151
152         add     %i5, 16, %i5
153
154         addcc   %i4, -4, %i4
155         bne     L95
156          add    %i3, 16, %i3
157
158         cmp     %g4, %g1
159         bne     L163
160          nop
161
162         b       L114
163          mov    0, %i0
164 L78:
165         srl     %o4, 2, %i0
166         and     %o0, -4, %i3
167         orcc    %i0, %g0, %g3
168         sll     %g2, 3, %o7
169         mov     32, %g2
170
171         bge     L129
172          sub    %g2, %o7, %o1
173
174         add     %i0, 3, %g3
175 L129:
176         sra     %g3, 2, %g2
177         sll     %g2, 2, %g2
178         sub     %i0, %g2, %g2
179
180         cmp     %g2, 1
181         be,a    L124
182          ld     [%i3], %o3
183
184         bg      L130
185          cmp    %g2, 2
186
187         cmp     %g2, 0
188         be,a    L122
189          ld     [%i3], %o2
190
191         b       L164
192         sll     %o3, %o7, %g3
193 L130:
194         be      L117
195          cmp    %g2, 3
196
197         be,a    L119
198          ld     [%i3], %g1
199
200         b       L164
201          sll    %o3, %o7, %g3
202 L117:
203         ld      [%i3], %g4
204         add     %i2, -8, %i1
205         ld      [%i3 + 4], %o3
206         add     %i0, 2, %i0
207         ld      [%i2], %i4
208
209         b       L118
210          add    %i3, -4, %i3
211 L119:
212         ld      [%i3 + 4], %g4
213         add     %i2, -4, %i1
214         ld      [%i2], %i5
215
216         b       L120
217          add    %i0, 1, %i0
218 L122:
219         ld      [%i3 + 4], %g1
220         ld      [%i2], %i4
221
222         b       L123
223          add    %i3, 4, %i3
224 L124:
225         add     %i2, 4, %i1
226         ld      [%i3 + 4], %o2
227         add     %i0, -1, %i0
228         ld      [%i2], %i5
229         add     %i3, 8, %i3
230 L131:
231         sll     %o3, %o7, %g3
232 L164:
233         srl     %o2, %o1, %g2
234         ld      [%i3], %g1
235         or      %g3, %g2, %g3
236
237         cmp     %g3, %i5
238         bne     L163
239          ld     [%i1], %i4
240 L123:
241         sll     %o2, %o7, %g3
242         srl     %g1, %o1, %g2
243         ld      [%i3 + 4], %g4
244         or      %g3, %g2, %g3
245
246         cmp     %g3, %i4
247         bne     L163
248          ld     [%i1 + 4], %i5
249 L120:
250         sll     %g1, %o7, %g3
251         srl     %g4, %o1, %g2
252         ld      [%i3 + 8], %o3
253         or      %g3, %g2, %g3
254
255         cmp     %g3, %i5
256         bne     L163
257          ld     [%i1 + 8], %i4
258 L118:
259         sll     %g4, %o7, %g3
260         srl     %o3, %o1, %g2
261         ld      [%i3 + 12], %o2
262         or      %g3, %g2, %g3
263
264         cmp     %g3, %i4
265         bne     L163
266          ld     [%i1 + 12], %i5
267
268         add     %i3, 16, %i3
269         addcc   %i0, -4, %i0
270         bne     L131
271          add    %i1, 16, %i1
272
273         sll     %o3, %o7, %g3
274         srl     %o2, %o1, %g2
275         or      %g3, %g2, %g3
276
277         cmp     %g3, %i5
278         be,a    L114
279          mov    0, %i0
280
281         b,a L163
282 L114:
283         cmp     %i0, 0
284         bne     L156
285          and    %o4, -4, %g2
286
287         add     %o0, %g2, %o0
288         add     %i2, %g2, %i2
289         and     %o4, 3, %o4
290 L72:
291         cmp     %o4, 0
292         be      L156
293          mov    0, %i0
294
295         ldub    [%o0], %g3
296 L165:
297         ldub    [%i2], %g2
298         add     %o0, 1, %o0
299
300         subcc   %g3, %g2, %i0
301         bne     L156
302          add    %i2, 1, %i2
303
304         addcc   %o4, -1, %o4
305         bne,a   L165
306          ldub   [%o0], %g3
307
308         mov     0, %i0
309 L156:
310         ret
311         restore
312 #endif