Blame sysdeps/x86_64/wcscmp.S

Packit 6c4009
/* Optimized wcscmp for x86-64 with SSE2.
Packit 6c4009
   Copyright (C) 2011-2018 Free Software Foundation, Inc.
Packit 6c4009
   Contributed by Intel Corporation.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#include <sysdep.h>
Packit 6c4009
Packit 6c4009
/* Note: wcscmp uses signed comparison, not unsighed as in strcmp function. */
Packit 6c4009
Packit 6c4009
	.text
Packit 6c4009
ENTRY (__wcscmp)
Packit 6c4009
/*
Packit 6c4009
	* This implementation uses SSE to compare up to 16 bytes at a time.
Packit 6c4009
*/
Packit 6c4009
	mov	%esi, %eax
Packit 6c4009
	mov	%edi, %edx
Packit 6c4009
	pxor	%xmm0, %xmm0		/* clear %xmm0 for null char checks */
Packit 6c4009
	mov	%al, %ch
Packit 6c4009
	mov	%dl, %cl
Packit 6c4009
	and	$63, %eax		/* rsi alignment in cache line */
Packit 6c4009
	and	$63, %edx		/* rdi alignment in cache line */
Packit 6c4009
	and	$15, %cl
Packit 6c4009
	jz	L(continue_00)
Packit 6c4009
	cmp	$16, %edx
Packit 6c4009
	jb	L(continue_0)
Packit 6c4009
	cmp	$32, %edx
Packit 6c4009
	jb	L(continue_16)
Packit 6c4009
	cmp	$48, %edx
Packit 6c4009
	jb	L(continue_32)
Packit 6c4009
Packit 6c4009
L(continue_48):
Packit 6c4009
	and	$15, %ch
Packit 6c4009
	jz	L(continue_48_00)
Packit 6c4009
	cmp	$16, %eax
Packit 6c4009
	jb	L(continue_0_48)
Packit 6c4009
	cmp	$32, %eax
Packit 6c4009
	jb	L(continue_16_48)
Packit 6c4009
	cmp	$48, %eax
Packit 6c4009
	jb	L(continue_32_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_48_48):
