18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * strncmp.S: Hand optimized Sparc assembly of GCC output from GNU libc
48c2ecf20Sopenharmony_ci *            generic strncmp routine.
58c2ecf20Sopenharmony_ci */
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#include <linux/linkage.h>
88c2ecf20Sopenharmony_ci#include <asm/export.h>
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci	.text
118c2ecf20Sopenharmony_ciENTRY(strncmp)
128c2ecf20Sopenharmony_ci	mov	%o0, %g3
138c2ecf20Sopenharmony_ci	mov	0, %o3
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci	cmp	%o2, 3
168c2ecf20Sopenharmony_ci	ble	7f
178c2ecf20Sopenharmony_ci	 mov	0, %g2
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci	sra	%o2, 2, %o4
208c2ecf20Sopenharmony_ci	ldub	[%g3], %o3
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci0:
238c2ecf20Sopenharmony_ci	ldub	[%o1], %g2
248c2ecf20Sopenharmony_ci	add	%g3, 1, %g3
258c2ecf20Sopenharmony_ci	and	%o3, 0xff, %o0
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	cmp	%o0, 0
288c2ecf20Sopenharmony_ci	be	8f
298c2ecf20Sopenharmony_ci	 add	%o1, 1, %o1
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_ci	cmp	%o0, %g2
328c2ecf20Sopenharmony_ci	be,a	1f
338c2ecf20Sopenharmony_ci	 ldub	[%g3], %o3
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ci	retl
368c2ecf20Sopenharmony_ci	 sub	%o0, %g2, %o0
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci1:
398c2ecf20Sopenharmony_ci	ldub	[%o1], %g2
408c2ecf20Sopenharmony_ci	add	%g3,1, %g3
418c2ecf20Sopenharmony_ci	and	%o3, 0xff, %o0
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci	cmp	%o0, 0
448c2ecf20Sopenharmony_ci	be	8f
458c2ecf20Sopenharmony_ci	 add	%o1, 1, %o1
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci	cmp	%o0, %g2
488c2ecf20Sopenharmony_ci	be,a	1f
498c2ecf20Sopenharmony_ci	 ldub	[%g3], %o3
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_ci	retl
528c2ecf20Sopenharmony_ci	 sub	%o0, %g2, %o0
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci1:
558c2ecf20Sopenharmony_ci	ldub	[%o1], %g2
568c2ecf20Sopenharmony_ci	add	%g3, 1, %g3
578c2ecf20Sopenharmony_ci	and	%o3, 0xff, %o0
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci	cmp	%o0, 0
608c2ecf20Sopenharmony_ci	be	8f
618c2ecf20Sopenharmony_ci	 add	%o1, 1, %o1
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci	cmp	%o0, %g2
648c2ecf20Sopenharmony_ci	be,a	1f
658c2ecf20Sopenharmony_ci	 ldub	[%g3], %o3
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_ci	retl
688c2ecf20Sopenharmony_ci	 sub	%o0, %g2, %o0
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_ci1:
718c2ecf20Sopenharmony_ci	ldub	[%o1], %g2
728c2ecf20Sopenharmony_ci	add	%g3, 1, %g3
738c2ecf20Sopenharmony_ci	and	%o3, 0xff, %o0
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_ci	cmp	%o0, 0
768c2ecf20Sopenharmony_ci	be	8f
778c2ecf20Sopenharmony_ci	 add	%o1, 1, %o1
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ci	cmp	%o0, %g2
808c2ecf20Sopenharmony_ci	be	1f
818c2ecf20Sopenharmony_ci	 add	%o4, -1, %o4
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ci	retl
848c2ecf20Sopenharmony_ci	 sub	%o0, %g2, %o0
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_ci1:
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci	cmp	%o4, 0
898c2ecf20Sopenharmony_ci	bg,a	0b
908c2ecf20Sopenharmony_ci	 ldub	[%g3], %o3
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_ci	b	7f
938c2ecf20Sopenharmony_ci	 and	%o2, 3, %o2
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ci9:
968c2ecf20Sopenharmony_ci	ldub	[%o1], %g2
978c2ecf20Sopenharmony_ci	add	%g3, 1, %g3
988c2ecf20Sopenharmony_ci	and	%o3, 0xff, %o0
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_ci	cmp	%o0, 0
1018c2ecf20Sopenharmony_ci	be	8f
1028c2ecf20Sopenharmony_ci	 add	%o1, 1, %o1
1038c2ecf20Sopenharmony_ci
1048c2ecf20Sopenharmony_ci	cmp	%o0, %g2
1058c2ecf20Sopenharmony_ci	be	7f
1068c2ecf20Sopenharmony_ci	 add	%o2, -1, %o2
1078c2ecf20Sopenharmony_ci
1088c2ecf20Sopenharmony_ci8:
1098c2ecf20Sopenharmony_ci	retl
1108c2ecf20Sopenharmony_ci	 sub	%o0, %g2, %o0
1118c2ecf20Sopenharmony_ci
1128c2ecf20Sopenharmony_ci7:
1138c2ecf20Sopenharmony_ci	cmp	%o2, 0
1148c2ecf20Sopenharmony_ci	bg,a	9b
1158c2ecf20Sopenharmony_ci	 ldub	[%g3], %o3
1168c2ecf20Sopenharmony_ci
1178c2ecf20Sopenharmony_ci	and	%g2, 0xff, %o0
1188c2ecf20Sopenharmony_ci	retl
1198c2ecf20Sopenharmony_ci	 sub	%o3, %o0, %o0
1208c2ecf20Sopenharmony_ciENDPROC(strncmp)
1218c2ecf20Sopenharmony_ciEXPORT_SYMBOL(strncmp)
122