/* Optimized memcmp implementation for POWER7/PowerPC64.
   Copyright (C) 2010-2014 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 3

#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
	cmpldi	cr6, rN, 0
	cmpldi	cr1, rN, 12
	clrldi.	r0, r0, 61
	clrldi	r12, rSTR1, 61
	cmpldi	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)
	std	rWORD8, -8(r1)
	cfi_offset(rWORD8, -8)
	std	rWORD7, -16(r1)
	cfi_offset(rWORD7, -16)
	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
   3 bits of rSTR1 and cr5 contains the result of the logical compare
   of r12 to 0.  If r12 == 0 then we are already double word
   aligned and can perform the DW aligned loop.

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

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

/* At this point we know both strings are double word aligned and the
   compare length is at least 8 bytes.  */
	.align	4
L(DWaligned):
	andi.	r12, rN, 24	/* Get the DW remainder */
	srdi	r0, rN, 5	/* Divide by 32 */
	cmpldi	cr1, r12, 16
	cmpldi	cr7, rN, 32
	clrldi	rN, rN, 61
	beq	L(dP4)
	bgt	cr1, L(dP3)
	beq	cr1, L(dP2)

/* Remainder is 8 */
	.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__
	ldbrx	rWORD5, 0, rSTR1
	ldbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD5, 0(rSTR1)
	ld	rWORD6, 0(rSTR2)
#endif
	cmpld	cr5, rWORD5, rWORD6
	blt	cr7, L(dP1x)
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD1, 0, rSTR1
	ldbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD1, 8(rSTR1)
	ld	rWORD2, 8(rSTR2)
#endif
	cmpld	cr7, rWORD1, rWORD2
L(dP1e):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD3, 0, rSTR1
	ldbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD3, 16(rSTR1)
	ld	rWORD4, 16(rSTR2)
#endif
	cmpld	cr1, rWORD3, rWORD4
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD5, 0, rSTR1
	ldbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD5, 24(rSTR1)
	ld	rWORD6, 24(rSTR2)
#endif
	cmpld	cr6, rWORD5, rWORD6
	bne	cr5, L(dLcr5x)
	bne	cr7, L(dLcr7x)

#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD7, 0, rSTR1
	ldbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ldu	rWORD7, 32(rSTR1)
	ldu	rWORD8, 32(rSTR2)
#endif
	bne	cr1, L(dLcr1)
	cmpld	cr5, rWORD7, rWORD8
	bdnz	L(dLoop)
	bne	cr6, L(dLcr6)
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
	.align	3
L(dP1x):
	sldi.	r12, rN, 3
	bne	cr5, L(dLcr5x)
	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
	bne	L(d00)
	li	rRTN, 0
	blr

/* Remainder is 16 */
	.align	4
L(dP2):
	mtctr	r0
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD5, 0, rSTR1
	ldbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD5, 0(rSTR1)
	ld	rWORD6, 0(rSTR2)
#endif
	cmpld	cr6, rWORD5, rWORD6
	blt	cr7, L(dP2x)
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD7, 0, rSTR1
	ldbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD7, 8(rSTR1)
	ld	rWORD8, 8(rSTR2)
#endif
	cmpld	cr5, rWORD7, rWORD8
L(dP2e):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD1, 0, rSTR1
	ldbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD1, 16(rSTR1)
	ld	rWORD2, 16(rSTR2)
#endif
	cmpld	cr7, rWORD1, rWORD2
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD3, 0, rSTR1
	ldbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD3, 24(rSTR1)
	ld	rWORD4, 24(rSTR2)
#endif
	cmpld	cr1, rWORD3, rWORD4
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#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__
	ldbrx	rWORD3, 0, rSTR1
	ldbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD3, 8(rSTR1)
	ld	rWORD4, 8(rSTR2)
#endif
	cmpld	cr1, rWORD3, rWORD4
	sldi.	r12, rN, 3
	bne	cr6, L(dLcr6x)
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#endif
	bne	cr1, L(dLcr1x)
	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
	bne	L(d00)
	li	rRTN, 0
	blr

/* Remainder is 24 */
	.align	4
L(dP3):
	mtctr	r0
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD3, 0, rSTR1
	ldbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD3, 0(rSTR1)
	ld	rWORD4, 0(rSTR2)
