| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | /* * Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */#include <linux/linkage.h>ENTRY_CFI(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_CFI(strcmp)
 |