| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | /* * Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com) * * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. */#include <features.h>#include <sysdep.h>ENTRY(strcmp)	or	r2, r0, r1	bmsk_s	r2, r2, 1	brne	r2, 0, @.Lcharloop;;; s1 and s2 are word aligned	ld.ab	r2, [r0, 4]	mov_s	r12, 0x01010101	ror	r11, r12	.align  4.LwordLoop:	ld.ab	r3, [r1, 4]	;; Detect NULL char in str1	sub	r4, r2, r12	ld.ab	r5, [r0, 4]	bic	r4, r4, r2	and	r4, r4, r11	brne.d.nt	r4, 0, .LfoundNULL	;; Check if the read locations are the same	cmp	r2, r3	beq.d	.LwordLoop	mov.eq	r2, r5	;; A match is found, spot it out#ifdef __LITTLE_ENDIAN__	swape	r3, r3	mov_s	r0, 1	swape	r2, r2#else	mov_s	r0, 1#endif	cmp_s	r2, r3	j_s.d	[blink]	bset.lo	r0, r0, 31	.align 4.LfoundNULL:#ifdef __BIG_ENDIAN__	swape	r4, r4	swape	r2, r2	swape	r3, r3#endif	;; Find null byte	ffs	r0, r4	bmsk	r2, r2, r0	bmsk	r3, r3, r0	swape	r2, r2	swape	r3, r3	;; make the return value	sub.f	r0, r2, r3	mov.hi	r0, 1	j_s.d	[blink]	bset.lo	r0, r0, 31	.align 4.Lcharloop:	ldb.ab	r2, [r0, 1]	ldb.ab	r3, [r1, 1]	nop	breq	r2, 0, .Lcmpend	breq	r2, r3, .Lcharloop	.align 4.Lcmpend:	j_s.d	[blink]	sub	r0, r2, r3END(strcmp)libc_hidden_def(strcmp)#ifndef __UCLIBC_HAS_LOCALE__strong_alias(strcmp,strcoll)libc_hidden_def(strcoll)#endif
 |