#endif
	cmpld	cr1, rWORD3, rWORD4
L(dP3e):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD5, 0, rSTR1
	ldbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD5, 8(rSTR1)
	ld	rWORD6, 8(rSTR2)
#endif
	cmpld	cr6, rWORD5, rWORD6
	blt	cr7, L(dP3x)
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD7, 0, rSTR1
	ldbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD7, 16(rSTR1)
	ld	rWORD8, 16(rSTR2)
#endif
	cmpld	cr5, rWORD7, rWORD8
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD1, 0, rSTR1
	ldbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD1, 24(rSTR1)
	ld	rWORD2, 24(rSTR2)
#endif
	cmpld	cr7, rWORD1, rWORD2
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 16
	addi	rSTR2, rSTR2, 16
#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__
	ldbrx	rWORD1, 0, rSTR1
	ldbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD1, 16(rSTR1)
	ld	rWORD2, 16(rSTR2)
#endif
	cmpld	cr7, rWORD1, rWORD2
	sldi.	r12, rN, 3
	bne	cr1, L(dLcr1x)
#ifndef __LITTLE_ENDIAN__
	addi	rSTR1, rSTR1, 16
	addi	rSTR2, rSTR2, 16
#endif
	bne	cr6, L(dLcr6x)
	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
	bne	cr7, L(dLcr7x)
	bne	L(d00)
	li	rRTN, 0
	blr

/* Count is a multiple of 32, remainder is 0 */
	.align	4
L(dP4):
	mtctr	r0
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD1, 0, rSTR1
	ldbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD1, 0(rSTR1)
	ld	rWORD2, 0(rSTR2)
#endif
	cmpld	cr7, rWORD1, rWORD2
L(dP4e):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD3, 0, rSTR1
	ldbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD3, 8(rSTR1)
	ld	rWORD4, 8(rSTR2)
#endif
	cmpld	cr1, rWORD3, rWORD4
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD5, 0, rSTR1
	ldbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD5, 16(rSTR1)
	ld	rWORD6, 16(rSTR2)
#endif
	cmpld	cr6, rWORD5, rWORD6
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD7, 0, rSTR1
	ldbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ldu	rWORD7, 24(rSTR1)
	ldu	rWORD8, 24(rSTR2)
#endif
	cmpld	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__
	ldbrx	rWORD1, 0, rSTR1
	ldbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD1, 8(rSTR1)
	ld	rWORD2, 8(rSTR2)
#endif
	cmpld	cr1, rWORD3, rWORD4
	bne	cr6, L(dLcr6)
L(dLoop1):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD3, 0, rSTR1
	ldbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD3, 16(rSTR1)
	ld	rWORD4, 16(rSTR2)
#endif
	cmpld	cr6, rWORD5, rWORD6
	bne	cr5, L(dLcr5)
L(dLoop2):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD5, 0, rSTR1
	ldbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD5, 24(rSTR1)
	ld	rWORD6, 24(rSTR2)
#endif
	cmpld	cr5, rWORD7, rWORD8
	bne	cr7, L(dLcr7)
L(dLoop3):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD7, 0, rSTR1
	ldbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ldu	rWORD7, 32(rSTR1)
	ldu	rWORD8, 32(rSTR2)
#endif
	bne	cr1, L(dLcr1)
	cmpld	cr7, rWORD1, rWORD2
	bdnz	L(dLoop)

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

	.align	4
L(dLcr7):
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
L(dLcr7x):
	li	rRTN, 1
	bgtlr	cr7
	li	rRTN, -1
	blr
	.align	4
L(dLcr1):
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
L(dLcr1x):
	li	rRTN, 1
	bgtlr	cr1
	li	rRTN, -1
	blr
	.align	4
L(dLcr6):
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
L(dLcr6x):
	li	rRTN, 1
	bgtlr	cr6
	li	rRTN, -1
	blr
	.align	4
L(dLcr5):
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
L(dLcr5x):
	li	rRTN, 1
	bgtlr	cr5
	li	rRTN, -1
	blr

	.align	4
L(bytealigned):
	mtctr	rN
