1b00dc8376465ee5f8dd49b95924e31b4c2404ab0Adrian Bunk/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Sparc64 optimized strncmp code.
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/asi.h>
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.text
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.align	32
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.globl	strncmp
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.type	strncmp,#function
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstrncmp:
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	brlez,pn %o2, 3f
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 lduba	[%o0] (ASI_PNF), %o3
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds1:
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	add	%o0, 1, %o0
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ldub	[%o1], %o4
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	brz,pn	%o3, 2f
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 add	%o1, 1, %o1
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	cmp	%o3, %o4
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bne,pn	%icc, 2f
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 subcc	%o2, 1, %o2
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bne,a,pt %xcc, 1b
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 ldub	[%o0], %o3
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds2:
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	retl
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 sub	%o3, %o4, %o0
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds3:
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	retl
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 clr	%o0
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.size	strncmp, .-strncmp
33