| /* | 
 |  * Copyright (C) 2004, 2007-2010, 2011-2014 Synopsys, Inc. All rights reserved. | 
 |  * | 
 |  * SPDX-License-Identifier:	GPL-2.0+ | 
 |  */ | 
 |  | 
 | #ifdef __LITTLE_ENDIAN__ | 
 | #define WORD2 r2 | 
 | #define SHIFT r3 | 
 | #else /* __BIG_ENDIAN__ */ | 
 | #define WORD2 r3 | 
 | #define SHIFT r2 | 
 | #endif /* _ENDIAN__ */ | 
 |  | 
 | .global memcmp | 
 | .align 4 | 
 | memcmp: | 
 | 	or	%r12, %r0, %r1 | 
 | 	asl_s	%r12, %r12, 30 | 
 | 	sub	%r3, %r2, 1 | 
 | 	brls	%r2, %r12, .Lbytewise | 
 | 	ld	%r4, [%r0, 0] | 
 | 	ld	%r5, [%r1, 0] | 
 | 	lsr.f	%lp_count, %r3, 3 | 
 | 	lpne	.Loop_end | 
 | 	ld_s	WORD2, [%r0, 4] | 
 | 	ld_s	%r12, [%r1, 4] | 
 | 	brne	%r4, %r5, .Leven | 
 | 	ld.a	%r4, [%r0, 8] | 
 | 	ld.a	%r5, [%r1, 8] | 
 | 	brne	WORD2, %r12, .Lodd | 
 | 	nop | 
 | .Loop_end: | 
 | 	asl_s	SHIFT, SHIFT, 3 | 
 | 	bhs_s	.Last_cmp | 
 | 	brne	%r4, %r5, .Leven | 
 | 	ld	%r4, [%r0, 4] | 
 | 	ld	%r5, [%r1, 4] | 
 | #ifdef __LITTLE_ENDIAN__ | 
 | 	nop_s | 
 | 	/* one more load latency cycle */ | 
 | .Last_cmp: | 
 | 	xor	%r0, %r4, %r5 | 
 | 	bset	%r0, %r0, SHIFT | 
 | 	sub_s	%r1, %r0, 1 | 
 | 	bic_s	%r1, %r1, %r0 | 
 | 	norm	%r1, %r1 | 
 | 	b.d	.Leven_cmp | 
 | 	and	%r1, %r1, 24 | 
 | .Leven: | 
 | 	xor	%r0, %r4, %r5 | 
 | 	sub_s	%r1, %r0, 1 | 
 | 	bic_s	%r1, %r1, %r0 | 
 | 	norm	%r1, %r1 | 
 | 	/* slow track insn */ | 
 | 	and	%r1, %r1, 24 | 
 | .Leven_cmp: | 
 | 	asl	%r2, %r4, %r1 | 
 | 	asl	%r12, %r5, %r1 | 
 | 	lsr_s	%r2, %r2, 1 | 
 | 	lsr_s	%r12, %r12, 1 | 
 | 	j_s.d	[%blink] | 
 | 	sub	%r0, %r2, %r12 | 
 | 	.balign	4 | 
 | .Lodd: | 
 | 	xor	%r0, WORD2, %r12 | 
 | 	sub_s	%r1, %r0, 1 | 
 | 	bic_s	%r1, %r1, %r0 | 
 | 	norm	%r1, %r1 | 
 | 	/* slow track insn */ | 
 | 	and	%r1, %r1, 24 | 
 | 	asl_s	%r2, %r2, %r1 | 
 | 	asl_s	%r12, %r12, %r1 | 
 | 	lsr_s	%r2, %r2, 1 | 
 | 	lsr_s	%r12, %r12, 1 | 
 | 	j_s.d	[%blink] | 
 | 	sub	%r0, %r2, %r12 | 
 | #else /* __BIG_ENDIAN__ */ | 
 | .Last_cmp: | 
 | 	neg_s	SHIFT, SHIFT | 
 | 	lsr	%r4, %r4, SHIFT | 
 | 	lsr	%r5, %r5, SHIFT | 
 | 	/* slow track insn */ | 
 | .Leven: | 
 | 	sub.f	%r0, %r4, %r5 | 
 | 	mov.ne	%r0, 1 | 
 | 	j_s.d	[%blink] | 
 | 	bset.cs	%r0, %r0, 31 | 
 | .Lodd: | 
 | 	cmp_s	WORD2, %r12 | 
 |  | 
 | 	mov_s	%r0, 1 | 
 | 	j_s.d	[%blink] | 
 | 	bset.cs	%r0, %r0, 31 | 
 | #endif /* _ENDIAN__ */ | 
 | 	.balign	4 | 
 | .Lbytewise: | 
 | 	breq	%r2, 0, .Lnil | 
 | 	ldb	%r4, [%r0, 0] | 
 | 	ldb	%r5, [%r1, 0] | 
 | 	lsr.f	%lp_count, %r3 | 
 | 	lpne	.Lbyte_end | 
 | 	ldb_s	%r3, [%r0, 1] | 
 | 	ldb	%r12, [%r1, 1] | 
 | 	brne	%r4, %r5, .Lbyte_even | 
 | 	ldb.a	%r4, [%r0, 2] | 
 | 	ldb.a	%r5, [%r1, 2] | 
 | 	brne	%r3, %r12, .Lbyte_odd | 
 | 	nop | 
 | .Lbyte_end: | 
 | 	bcc	.Lbyte_even | 
 | 	brne	%r4, %r5, .Lbyte_even | 
 | 	ldb_s	%r3, [%r0, 1] | 
 | 	ldb_s	%r12, [%r1, 1] | 
 | .Lbyte_odd: | 
 | 	j_s.d	[%blink] | 
 | 	sub	%r0, %r3, %r12 | 
 | .Lbyte_even: | 
 | 	j_s.d	[%blink] | 
 | 	sub	%r0, %r4, %r5 | 
 | .Lnil: | 
 | 	j_s.d	[%blink] | 
 | 	mov	%r0, 0 |