#if 0
/* Huh?  We've already branched on cr6!  */
	beq	cr6, L(zeroLength)
#endif

/* 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)
	cmpld	cr7, rWORD1, rWORD2
	lbz	rWORD3, 1(rSTR1)
	lbz	rWORD4, 1(rSTR2)
	bdz	L(b12)
	cmpld	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)

	cmpld	cr6, rWORD5, rWORD6
	bdz	L(b3i)

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

	cmpld	cr7, rWORD1, rWORD2
	bdz	L(b2i)

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

	cmpld	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
   3 bits of rSTR1 and cr5 contains the result of the logical compare
   of r12 to 0.  If r12 == 0 then rStr1 is double word
   aligned and can perform the DWunaligned loop.

   Otherwise we know that rSTR1 is not already DW aligned yet.
   So we can force the string addresses to the next lower DW
   boundary and special case this first DW using shift left to
   eliminate bits preceding the first byte.  Since we want to join the
   normal (DWaligned) compare loop, starting at the second double word,
   we need to adjust the length (rN) and special case the loop
   versioning for the first DW. This ensures that the loop count is
   correct and the first DW (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.  */
L(unaligned):
	std	rSHL, -24(r1)
	cfi_offset(rSHL, -24)
	clrldi	rSHL, rSTR2, 61
	beq	cr6, L(duzeroLength)
	std	rSHR, -32(r1)
	cfi_offset(rSHR, -32)
	beq	cr5, L(DWunaligned)
	std	rWORD8_SHIFT, -40(r1)
	cfi_offset(rWORD8_SHIFT, -40)
/* Adjust the logical start of rSTR2 to compensate for the extra bits
   in the 1st rSTR1 DW.  */
	sub	rWORD8_SHIFT, rSTR2, r12
/* But do not attempt to address the DW before that DW that contains
   the actual start of rSTR2.  */
	clrrdi	rSTR2, rSTR2, 3
	std	rWORD2_SHIFT, -48(r1)
	cfi_offset(rWORD2_SHIFT, -48)
/* Compute the left/right shift counts for the unaligned rSTR2,
   compensating for the logical (DW aligned) start of rSTR1.  */
	clrldi	rSHL, rWORD8_SHIFT, 61
	clrrdi	rSTR1, rSTR1, 3
	std	rWORD4_SHIFT, -56(r1)
	cfi_offset(rWORD4_SHIFT, -56)
	sldi	rSHL, rSHL, 3
	cmpld	cr5, rWORD8_SHIFT, rSTR2
	add	rN, rN, r12
	sldi	rWORD6, r12, 3
	std	rWORD6_SHIFT, -64(r1)
	cfi_offset(rWORD6_SHIFT, -64)
	subfic	rSHR, rSHL, 64
	srdi	r0, rN, 5	/* Divide by 32 */
	andi.	r12, rN, 24	/* Get the DW remainder */
/* We normally need to load 2 DWs to start the unaligned rSTR2, but in
   this special case those bits may be discarded anyway.  Also we
   must avoid loading a DW 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__
	ldbrx	rWORD8, 0, rSTR2
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD8, 0(rSTR2)
	addi	rSTR2, rSTR2, 8
#endif
	sld	rWORD8, rWORD8, rSHL

L(dus0):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD1, 0, rSTR1
	ldbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD1, 0(rSTR1)
	ld	rWORD2, 0(rSTR2)
#endif
	cmpldi	cr1, r12, 16
	cmpldi	cr7, rN, 32
	srd	r12, rWORD2, rSHR
	clrldi	rN, rN, 61
	beq	L(duPs4)
	mtctr	r0
	or	rWORD8, r12, rWORD8
	bgt	cr1, L(duPs3)
	beq	cr1, L(duPs2)

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

/* At this point we know rSTR1 is double word aligned and the
   compare length is at least 8 bytes.  */
	.align	4
