1/* $Id: strncmp.S,v 1.2 1996/09/09 02:47:20 davem Exp $
2 * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
3 *            generic strncmp routine.
4 */
5
6#include <asm/cprefix.h>
7
8	.text
9	.align 4
10	.global C_LABEL(__strncmp), C_LABEL(strncmp)
11C_LABEL(__strncmp):
12C_LABEL(strncmp):
13	mov	%o0, %g3
14	mov	0, %o3
15
16	cmp	%o2, 3
17	ble	7f
18	 mov	0, %g2
19
20	sra	%o2, 2, %o4
21	ldub	[%g3], %o3
22
230:
24	ldub	[%o1], %g2
25	add	%g3, 1, %g3
26	and	%o3, 0xff, %o0
27
28	cmp	%o0, 0
29	be	8f
30	 add	%o1, 1, %o1
31
32	cmp	%o0, %g2
33	be,a	1f
34	 ldub	[%g3], %o3
35
36	retl
37	 sub	%o0, %g2, %o0
38
391:
40	ldub	[%o1], %g2
41	add	%g3,1, %g3
42	and	%o3, 0xff, %o0
43
44	cmp	%o0, 0
45	be	8f
46	 add	%o1, 1, %o1
47
48	cmp	%o0, %g2
49	be,a	1f
50	 ldub	[%g3], %o3
51
52	retl
53	 sub	%o0, %g2, %o0
54
551:
56	ldub	[%o1], %g2
57	add	%g3, 1, %g3
58	and	%o3, 0xff, %o0
59
60	cmp	%o0, 0
61	be	8f
62	 add	%o1, 1, %o1
63
64	cmp	%o0, %g2
65	be,a	1f
66	 ldub	[%g3], %o3
67
68	retl
69	 sub	%o0, %g2, %o0
70
711:
72	ldub	[%o1], %g2
73	add	%g3, 1, %g3
74	and	%o3, 0xff, %o0
75
76	cmp	%o0, 0
77	be	8f
78	 add	%o1, 1, %o1
79
80	cmp	%o0, %g2
81	be	1f
82	 add	%o4, -1, %o4
83
84	retl
85	 sub	%o0, %g2, %o0
86
871:
88
89	cmp	%o4, 0
90	bg,a	0b
91	 ldub	[%g3], %o3
92
93	b	7f
94	 and	%o2, 3, %o2
95
969:
97	ldub	[%o1], %g2
98	add	%g3, 1, %g3
99	and	%o3, 0xff, %o0
100
101	cmp	%o0, 0
102	be	8f
103	 add	%o1, 1, %o1
104
105	cmp	%o0, %g2
106	be	7f
107	 add	%o2, -1, %o2
108
1098:
110	retl
111	 sub	%o0, %g2, %o0
112
1137:
114	cmp	%o2, 0
115	bg,a	9b
116	 ldub	[%g3], %o3
117
118	and	%g2, 0xff, %o0
119	retl
120	 sub	%o3, %o0, %o0
121