/* Optimized memcmp implementation for POWER7/PowerPC32.
   Copyright (C) 2010-2018 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

#include <sysdep.h>

/* int [r3] memcmp (const char *s1 [r3],
		    const char *s2 [r4],
		    size_t size [r5])  */

	.machine power7
EALIGN (memcmp, 4, 0)
	CALL_MCOUNT

#define rRTN	r3
#define rSTR1	r3	/* first string arg */
#define rSTR2	r4	/* second string arg */
#define rN	r5	/* max string length */
#define rWORD1	r6	/* current word in s1 */
#define rWORD2	r7	/* current word in s2 */
#define rWORD3	r8	/* next word in s1 */
#define rWORD4	r9	/* next word in s2 */
#define rWORD5	r10	/* next word in s1 */
#define rWORD6	r11	/* next word in s2 */
#define rWORD7	r30	/* next word in s1 */
#define rWORD8	r31	/* next word in s2 */

	xor	r0, rSTR2, rSTR1
	cmplwi	cr6, rN, 0
	cmplwi	cr1, rN, 12
	clrlwi.	r0, r0, 30
	clrlwi	r12, rSTR1, 30
	cmplwi	cr5, r12, 0
	beq-	cr6, L(zeroLength)
	dcbt	0, rSTR1
	dcbt	0, rSTR2
/* If less than 8 bytes or not aligned, use the unaligned
   byte loop.  */
	blt	cr1, L(bytealigned)
	stwu	1, -64(r1)
	cfi_adjust_cfa_offset(64)
	stw	rWORD8, 48(r1)
	stw	rWORD7, 44(r1)
	cfi_offset(rWORD8, (48-64))
	cfi_offset(rWORD7, (44-64))
	bne	L(unaligned)
/* At this point we know both strings have the same alignment and the
   compare length is at least 8 bytes.  r12 contains the low order
   2 bits of rSTR1 and cr5 contains the result of the logical compare
   of r12 to 0.  If r12 == 0 then we are already word
   aligned and can perform the word aligned loop.

   Otherwise we know the two strings have the same alignment (but not
   yet word aligned).  So we force the string addresses to the next lower
   word boundary and special case this first word using shift left to
   eliminate bits preceding the first byte.  Since we want to join the
   normal (word aligned) compare loop, starting at the second word,
   we need to adjust the length (rN) and special case the loop
   versioning for the first word. This ensures that the loop count is
   correct and the first word (shifted) is in the expected register pair. */
	.align	4
L(samealignment):
	clrrwi	rSTR1, rSTR1, 2
	clrrwi	rSTR2, rSTR2, 2
	beq	cr5, L(Waligned)
	add	rN, rN, r12
	slwi	rWORD6, r12, 3
	srwi	r0, rN, 4	/* Divide by 16 */
	andi.	r12, rN, 12	/* Get the word remainder */
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 0(rSTR1)
	lwz	rWORD2, 0(rSTR2)
#endif
	cmplwi	cr1, r12, 8
	cmplwi	cr7, rN, 16
	clrlwi	rN, rN, 30
	beq	L(dPs4)
	mtctr	r0
	bgt	cr1, L(dPs3)
	beq	cr1, L(dPs2)

/* Remainder is 4 */
	.align	3
L(dsP1):
	slw	rWORD5, rWORD1, rWORD6
	slw	rWORD6, rWORD2, rWORD6
	cmplw	cr5, rWORD5, rWORD6
	blt	cr7, L(dP1x)