L(DWunaligned):
	std	rWORD8_SHIFT, -40(r1)
	cfi_offset(rWORD8_SHIFT, -40)
	clrrdi	rSTR2, rSTR2, 3
	std	rWORD2_SHIFT, -48(r1)
	cfi_offset(rWORD2_SHIFT, -48)
	srdi	r0, rN, 5	/* Divide by 32 */
	std	rWORD4_SHIFT, -56(r1)
	cfi_offset(rWORD4_SHIFT, -56)
	andi.	r12, rN, 24	/* Get the DW remainder */
	std	rWORD6_SHIFT, -64(r1)
	cfi_offset(rWORD6_SHIFT, -64)
	sldi	rSHL, rSHL, 3
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD6, 0, rSTR2
	addi	rSTR2, rSTR2, 8
	ldbrx	rWORD8, 0, rSTR2
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD6, 0(rSTR2)
	ldu	rWORD8, 8(rSTR2)
#endif
	cmpldi	cr1, r12, 16
	cmpldi	cr7, rN, 32
	clrldi	rN, rN, 61
	subfic	rSHR, rSHL, 64
	sld	rWORD6_SHIFT, rWORD6, rSHL
	beq	L(duP4)
	mtctr	r0
	bgt	cr1, L(duP3)
	beq	cr1, L(duP2)

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

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

/* Count is a multiple of 32, remainder is 0 */
	.align	4
L(duP4):
	mtctr	r0
	srd	r0, rWORD8, rSHR
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD1, 0, rSTR1
	addi	rSTR1, rSTR1, 8
#else
	ld	rWORD1, 0(rSTR1)
#endif
	sld	rWORD2_SHIFT, rWORD8, rSHL
	or	rWORD2, r0, rWORD6_SHIFT
L(duP4e):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD3, 0, rSTR1
	ldbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD3, 8(rSTR1)
	ld	rWORD4, 8(rSTR2)
#endif
	cmpld	cr7, rWORD1, rWORD2
	srd	r12, rWORD4, rSHR
	sld	rWORD4_SHIFT, rWORD4, rSHL
	or	rWORD4, r12, rWORD2_SHIFT
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD5, 0, rSTR1
	ldbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD5, 16(rSTR1)
	ld	rWORD6, 16(rSTR2)
#endif
	cmpld	cr1, rWORD3, rWORD4
	bne	cr7, L(duLcr7)
	srd	r0, rWORD6, rSHR
	sld	rWORD6_SHIFT, rWORD6, rSHL
	or	rWORD6, r0, rWORD4_SHIFT
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD7, 0, rSTR1
	ldbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ldu	rWORD7, 24(rSTR1)
	ldu	rWORD8, 24(rSTR2)
#endif
	cmpld	cr6, rWORD5, rWORD6
	bne	cr1, L(duLcr1)
	srd	r12, rWORD8, rSHR
	sld	rWORD8_SHIFT, rWORD8, rSHL
	or	rWORD8, r12, rWORD6_SHIFT
	cmpld	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__
	ldbrx	rWORD1, 0, rSTR1
	ldbrx	rWORD2, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD1, 8(rSTR1)
	ld	rWORD2, 8(rSTR2)
#endif
	cmpld	cr1, rWORD3, rWORD4
	bne	cr6, L(duLcr6)
	srd	r0, rWORD2, rSHR
	sld	rWORD2_SHIFT, rWORD2, rSHL
	or	rWORD2, r0, rWORD8_SHIFT
L(duLoop1):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD3, 0, rSTR1
	ldbrx	rWORD4, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD3, 16(rSTR1)
	ld	rWORD4, 16(rSTR2)
#endif
	cmpld	cr6, rWORD5, rWORD6
	bne	cr5, L(duLcr5)
	srd	r12, rWORD4, rSHR
	sld	rWORD4_SHIFT, rWORD4, rSHL
	or	rWORD4, r12, rWORD2_SHIFT
L(duLoop2):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD5, 0, rSTR1
	ldbrx	rWORD6, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD5, 24(rSTR1)
	ld	rWORD6, 24(rSTR2)
#endif
	cmpld	cr5, rWORD7, rWORD8
	bne	cr7, L(duLcr7)
	srd	r0, rWORD6, rSHR
	sld	rWORD6_SHIFT, rWORD6, rSHL
	or	rWORD6, r0, rWORD4_SHIFT
L(duLoop3):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD7, 0, rSTR1
	ldbrx	rWORD8, 0, rSTR2
	addi	rSTR1, rSTR1, 8
	addi	rSTR2, rSTR2, 8
