10a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva/*
20a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaCopyright (c) 2011, Intel Corporation
30a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaAll rights reserved.
40a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
50a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaRedistribution and use in source and binary forms, with or without
60a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievamodification, are permitted provided that the following conditions are met:
70a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
80a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva    * Redistributions of source code must retain the above copyright notice,
90a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva    * this list of conditions and the following disclaimer.
100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva    * Redistributions in binary form must reproduce the above copyright notice,
120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva    * this list of conditions and the following disclaimer in the documentation
130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva    * and/or other materials provided with the distribution.
140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva    * Neither the name of Intel Corporation nor the names of its contributors
160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva    * may be used to endorse or promote products derived from this software
170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva    * without specific prior written permission.
180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
190a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
200a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
210a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
220a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
230a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
250a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
260a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
280a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva*/
300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef USE_AS_WCSCAT
320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef L
340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#  define L(label)	.L##label
350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif
360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_startproc
380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#  define cfi_startproc	.cfi_startproc
390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif
400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_endproc
420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#  define cfi_endproc	.cfi_endproc
430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif
440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_rel_offset
460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#  define cfi_rel_offset(reg, off)	.cfi_rel_offset reg, off
470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif
480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_restore
500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#  define cfi_restore(reg)	.cfi_restore reg
510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif
520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef cfi_adjust_cfa_offset
540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#  define cfi_adjust_cfa_offset(off)	.cfi_adjust_cfa_offset off
550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif
560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef ENTRY
580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#  define ENTRY(name)	\
590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.type name, @function;	\
600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.globl name;	\
610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4;	\
620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrievaname:	\
630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_startproc
640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif
650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# ifndef END
670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#  define END(name)	\
680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_endproc;	\
690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.size name, .-name
700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# endif
710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define CFI_PUSH(REG)	\
730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_adjust_cfa_offset (4);	\
740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_rel_offset (REG, 0)
750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define CFI_POP(REG)	\
770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_adjust_cfa_offset (-4);	\
780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cfi_restore (REG)
790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define PUSH(REG)	pushl REG; CFI_PUSH (REG)
810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define POP(REG)	popl REG; CFI_POP (REG)
820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define PARMS	4
840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define RETURN	POP (%edi); ret; CFI_PUSH (%edi)
850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define STR1	PARMS
870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define STR2	STR1+4
880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva# define LEN	STR2+4
890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva.text
910a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaENTRY (wcscpy)
920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	STR1(%esp), %edx
930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	STR2(%esp), %ecx
940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
95c89ee272fbc2bd2ed244605b8f8c60fa50e9de15Chih-Hung Hsieh	cmpl	$0, (%ecx)
960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(ExitTail4)
97c89ee272fbc2bd2ed244605b8f8c60fa50e9de15Chih-Hung Hsieh	cmpl	$0, 4(%ecx)
980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(ExitTail8)
99c89ee272fbc2bd2ed244605b8f8c60fa50e9de15Chih-Hung Hsieh	cmpl	$0, 8(%ecx)
1000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(ExitTail12)
101c89ee272fbc2bd2ed244605b8f8c60fa50e9de15Chih-Hung Hsieh	cmpl	$0, 12(%ecx)
1020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(ExitTail16)
1030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%edi)
1050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%edx, %edi
1060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
1070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	PUSH	(%esi)
1080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %esi
1090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$-16, %esi
1110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pxor	%xmm0, %xmm0
1130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	(%esi), %xmm0
1140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqu	(%ecx), %xmm1
1150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqu	%xmm1, (%edx)
1160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
1180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%ecx, %esi
1190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
1210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
1220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%edx, %eax
1240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
1250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$-16, %edx
1260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%edx, %eax
1270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%eax, %ecx
1290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ecx, %eax
1300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$0xf, %eax
1310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	$0, %esi
1320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(Align16Both)
1340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$4, %eax
1350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(Shl4)
1360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	cmp	$8, %eax
1370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	je	L(Shl8)
1380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(Shl12)
1390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1400a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Align16Both):
1410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	(%ecx), %xmm1
1420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	16(%ecx), %xmm2
1430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm1, (%edx)
1440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
1450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
1460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%esi), %esi
1470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
1490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
1500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	16(%ecx, %esi), %xmm3
1520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx, %esi)
1530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm3, %xmm0
1540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
1550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%esi), %esi
1560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
1580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
1590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	16(%ecx, %esi), %xmm4
1610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm3, (%edx, %esi)
1620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm4, %xmm0
1630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
1640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%esi), %esi
1650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
1670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
1680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	16(%ecx, %esi), %xmm1
1700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm4, (%edx, %esi)
1710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm1, %xmm0
1720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
1730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%esi), %esi
1740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
1760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
1770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	16(%ecx, %esi), %xmm2
1790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm1, (%edx, %esi)
1800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
1810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
1820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%esi), %esi
1830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
1850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
1860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	16(%ecx, %esi), %xmm3
1880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx, %esi)
1890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm3, %xmm0
1900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
1910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%esi), %esi
1920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
1940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
1950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
1960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm3, (%edx, %esi)
1970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ecx, %eax
1980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx, %esi), %ecx
1990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$-0x40, %ecx
2000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%ecx, %eax
2010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%eax, %edx
2020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	$-0x40, %esi
2040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2050a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Aligned64Loop):
2060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	(%ecx), %xmm2
2070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	32(%ecx), %xmm3
2080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm4
2090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	16(%ecx), %xmm5
2100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm3, %xmm6
2110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	48(%ecx), %xmm7
2120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm5, %xmm2
2130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm7, %xmm3
2140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm2, %xmm3
2150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	64(%edx), %edx
2160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm0, %xmm3
2170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	64(%ecx), %ecx
2180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm3, %eax
2190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
2210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Aligned64Leave)
2220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm4, -64(%edx)
2230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm5, -48(%edx)
2240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm6, -32(%edx)
2250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm7, -16(%edx)
2260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(Aligned64Loop)
2270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2280a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Aligned64Leave):
2290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm4, %xmm0
2300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
2320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
2330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm5, %xmm0
2350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm4, -64(%edx)
2370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%esi), %esi
2380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
2390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
2400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm6, %xmm0
2420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm5, -48(%edx)
2440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%esi), %esi
2450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
2460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
2470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm6, -32(%edx)
2490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm7, %xmm0
2500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%esi), %esi
2520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
2530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(CopyFrom1To16Bytes)
2540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	$-0x40, %esi
2560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm7, -16(%edx)
2570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(Aligned64Loop)
2580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
2600a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl4):
2610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	-4(%ecx), %xmm1
2620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	12(%ecx), %xmm2
2630a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl4Start):
2640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
2650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm3
2670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
2690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl4LoopExit)
2700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$4, %xmm1, %xmm2
2720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
2730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	28(%ecx), %xmm2
2740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
2760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
2770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %ecx
2790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm1
2800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
2820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl4LoopExit)
2830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$4, %xmm3, %xmm2
2850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
2860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	28(%ecx), %xmm2
2870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
2890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
2900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
2910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %ecx
2920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm3
2930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
2950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl4LoopExit)
2960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
2970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$4, %xmm1, %xmm2
2980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
2990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	28(%ecx), %xmm2
3000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
3020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
3030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
3040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %ecx
3050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
3070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl4LoopExit)
3080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$4, %xmm3, %xmm2
3100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
3110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	28(%ecx), %ecx
3120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
3130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ecx, %eax
3150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$-0x40, %ecx
3160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%ecx, %eax
3170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-12(%ecx), %ecx
3180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%eax, %edx
3190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	-4(%ecx), %xmm1
3210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3220a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl4LoopStart):
3230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	12(%ecx), %xmm2
3240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	28(%ecx), %xmm3
3250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm3, %xmm6
3260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	44(%ecx), %xmm4
3270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm4, %xmm7
3280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	60(%ecx), %xmm5
3290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm2, %xmm6
3300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm5, %xmm7
3310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm6, %xmm7
3320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm0, %xmm7
3330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm7, %eax
3340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm5, %xmm7
3350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$4, %xmm4, %xmm5
3360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$4, %xmm3, %xmm4
3370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
3380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl4Start)
3390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$4, %xmm2, %xmm3
3410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	64(%ecx), %ecx
3420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$4, %xmm1, %xmm2
3430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm7, %xmm1
3440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm5, 48(%edx)
3450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm4, 32(%edx)
3460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm3, 16(%edx)
3470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
3480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	64(%edx), %edx
3490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(Shl4LoopStart)
3500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3510a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl4LoopExit):
3520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	(%ecx), %xmm0
3530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	8(%ecx), %esi
3540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	%xmm0, (%edx)
3550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%esi, 8(%edx)
3560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
3570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$12, %edx
3580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$12, %ecx
3590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%al, %al
3600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(ExitHigh)
3610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x01, %al
3620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit4)
3630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	(%ecx), %xmm0
3640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	%xmm0, (%edx)
3650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edi, %eax
3660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
3670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
3690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
3710a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl8):
3720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	-8(%ecx), %xmm1
3730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	8(%ecx), %xmm2
3740a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl8Start):
3750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
3760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
3770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm3
3780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
3800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl8LoopExit)
3810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$8, %xmm1, %xmm2
3830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
3840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	24(%ecx), %xmm2
3850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
3870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
3880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
3890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %ecx
3900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm1
3910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
3930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl8LoopExit)
3940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$8, %xmm3, %xmm2
3960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
3970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	24(%ecx), %xmm2
3980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
3990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
4000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
4010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
4020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %ecx
4030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm3
4040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
4060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl8LoopExit)
4070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$8, %xmm1, %xmm2
4090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
4100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	24(%ecx), %xmm2
4110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
4130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
4140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
4150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %ecx
4160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
4180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl8LoopExit)
4190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$8, %xmm3, %xmm2
4210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
4220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	24(%ecx), %ecx
4230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
4240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ecx, %eax
4260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$-0x40, %ecx
4270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%ecx, %eax
4280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-8(%ecx), %ecx
4290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%eax, %edx
4300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	-8(%ecx), %xmm1
4320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4330a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl8LoopStart):
4340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	8(%ecx), %xmm2
4350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	24(%ecx), %xmm3
4360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm3, %xmm6
4370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	40(%ecx), %xmm4
4380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm4, %xmm7
4390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	56(%ecx), %xmm5
4400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm2, %xmm6
4410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm5, %xmm7
4420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm6, %xmm7
4430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm0, %xmm7
4440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm7, %eax
4450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm5, %xmm7
4460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$8, %xmm4, %xmm5
4470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$8, %xmm3, %xmm4
4480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
4490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl8Start)
4500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$8, %xmm2, %xmm3
4520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	64(%ecx), %ecx
4530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$8, %xmm1, %xmm2
4540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm7, %xmm1
4550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm5, 48(%edx)
4560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm4, 32(%edx)
4570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm3, 16(%edx)
4580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
4590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	64(%edx), %edx
4600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(Shl8LoopStart)
4610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4620a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl8LoopExit):
4630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	(%ecx), %xmm0
4640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	%xmm0, (%edx)
4650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
4660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$8, %edx
4670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	$8, %ecx
4680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%al, %al
4690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(ExitHigh)
4700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x01, %al
4710a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit4)
4720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	(%ecx), %xmm0
4730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	%xmm0, (%edx)
4740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edi, %eax
4750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
4760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4770a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	CFI_PUSH	(%esi)
4780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
4800a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl12):
4810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	-12(%ecx), %xmm1
4820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	4(%ecx), %xmm2
4830a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl12Start):
4840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
4850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
4860a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm3
4870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
4890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl12LoopExit)
4900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$12, %xmm1, %xmm2
4920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
4930a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	20(%ecx), %xmm2
4940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
4950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
4960a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
4970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
4980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %ecx
4990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm1
5000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
5020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl12LoopExit)
5030a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$12, %xmm3, %xmm2
5050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
5060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	20(%ecx), %xmm2
5070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
5090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
5100a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
5110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %ecx
5120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, %xmm3
5130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
5150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl12LoopExit)
5160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$12, %xmm1, %xmm2
5180a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
5190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	20(%ecx), %xmm2
5200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5210a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm2, %xmm0
5220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
5230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm0, %eax
5240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%ecx), %ecx
5250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
5270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl12LoopExit)
5280a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$12, %xmm3, %xmm2
5300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
5310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	20(%ecx), %ecx
5320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	16(%edx), %edx
5330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	%ecx, %eax
5350a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	and	$-0x40, %ecx
5360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%ecx, %eax
5370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	-4(%ecx), %ecx
5380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	sub	%eax, %edx
5390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	-12(%ecx), %xmm1
5410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5420a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl12LoopStart):
5430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	4(%ecx), %xmm2
5440a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	20(%ecx), %xmm3
5450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm3, %xmm6
5460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	36(%ecx), %xmm4
5470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm4, %xmm7
5480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	52(%ecx), %xmm5
5490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm2, %xmm6
5500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm5, %xmm7
5510a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pminub	%xmm6, %xmm7
5520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pcmpeqd	%xmm0, %xmm7
5530a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	pmovmskb %xmm7, %eax
5540a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm5, %xmm7
5550a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$12, %xmm4, %xmm5
5560a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$12, %xmm3, %xmm4
5570a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%eax, %eax
5580a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Shl12Start)
5590a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5600a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$12, %xmm2, %xmm3
5610a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	64(%ecx), %ecx
5620a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	palignr	$12, %xmm1, %xmm2
5630a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm7, %xmm1
5640a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm5, 48(%edx)
5650a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm4, 32(%edx)
5660a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm3, 16(%edx)
5670a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movaps	%xmm2, (%edx)
5680a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	lea	64(%edx), %edx
5690a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jmp	L(Shl12LoopStart)
5700a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5710a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Shl12LoopExit):
5720a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	(%ecx), %esi
5730a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%esi, (%edx)
5740a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	mov	$4, %esi
5750a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5760a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5770a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(CopyFrom1To16Bytes):
5780a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	%esi, %edx
5790a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	add	%esi, %ecx
5800a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5810a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	POP	(%esi)
5820a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	%al, %al
5830a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jz	L(ExitHigh)
5840a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x01, %al
5850a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit4)
5860a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit8):
5870a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	(%ecx), %xmm0
5880a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	%xmm0, (%edx)
5890a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edi, %eax
5900a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
5910a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
5920a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
5930a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(ExitHigh):
5940a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	test	$0x01, %ah
5950a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	jnz	L(Exit12)
5960a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit16):
5970a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqu	(%ecx), %xmm0
5980a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqu	%xmm0, (%edx)
5990a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edi, %eax
6000a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6010a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6020a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6030a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit4):
6040a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	(%ecx), %eax
6050a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%eax, (%edx)
6060a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edi, %eax
6070a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6080a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6090a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6100a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(Exit12):
6110a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	(%ecx), %xmm0
6120a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	%xmm0, (%edx)
6130a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	8(%ecx), %eax
6140a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%eax, 8(%edx)
6150a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edi, %eax
6160a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	RETURN
6170a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6180a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaCFI_POP	(%edi)
6190a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6200a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6210a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(ExitTail4):
6220a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	(%ecx), %eax
6230a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%eax, (%edx)
6240a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edx, %eax
6250a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	ret
6260a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6270a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6280a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(ExitTail8):
6290a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	(%ecx), %xmm0
6300a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	%xmm0, (%edx)
6310a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edx, %eax
6320a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	ret
6330a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6340a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6350a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(ExitTail12):
6360a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	(%ecx), %xmm0
6370a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movlpd	%xmm0, (%edx)
6380a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	8(%ecx), %eax
6390a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%eax, 8(%edx)
6400a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edx, %eax
6410a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	ret
6420a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6430a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	.p2align 4
6440a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaL(ExitTail16):
6450a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqu	(%ecx), %xmm0
6460a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movdqu	%xmm0, (%edx)
6470a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	movl	%edx, %eax
6480a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva	ret
6490a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva
6500a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#ifndef USE_AS_WCSCAT
6510a490665a3a287cd3aee1e7327f2381222c387c4Liubov DmitrievaEND (wcscpy)
6520a490665a3a287cd3aee1e7327f2381222c387c4Liubov Dmitrieva#endif
653