/* Do something useful in this cycle since we have to branch anyway.  */
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 4(rSTR1)
	lwz	rWORD2, 4(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
	b	L(dP1e)
/* Remainder is 8 */
	.align	4
L(dPs2):
	slw	rWORD5, rWORD1, rWORD6
	slw	rWORD6, rWORD2, rWORD6
	cmplw	cr6, rWORD5, rWORD6
	blt	cr7, L(dP2x)
/* Do something useful in this cycle since we have to branch anyway.  */
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD7, 4(rSTR1)
	lwz	rWORD8, 4(rSTR2)
#endif
	cmplw	cr5, rWORD7, rWORD8
	b	L(dP2e)
/* Remainder is 12 */
	.align	4
L(dPs3):
	slw	rWORD3, rWORD1, rWORD6
	slw	rWORD4, rWORD2, rWORD6
	cmplw	cr1, rWORD3, rWORD4
	b	L(dP3e)
/* Count is a multiple of 16, remainder is 0 */
	.align	4
L(dPs4):
	mtctr	r0
	slw	rWORD1, rWORD1, rWORD6
	slw	rWORD2, rWORD2, rWORD6
	cmplw	cr7, rWORD1, rWORD2
	b	L(dP4e)

/* At this point we know both strings are word aligned and the
   compare length is at least 8 bytes.  */
	.align	4
L(Waligned):
	andi.	r12, rN, 12	/* Get the word remainder */
	srwi	r0, rN, 4	/* Divide by 16 */
	cmplwi	cr1, r12, 8
	cmplwi	cr7, rN, 16
	clrlwi	rN, rN, 30
	beq	L(dP4)
	bgt	cr1, L(dP3)
	beq	cr1, L(dP2)

/* Remainder is 4 */
	.align	4
L(dP1):
	mtctr	r0
/* Normally we'd use rWORD7/rWORD8 here, but since we might exit early
   (8-15 byte compare), we want to use only volatile registers.  This
   means we can avoid restoring non-volatile registers since we did not
   change any on the early exit path.  The key here is the non-early
   exit path only cares about the condition code (cr5), not about which
   register pair was used.  */
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 0(rSTR1)
	lwz	rWORD6, 0(rSTR2)
#endif
	cmplw	cr5, rWORD5, rWORD6
	blt	cr7, L(dP1x)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 4(rSTR1)
	lwz	rWORD2, 4(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
L(dP1e):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 8(rSTR1)
	lwz	rWORD4, 8(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 12(rSTR1)
	lwz	rWORD6, 12(rSTR2)
#endif
	cmplw	cr6, rWORD5, rWORD6
	bne	cr5, L(dLcr5x)
	bne	cr7, L(dLcr7x)

#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwzu	rWORD7, 16(rSTR1)
	lwzu	rWORD8, 16(rSTR2)
#endif
	bne	cr1, L(dLcr1)
	cmplw	cr5, rWORD7, rWORD8
	bdnz	L(dLoop)
	bne	cr6, L(dLcr6)
	lwz	rWORD7, 44(r1)
	lwz	rWORD8, 48(r1)
	.align	3
L(dP1x):
	slwi.	r12, rN, 3
	bne	cr5, L(dLcr5x)
	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
	addi	r1, r1, 64
	cfi_adjust_cfa_offset(-64)
	bne	L(d00)
	li	rRTN, 0
	blr

/* Remainder is 8 */
	.align	4
	cfi_adjust_cfa_offset(64)
L(dP2):
	mtctr	r0
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 0(rSTR1)
	lwz	rWORD6, 0(rSTR2)
#endif
	cmplw	cr6, rWORD5, rWORD6
	blt	cr7, L(dP2x)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD7, 4(rSTR1)
	lwz	rWORD8, 4(rSTR2)
#endif
	cmplw	cr5, rWORD7, rWORD8
L(dP2e):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 8(rSTR1)
	lwz	rWORD2, 8(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 12(rSTR1)
	lwz	rWORD4, 12(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#endif
	bne	cr6, L(dLcr6)
	bne	cr5, L(dLcr5)
	b	L(dLoop2)
/* Again we are on a early exit path (16-23 byte compare), we want to
   only use volatile registers and avoid restoring non-volatile
   registers.  */
	.align	4
L(dP2x):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 4(rSTR1)
	lwz	rWORD4, 4(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
	slwi.	r12, rN, 3
	bne	cr6, L(dLcr6x)
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#endif
	bne	cr1, L(dLcr1x)
	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
	addi	r1, r1, 64
	cfi_adjust_cfa_offset(-64)
	bne	L(d00)
	li	rRTN, 0
	blr

/* Remainder is 12 */
	.align	4
	cfi_adjust_cfa_offset(64)
L(dP3):
	mtctr	r0
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 0(rSTR1)
	lwz	rWORD4, 0(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
L(dP3e):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 4(rSTR1)
	lwz	rWORD6, 4(rSTR2)
#endif
	cmplw	cr6, rWORD5, rWORD6
	blt	cr7, L(dP3x)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD7, 8(rSTR1)
	lwz	rWORD8, 8(rSTR2)
#endif
	cmplw	cr5, rWORD7, rWORD8
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 12(rSTR1)
	lwz	rWORD2, 12(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#endif
	bne	cr1, L(dLcr1)
	bne	cr6, L(dLcr6)
	b	L(dLoop1)
/* Again we are on a early exit path (24-31 byte compare), we want to
   only use volatile registers and avoid restoring non-volatile
   registers.  */
	.align	4
L(dP3x):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 8(rSTR1)
	lwz	rWORD2, 8(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
	slwi.	r12, rN, 3
	bne	cr1, L(dLcr1x)
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#endif
	bne	cr6, L(dLcr6x)
	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
	bne	cr7, L(dLcr7x)
	addi	r1, r1, 64
	cfi_adjust_cfa_offset(-64)
	bne	L(d00)
	li	rRTN, 0
	blr

/* Count is a multiple of 16, remainder is 0 */
	.align	4
	cfi_adjust_cfa_offset(64)
L(dP4):
	mtctr	r0
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 0(rSTR1)
	lwz	rWORD2, 0(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
L(dP4e):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 4(rSTR1)
	lwz	rWORD4, 4(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 8(rSTR1)
	lwz	rWORD6, 8(rSTR2)
#endif
	cmplw	cr6, rWORD5, rWORD6
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwzu	rWORD7, 12(rSTR1)
	lwzu	rWORD8, 12(rSTR2)
#endif
	cmplw	cr5, rWORD7, rWORD8
	bne	cr7, L(dLcr7)
	bne	cr1, L(dLcr1)
	bdz-	L(d24)		/* Adjust CTR as we start with +4 */
/* This is the primary loop */
	.align	4
L(dLoop):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 4(rSTR1)
	lwz	rWORD2, 4(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
	bne	cr6, L(dLcr6)
L(dLoop1):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 8(rSTR1)
	lwz	rWORD4, 8(rSTR2)
#endif
	cmplw	cr6, rWORD5, rWORD6
	bne	cr5, L(dLcr5)
L(dLoop2):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 12(rSTR1)
	lwz	rWORD6, 12(rSTR2)
#endif
	cmplw	cr5, rWORD7, rWORD8
	bne	cr7, L(dLcr7)
L(dLoop3):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwzu	rWORD7, 16(rSTR1)
	lwzu	rWORD8, 16(rSTR2)
#endif
	bne	cr1, L(dLcr1)
	cmplw	cr7, rWORD1, rWORD2
	bdnz	L(dLoop)

L(dL4):
	cmplw	cr1, rWORD3, rWORD4
	bne	cr6, L(dLcr6)
	cmplw	cr6, rWORD5, rWORD6
	bne	cr5, L(dLcr5)
	cmplw	cr5, rWORD7, rWORD8
L(d44):
	bne	cr7, L(dLcr7)
L(d34):
	bne	cr1, L(dLcr1)
L(d24):
	bne	cr6, L(dLcr6)
L(d14):
	slwi.	r12, rN, 3
	bne	cr5, L(dLcr5)
L(d04):
	lwz	rWORD7, 44(r1)
	lwz	rWORD8, 48(r1)
	addi	r1, r1, 64
	cfi_adjust_cfa_offset(-64)
	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
	beq	L(zeroLength)
/* At this point we have a remainder of 1 to 3 bytes to compare.  Since
   we are aligned it is safe to load the whole word, and use
   shift right to eliminate bits beyond the compare length.  */
L(d00):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 4(rSTR1)
	lwz	rWORD2, 4(rSTR2)
#endif
	srw	rWORD1, rWORD1, rN
	srw	rWORD2, rWORD2, rN
	sub	rRTN, rWORD1, rWORD2
	blr

	.align	4
	cfi_adjust_cfa_offset(64)
L(dLcr7):
	lwz	rWORD7, 44(r1)
	lwz	rWORD8, 48(r1)
L(dLcr7x):
	li	rRTN, 1
	addi	r1, r1, 64
	cfi_adjust_cfa_offset(-64)
	bgtlr	cr7
	li	rRTN, -1
	blr
	.align	4
	cfi_adjust_cfa_offset(64)
L(dLcr1):
	lwz	rWORD7, 44(r1)
	lwz	rWORD8, 48(r1)
L(dLcr1x):
	li	rRTN, 1
	addi	r1, r1, 64
	cfi_adjust_cfa_offset(-64)
	bgtlr	cr1
	li	rRTN, -1
	blr
	.align	4
	cfi_adjust_cfa_offset(64)
L(dLcr6):
	lwz	rWORD7, 44(r1)
	lwz	rWORD8, 48(r1)
L(dLcr6x):
	li	rRTN, 1
	addi	r1, r1, 64
	cfi_adjust_cfa_offset(-64)
	bgtlr	cr6
	li	rRTN, -1
	blr
	.align	4
	cfi_adjust_cfa_offset(64)
L(dLcr5):
	lwz	rWORD7, 44(r1)
	lwz	rWORD8, 48(r1)
L(dLcr5x):
	li	rRTN, 1
	addi	r1, r1, 64
	cfi_adjust_cfa_offset(-64)
	bgtlr	cr5
	li	rRTN, -1
	blr

	.align	4
L(bytealigned):
	mtctr	rN

/* We need to prime this loop.  This loop is swing modulo scheduled
   to avoid pipe delays.  The dependent instruction latencies (load to
   compare to conditional branch) is 2 to 3 cycles.  In this loop each
   dispatch group ends in a branch and takes 1 cycle.  Effectively
   the first iteration of the loop only serves to load operands and
   branches based on compares are delayed until the next loop.

   So we must precondition some registers and condition codes so that
   we don't exit the loop early on the first iteration.  */

	lbz	rWORD1, 0(rSTR1)
	lbz	rWORD2, 0(rSTR2)
	bdz	L(b11)
	cmplw	cr7, rWORD1, rWORD2
	lbz	rWORD3, 1(rSTR1)
	lbz	rWORD4, 1(rSTR2)
	bdz	L(b12)
	cmplw	cr1, rWORD3, rWORD4
	lbzu	rWORD5, 2(rSTR1)
	lbzu	rWORD6, 2(rSTR2)
	bdz	L(b13)
	.align	4
L(bLoop):
	lbzu	rWORD1, 1(rSTR1)
	lbzu	rWORD2, 1(rSTR2)
	bne	cr7, L(bLcr7)

	cmplw	cr6, rWORD5, rWORD6
	bdz	L(b3i)

	lbzu	rWORD3, 1(rSTR1)
	lbzu	rWORD4, 1(rSTR2)
	bne	cr1, L(bLcr1)

	cmplw	cr7, rWORD1, rWORD2
	bdz	L(b2i)

	lbzu	rWORD5, 1(rSTR1)
	lbzu	rWORD6, 1(rSTR2)
	bne	cr6, L(bLcr6)

	cmplw	cr1, rWORD3, rWORD4
	bdnz	L(bLoop)

/* We speculatively loading bytes before we have tested the previous
   bytes.  But we must avoid overrunning the length (in the ctr) to
   prevent these speculative loads from causing a segfault.  In this
   case the loop will exit early (before the all pending bytes are
   tested.  In this case we must complete the pending operations
   before returning.  */
L(b1i):
	bne	cr7, L(bLcr7)
	bne	cr1, L(bLcr1)
	b	L(bx56)
	.align	4
L(b2i):
	bne	cr6, L(bLcr6)
	bne	cr7, L(bLcr7)
	b	L(bx34)
	.align	4
L(b3i):
	bne	cr1, L(bLcr1)
	bne	cr6, L(bLcr6)
	b	L(bx12)
	.align	4
L(bLcr7):
	li	rRTN, 1
	bgtlr	cr7
	li	rRTN, -1
	blr
L(bLcr1):
	li	rRTN, 1
	bgtlr	cr1
	li	rRTN, -1
	blr
L(bLcr6):
	li	rRTN, 1
	bgtlr	cr6
	li	rRTN, -1
	blr

L(b13):
	bne	cr7, L(bx12)
	bne	cr1, L(bx34)
L(bx56):
	sub	rRTN, rWORD5, rWORD6
	blr
	nop
L(b12):
	bne	cr7, L(bx12)
L(bx34):
	sub	rRTN, rWORD3, rWORD4
	blr
L(b11):
L(bx12):
	sub	rRTN, rWORD1, rWORD2
	blr
	.align	4
L(zeroLength):
	li	rRTN, 0
	blr

	.align	4
/* At this point we know the strings have different alignment and the
   compare length is at least 8 bytes.  r12 contains the low order
   2 bits of rSTR1 and cr5 contains the result of the logical compare
   of r12 to 0.  If r12 == 0 then rStr1 is word aligned and can
   perform the Wunaligned loop.

   Otherwise we know that rSTR1 is not already word aligned yet.
   So we can force the string addresses to the next lower word
   boundary and special case this first word using shift left to
   eliminate bits preceding the first byte.  Since we want to join the
   normal (Wualigned) compare loop, starting at the second word,
   we need to adjust the length (rN) and special case the loop
   versioning for the first W. This ensures that the loop count is
   correct and the first W (shifted) is in the expected resister pair.  */
#define rSHL		r29	/* Unaligned shift left count.  */
#define rSHR		r28	/* Unaligned shift right count.  */
#define rWORD8_SHIFT	r27	/* Left rotation temp for rWORD2.  */
#define rWORD2_SHIFT	r26	/* Left rotation temp for rWORD4.  */
#define rWORD4_SHIFT	r25	/* Left rotation temp for rWORD6.  */
#define rWORD6_SHIFT	r24	/* Left rotation temp for rWORD8.  */
	cfi_adjust_cfa_offset(64)
L(unaligned):
	stw	rSHL, 40(r1)
	cfi_offset(rSHL, (40-64))
	clrlwi	rSHL, rSTR2, 30
	stw	rSHR, 36(r1)
	cfi_offset(rSHR, (36-64))
	beq	cr5, L(Wunaligned)
	stw	rWORD8_SHIFT, 32(r1)
	cfi_offset(rWORD8_SHIFT, (32-64))
/* Adjust the logical start of rSTR2 to compensate for the extra bits
   in the 1st rSTR1 W.  */
	sub	rWORD8_SHIFT, rSTR2, r12
/* But do not attempt to address the W before that W that contains
   the actual start of rSTR2.  */
	clrrwi	rSTR2, rSTR2, 2
	stw	rWORD2_SHIFT, 28(r1)
/* Compute the left/right shift counts for the unaligned rSTR2,
   compensating for the logical (W aligned) start of rSTR1.  */
	clrlwi	rSHL, rWORD8_SHIFT, 30
	clrrwi	rSTR1, rSTR1, 2
	stw	rWORD4_SHIFT, 24(r1)
	slwi	rSHL, rSHL, 3
	cmplw	cr5, rWORD8_SHIFT, rSTR2
	add	rN, rN, r12
	slwi	rWORD6, r12, 3
	stw	rWORD6_SHIFT, 20(r1)
	cfi_offset(rWORD2_SHIFT, (28-64))
	cfi_offset(rWORD4_SHIFT, (24-64))
	cfi_offset(rWORD6_SHIFT, (20-64))
	subfic	rSHR, rSHL, 32
	srwi	r0, rN, 4	/* Divide by 16 */
	andi.	r12, rN, 12	/* Get the W remainder */
/* We normally need to load 2 Ws to start the unaligned rSTR2, but in
   this special case those bits may be discarded anyway.  Also we
   must avoid loading a W where none of the bits are part of rSTR2 as
   this may cross a page boundary and cause a page fault.  */
	li	rWORD8, 0
	blt	cr5, L(dus0)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD8, 0(rSTR2)
	addi	rSTR2, rSTR2, 4
#endif
	slw	rWORD8, rWORD8, rSHL

L(dus0):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 0(rSTR1)
	lwz	rWORD2, 0(rSTR2)
#endif
	cmplwi	cr1, r12, 8
	cmplwi	cr7, rN, 16
	srw	r12, rWORD2, rSHR
	clrlwi	rN, rN, 30
	beq	L(duPs4)
	mtctr	r0
	or	rWORD8, r12, rWORD8
	bgt	cr1, L(duPs3)
	beq	cr1, L(duPs2)

/* Remainder is 4 */
	.align	4
L(dusP1):
	slw	rWORD8_SHIFT, rWORD2, rSHL
	slw	rWORD7, rWORD1, rWORD6
	slw	rWORD8, rWORD8, rWORD6
	bge	cr7, L(duP1e)
/* At this point we exit early with the first word compare
   complete and remainder of 0 to 3 bytes.  See L(du14) for details on
   how we handle the remaining bytes.  */
	cmplw	cr5, rWORD7, rWORD8
	slwi.	rN, rN, 3
	bne	cr5, L(duLcr5)
	cmplw	cr7, rN, rSHR
	beq	L(duZeroReturn)
	li	r0, 0
	ble	cr7, L(dutrim)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD2, 4(rSTR2)
#endif
	srw	r0, rWORD2, rSHR
	b	L(dutrim)
/* Remainder is 8 */
	.align	4
L(duPs2):
	slw	rWORD6_SHIFT, rWORD2, rSHL
	slw	rWORD5, rWORD1, rWORD6
	slw	rWORD6, rWORD8, rWORD6
	b	L(duP2e)
/* Remainder is 12 */
	.align	4
L(duPs3):
	slw	rWORD4_SHIFT, rWORD2, rSHL
	slw	rWORD3, rWORD1, rWORD6
	slw	rWORD4, rWORD8, rWORD6
	b	L(duP3e)
/* Count is a multiple of 16, remainder is 0 */
	.align	4
L(duPs4):
	mtctr	r0
	or	rWORD8, r12, rWORD8
	slw	rWORD2_SHIFT, rWORD2, rSHL
	slw	rWORD1, rWORD1, rWORD6
	slw	rWORD2, rWORD8, rWORD6
	b	L(duP4e)

/* At this point we know rSTR1 is word aligned and the
   compare length is at least 8 bytes.  */
	.align	4
L(Wunaligned):
	stw	rWORD8_SHIFT, 32(r1)
	clrrwi	rSTR2, rSTR2, 2
	stw	rWORD2_SHIFT, 28(r1)
	srwi	r0, rN, 4	/* Divide by 16 */
	stw	rWORD4_SHIFT, 24(r1)
	andi.	r12, rN, 12	/* Get the W remainder */
	stw	rWORD6_SHIFT, 20(r1)
	cfi_offset(rWORD8_SHIFT, (32-64))
	cfi_offset(rWORD2_SHIFT, (28-64))
	cfi_offset(rWORD4_SHIFT, (24-64))
	cfi_offset(rWORD6_SHIFT, (20-64))
	slwi	rSHL, rSHL, 3
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR2, rSTR2, 4
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD6, 0(rSTR2)
	lwzu	rWORD8, 4(rSTR2)
#endif
	cmplwi	cr1, r12, 8
	cmplwi	cr7, rN, 16
	clrlwi	rN, rN, 30
	subfic	rSHR, rSHL, 32
	slw	rWORD6_SHIFT, rWORD6, rSHL
	beq	L(duP4)
	mtctr	r0
	bgt	cr1, L(duP3)
	beq	cr1, L(duP2)

/* Remainder is 4 */
	.align	4
L(duP1):
	srw	r12, rWORD8, rSHR
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	addi	rSTR1, rSTR1, 4
#else
	lwz	rWORD7, 0(rSTR1)
#endif
	slw	rWORD8_SHIFT, rWORD8, rSHL
	or	rWORD8, r12, rWORD6_SHIFT
	blt	cr7, L(duP1x)
L(duP1e):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 4(rSTR1)
	lwz	rWORD2, 4(rSTR2)
#endif
	cmplw	cr5, rWORD7, rWORD8
	srw	r0, rWORD2, rSHR
	slw	rWORD2_SHIFT, rWORD2, rSHL
	or	rWORD2, r0, rWORD8_SHIFT
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 8(rSTR1)
	lwz	rWORD4, 8(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
	srw	r12, rWORD4, rSHR
	slw	rWORD4_SHIFT, rWORD4, rSHL
	bne	cr5, L(duLcr5)
	or	rWORD4, r12, rWORD2_SHIFT
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 12(rSTR1)
	lwz	rWORD6, 12(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
	srw	r0, rWORD6, rSHR
	slw	rWORD6_SHIFT, rWORD6, rSHL
	bne	cr7, L(duLcr7)
	or	rWORD6, r0, rWORD4_SHIFT
	cmplw	cr6, rWORD5, rWORD6
	b	L(duLoop3)
	.align	4
/* At this point we exit early with the first word compare
   complete and remainder of 0 to 3 bytes.  See L(du14) for details on
   how we handle the remaining bytes.  */
L(duP1x):
	cmplw	cr5, rWORD7, rWORD8
	slwi.	rN, rN, 3
	bne	cr5, L(duLcr5)
	cmplw	cr7, rN, rSHR
	beq	L(duZeroReturn)
	li	r0, 0
	ble	cr7, L(dutrim)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD2, 8(rSTR2)
#endif
	srw	r0, rWORD2, rSHR
	b	L(dutrim)
/* Remainder is 8 */
	.align	4
L(duP2):
	srw	r0, rWORD8, rSHR
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	addi	rSTR1, rSTR1, 4
#else
	lwz	rWORD5, 0(rSTR1)
#endif
	or	rWORD6, r0, rWORD6_SHIFT
	slw	rWORD6_SHIFT, rWORD8, rSHL
L(duP2e):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD7, 4(rSTR1)
	lwz	rWORD8, 4(rSTR2)
#endif
	cmplw	cr6, rWORD5, rWORD6
	srw	r12, rWORD8, rSHR
	slw	rWORD8_SHIFT, rWORD8, rSHL
	or	rWORD8, r12, rWORD6_SHIFT
	blt	cr7, L(duP2x)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 8(rSTR1)
	lwz	rWORD2, 8(rSTR2)
#endif
	cmplw	cr5, rWORD7, rWORD8
	bne	cr6, L(duLcr6)
	srw	r0, rWORD2, rSHR
	slw	rWORD2_SHIFT, rWORD2, rSHL
	or	rWORD2, r0, rWORD8_SHIFT
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 12(rSTR1)
	lwz	rWORD4, 12(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
	bne	cr5, L(duLcr5)
	srw	r12, rWORD4, rSHR
	slw	rWORD4_SHIFT, rWORD4, rSHL
	or	rWORD4, r12, rWORD2_SHIFT
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#endif
	cmplw	cr1, rWORD3, rWORD4
	b	L(duLoop2)
	.align	4
L(duP2x):
	cmplw	cr5, rWORD7, rWORD8
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#endif
	bne	cr6, L(duLcr6)
	slwi.	rN, rN, 3
	bne	cr5, L(duLcr5)
	cmplw	cr7, rN, rSHR
	beq	L(duZeroReturn)
	li	r0, 0
	ble	cr7, L(dutrim)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD2, 4(rSTR2)
#endif
	srw	r0, rWORD2, rSHR
	b	L(dutrim)

/* Remainder is 12 */
	.align	4
L(duP3):
	srw	r12, rWORD8, rSHR
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	addi	rSTR1, rSTR1, 4
#else
	lwz	rWORD3, 0(rSTR1)
#endif
	slw	rWORD4_SHIFT, rWORD8, rSHL
	or	rWORD4, r12, rWORD6_SHIFT
L(duP3e):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 4(rSTR1)
	lwz	rWORD6, 4(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
	srw	r0, rWORD6, rSHR
	slw	rWORD6_SHIFT, rWORD6, rSHL
	or	rWORD6, r0, rWORD4_SHIFT
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD7, 8(rSTR1)
	lwz	rWORD8, 8(rSTR2)
#endif
	cmplw	cr6, rWORD5, rWORD6
	bne	cr1, L(duLcr1)
	srw	r12, rWORD8, rSHR
	slw	rWORD8_SHIFT, rWORD8, rSHL
	or	rWORD8, r12, rWORD6_SHIFT
	blt	cr7, L(duP3x)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 12(rSTR1)
	lwz	rWORD2, 12(rSTR2)
#endif
	cmplw	cr5, rWORD7, rWORD8
	bne	cr6, L(duLcr6)
	srw	r0, rWORD2, rSHR
	slw	rWORD2_SHIFT, rWORD2, rSHL
	or	rWORD2, r0, rWORD8_SHIFT
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#endif
	cmplw	cr7, rWORD1, rWORD2
	b	L(duLoop1)
	.align	4
L(duP3x):
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#endif
#if 0
/* Huh?  We've already branched on cr1!  */
	bne	cr1, L(duLcr1)
#endif
	cmplw	cr5, rWORD7, rWORD8
	bne	cr6, L(duLcr6)
	slwi.	rN, rN, 3
	bne	cr5, L(duLcr5)
	cmplw	cr7, rN, rSHR
	beq	L(duZeroReturn)
	li	r0, 0
	ble	cr7, L(dutrim)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD2, 4(rSTR2)
#endif
	srw	r0, rWORD2, rSHR
	b	L(dutrim)

/* Count is a multiple of 16, remainder is 0 */
	.align	4
L(duP4):
	mtctr	r0
	srw	r0, rWORD8, rSHR
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	addi	rSTR1, rSTR1, 4
#else
	lwz	rWORD1, 0(rSTR1)
#endif
	slw	rWORD2_SHIFT, rWORD8, rSHL
	or	rWORD2, r0, rWORD6_SHIFT
L(duP4e):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 4(rSTR1)
	lwz	rWORD4, 4(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
	srw	r12, rWORD4, rSHR
	slw	rWORD4_SHIFT, rWORD4, rSHL
	or	rWORD4, r12, rWORD2_SHIFT
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 8(rSTR1)
	lwz	rWORD6, 8(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
	bne	cr7, L(duLcr7)
	srw	r0, rWORD6, rSHR
	slw	rWORD6_SHIFT, rWORD6, rSHL
	or	rWORD6, r0, rWORD4_SHIFT
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwzu	rWORD7, 12(rSTR1)
	lwzu	rWORD8, 12(rSTR2)
#endif
	cmplw	cr6, rWORD5, rWORD6
	bne	cr1, L(duLcr1)
	srw	r12, rWORD8, rSHR
	slw	rWORD8_SHIFT, rWORD8, rSHL
	or	rWORD8, r12, rWORD6_SHIFT
	cmplw	cr5, rWORD7, rWORD8
	bdz	L(du24)		/* Adjust CTR as we start with +4 */
/* This is the primary loop */
	.align	4
L(duLoop):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD1, 4(rSTR1)
	lwz	rWORD2, 4(rSTR2)
#endif
	cmplw	cr1, rWORD3, rWORD4
	bne	cr6, L(duLcr6)
	srw	r0, rWORD2, rSHR
	slw	rWORD2_SHIFT, rWORD2, rSHL
	or	rWORD2, r0, rWORD8_SHIFT
L(duLoop1):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD3, 0, rSTR1
	lwbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD3, 8(rSTR1)
	lwz	rWORD4, 8(rSTR2)
#endif
	cmplw	cr6, rWORD5, rWORD6
	bne	cr5, L(duLcr5)
	srw	r12, rWORD4, rSHR
	slw	rWORD4_SHIFT, rWORD4, rSHL
	or	rWORD4, r12, rWORD2_SHIFT
L(duLoop2):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD5, 0, rSTR1
	lwbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD5, 12(rSTR1)
	lwz	rWORD6, 12(rSTR2)
#endif
	cmplw	cr5, rWORD7, rWORD8
	bne	cr7, L(duLcr7)
	srw	r0, rWORD6, rSHR
	slw	rWORD6_SHIFT, rWORD6, rSHL
	or	rWORD6, r0, rWORD4_SHIFT
L(duLoop3):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD7, 0, rSTR1
	lwbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 4
	addi	rSTR2, rSTR2, 4
#else
	lwzu	rWORD7, 16(rSTR1)
	lwzu	rWORD8, 16(rSTR2)
#endif
	cmplw	cr7, rWORD1, rWORD2
	bne	cr1, L(duLcr1)
	srw	r12, rWORD8, rSHR
	slw	rWORD8_SHIFT, rWORD8, rSHL
	or	rWORD8, r12, rWORD6_SHIFT
	bdnz	L(duLoop)

L(duL4):
#if 0
/* Huh?  We've already branched on cr1!  */
	bne	cr1, L(duLcr1)
#endif
	cmplw	cr1, rWORD3, rWORD4
	bne	cr6, L(duLcr6)
	cmplw	cr6, rWORD5, rWORD6
	bne	cr5, L(duLcr5)
	cmplw	cr5, rWORD7, rWORD8
L(du44):
	bne	cr7, L(duLcr7)
L(du34):
	bne	cr1, L(duLcr1)
L(du24):
	bne	cr6, L(duLcr6)
L(du14):
	slwi.	rN, rN, 3
	bne	cr5, L(duLcr5)
/* At this point we have a remainder of 1 to 3 bytes to compare.  We use
   shift right to eliminate bits beyond the compare length.
   This allows the use of word subtract to compute the final result.

   However it may not be safe to load rWORD2 which may be beyond the
   string length. So we compare the bit length of the remainder to
   the right shift count (rSHR). If the bit count is less than or equal
   we do not need to load rWORD2 (all significant bits are already in
   rWORD8_SHIFT).  */
	cmplw	cr7, rN, rSHR
	beq	L(duZeroReturn)
	li	r0, 0
	ble	cr7, L(dutrim)
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD2, 0, rSTR2
	addi	rSTR2, rSTR2, 4
#else
	lwz	rWORD2, 4(rSTR2)
#endif
	srw	r0, rWORD2, rSHR
	.align	4
L(dutrim):
#ifdef __LITTLE_ENDIAN__
	lwbrx	rWORD1, 0, rSTR1
#else
	lwz	rWORD1, 4(rSTR1)
#endif
	lwz	rWORD8, 48(r1)
	subfic	rN, rN, 32	/* Shift count is 32 - (rN * 8).  */
	or	rWORD2, r0, rWORD8_SHIFT
	lwz	rWORD7, 44(r1)
	lwz	rSHL, 40(r1)
	srw	rWORD1, rWORD1, rN
	srw	rWORD2, rWORD2, rN
	lwz	rSHR, 36(r1)
	lwz	rWORD8_SHIFT, 32(r1)
	sub	rRTN, rWORD1, rWORD2
	b	L(dureturn26)
	.align	4
L(duLcr7):
	lwz	rWORD8, 48(r1)
	lwz	rWORD7, 44(r1)
	li	rRTN, 1
	bgt	cr7, L(dureturn29)
	lwz	rSHL, 40(r1)
	lwz	rSHR, 36(r1)
	li	rRTN, -1
	b	L(dureturn27)
	.align	4
L(duLcr1):
	lwz	rWORD8, 48(r1)
	lwz	rWORD7, 44(r1)
	li	rRTN, 1
	bgt	cr1, L(dureturn29)
	lwz	rSHL, 40(r1)
	lwz	rSHR, 36(r1)
	li	rRTN, -1
	b	L(dureturn27)
	.align	4
L(duLcr6):
	lwz	rWORD8, 48(r1)
	lwz	rWORD7, 44(r1)
	li	rRTN, 1
	bgt	cr6, L(dureturn29)
	lwz	rSHL, 40(r1)
	lwz	rSHR, 36(r1)
	li	rRTN, -1
	b	L(dureturn27)
	.align	4
L(duLcr5):
	lwz	rWORD8, 48(r1)
	lwz	rWORD7, 44(r1)
	li	rRTN, 1
	bgt	cr5, L(dureturn29)
	lwz	rSHL, 40(r1)
	lwz	rSHR, 36(r1)
	li	rRTN, -1
	b	L(dureturn27)
	.align	3
L(duZeroReturn):
	li	rRTN, 0
	.align	4
L(dureturn):
	lwz	rWORD8, 48(r1)
	lwz	rWORD7, 44(r1)
L(dureturn29):
	lwz	rSHL, 40(r1)
	lwz	rSHR, 36(r1)
L(dureturn27):
	lwz	rWORD8_SHIFT, 32(r1)
L(dureturn26):
	lwz	rWORD2_SHIFT, 28(r1)
L(dureturn25):
	lwz	rWORD4_SHIFT, 24(r1)
	lwz	rWORD6_SHIFT, 20(r1)
	addi	r1, r1, 64
	cfi_adjust_cfa_offset(-64)
	blr
END (memcmp)

libc_hidden_builtin_def (memcmp)
weak_alias (memcmp, bcmp)