#else
	ldu	rWORD7, 32(rSTR1)
	ldu	rWORD8, 32(rSTR2)
#endif
	cmpld	cr7, rWORD1, rWORD2
	bne	cr1, L(duLcr1)
	srd	r12, rWORD8, rSHR
	sld	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
	cmpld	cr1, rWORD3, rWORD4
	bne	cr6, L(duLcr6)
	cmpld	cr6, rWORD5, rWORD6
	bne	cr5, L(duLcr5)
	cmpld	cr5, rWORD7, rWORD8
L(du44):
	bne	cr7, L(duLcr7)
L(du34):
	bne	cr1, L(duLcr1)
L(du24):
	bne	cr6, L(duLcr6)
L(du14):
	sldi.	rN, rN, 3
	bne	cr5, L(duLcr5)
/* At this point we have a remainder of 1 to 7 bytes to compare.  We use
   shift right double to eliminate bits beyond the compare length.

   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).  */
	cmpld	cr7, rN, rSHR
	beq	L(duZeroReturn)
	li	r0, 0
	ble	cr7, L(dutrim)
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD2, 0, rSTR2
	addi	rSTR2, rSTR2, 8
#else
	ld	rWORD2, 8(rSTR2)
#endif
	srd	r0, rWORD2, rSHR
	.align	4
L(dutrim):
#ifdef __LITTLE_ENDIAN__
	ldbrx	rWORD1, 0, rSTR1
#else
	ld	rWORD1, 8(rSTR1)
#endif
	ld	rWORD8, -8(r1)
	subfic	rN, rN, 64	/* Shift count is 64 - (rN * 8).  */
	or	rWORD2, r0, rWORD8_SHIFT
	ld	rWORD7, -16(r1)
	ld	rSHL, -24(r1)
	srd	rWORD1, rWORD1, rN
	srd	rWORD2, rWORD2, rN
	ld	rSHR, -32(r1)
	ld	rWORD8_SHIFT, -40(r1)
	li	rRTN, 0
	cmpld	cr7, rWORD1, rWORD2
	ld	rWORD2_SHIFT, -48(r1)
	ld	rWORD4_SHIFT, -56(r1)
	beq	cr7, L(dureturn24)
	li	rRTN, 1
	ld	rWORD6_SHIFT, -64(r1)
	bgtlr	cr7
	li	rRTN, -1
	blr
	.align	4
L(duLcr7):
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
	li	rRTN, 1
	bgt	cr7, L(dureturn29)
	ld	rSHL, -24(r1)
	ld	rSHR, -32(r1)
	li	rRTN, -1
	b	L(dureturn27)
	.align	4
L(duLcr1):
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
	li	rRTN, 1
	bgt	cr1, L(dureturn29)
	ld	rSHL, -24(r1)
	ld	rSHR, -32(r1)
	li	rRTN, -1
	b	L(dureturn27)
	.align	4
L(duLcr6):
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
	li	rRTN, 1
	bgt	cr6, L(dureturn29)
	ld	rSHL, -24(r1)
	ld	rSHR, -32(r1)
	li	rRTN, -1
	b	L(dureturn27)
	.align	4
L(duLcr5):
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
	li	rRTN, 1
	bgt	cr5, L(dureturn29)
	ld	rSHL, -24(r1)
	ld	rSHR, -32(r1)
	li	rRTN, -1
	b	L(dureturn27)
	.align	3
L(duZeroReturn):
	li	rRTN, 0
	.align	4
L(dureturn):
	ld	rWORD8, -8(r1)
	ld	rWORD7, -16(r1)
L(dureturn29):
	ld	rSHL, -24(r1)
	ld	rSHR, -32(r1)
L(dureturn27):
	ld	rWORD8_SHIFT, -40(r1)
L(dureturn26):
	ld	rWORD2_SHIFT, -48(r1)
L(dureturn25):
	ld	rWORD4_SHIFT, -56(r1)
L(dureturn24):
	ld	rWORD6_SHIFT, -64(r1)
	blr
L(duzeroLength):
	li	rRTN, 0
	blr

END (memcmp)
libc_hidden_builtin_def (memcmp)
weak_alias (memcmp, bcmp)
