18ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare/*
2baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoCopyright (c) 2010, 2011, 2012, 2013 Intel Corporation
38ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareAll rights reserved.
48ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
58ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareRedistribution and use in source and binary forms, with or without
68ff1a2759a6389bed30d7862d0beb76077032c99Bruce Bearemodification, are permitted provided that the following conditions are met:
78ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
88ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * Redistributions of source code must retain the above copyright notice,
98ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * this list of conditions and the following disclaimer.
108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * Redistributions in binary form must reproduce the above copyright notice,
128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * this list of conditions and the following disclaimer in the documentation
138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * and/or other materials provided with the distribution.
148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * Neither the name of Intel Corporation nor the names of its contributors
168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * may be used to endorse or promote products derived from this software
178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare    * without specific prior written permission.
188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
208ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
218ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
258ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
288ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare*/
308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef L
328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define L(label)	.L##label
338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_startproc
360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_startproc	.cfi_startproc
378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_endproc
400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_endproc	.cfi_endproc
418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_rel_offset
448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_rel_offset(reg, off)	.cfi_rel_offset reg, off
458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_restore
480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_restore(reg)	.cfi_restore reg
498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef cfi_adjust_cfa_offset
528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare# define cfi_adjust_cfa_offset(off)	.cfi_adjust_cfa_offset off
538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
55124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifndef cfi_remember_state
560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_remember_state	.cfi_remember_state
57124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif
58124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare
59124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#ifndef cfi_restore_state
600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define cfi_restore_state	.cfi_restore_state
61124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#endif
62124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare
638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef ENTRY
640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define ENTRY(name)             \
650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.type name, @function;   \
660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.globl name;             \
670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4;              \
680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievaname:                            \
698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cfi_startproc
708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#ifndef END
730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define END(name)               \
740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_endproc;             \
758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	.size name, .-name
768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#endif
778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef MEMCMP
790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define MEMCMP	memcmp
800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define CFI_PUSH(REG)	\
830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_adjust_cfa_offset (4);	\
840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_rel_offset (REG, 0)
850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#define CFI_POP(REG)	\
870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_adjust_cfa_offset (-4);	\
880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_restore (REG)
898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define PUSH(REG)	pushl REG; CFI_PUSH (REG)
918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define POP(REG)	popl REG; CFI_POP (REG)
928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define PARMS		4
948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define BLK1		PARMS
958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define BLK2		BLK1+4
968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define LEN		BLK2+4
978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare#define RETURN_END	POP (%edi); POP (%esi); POP (%ebx); ret
98124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare#define RETURN		RETURN_END; cfi_restore_state; cfi_remember_state
998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* Warning!
1010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva           wmemcmp has to use SIGNED comparison for elements.
1020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva           memcmp has to use UNSIGNED comparison for elemnts.
1030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva*/
1040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.text
1068ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareENTRY (MEMCMP)
1078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	LEN(%esp), %ecx
1080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
109baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#ifdef USE_WCHAR
1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	shl	$2, %ecx
1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(zero)
112baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined USE_UTF16
113baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	shl	$1, %ecx
114baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jz	L(zero)
1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
1160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	BLK1(%esp), %eax
1188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$48, %ecx
1198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	BLK2(%esp), %edx
1208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(48bytesormore)
1210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
122baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$1, %ecx
1248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jbe	L(less1bytes)
1250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
1260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%ebx)
1288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	%ecx, %edx
1298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	%ecx, %eax
1308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
1318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_POP	(%ebx)
1330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
134baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
1368ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less1bytes):
1378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jb	L(zero)
1388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movb	(%eax), %cl
1398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	(%edx), %cl
1408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(zero)
1418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$1, %eax
1428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(1bytesend)
1438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	neg	%eax
1448ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(1bytesend):
1458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
1460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
1478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
1498ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(zero):
1500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
1518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
1528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
1548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(48bytesormore):
1550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%ebx)
1560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%esi)
1570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%edi)
158124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
1590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqu	(%eax), %xmm3
1600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqu	(%edx), %xmm0
1618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	%eax, %edi
1628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	%edx, %esi
1630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqb	%xmm0, %xmm3
1640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm3, %edx
1658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	16(%edi), %edi
1668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	$0xffff, %edx
1688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	16(%esi), %esi
1690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(less16bytes)
1708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edi, %edx
1718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xf, %edx
1728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%edx, %edi
1738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %esi
1748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	%edx, %ecx
1758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%esi, %edx
1768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	and	$0xf, %edx
1778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_0)
1788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%edx, %esi
1798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
180baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$8, %edx
1828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(next_unaligned_table)
1838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %edx
1848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_0)
1858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$1, %edx
1868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_1)
1878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$2, %edx
1888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_2)
1898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$3, %edx
1908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_3)
1918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$4, %edx
1928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_4)
1938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$5, %edx
1948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_5)
1958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$6, %edx
1968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_6)
1978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(shr_7)
1988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 2
2008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(next_unaligned_table):
2018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$8, %edx
2028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_8)
2038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$9, %edx
2048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_9)
2058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$10, %edx
2068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_10)
2078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$11, %edx
2088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_11)
2098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$12, %edx
2108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_12)
2118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$13, %edx
2128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_13)
2138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$14, %edx
2148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(shr_14)
2158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(shr_15)
216baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR)
2170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$0, %edx
2180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(shr_0)
2190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$4, %edx
2200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(shr_4)
2210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$8, %edx
2220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(shr_8)
2230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(shr_12)
224baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16)
225baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$0, %edx
226baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(shr_0)
227baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$2, %edx
228baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(shr_2)
229baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$4, %edx
230baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(shr_4)
231baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$6, %edx
232baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(shr_6)
233baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$8, %edx
234baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(shr_8)
235baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$10, %edx
236baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(shr_10)
237baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$12, %edx
238baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(shr_12)
239baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jmp	L(shr_14)
2400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
2418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
2438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_0):
2448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
2458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_0_gobble)
2468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
2478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%eax, %eax
2488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movaps	(%esi), %xmm1
2498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
2508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movaps	16(%esi), %xmm2
2518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm2
2528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm2
2538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edx
2548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %edi
2558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %esi
2568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
2578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
2588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
2608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %esi,1), %edx
2610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
2620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
2638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
2648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
265124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
266124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
2670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
2688ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_0_gobble):
2698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
2708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	(%esi), %xmm0
2718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	xor	%eax, %eax
2728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
2738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
2748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm2
2758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm2
2768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_0_gobble_loop):
2778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm2
2788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
2798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edx
2808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
2818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm0
2828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm2
2838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
2848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
2858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm2
2868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
2878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
2888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_0_gobble_loop)
2898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm2
2918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
2928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_0_gobble_loop_next)
2938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
2948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
2958ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_0_gobble_loop_next):
2968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
2978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
2988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm2, %edx
3008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
3018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
3028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
3038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
3048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
3068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %esi,1), %edx
3070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
3080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
3108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
311baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
312124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
313124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
3140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_1):
3168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
3178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
3188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
3198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_1_gobble)
3208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
3228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
3238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1,(%esi), %xmm1
3248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
3258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
3278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1,%xmm2, %xmm3
3288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
3298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
3318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
3328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
3338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
3348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
3358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
3378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	1(%ecx, %esi,1), %edx
3380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
3390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
3418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
342124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
343124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
3440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_1_gobble):
3468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
3478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
3488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1,(%esi), %xmm0
3498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
3508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
3528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1,16(%esi), %xmm3
3538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
3548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_1_gobble_loop):
3568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
3578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
3588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
3598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
3608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
3628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1,48(%esi), %xmm3
3638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
3648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
3658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$1,32(%esi), %xmm0
3668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
3678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
3688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
3698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
3718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_1_gobble_loop)
3728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
3738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
3758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_1_gobble_next)
3768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
3778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
3788ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_1_gobble_next):
3798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
3808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
3838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
3848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
3858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
3868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
3878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
3888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
3908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	1(%ecx, %esi,1), %edx
3910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
3920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
394baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif
3958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
3960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
397baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR)
398124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
399124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
4000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_2):
4028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
4038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
4048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
4058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_2_gobble)
4068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
4088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
4098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2,(%esi), %xmm1
4108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
4118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
4138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2,%xmm2, %xmm3
4148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
4158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
4178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
4188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
4198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
4208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
4218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
4228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
4238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	2(%ecx, %esi,1), %edx
4240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
4250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
4278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
428124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
429124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
4300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4318ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_2_gobble):
4328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
4338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
4348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2,(%esi), %xmm0
4358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
4368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
4388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2,16(%esi), %xmm3
4398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
4408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4418ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_2_gobble_loop):
4428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
4438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
4448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
4458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
4468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
4488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2,48(%esi), %xmm3
4498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
4508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
4518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$2,32(%esi), %xmm0
4528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
4538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
4548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
4558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
4578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_2_gobble_loop)
4588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
4598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
4618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_2_gobble_next)
4628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
4638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
4648ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_2_gobble_next):
4658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
4668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
4678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
4698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
4708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
4718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
4728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
4738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
4748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
4768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	2(%ecx, %esi,1), %edx
4770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
4780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
480baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif
4818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
482baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
483124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
484124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
4850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_3):
4878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
4888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
4898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
4908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_3_gobble)
4918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
4938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
4948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3,(%esi), %xmm1
4958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
4968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
4978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
4988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3,%xmm2, %xmm3
4998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
5008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
5028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
5038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
5048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
5058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
5068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
5078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
5088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	3(%ecx, %esi,1), %edx
5090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
5100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
5118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
5128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
513124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
514124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
5150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5168ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_3_gobble):
5178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
5188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
5198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3,(%esi), %xmm0
5208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
5218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
5238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3,16(%esi), %xmm3
5248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
5258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_3_gobble_loop):
5278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
5288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
5298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
5308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
5318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
5338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3,48(%esi), %xmm3
5348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
5358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
5368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$3,32(%esi), %xmm0
5378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
5388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
5398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
5408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
5428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_3_gobble_loop)
5438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
5448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
5468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_3_gobble_next)
5478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
5488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
5498ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_3_gobble_next):
5508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
5518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
5528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
5548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
5558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
5568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
5578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
5588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
5598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
5618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	3(%ecx, %esi,1), %edx
5620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
5630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
5648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
5650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
5668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
567124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
568124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
5690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_4):
5718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
5728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
5738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
5748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_4_gobble)
5758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
5778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
5788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4,(%esi), %xmm1
5798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
5808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
5828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4,%xmm2, %xmm3
5838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
5848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
5858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
5868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
5878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
5888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
5898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
5908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
5918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
5928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	4(%ecx, %esi,1), %edx
5930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
5940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
5958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
5968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
597124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
598124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
5990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_4_gobble):
6018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
6028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
6038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4,(%esi), %xmm0
6048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
6058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
6078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4,16(%esi), %xmm3
6088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
6098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6108ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_4_gobble_loop):
6118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
6128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
6138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
6148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
6158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
6178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4,48(%esi), %xmm3
6188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
6198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
6208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$4,32(%esi), %xmm0
6218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
6228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
6238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
6248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
6268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_4_gobble_loop)
6278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
6288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
6308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_4_gobble_next)
6318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
6328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
6338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_4_gobble_next):
6348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
6358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
6368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
6388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
6398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
6408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
6418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
6428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
6438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
6458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	4(%ecx, %esi,1), %edx
6460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
6470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
6488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
6498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
650baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
651124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
652124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
6530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_5):
6558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
6568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
6578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
6588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_5_gobble)
6598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
6618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
6628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5,(%esi), %xmm1
6638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
6648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
6668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5,%xmm2, %xmm3
6678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
6688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
6708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
6718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
6728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
6738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
6748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
6758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
6768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	5(%ecx, %esi,1), %edx
6770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
6780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
6798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
6808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
681124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
682124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
6830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6848ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_5_gobble):
6858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
6868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
6878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5,(%esi), %xmm0
6888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
6898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
6918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5,16(%esi), %xmm3
6928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
6938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
6948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_5_gobble_loop):
6958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
6968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
6978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
6988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
6998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
7018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5,48(%esi), %xmm3
7028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
7038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
7048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$5,32(%esi), %xmm0
7058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
7068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
7078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
7088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
7108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_5_gobble_loop)
7118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
7128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
7148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_5_gobble_next)
7158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
7168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
7178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_5_gobble_next):
7188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
7198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
7208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
7228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
7238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
7248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
7258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
7268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
7278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
7298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	5(%ecx, %esi,1), %edx
7300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
7310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
7328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
733baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif
7348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
735baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR)
736124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
737124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
7380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
7398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_6):
7408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
7418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
7428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
7438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_6_gobble)
7448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
7468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
7478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6,(%esi), %xmm1
7488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
7498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
7518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6,%xmm2, %xmm3
7528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
7538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
7558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
7568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
7578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
7588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
7598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
7608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
7618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	6(%ecx, %esi,1), %edx
7620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
7630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
7648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
7658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
766124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
767124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
7680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
7698ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_6_gobble):
7708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
7718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
7728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6,(%esi), %xmm0
7738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
7748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
7768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6,16(%esi), %xmm3
7778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
7788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7798ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_6_gobble_loop):
7808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
7818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
7828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
7838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
7848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
7868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6,48(%esi), %xmm3
7878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
7888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
7898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$6,32(%esi), %xmm0
7908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
7918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
7928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
7938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
7958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_6_gobble_loop)
7968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
7978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
7988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
7998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_6_gobble_next)
8008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
8018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
8028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_6_gobble_next):
8038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
8048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
8058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
8078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
8088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
8098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
8108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
8118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
8128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
8148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	6(%ecx, %esi,1), %edx
8150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
8160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
8178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
818baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif
8198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
820baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
821124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
822124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
8230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
8248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_7):
8258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
8268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
8278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
8288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_7_gobble)
8298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
8318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
8328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7,(%esi), %xmm1
8338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
8348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
8368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7,%xmm2, %xmm3
8378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
8388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
8408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
8418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
8428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
8438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
8448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
8458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
8468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	7(%ecx, %esi,1), %edx
8470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
8480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
8498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
8508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
851124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
852124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
8530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
8548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_7_gobble):
8558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
8568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
8578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7,(%esi), %xmm0
8588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
8598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
8618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7,16(%esi), %xmm3
8628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
8638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8648ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_7_gobble_loop):
8658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
8668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
8678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
8688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
8698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
8718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7,48(%esi), %xmm3
8728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
8738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
8748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$7,32(%esi), %xmm0
8758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
8768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
8778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
8788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
8808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_7_gobble_loop)
8818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
8828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
8848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_7_gobble_next)
8858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
8868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
8878ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_7_gobble_next):
8888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
8898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
8908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
8928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
8938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
8948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
8958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
8968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
8978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
8988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
8998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	7(%ecx, %esi,1), %edx
9000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
9010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
9028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
9030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
9048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
905124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
906124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
9070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
9088ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_8):
9098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
9108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
9118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
9128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_8_gobble)
9138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
9158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
9168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8,(%esi), %xmm1
9178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
9188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
9208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8,%xmm2, %xmm3
9218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
9228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
9248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
9258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
9268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
9278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
9288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
9298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
9308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	8(%ecx, %esi,1), %edx
9310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
9320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
9338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
9348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
935124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
936124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
9370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
9388ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_8_gobble):
9398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
9408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
9418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8,(%esi), %xmm0
9428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
9438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
9458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8,16(%esi), %xmm3
9468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
9478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_8_gobble_loop):
9498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
9508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
9518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
9528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
9538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
9558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8,48(%esi), %xmm3
9568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
9578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
9588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$8,32(%esi), %xmm0
9598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
9608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
9618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
9628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
9648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_8_gobble_loop)
9658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
9668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
9688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_8_gobble_next)
9698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
9708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
9718ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_8_gobble_next):
9728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
9738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
9748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
9768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
9778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
9788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
9798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
9808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
9818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
9838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	8(%ecx, %esi,1), %edx
9840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
9850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
9868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
9878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
988baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
989124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
990124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
9910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
9928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_9):
9938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
9948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
9958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
9968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_9_gobble)
9978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
9988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
9998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
10008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9,(%esi), %xmm1
10018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
10028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
10048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9,%xmm2, %xmm3
10058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
10068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
10088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
10098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
10108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
10118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
10128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
10138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
10148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	9(%ecx, %esi,1), %edx
10150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
10160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
10178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
10188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1019124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1020124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
10210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
10228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_9_gobble):
10238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
10248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
10258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9,(%esi), %xmm0
10268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
10278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
10298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9,16(%esi), %xmm3
10308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
10318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_9_gobble_loop):
10338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
10348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
10358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
10368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
10378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
10398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9,48(%esi), %xmm3
10408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
10418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
10428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$9,32(%esi), %xmm0
10438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
10448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
10458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
10468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
10488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_9_gobble_loop)
10498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
10508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
10528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_9_gobble_next)
10538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
10548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
10558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_9_gobble_next):
10568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
10578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
10588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
10608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
10618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
10628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
10638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
10648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
10658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
10678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	9(%ecx, %esi,1), %edx
10680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
10690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
10708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
1071baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif
10728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1073baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR)
1074124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1075124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
10760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
10778ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_10):
10788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
10798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
10808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
10818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_10_gobble)
10828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
10848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
10858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10, (%esi), %xmm1
10868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
10878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
10898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10,%xmm2, %xmm3
10908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
10918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
10928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
10938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
10948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
10958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
10968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
10978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
10988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
10998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	10(%ecx, %esi,1), %edx
11000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
11010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
11028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
11038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1104124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1105124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
11060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
11078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_10_gobble):
11088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
11098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
11108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10, (%esi), %xmm0
11118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
11128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
11148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10, 16(%esi), %xmm3
11158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
11168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_10_gobble_loop):
11188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
11198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
11208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
11218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
11228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
11248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10,48(%esi), %xmm3
11258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
11268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
11278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$10,32(%esi), %xmm0
11288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
11298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
11308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
11318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
11338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_10_gobble_loop)
11348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
11358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
11378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_10_gobble_next)
11388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
11398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
11408ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_10_gobble_next):
11418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
11428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
11438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
11458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
11468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
11478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
11488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
11498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
11508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
11528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	10(%ecx, %esi,1), %edx
11530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
11540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
11558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
1156baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif
11578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1158baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1159124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1160124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
11610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
11628ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_11):
11638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
11648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
11658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
11668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_11_gobble)
11678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
11698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
11708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11, (%esi), %xmm1
11718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
11728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
11748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11, %xmm2, %xmm3
11758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
11768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
11788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
11798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
11808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
11818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
11828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
11838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
11848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	11(%ecx, %esi,1), %edx
11850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
11860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
11878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
11888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1189124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1190124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
11910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
11928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_11_gobble):
11938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
11948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
11958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11, (%esi), %xmm0
11968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
11978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
11988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
11998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11, 16(%esi), %xmm3
12008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
12018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_11_gobble_loop):
12038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
12048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
12058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
12068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
12078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
12098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11,48(%esi), %xmm3
12108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
12118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
12128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$11,32(%esi), %xmm0
12138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
12148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
12158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
12168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
12188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_11_gobble_loop)
12198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
12208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
12228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_11_gobble_next)
12238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
12248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
12258ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_11_gobble_next):
12268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
12278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
12288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
12308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
12318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
12328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
12338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
12348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
12358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
12378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	11(%ecx, %esi,1), %edx
12380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
12390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
12408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
12410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
12428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1243124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1244124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
12450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
12468ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_12):
12478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
12488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
12498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
12508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_12_gobble)
12518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
12538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
12548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12, (%esi), %xmm1
12558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
12568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
12588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12, %xmm2, %xmm3
12598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
12608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
12628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
12638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
12648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
12658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
12668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
12678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
12688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	12(%ecx, %esi,1), %edx
12690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
12700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
12718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
12728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1273124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1274124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
12750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
12768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_12_gobble):
12778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
12788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
12798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12, (%esi), %xmm0
12808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
12818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
12838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12, 16(%esi), %xmm3
12848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
12858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_12_gobble_loop):
12878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
12888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
12898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
12908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
12918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
12928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
12938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12,48(%esi), %xmm3
12948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
12958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
12968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$12,32(%esi), %xmm0
12978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
12988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
12998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
13008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
13028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_12_gobble_loop)
13038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
13048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
13068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_12_gobble_next)
13078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
13088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
13098ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_12_gobble_next):
13108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
13118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
13128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
13148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
13158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
13168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
13178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
13188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
13198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
13218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	12(%ecx, %esi,1), %edx
13220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
13230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
13248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
13258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1326baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1327124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1328124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
13290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
13308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_13):
13318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
13328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
13338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
13348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_13_gobble)
13358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
13378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
13388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13, (%esi), %xmm1
13398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
13408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
13428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13, %xmm2, %xmm3
13438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
13448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
13468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
13478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
13488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
13498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
13508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
13518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
13528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	13(%ecx, %esi,1), %edx
13530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
13540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
13558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
13568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1357124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1358124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
13590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
13608ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_13_gobble):
13618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
13628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
13638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13, (%esi), %xmm0
13648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
13658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
13678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13, 16(%esi), %xmm3
13688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
13698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_13_gobble_loop):
13718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
13728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
13738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
13748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
13758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
13778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13,48(%esi), %xmm3
13788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
13798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
13808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$13,32(%esi), %xmm0
13818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
13828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
13838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
13848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
13868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_13_gobble_loop)
13878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
13888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
13908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_13_gobble_next)
13918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
13928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
13938ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_13_gobble_next):
13948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
13958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
13968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
13978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
13988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
13998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
14008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
14018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
14028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
14038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
14058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	13(%ecx, %esi,1), %edx
14060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
14070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
14088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
1409baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif
14108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1411baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR)
1412124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1413124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
14140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
14158ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_14):
14168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
14178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
14188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
14198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_14_gobble)
14208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
14228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
14238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14, (%esi), %xmm1
14248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
14258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
14278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14, %xmm2, %xmm3
14288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
14298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
14318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
14328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
14338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
14348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
14358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
14368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
14378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	14(%ecx, %esi,1), %edx
14380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
14390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
14408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
14418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1442124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1443124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
14440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
14458ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_14_gobble):
14468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
14478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
14488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14, (%esi), %xmm0
14498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
14508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
14528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14, 16(%esi), %xmm3
14538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
14548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_14_gobble_loop):
14568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
14578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
14588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
14598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
14608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
14628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14,48(%esi), %xmm3
14638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
14648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
14658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$14,32(%esi), %xmm0
14668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
14678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
14688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
14698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
14718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_14_gobble_loop)
14728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
14738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
14758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_14_gobble_next)
14768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
14778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
14788ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_14_gobble_next):
14798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
14808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
14818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
14838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
14848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
14858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
14868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
14878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
14888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
14898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
14908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	14(%ecx, %esi,1), %edx
14910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
14920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
14938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
1494baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif
14958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1496baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
1497124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1498124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
14990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
15008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_15):
15018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$80, %ecx
15028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-48(%ecx), %ecx
15038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%edx, %eax
15048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(shr_15_gobble)
15058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm1
15078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm1, %xmm2
15088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15, (%esi), %xmm1
15098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm1
15108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
15128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15, %xmm2, %xmm3
15138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
15148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm1, %xmm3
15168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
15178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
15188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
15198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
15208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
15218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
15228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	15(%ecx, %esi,1), %edx
15230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
15240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
15258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
15268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1527124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1528124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
15290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
15308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_15_gobble):
15318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
15328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	16(%esi), %xmm0
15338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15, (%esi), %xmm0
15348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	(%edi), %xmm0
15358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	32(%esi), %xmm3
15378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15, 16(%esi), %xmm3
15388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	16(%edi), %xmm3
15398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15408ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_15_gobble_loop):
15418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
15428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$32, %ecx
15438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
15448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
15458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	64(%esi), %xmm3
15478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15,48(%esi), %xmm3
15488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sbb	$0xffff, %edx
15498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	48(%esi), %xmm0
15508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	palignr	$15,32(%esi), %xmm0
15518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	32(%edi), %xmm0
15528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
15538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pcmpeqb	48(%edi), %xmm3
15548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
15568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(shr_15_gobble_loop)
15578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pand	%xmm0, %xmm3
15588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$0, %ecx
15608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jge	L(shr_15_gobble_next)
15618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	inc	%edx
15628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	$32, %ecx
15638ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(shr_15_gobble_next):
15648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%edx, %edx
15658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
15668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm3, %edx
15688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movdqa	%xmm0, %xmm1
15698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%edi), %edi
15708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	32(%esi), %esi
15718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %edx
15728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(exit)
15738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
15748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	(%ecx, %edi,1), %eax
15758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	15(%ecx, %esi,1), %edx
15760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%edi)
15770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
15788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(less48bytes)
15790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
15808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
1581124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_restore_state
1582124a542aa4d78040176f65b28f4958540b5d89aaBruce Beare	cfi_remember_state
15830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
15848ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(exit):
15858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	pmovmskb %xmm1, %ebx
15868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	$0xffff, %ebx
15878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(first16bytes)
15888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%esi), %esi
15898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	-16(%edi), %edi
15908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	%ebx, %edx
15910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
15928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(first16bytes):
15938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	add	%eax, %esi
15948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(less16bytes):
15950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1596baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
15978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	%dl, %dl
15988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jz	L(next_24_bytes)
15998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x01, %dl
16018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte16)
16028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x02, %dl
16048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte17)
16058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x04, %dl
16078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte18)
16088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x08, %dl
16108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte19)
16118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x10, %dl
16138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte20)
16148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x20, %dl
16168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte21)
16178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x40, %dl
16198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte22)
16208ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte23):
16210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-9(%edi), %eax
16220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-9(%esi), %edx
16238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %eax
16248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
16258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
16278ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte16):
16280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-16(%edi), %eax
16290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-16(%esi), %edx
16308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %eax
16318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
16328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
16348ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte17):
16350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-15(%edi), %eax
16360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-15(%esi), %edx
16378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %eax
16388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
16398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
16418ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte18):
16420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-14(%edi), %eax
16430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-14(%esi), %edx
16448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %eax
16458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
16468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
16488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte19):
16490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-13(%edi), %eax
16500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-13(%esi), %edx
16518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %eax
16528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
16538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
16558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte20):
16560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-12(%edi), %eax
16570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-12(%esi), %edx
16588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %eax
16598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
16608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
16628ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte21):
16630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-11(%edi), %eax
16640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-11(%esi), %edx
16658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %eax
16668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
16678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
16698ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte22):
16700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-10(%edi), %eax
16710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-10(%esi), %edx
16728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %eax
16738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN
16748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
16768ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(next_24_bytes):
16778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	8(%edi), %edi
16788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	lea	8(%esi), %esi
16798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x01, %dh
16808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte16)
16818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x02, %dh
16838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte17)
16848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x04, %dh
16868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte18)
16878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x08, %dh
16898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte19)
16908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x10, %dh
16928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte20)
16938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x20, %dh
16958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte21)
16968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
16978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	test	$0x40, %dh
16988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jnz	L(Byte22)
16998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
17000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
17018ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(Byte31):
17020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-9(%edi), %eax
17030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movzbl	-9(%esi), %edx
17048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	sub	%edx, %eax
17058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	RETURN_END
1706baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_WMEMCMP)
17070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
17080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/* special for wmemcmp */
17090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%dl, %dl
17100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(next_two_double_words)
17110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$15, %dl
17120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(second_double_word)
17130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-16(%edi), %ecx
17140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-16(%esi), %ecx
17150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	$1, %eax
17160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jg	L(nequal_bigger)
17170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	neg	%eax
17180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
17190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
17200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
17210a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(second_double_word):
17220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-12(%edi), %ecx
17230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-12(%esi), %ecx
17240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	$1, %eax
17250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jg	L(nequal_bigger)
17260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	neg	%eax
17270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
1728baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
17290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
17300a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(next_two_double_words):
17310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$15, %dh
17320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(fourth_double_word)
17330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-8(%edi), %ecx
17340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-8(%esi), %ecx
17350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	$1, %eax
17360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jg	L(nequal_bigger)
17370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	neg	%eax
17380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
17390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
17400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
17410a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(fourth_double_word):
17420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-4(%edi), %ecx
17430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-4(%esi), %ecx
17440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	$1, %eax
17450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jg	L(nequal_bigger)
17460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	neg	%eax
17470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
17480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
17490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
17500a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(nequal_bigger):
17510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN_END
1752baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
1753baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_MEMCMP16)
1754baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
1755baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko/* special for __memcmp16 */
1756baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	test	%dl, %dl
1757baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jz	L(next_four_words)
1758baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	test	$15, %dl
1759baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jz	L(second_two_words)
1760baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	test	$3, %dl
1761baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jz	L(second_word)
1762baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-16(%edi), %eax
1763baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-16(%esi), %ebx
1764baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %eax
1765baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	RETURN
1766baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
1767baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	.p2align 4
1768baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(second_word):
1769baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-14(%edi), %eax
1770baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-14(%esi), %ebx
1771baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %eax
1772baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	RETURN
1773baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
1774baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	.p2align 4
1775baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(second_two_words):
1776baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	test	$63, %dl
1777baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jz	L(fourth_word)
1778baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-12(%edi), %eax
1779baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-12(%esi), %ebx
1780baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %eax
1781baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	RETURN
1782baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
1783baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	.p2align 4
1784baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(fourth_word):
1785baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-10(%edi), %eax
1786baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-10(%esi), %ebx
1787baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %eax
1788baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	RETURN
1789baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
1790baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	.p2align 4
1791baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(next_four_words):
1792baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	test	$15, %dh
1793baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jz	L(fourth_two_words)
1794baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	test	$3, %dh
1795baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jz	L(sixth_word)
1796baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-8(%edi), %eax
1797baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-8(%esi), %ebx
1798baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %eax
1799baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	RETURN
1800baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
1801baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	.p2align 4
1802baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(sixth_word):
1803baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-6(%edi), %eax
1804baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-6(%esi), %ebx
1805baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %eax
1806baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	RETURN
1807baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
1808baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	.p2align 4
1809baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(fourth_two_words):
1810baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	test	$63, %dh
1811baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jz	L(eighth_word)
1812baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-4(%edi), %eax
1813baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-4(%esi), %ebx
1814baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %eax
1815baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	RETURN
1816baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
1817baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	.p2align 4
1818baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(eighth_word):
1819baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-2(%edi), %eax
1820baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-2(%esi), %ebx
1821baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %eax
1822baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	RETURN
1823baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else
1824baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case
18250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
18260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
18278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	CFI_PUSH (%ebx)
18288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
18308ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more8bytes):
18318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$16, %ecx
18328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(more16bytes)
18338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$8, %ecx
18348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(8bytes)
1835baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
18368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$9, %ecx
18378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(9bytes)
18388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$10, %ecx
18398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(10bytes)
18408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$11, %ecx
18418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(11bytes)
18428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$12, %ecx
18438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(12bytes)
18448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$13, %ecx
18458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(13bytes)
18468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$14, %ecx
18478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(14bytes)
18488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(15bytes)
1849baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16)
18500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(12bytes)
1851baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1852baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$10, %ecx
1853baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(10bytes)
1854baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$12, %ecx
1855baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(12bytes)
1856baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jmp	L(14bytes)
1857baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else
1858baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case
18590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
18608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
18628ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more16bytes):
18638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$24, %ecx
18648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(more24bytes)
18658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$16, %ecx
18668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(16bytes)
1867baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
18688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$17, %ecx
18698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(17bytes)
18708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$18, %ecx
18718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(18bytes)
18728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$19, %ecx
18738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(19bytes)
18748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$20, %ecx
18758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(20bytes)
18768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$21, %ecx
18778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(21bytes)
18788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$22, %ecx
18798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(22bytes)
18808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(23bytes)
1881baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16)
18820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(20bytes)
1883baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1884baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$18, %ecx
1885baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(18bytes)
1886baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$20, %ecx
1887baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(20bytes)
1888baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jmp	L(22bytes)
1889baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else
1890baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case
18910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
18928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
18930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
18948ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more24bytes):
18958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$32, %ecx
18968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(more32bytes)
18978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$24, %ecx
18988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(24bytes)
1899baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
19008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$25, %ecx
19018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(25bytes)
19028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$26, %ecx
19038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(26bytes)
19048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$27, %ecx
19058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(27bytes)
19068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$28, %ecx
19078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(28bytes)
19088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$29, %ecx
19098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(29bytes)
19108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$30, %ecx
19118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(30bytes)
19128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(31bytes)
1913baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16)
19140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(28bytes)
1915baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1916baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$26, %ecx
1917baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(26bytes)
1918baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$28, %ecx
1919baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(28bytes)
1920baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jmp	L(30bytes)
1921baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else
1922baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case
19230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
19248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
19268ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more32bytes):
19278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$40, %ecx
19288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jae	L(more40bytes)
19298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$32, %ecx
19308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(32bytes)
1931baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
19328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$33, %ecx
19338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(33bytes)
19348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$34, %ecx
19358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(34bytes)
19368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$35, %ecx
19378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(35bytes)
19388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$36, %ecx
19398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(36bytes)
19408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$37, %ecx
19418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(37bytes)
19428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$38, %ecx
19438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(38bytes)
19448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(39bytes)
1945baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16)
19460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(36bytes)
1947baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1948baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$34, %ecx
1949baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(34bytes)
1950baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$36, %ecx
1951baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(36bytes)
1952baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jmp	L(38bytes)
1953baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else
1954baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case
19550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
19560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
19570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
19580a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(less48bytes):
19590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$8, %ecx
19600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jae	L(more8bytes)
1961baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
19620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$2, %ecx
19630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(2bytes)
19640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$3, %ecx
19650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(3bytes)
19660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$4, %ecx
19670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(4bytes)
19680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$5, %ecx
19690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(5bytes)
19700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$6, %ecx
19710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(6bytes)
19720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(7bytes)
1973baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_WCHAR) && !defined(USE_UTF16)
19740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(4bytes)
1975baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR)
1976baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$2, %ecx
1977baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(2bytes)
1978baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$4, %ecx
1979baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(4bytes)
1980baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jmp	L(6bytes)
1981baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else
1982baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case
19830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
19848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
19850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
19868ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(more40bytes):
19878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$40, %ecx
19888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(40bytes)
1989baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_WCHAR) && !defined(USE_UTF16)
19908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$41, %ecx
19918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(41bytes)
19928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$42, %ecx
19938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(42bytes)
19948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$43, %ecx
19958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(43bytes)
19968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$44, %ecx
19978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(44bytes)
19988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$45, %ecx
19998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(45bytes)
20008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	$46, %ecx
20018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	je	L(46bytes)
20028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jmp	L(47bytes)
2003baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_UTF16) && !defined(USE_WCHAR)
2004baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$42, %ecx
2005baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(42bytes)
2006baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	cmp	$44, %ecx
2007baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	je	L(44bytes)
2008baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jmp	L(46bytes)
2009baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#endif
20108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2011baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_AS_WMEMCMP) && !defined(USE_AS_MEMCMP16)
20120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
20138ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(44bytes):
20148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-44(%eax), %ecx
20158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-44(%edx), %ebx
20168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20188ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(40bytes):
20198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-40(%eax), %ecx
20208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-40(%edx), %ebx
20218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20238ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(36bytes):
20248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-36(%eax), %ecx
20258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-36(%edx), %ebx
20268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20288ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(32bytes):
20298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-32(%eax), %ecx
20308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-32(%edx), %ebx
20318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20338ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(28bytes):
20348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-28(%eax), %ecx
20358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-28(%edx), %ebx
20368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20388ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(24bytes):
20398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-24(%eax), %ecx
20408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-24(%edx), %ebx
20418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20438ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(20bytes):
20448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-20(%eax), %ecx
20458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-20(%edx), %ebx
20468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20488ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(16bytes):
20498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-16(%eax), %ecx
20508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-16(%edx), %ebx
20518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20538ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(12bytes):
20548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-12(%eax), %ecx
20558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-12(%edx), %ebx
20568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20588ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(8bytes):
20598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-8(%eax), %ecx
20608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-8(%edx), %ebx
20618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20638ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(4bytes):
20648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-4(%eax), %ecx
20658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-4(%edx), %ebx
20668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
20678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0, %eax
20688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
20690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
20700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	ret
20710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH (%ebx)
2072baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_WMEMCMP)
2073baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
20740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
20750a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(44bytes):
20760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-44(%eax), %ecx
20770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-44(%edx), %ecx
20780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
20790a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(40bytes):
20800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-40(%eax), %ecx
20810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-40(%edx), %ecx
20820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
20830a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(36bytes):
20840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-36(%eax), %ecx
20850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-36(%edx), %ecx
20860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
20870a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(32bytes):
20880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-32(%eax), %ecx
20890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-32(%edx), %ecx
20900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
20910a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(28bytes):
20920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-28(%eax), %ecx
20930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-28(%edx), %ecx
20940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
20950a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(24bytes):
20960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-24(%eax), %ecx
20970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-24(%edx), %ecx
20980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
20990a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(20bytes):
21000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-20(%eax), %ecx
21010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-20(%edx), %ecx
21020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
21030a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(16bytes):
21040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-16(%eax), %ecx
21050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-16(%edx), %ecx
21060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
21070a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(12bytes):
21080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-12(%eax), %ecx
21090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-12(%edx), %ecx
21100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
21110a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(8bytes):
21120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-8(%eax), %ecx
21130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-8(%edx), %ecx
21140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
21150a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(4bytes):
21160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	-4(%eax), %ecx
21170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	xor	%eax, %eax
21180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	-4(%edx), %ecx
21190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jne	L(find_diff)
21200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
21218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
21228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	CFI_PUSH (%ebx)
2123baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined USE_AS_MEMCMP16
2124baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
2125baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	.p2align 4
2126baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(46bytes):
2127baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-46(%eax), %ecx
2128baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-46(%edx), %ebx
2129baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2130baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2131baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(44bytes):
2132baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-44(%eax), %ecx
2133baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-44(%edx), %ebx
2134baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2135baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2136baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(42bytes):
2137baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-42(%eax), %ecx
2138baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-42(%edx), %ebx
2139baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2140baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2141baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(40bytes):
2142baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-40(%eax), %ecx
2143baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-40(%edx), %ebx
2144baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2145baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2146baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(38bytes):
2147baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-38(%eax), %ecx
2148baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-38(%edx), %ebx
2149baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2150baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2151baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(36bytes):
2152baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-36(%eax), %ecx
2153baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-36(%edx), %ebx
2154baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2155baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2156baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(34bytes):
2157baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-34(%eax), %ecx
2158baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-34(%edx), %ebx
2159baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2160baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2161baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(32bytes):
2162baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-32(%eax), %ecx
2163baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-32(%edx), %ebx
2164baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2165baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2166baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(30bytes):
2167baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-30(%eax), %ecx
2168baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-30(%edx), %ebx
2169baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2170baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2171baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(28bytes):
2172baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-28(%eax), %ecx
2173baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-28(%edx), %ebx
2174baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2175baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2176baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(26bytes):
2177baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-26(%eax), %ecx
2178baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-26(%edx), %ebx
2179baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2180baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2181baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(24bytes):
2182baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-24(%eax), %ecx
2183baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-24(%edx), %ebx
2184baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2185baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2186baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(22bytes):
2187baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-22(%eax), %ecx
2188baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-22(%edx), %ebx
2189baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2190baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2191baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(20bytes):
2192baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-20(%eax), %ecx
2193baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-20(%edx), %ebx
2194baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2195baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2196baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(18bytes):
2197baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-18(%eax), %ecx
2198baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-18(%edx), %ebx
2199baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2200baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2201baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(16bytes):
2202baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-16(%eax), %ecx
2203baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-16(%edx), %ebx
2204baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2205baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2206baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(14bytes):
2207baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-14(%eax), %ecx
2208baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-14(%edx), %ebx
2209baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2210baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2211baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(12bytes):
2212baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-12(%eax), %ecx
2213baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-12(%edx), %ebx
2214baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2215baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2216baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(10bytes):
2217baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-10(%eax), %ecx
2218baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-10(%edx), %ebx
2219baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2220baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2221baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(8bytes):
2222baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-8(%eax), %ecx
2223baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-8(%edx), %ebx
2224baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2225baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2226baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(6bytes):
2227baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-6(%eax), %ecx
2228baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-6(%edx), %ebx
2229baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2230baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2231baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(4bytes):
2232baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-4(%eax), %ecx
2233baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-4(%edx), %ebx
2234baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %ecx
2235baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	jne	L(memcmp16_exit)
2236baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(2bytes):
2237baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-2(%eax), %eax
2238baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	movzwl	-2(%edx), %ebx
2239baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	subl	%ebx, %eax
2240baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	POP	(%ebx)
2241baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	ret
2242baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	CFI_PUSH (%ebx)
2243baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else
2244baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case
22450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
22468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
2247baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#if !defined(USE_AS_WMEMCMP) && !defined(USE_AS_MEMCMP16)
22480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
22490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
22508ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(45bytes):
22518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-45(%eax), %ecx
22528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-45(%edx), %ebx
22538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
22558ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(41bytes):
22568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-41(%eax), %ecx
22578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-41(%edx), %ebx
22588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
22608ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(37bytes):
22618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-37(%eax), %ecx
22628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-37(%edx), %ebx
22638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22648ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
22658ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(33bytes):
22668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-33(%eax), %ecx
22678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-33(%edx), %ebx
22688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
22708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(29bytes):
22718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-29(%eax), %ecx
22728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-29(%edx), %ebx
22738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
22758ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(25bytes):
22768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-25(%eax), %ecx
22778ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-25(%edx), %ebx
22788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
22808ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(21bytes):
22818ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-21(%eax), %ecx
22828ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-21(%edx), %ebx
22838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
22858ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(17bytes):
22868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-17(%eax), %ecx
22878ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-17(%edx), %ebx
22888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
22908ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(13bytes):
22918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-13(%eax), %ecx
22928ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-13(%edx), %ebx
22938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
22958ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(9bytes):
22968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-9(%eax), %ecx
22978ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-9(%edx), %ebx
22988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
22998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23008ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(5bytes):
23018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-5(%eax), %ecx
23028ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-5(%edx), %ebx
23038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	-1(%eax), %ecx
23068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	-1(%edx), %cl
23078ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0, %eax
23088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(end)
23090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
23108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
23118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	CFI_PUSH (%ebx)
23128ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
23130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
23148ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(46bytes):
23158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-46(%eax), %ecx
23168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-46(%edx), %ebx
23178ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23198ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(42bytes):
23208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-42(%eax), %ecx
23218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-42(%edx), %ebx
23228ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23248ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(38bytes):
23258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-38(%eax), %ecx
23268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-38(%edx), %ebx
23278ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23298ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(34bytes):
23308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-34(%eax), %ecx
23318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-34(%edx), %ebx
23328ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23348ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(30bytes):
23358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-30(%eax), %ecx
23368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-30(%edx), %ebx
23378ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23398ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(26bytes):
23408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-26(%eax), %ecx
23418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-26(%edx), %ebx
23428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23448ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(22bytes):
23458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-22(%eax), %ecx
23468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-22(%edx), %ebx
23478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23488ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23498ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(18bytes):
23508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-18(%eax), %ecx
23518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-18(%edx), %ebx
23528ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23538ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23548ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(14bytes):
23558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-14(%eax), %ecx
23568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-14(%edx), %ebx
23578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23598ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(10bytes):
23608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-10(%eax), %ecx
23618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-10(%edx), %ebx
23628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23638ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23648ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(6bytes):
23658ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-6(%eax), %ecx
23668ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	-6(%edx), %ebx
23678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23698ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(2bytes):
23708ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzwl	-2(%eax), %ecx
23718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzwl	-2(%edx), %ebx
23728ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%bl, %cl
23738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(end)
23748ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%bh, %ch
23758ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0, %eax
23768ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(end)
23770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
23788ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
23798ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	CFI_PUSH (%ebx)
23808ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
23810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
23828ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(47bytes):
23838ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-47(%eax), %ecx
23848ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-47(%edx), %ebx
23858ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23868ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23878ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(43bytes):
23888ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-43(%eax), %ecx
23898ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-43(%edx), %ebx
23908ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23918ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23928ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(39bytes):
23938ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-39(%eax), %ecx
23948ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-39(%edx), %ebx
23958ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
23968ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
23978ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(35bytes):
23988ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-35(%eax), %ecx
23998ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-35(%edx), %ebx
24008ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
24018ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
24028ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(31bytes):
24038ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-31(%eax), %ecx
24048ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-31(%edx), %ebx
24058ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
24068ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
24078ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(27bytes):
24088ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-27(%eax), %ecx
24098ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-27(%edx), %ebx
24108ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
24118ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
24128ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(23bytes):
24138ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-23(%eax), %ecx
24148ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-23(%edx), %ebx
24158ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
24168ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
24178ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(19bytes):
24188ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-19(%eax), %ecx
24198ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-19(%edx), %ebx
24208ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
24218ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
24228ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(15bytes):
24238ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-15(%eax), %ecx
24248ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-15(%edx), %ebx
24258ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
24268ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
24278ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(11bytes):
24288ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-11(%eax), %ecx
24298ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-11(%edx), %ebx
24308ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
24318ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
24328ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(7bytes):
24338ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-7(%eax), %ecx
24348ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movl	-7(%edx), %ebx
24358ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%ebx, %ecx
24368ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(find_diff)
24378ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(3bytes):
24388ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzwl	-3(%eax), %ecx
24398ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzwl	-3(%edx), %ebx
24408ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%bl, %cl
24418ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(end)
24428ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%bx, %cx
24438ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(end)
24448ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	movzbl	-1(%eax), %eax
24458ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	-1(%edx), %al
24468ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$0, %eax
24478ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(end)
24480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
24498ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
24508ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	CFI_PUSH (%ebx)
24518ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
24520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
24538ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(find_diff):
24548ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmpb	%bl, %cl
24558ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(end)
24568ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%bx, %cx
24578ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(end)
24588ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	$16,%ecx
24598ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	shr	$16,%ebx
24608ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%bl, %cl
24618ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	jne	L(end)
24628ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	cmp	%bx, %cx
24630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
24640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
24658ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(end):
24660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
24678ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	mov	$1, %eax
24688ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ja	L(bigger)
24698ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	neg	%eax
24708ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareL(bigger):
24718ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare	ret
2472baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_WMEMCMP)
24738ff1a2759a6389bed30d7862d0beb76077032c99Bruce Beare
24740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
24750a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(find_diff):
24760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%ebx)
24770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	$1, %eax
24780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jg	L(find_diff_bigger)
24790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	neg	%eax
24800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	ret
24810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
24820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
24830a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(find_diff_bigger):
24840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	ret
24850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2486baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#elif defined(USE_AS_MEMCMP16)
2487baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko
2488baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	.p2align 4
2489baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander IvchenkoL(memcmp16_exit):
2490baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	POP	(%ebx)
2491baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	mov	%ecx, %eax
2492baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko	ret
2493baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko#else
2494baa91f4f8974b6e9a81fa3aa49f051b3bf823653Alexander Ivchenko# error Unreachable preprocessor case
24950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
24968ff1a2759a6389bed30d7862d0beb76077032c99Bruce BeareEND (MEMCMP)
2497