Packit 6c4009
	mov	(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, (%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	4(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 4(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	8(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 8(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	12(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 12(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rdi), %xmm1
Packit 6c4009
	movdqu	16(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	movdqu	32(%rdi), %xmm1
Packit 6c4009
	movdqu	32(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_32)
Packit 6c4009
Packit 6c4009
	movdqu	48(%rdi), %xmm1
Packit 6c4009
	movdqu	48(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_48)
Packit 6c4009
Packit 6c4009
	add	$64, %rsi
Packit 6c4009
	add	$64, %rdi
Packit 6c4009
	jmp	L(continue_48_48)
Packit 6c4009
Packit 6c4009
L(continue_0):
Packit 6c4009
	and	$15, %ch
Packit 6c4009
	jz	L(continue_0_00)
Packit 6c4009
	cmp	$16, %eax
Packit 6c4009
	jb	L(continue_0_0)
Packit 6c4009
	cmp	$32, %eax
Packit 6c4009
	jb	L(continue_0_16)
Packit 6c4009
	cmp	$48, %eax
Packit 6c4009
	jb	L(continue_0_32)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_0_48):
Packit 6c4009
	mov	(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, (%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	4(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 4(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	8(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 8(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	12(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 12(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rdi), %xmm1
Packit 6c4009
	movdqu	16(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	movdqu	32(%rdi), %xmm1
Packit 6c4009
	movdqu	32(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_32)
Packit 6c4009
Packit 6c4009
	mov	48(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 48(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	52(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 52(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	56(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 56(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	60(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 60(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	add	$64, %rsi
Packit 6c4009
	add	$64, %rdi
Packit 6c4009
	jmp	L(continue_0_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_00):
Packit 6c4009
	and	$15, %ch
Packit 6c4009
	jz	L(continue_00_00)
Packit 6c4009
	cmp	$16, %eax
Packit 6c4009
	jb	L(continue_00_0)
Packit 6c4009
	cmp	$32, %eax
Packit 6c4009
	jb	L(continue_00_16)
Packit 6c4009
	cmp	$48, %eax
Packit 6c4009
	jb	L(continue_00_32)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_00_48):
Packit 6c4009
	pcmpeqd	(%rdi), %xmm0
Packit 6c4009
	mov	(%rdi), %eax
Packit 6c4009
	pmovmskb %xmm0, %ecx
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jnz	L(less4_double_words1)
Packit 6c4009
Packit 6c4009
	cmp	(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
Packit 6c4009
	mov	4(%rdi), %eax
Packit 6c4009
	cmp	4(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
Packit 6c4009
	mov	8(%rdi), %eax
Packit 6c4009
	cmp	8(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
Packit 6c4009
	mov	12(%rdi), %eax
Packit 6c4009
	cmp	12(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm2, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	16(%rdi), %xmm2		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm2, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	movdqu	32(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm2, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	32(%rdi), %xmm2		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm2, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_32)
Packit 6c4009
Packit 6c4009
	movdqu	48(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm2, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	48(%rdi), %xmm2		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm2, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_48)
Packit 6c4009
Packit 6c4009
	add	$64, %rsi
Packit 6c4009
	add	$64, %rdi
Packit 6c4009
	jmp	L(continue_00_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_32):
Packit 6c4009
	and	$15, %ch
Packit 6c4009
	jz	L(continue_32_00)
Packit 6c4009
	cmp	$16, %eax
Packit 6c4009
	jb	L(continue_0_32)
Packit 6c4009
	cmp	$32, %eax
Packit 6c4009
	jb	L(continue_16_32)
Packit 6c4009
	cmp	$48, %eax
Packit 6c4009
	jb	L(continue_32_32)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_32_48):
Packit 6c4009
	mov	(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, (%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	4(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 4(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	8(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 8(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	12(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 12(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	16(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 16(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	20(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 20(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	24(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 24(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	28(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 28(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	movdqu	32(%rdi), %xmm1
Packit 6c4009
	movdqu	32(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_32)
Packit 6c4009
Packit 6c4009
	movdqu	48(%rdi), %xmm1
Packit 6c4009
	movdqu	48(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_48)
Packit 6c4009
Packit 6c4009
	add	$64, %rsi
Packit 6c4009
	add	$64, %rdi
Packit 6c4009
	jmp	L(continue_32_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_16):
Packit 6c4009
	and	$15, %ch
Packit 6c4009
	jz	L(continue_16_00)
Packit 6c4009
	cmp	$16, %eax
Packit 6c4009
	jb	L(continue_0_16)
Packit 6c4009
	cmp	$32, %eax
Packit 6c4009
	jb	L(continue_16_16)
Packit 6c4009
	cmp	$48, %eax
Packit 6c4009
	jb	L(continue_16_32)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_16_48):
Packit 6c4009
	mov	(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, (%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	4(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 4(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	8(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 8(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	12(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 12(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rdi), %xmm1
Packit 6c4009
	movdqu	16(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	mov	32(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 32(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	36(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 36(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	40(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 40(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	44(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 44(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	movdqu	48(%rdi), %xmm1
Packit 6c4009
	movdqu	48(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_48)
Packit 6c4009
Packit 6c4009
	add	$64, %rsi
Packit 6c4009
	add	$64, %rdi
Packit 6c4009
	jmp	L(continue_16_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_00_00):
Packit 6c4009
	movdqa	(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	movdqa	16(%rdi), %xmm3
Packit 6c4009
	pcmpeqd	%xmm3, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	16(%rsi), %xmm3		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm3		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm3, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	movdqa	32(%rdi), %xmm5
Packit 6c4009
	pcmpeqd	%xmm5, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	32(%rsi), %xmm5		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm5		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm5, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_32)
Packit 6c4009
Packit 6c4009
	movdqa	48(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	48(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_48)
Packit 6c4009
Packit 6c4009
	add	$64, %rsi
Packit 6c4009
	add	$64, %rdi
Packit 6c4009
	jmp	L(continue_00_00)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_00_32):
Packit 6c4009
	movdqu	(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm2, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	(%rdi), %xmm2		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm2, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	add	$16, %rsi
Packit 6c4009
	add	$16, %rdi
Packit 6c4009
	jmp	L(continue_00_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_00_16):
Packit 6c4009
	movdqu	(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm2, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	(%rdi), %xmm2		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm2, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm2, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	16(%rdi), %xmm2		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm2, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	add	$32, %rsi
Packit 6c4009
	add	$32, %rdi
Packit 6c4009
	jmp	L(continue_00_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_00_0):
Packit 6c4009
	movdqu	(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm2, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	(%rdi), %xmm2		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm2, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm2, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	16(%rdi), %xmm2		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm2, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	movdqu	32(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm2, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	32(%rdi), %xmm2		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm2		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm2, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_32)
Packit 6c4009
Packit 6c4009
	add	$48, %rsi
Packit 6c4009
	add	$48, %rdi
Packit 6c4009
	jmp	L(continue_00_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_48_00):
Packit 6c4009
	pcmpeqd	(%rsi), %xmm0
Packit 6c4009
	mov	(%rdi), %eax
Packit 6c4009
	pmovmskb %xmm0, %ecx
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jnz	L(less4_double_words1)
Packit 6c4009
Packit 6c4009
	cmp	(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
Packit 6c4009
	mov	4(%rdi), %eax
Packit 6c4009
	cmp	4(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
Packit 6c4009
	mov	8(%rdi), %eax
Packit 6c4009
	cmp	8(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
Packit 6c4009
	mov	12(%rdi), %eax
Packit 6c4009
	cmp	12(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	16(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	movdqu	32(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	32(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_32)
Packit 6c4009
Packit 6c4009
	movdqu	48(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	48(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_48)
Packit 6c4009
Packit 6c4009
	add	$64, %rsi
Packit 6c4009
	add	$64, %rdi
Packit 6c4009
	jmp	L(continue_48_00)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_32_00):
Packit 6c4009
	movdqu	(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	add	$16, %rsi
Packit 6c4009
	add	$16, %rdi
Packit 6c4009
	jmp	L(continue_48_00)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_16_00):
Packit 6c4009
	movdqu	(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	16(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	add	$32, %rsi
Packit 6c4009
	add	$32, %rdi
Packit 6c4009
	jmp	L(continue_48_00)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_0_00):
Packit 6c4009
	movdqu	(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	16(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	movdqu	32(%rdi), %xmm1
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	32(%rsi), %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_32)
Packit 6c4009
Packit 6c4009
	add	$48, %rsi
Packit 6c4009
	add	$48, %rdi
Packit 6c4009
	jmp	L(continue_48_00)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_32_32):
Packit 6c4009
	movdqu	(%rdi), %xmm1
Packit 6c4009
	movdqu	(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	add	$16, %rsi
Packit 6c4009
	add	$16, %rdi
Packit 6c4009
	jmp	L(continue_48_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_16_16):
Packit 6c4009
	movdqu	(%rdi), %xmm1
Packit 6c4009
	movdqu	(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rdi), %xmm3
Packit 6c4009
	movdqu	16(%rsi), %xmm4
Packit 6c4009
	pcmpeqd	%xmm3, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm4, %xmm3		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm3		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm3, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	add	$32, %rsi
Packit 6c4009
	add	$32, %rdi
Packit 6c4009
	jmp	L(continue_48_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_0_0):
Packit 6c4009
	movdqu	(%rdi), %xmm1
Packit 6c4009
	movdqu	(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rdi), %xmm3
Packit 6c4009
	movdqu	16(%rsi), %xmm4
Packit 6c4009
	pcmpeqd	%xmm3, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm4, %xmm3		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm3		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm3, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	movdqu	32(%rdi), %xmm1
Packit 6c4009
	movdqu	32(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_32)
Packit 6c4009
Packit 6c4009
	add	$48, %rsi
Packit 6c4009
	add	$48, %rdi
Packit 6c4009
	jmp	L(continue_48_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_0_16):
Packit 6c4009
	movdqu	(%rdi), %xmm1
Packit 6c4009
	movdqu	(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	movdqu	16(%rdi), %xmm1
Packit 6c4009
	movdqu	16(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words_16)
Packit 6c4009
Packit 6c4009
	add	$32, %rsi
Packit 6c4009
	add	$32, %rdi
Packit 6c4009
	jmp	L(continue_32_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_0_32):
Packit 6c4009
	movdqu	(%rdi), %xmm1
Packit 6c4009
	movdqu	(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	add	$16, %rsi
Packit 6c4009
	add	$16, %rdi
Packit 6c4009
	jmp	L(continue_16_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(continue_16_32):
Packit 6c4009
	movdqu	(%rdi), %xmm1
Packit 6c4009
	movdqu	(%rsi), %xmm2
Packit 6c4009
	pcmpeqd	%xmm1, %xmm0		/* Any null double_word? */
Packit 6c4009
	pcmpeqd	%xmm2, %xmm1		/* compare first 4 double_words for equality */
Packit 6c4009
	psubb	%xmm0, %xmm1		/* packed sub of comparison results*/
Packit 6c4009
	pmovmskb %xmm1, %edx
Packit 6c4009
	sub	$0xffff, %edx		/* if first 4 double_words are same, edx == 0xffff */
Packit 6c4009
	jnz	L(less4_double_words)
Packit 6c4009
Packit 6c4009
	add	$16, %rsi
Packit 6c4009
	add	$16, %rdi
Packit 6c4009
	jmp	L(continue_32_48)
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(less4_double_words1):
Packit 6c4009
	cmp	(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%eax, %eax
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	4(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 4(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	8(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 8(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	test	%ecx, %ecx
Packit 6c4009
	jz	L(equal)
Packit 6c4009
Packit 6c4009
	mov	12(%rsi), %ecx
Packit 6c4009
	cmp	%ecx, 12(%rdi)
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	xor	%eax, %eax
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(less4_double_words):
Packit 6c4009
	xor	%eax, %eax
Packit 6c4009
	test	%dl, %dl
Packit 6c4009
	jz	L(next_two_double_words)
Packit 6c4009
	and	$15, %dl
Packit 6c4009
	jz	L(second_double_word)
Packit 6c4009
	mov	(%rdi), %eax
Packit 6c4009
	cmp	(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(second_double_word):
Packit 6c4009
	mov	4(%rdi), %eax
Packit 6c4009
	cmp	4(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(next_two_double_words):
Packit 6c4009
	and	$15, %dh
Packit 6c4009
	jz	L(fourth_double_word)
Packit 6c4009
	mov	8(%rdi), %eax
Packit 6c4009
	cmp	8(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(fourth_double_word):
Packit 6c4009
	mov	12(%rdi), %eax
Packit 6c4009
	cmp	12(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(less4_double_words_16):
Packit 6c4009
	xor	%eax, %eax
Packit 6c4009
	test	%dl, %dl
Packit 6c4009
	jz	L(next_two_double_words_16)
Packit 6c4009
	and	$15, %dl
Packit 6c4009
	jz	L(second_double_word_16)
Packit 6c4009
	mov	16(%rdi), %eax
Packit 6c4009
	cmp	16(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(second_double_word_16):
Packit 6c4009
	mov	20(%rdi), %eax
Packit 6c4009
	cmp	20(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(next_two_double_words_16):
Packit 6c4009
	and	$15, %dh
Packit 6c4009
	jz	L(fourth_double_word_16)
Packit 6c4009
	mov	24(%rdi), %eax
Packit 6c4009
	cmp	24(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(fourth_double_word_16):
Packit 6c4009
	mov	28(%rdi), %eax
Packit 6c4009
	cmp	28(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(less4_double_words_32):
Packit 6c4009
	xor	%eax, %eax
Packit 6c4009
	test	%dl, %dl
Packit 6c4009
	jz	L(next_two_double_words_32)
Packit 6c4009
	and	$15, %dl
Packit 6c4009
	jz	L(second_double_word_32)
Packit 6c4009
	mov	32(%rdi), %eax
Packit 6c4009
	cmp	32(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(second_double_word_32):
Packit 6c4009
	mov	36(%rdi), %eax
Packit 6c4009
	cmp	36(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(next_two_double_words_32):
Packit 6c4009
	and	$15, %dh
Packit 6c4009
	jz	L(fourth_double_word_32)
Packit 6c4009
	mov	40(%rdi), %eax
Packit 6c4009
	cmp	40(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(fourth_double_word_32):
Packit 6c4009
	mov	44(%rdi), %eax
Packit 6c4009
	cmp	44(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(less4_double_words_48):
Packit 6c4009
	xor	%eax, %eax
Packit 6c4009
	test	%dl, %dl
Packit 6c4009
	jz	L(next_two_double_words_48)
Packit 6c4009
	and	$15, %dl
Packit 6c4009
	jz	L(second_double_word_48)
Packit 6c4009
	mov	48(%rdi), %eax
Packit 6c4009
	cmp	48(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(second_double_word_48):
Packit 6c4009
	mov	52(%rdi), %eax
Packit 6c4009
	cmp	52(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(next_two_double_words_48):
Packit 6c4009
	and	$15, %dh
Packit 6c4009
	jz	L(fourth_double_word_48)
Packit 6c4009
	mov	56(%rdi), %eax
Packit 6c4009
	cmp	56(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(fourth_double_word_48):
Packit 6c4009
	mov	60(%rdi), %eax
Packit 6c4009
	cmp	60(%rsi), %eax
Packit 6c4009
	jne	L(nequal)
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(nequal):
Packit 6c4009
	mov	$1, %eax
Packit 6c4009
	jg	L(nequal_bigger)
Packit 6c4009
	neg	%eax
Packit 6c4009
Packit 6c4009
L(nequal_bigger):
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
	.p2align 4
Packit 6c4009
L(equal):
Packit 6c4009
	xor	%rax, %rax
Packit 6c4009
	ret
Packit 6c4009
Packit 6c4009
END (__wcscmp)
Packit 6c4009
#ifndef __wcscmp
Packit 6c4009
libc_hidden_def (__wcscmp)
Packit 6c4009
weak_alias (__wcscmp, wcscmp)
Packit 6c4009
#endif