xref: /linux/arch/sparc/lib/strncmp_32.S (revision d39d0ed196aa1685bb24771e92f78633c66ac9cb)
1/*
2 * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
3 *            generic strncmp routine.
4 */
5
6	.text
7	.align 4
8	.global __strncmp, strncmp
9__strncmp:
10strncmp:
11	mov	%o0, %g3
12	mov	0, %o3
13
14	cmp	%o2, 3
15	ble	7f
16	 mov	0, %g2
17
18	sra	%o2, 2, %o4
19	ldub	[%g3], %o3
20
210:
22	ldub	[%o1], %g2
23	add	%g3, 1, %g3
24	and	%o3, 0xff, %o0
25
26	cmp	%o0, 0
27	be	8f
28	 add	%o1, 1, %o1
29
30	cmp	%o0, %g2
31	be,a	1f
32	 ldub	[%g3], %o3
33
34	retl
35	 sub	%o0, %g2, %o0
36
371:
38	ldub	[%o1], %g2
39	add	%g3,1, %g3
40	and	%o3, 0xff, %o0
41
42	cmp	%o0, 0
43	be	8f
44	 add	%o1, 1, %o1
45
46	cmp	%o0, %g2
47	be,a	1f
48	 ldub	[%g3], %o3
49
50	retl
51	 sub	%o0, %g2, %o0
52
531:
54	ldub	[%o1], %g2
55	add	%g3, 1, %g3
56	and	%o3, 0xff, %o0
57
58	cmp	%o0, 0
59	be	8f
60	 add	%o1, 1, %o1
61
62	cmp	%o0, %g2
63	be,a	1f
64	 ldub	[%g3], %o3
65
66	retl
67	 sub	%o0, %g2, %o0
68
691:
70	ldub	[%o1], %g2
71	add	%g3, 1, %g3
72	and	%o3, 0xff, %o0
73
74	cmp	%o0, 0
75	be	8f
76	 add	%o1, 1, %o1
77
78	cmp	%o0, %g2
79	be	1f
80	 add	%o4, -1, %o4
81
82	retl
83	 sub	%o0, %g2, %o0
84
851:
86
87	cmp	%o4, 0
88	bg,a	0b
89	 ldub	[%g3], %o3
90
91	b	7f
92	 and	%o2, 3, %o2
93
949:
95	ldub	[%o1], %g2
96	add	%g3, 1, %g3
97	and	%o3, 0xff, %o0
98
99	cmp	%o0, 0
100	be	8f
101	 add	%o1, 1, %o1
102
103	cmp	%o0, %g2
104	be	7f
105	 add	%o2, -1, %o2
106
1078:
108	retl
109	 sub	%o0, %g2, %o0
110
1117:
112	cmp	%o2, 0
113	bg,a	9b
114	 ldub	[%g3], %o3
115
116	and	%g2, 0xff, %o0
117	retl
118	 sub	%o3, %o0, %o0
119