Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Android/bionic/bionic/libc/arch-x86/string/   (Android Betriebssystem Version 17©)  Datei vom 26.5.2026 mit Größe 70 kB image not shown  

Quelle  ssse3-strcpy-atom.S

  Sprache: Sparc
 

/*
Copyright (c) 2011, Intel Corporation
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
    * this list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright notice,
    * this list of conditions and the following disclaimer in the documentation
    * and/or other materials provided with the distribution.

    * Neither the name of Intel Corporation nor the names of its contributors
    * may be used to endorse or promote products derived from this software
    * without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/


#ifndef USE_AS_STRCAT

# ifndef L
#  define L(label) .L##label
# endif

# ifndef cfi_startproc
#  define cfi_startproc .cfi_startproc
# endif

# ifndef cfi_endproc
#  define cfi_endproc .cfi_endproc
# endif

# ifndef cfi_rel_offset
#  define cfi_rel_offset(reg, off) .cfi_rel_offset reg, off
# endif

# ifndef cfi_restore
#  define cfi_restore(reg) .cfi_restore reg
# endif

# ifndef cfi_adjust_cfa_offset
#  define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off
# endif

# ifndef ENTRY
#  define ENTRY(name) \
 .type name, @function; \
 .globl name; \
 .p2align 4; \
name: \
 cfi_startproc
# endif

# ifndef END
#  define END(name) \
 cfi_endproc; \
 .size name, .-name
# endif

# define CFI_PUSH(REG) \
 cfi_adjust_cfa_offset (4); \
 cfi_rel_offset (REG, 0)

# define CFI_POP(REG) \
 cfi_adjust_cfa_offset (-4); \
 cfi_restore (REG)

# define PUSH(REG) pushl REG; CFI_PUSH (REG)
# define POP(REG) popl REG; CFI_POP (REG)

# ifndef STRCPY
#  define STRCPY  strcpy_atom
# endif

# ifdef USE_AS_STRNCPY
#  define PARMS  8
#  define ENTRANCE PUSH (%ebx)
#  define RETURN  POP (%ebx); ret; CFI_PUSH (%ebx);
#  define RETURN1  POP (%edi); POP (%ebx); ret; CFI_PUSH (%ebx); CFI_PUSH (%edi)
# else
#  define PARMS  4
#  define ENTRANCE
#  define RETURN  ret
#  define RETURN1  POP (%edi); ret; CFI_PUSH (%edi)
# endif

# ifdef USE_AS_STPCPY
#  define SAVE_RESULT(n)  lea n(%edx), %eax
#  define SAVE_RESULT_TAIL(n)  lea n(%edx), %eax
# else
#  define SAVE_RESULT(n)  movl %edi, %eax
#  define SAVE_RESULT_TAIL(n)  movl %edx, %eax
# endif

# define STR1  PARMS
# define STR2  STR1+4
# define LEN  STR2+4

/* In this code following instructions are used for copying:
 movb - 1 byte
 movw - 2 byte
 movl - 4 byte
 movlpd - 8 byte
 movaps - 16 byte - requires 16 byte alignment
 of sourse and destination adresses.
*/


.text
ENTRY (STRCPY)
 ENTRANCE
 mov STR1(%esp), %edx
 mov STR2(%esp), %ecx
# ifdef USE_AS_STRNCPY
 movl LEN(%esp), %ebx
 cmp $8, %ebx
 jbe L(StrncpyExit8Bytes)
# endif
 cmpb $0, (%ecx)
 jz L(ExitTail1)
 cmpb $01(%ecx)
 jz L(ExitTail2)
 cmpb $02(%ecx)
 jz L(ExitTail3)
 cmpb $03(%ecx)
 jz L(ExitTail4)
 cmpb $04(%ecx)
 jz L(ExitTail5)
 cmpb $05(%ecx)
 jz L(ExitTail6)
 cmpb $06(%ecx)
 jz L(ExitTail7)
 cmpb $07(%ecx)
 jz L(ExitTail8)
# ifdef USE_AS_STRNCPY
 cmp $16, %ebx
 jb L(StrncpyExit15Bytes)
# endif
 cmpb $08(%ecx)
 jz L(ExitTail9)
 cmpb $09(%ecx)
 jz L(ExitTail10)
 cmpb $010(%ecx)
 jz L(ExitTail11)
 cmpb $011(%ecx)
 jz L(ExitTail12)
 cmpb $012(%ecx)
 jz L(ExitTail13)
 cmpb $013(%ecx)
 jz L(ExitTail14)
 cmpb $014(%ecx)
 jz L(ExitTail15)
# if defined USE_AS_STRNCPY && !defined USE_AS_STRLCPY
 cmp $16, %ebx
 je L(ExitTail16)
# endif
 cmpb $015(%ecx)
 jz L(ExitTail16)

# if defined USE_AS_STRNCPY && defined USE_AS_STRLCPY
 cmp $16, %ebx
 je L(StrlcpyExitTail16)
# endif

 PUSH (%edi)
# ifndef USE_AS_STRLCPY
 mov %edx, %edi
# else
 mov %ecx, %edi
# endif
#endif
 PUSH (%esi)
#ifdef USE_AS_STRNCPY
 mov %ecx, %esi
 sub $16, %ebx
 and $0xf, %esi

/* add 16 bytes ecx_offset to ebx */

 add %esi, %ebx
#endif
 lea 16(%ecx), %esi
 and $-16, %esi
 pxor %xmm0, %xmm0
 movlpd (%ecx), %xmm1
 movlpd %xmm1, (%edx)

 pcmpeqb (%esi), %xmm0
 movlpd 8(%ecx), %xmm1
 movlpd %xmm1, 8(%edx)

 pmovmskb %xmm0, %eax
 sub %ecx, %esi

#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase2OrCase3)
#endif
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 mov %edx, %eax
 lea 16(%edx), %edx
 and $-16, %edx
 sub %edx, %eax

#ifdef USE_AS_STRNCPY
 add %eax, %esi
 lea -1(%esi), %esi
 and $1<<31, %esi
 test %esi, %esi
 jnz L(ContinueCopy)
 lea 16(%ebx), %ebx

L(ContinueCopy):
#endif
 sub %eax, %ecx
 mov %ecx, %eax
 and $0xf, %eax
 mov $0, %esi

/* case: ecx_offset == edx_offset */

 jz L(Align16Both)

 cmp $8, %eax
 jae L(ShlHigh8)
 cmp $1, %eax
 je L(Shl1)
 cmp $2, %eax
 je L(Shl2)
 cmp $3, %eax
 je L(Shl3)
 cmp $4, %eax
 je L(Shl4)
 cmp $5, %eax
 je L(Shl5)
 cmp $6, %eax
 je L(Shl6)
 jmp L(Shl7)

L(ShlHigh8):
 je L(Shl8)
 cmp $9, %eax
 je L(Shl9)
 cmp $10, %eax
 je L(Shl10)
 cmp $11, %eax
 je L(Shl11)
 cmp $12, %eax
 je L(Shl12)
 cmp $13, %eax
 je L(Shl13)
 cmp $14, %eax
 je L(Shl14)
 jmp L(Shl15)

L(Align16Both):
 movaps (%ecx), %xmm1
 movaps 16(%ecx), %xmm2
 movaps %xmm1, (%edx)
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 lea 16(%esi), %esi
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase2OrCase3)
#endif
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 movaps 16(%ecx, %esi), %xmm3
 movaps %xmm2, (%edx, %esi)
 pcmpeqb %xmm3, %xmm0
 pmovmskb %xmm0, %eax
 lea 16(%esi), %esi
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase2OrCase3)
#endif
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 movaps 16(%ecx, %esi), %xmm4
 movaps %xmm3, (%edx, %esi)
 pcmpeqb %xmm4, %xmm0
 pmovmskb %xmm0, %eax
 lea 16(%esi), %esi
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase2OrCase3)
#endif
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 movaps 16(%ecx, %esi), %xmm1
 movaps %xmm4, (%edx, %esi)
 pcmpeqb %xmm1, %xmm0
 pmovmskb %xmm0, %eax
 lea 16(%esi), %esi
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase2OrCase3)
#endif
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 movaps 16(%ecx, %esi), %xmm2
 movaps %xmm1, (%edx, %esi)
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 lea 16(%esi), %esi
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase2OrCase3)
#endif
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 movaps 16(%ecx, %esi), %xmm3
 movaps %xmm2, (%edx, %esi)
 pcmpeqb %xmm3, %xmm0
 pmovmskb %xmm0, %eax
 lea 16(%esi), %esi
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase2OrCase3)
#endif
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 movaps %xmm3, (%edx, %esi)
 mov %ecx, %eax
 lea 16(%ecx, %esi), %ecx
 and $-0x40, %ecx
 sub %ecx, %eax
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 lea 112(%ebx, %eax), %ebx
#endif
 mov $-0x40, %esi

L(Aligned64Loop):
 movaps (%ecx), %xmm2
 movaps 32(%ecx), %xmm3
 movaps %xmm2, %xmm4
 movaps 16(%ecx), %xmm5
 movaps %xmm3, %xmm6
 movaps 48(%ecx), %xmm7
 pminub %xmm5, %xmm2
 pminub %xmm7, %xmm3
 pminub %xmm2, %xmm3
 lea 64(%edx), %edx
 pcmpeqb %xmm0, %xmm3
 lea 64(%ecx), %ecx
 pmovmskb %xmm3, %eax
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeaveCase2OrCase3)
#endif
 test %eax, %eax
 jnz L(Aligned64Leave)
 movaps %xmm4, -64(%edx)
 movaps %xmm5, -48(%edx)
 movaps %xmm6, -32(%edx)
 movaps %xmm7, -16(%edx)
 jmp L(Aligned64Loop)

L(Aligned64Leave):
#ifdef USE_AS_STRNCPY
 lea 48(%ebx), %ebx
#endif
 pcmpeqb %xmm4, %xmm0
 pmovmskb %xmm0, %eax
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 pcmpeqb %xmm5, %xmm0
#ifdef USE_AS_STRNCPY
 lea -16(%ebx), %ebx
#endif
 pmovmskb %xmm0, %eax
 movaps %xmm4, -64(%edx)
 lea 16(%esi), %esi
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 pcmpeqb %xmm6, %xmm0
#ifdef USE_AS_STRNCPY
 lea -16(%ebx), %ebx
#endif
 pmovmskb %xmm0, %eax
 movaps %xmm5, -48(%edx)
 lea 16(%esi), %esi
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 movaps %xmm6, -32(%edx)
 pcmpeqb %xmm7, %xmm0
#ifdef USE_AS_STRNCPY
 lea -16(%ebx), %ebx
#endif
 pmovmskb %xmm0, %eax
 lea 16(%esi), %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl1):
 movaps -1(%ecx), %xmm1
 movaps 15(%ecx), %xmm2
L(Shl1Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit1Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl1LoopExit)

 palignr $1, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 31(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit1Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl1LoopExit)

 palignr $1, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 31(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit1Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl1LoopExit)

 palignr $1, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 31(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit1Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl1LoopExit)

 palignr $1, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 31(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -15(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -1(%ecx), %xmm1

L(Shl1LoopStart):
 movaps 15(%ecx), %xmm2
 movaps 31(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 47(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 63(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $1, %xmm4, %xmm5
 palignr $1, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl1Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave1)
#endif
 palignr $1, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $1, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl1LoopStart)

L(Shl1LoopExit):
 movlpd (%ecx), %xmm0
 movlpd %xmm0, (%edx)
 movlpd 7(%ecx), %xmm0
 movlpd %xmm0, 7(%edx)
 mov $15, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl2):
 movaps -2(%ecx), %xmm1
 movaps 14(%ecx), %xmm2
L(Shl2Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit2Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl2LoopExit)

 palignr $2, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 30(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit2Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl2LoopExit)

 palignr $2, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 30(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit2Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl2LoopExit)

 palignr $2, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 30(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit2Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl2LoopExit)

 palignr $2, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 30(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -14(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -2(%ecx), %xmm1

L(Shl2LoopStart):
 movaps 14(%ecx), %xmm2
 movaps 30(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 46(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 62(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $2, %xmm4, %xmm5
 palignr $2, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl2Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave2)
#endif
 palignr $2, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $2, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl2LoopStart)

L(Shl2LoopExit):
 movlpd (%ecx), %xmm0
 movlpd 6(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 6(%edx)
 mov $14, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl3):
 movaps -3(%ecx), %xmm1
 movaps 13(%ecx), %xmm2
L(Shl3Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit3Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl3LoopExit)

 palignr $3, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 29(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit3Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl3LoopExit)

 palignr $3, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 29(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit3Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl3LoopExit)

 palignr $3, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 29(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit3Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl3LoopExit)

 palignr $3, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 29(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -13(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -3(%ecx), %xmm1

L(Shl3LoopStart):
 movaps 13(%ecx), %xmm2
 movaps 29(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 45(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 61(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $3, %xmm4, %xmm5
 palignr $3, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl3Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave3)
#endif
 palignr $3, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $3, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl3LoopStart)

L(Shl3LoopExit):
 movlpd (%ecx), %xmm0
 movlpd 5(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 5(%edx)
 mov $13, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl4):
 movaps -4(%ecx), %xmm1
 movaps 12(%ecx), %xmm2
L(Shl4Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit4Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl4LoopExit)

 palignr $4, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 28(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit4Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl4LoopExit)

 palignr $4, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 28(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit4Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl4LoopExit)

 palignr $4, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 28(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit4Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl4LoopExit)

 palignr $4, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 28(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -12(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -4(%ecx), %xmm1

L(Shl4LoopStart):
 movaps 12(%ecx), %xmm2
 movaps 28(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 44(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 60(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $4, %xmm4, %xmm5
 palignr $4, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl4Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave4)
#endif
 palignr $4, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $4, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl4LoopStart)

L(Shl4LoopExit):
 movlpd (%ecx), %xmm0
 movl 8(%ecx), %esi
 movlpd %xmm0, (%edx)
 movl %esi, 8(%edx)
 mov $12, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl5):
 movaps -5(%ecx), %xmm1
 movaps 11(%ecx), %xmm2
L(Shl5Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit5Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl5LoopExit)

 palignr $5, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 27(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit5Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl5LoopExit)

 palignr $5, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 27(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit5Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl5LoopExit)

 palignr $5, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 27(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit5Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl5LoopExit)

 palignr $5, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 27(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -11(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -5(%ecx), %xmm1

L(Shl5LoopStart):
 movaps 11(%ecx), %xmm2
 movaps 27(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 43(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 59(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $5, %xmm4, %xmm5
 palignr $5, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl5Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave5)
#endif
 palignr $5, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $5, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl5LoopStart)

L(Shl5LoopExit):
 movlpd (%ecx), %xmm0
 movl 7(%ecx), %esi
 movlpd %xmm0, (%edx)
 movl %esi, 7(%edx)
 mov $11, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl6):
 movaps -6(%ecx), %xmm1
 movaps 10(%ecx), %xmm2
L(Shl6Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit6Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl6LoopExit)

 palignr $6, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 26(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit6Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl6LoopExit)

 palignr $6, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 26(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit6Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl6LoopExit)

 palignr $6, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 26(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit6Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl6LoopExit)

 palignr $6, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 26(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -10(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -6(%ecx), %xmm1

L(Shl6LoopStart):
 movaps 10(%ecx), %xmm2
 movaps 26(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 42(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 58(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $6, %xmm4, %xmm5
 palignr $6, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl6Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave6)
#endif
 palignr $6, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $6, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl6LoopStart)

L(Shl6LoopExit):
 movlpd (%ecx), %xmm0
 movl 6(%ecx), %esi
 movlpd %xmm0, (%edx)
 movl %esi, 6(%edx)
 mov $10, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl7):
 movaps -7(%ecx), %xmm1
 movaps 9(%ecx), %xmm2
L(Shl7Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit7Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl7LoopExit)

 palignr $7, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 25(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit7Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl7LoopExit)

 palignr $7, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 25(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit7Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl7LoopExit)

 palignr $7, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 25(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit7Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl7LoopExit)

 palignr $7, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 25(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -9(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -7(%ecx), %xmm1

L(Shl7LoopStart):
 movaps 9(%ecx), %xmm2
 movaps 25(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 41(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 57(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $7, %xmm4, %xmm5
 palignr $7, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl7Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave7)
#endif
 palignr $7, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $7, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl7LoopStart)

L(Shl7LoopExit):
 movlpd (%ecx), %xmm0
 movl 5(%ecx), %esi
 movlpd %xmm0, (%edx)
 movl %esi, 5(%edx)
 mov $9, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl8):
 movaps -8(%ecx), %xmm1
 movaps 8(%ecx), %xmm2
L(Shl8Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit8Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl8LoopExit)

 palignr $8, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 24(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit8Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl8LoopExit)

 palignr $8, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 24(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit8Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl8LoopExit)

 palignr $8, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 24(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit8Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl8LoopExit)

 palignr $8, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 24(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -8(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -8(%ecx), %xmm1

L(Shl8LoopStart):
 movaps 8(%ecx), %xmm2
 movaps 24(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 40(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 56(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $8, %xmm4, %xmm5
 palignr $8, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl8Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave8)
#endif
 palignr $8, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $8, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl8LoopStart)

L(Shl8LoopExit):
 movlpd (%ecx), %xmm0
 movlpd %xmm0, (%edx)
 mov $8, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl9):
 movaps -9(%ecx), %xmm1
 movaps 7(%ecx), %xmm2
L(Shl9Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit9Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl9LoopExit)

 palignr $9, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 23(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit9Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl9LoopExit)

 palignr $9, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 23(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit9Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl9LoopExit)

 palignr $9, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 23(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit9Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl9LoopExit)

 palignr $9, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 23(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -7(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -9(%ecx), %xmm1

L(Shl9LoopStart):
 movaps 7(%ecx), %xmm2
 movaps 23(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 39(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 55(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $9, %xmm4, %xmm5
 palignr $9, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl9Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave9)
#endif
 palignr $9, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $9, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl9LoopStart)

L(Shl9LoopExit):
 movlpd -1(%ecx), %xmm0
 movlpd %xmm0, -1(%edx)
 mov $7, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl10):
 movaps -10(%ecx), %xmm1
 movaps 6(%ecx), %xmm2
L(Shl10Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit10Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl10LoopExit)

 palignr $10, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 22(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit10Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl10LoopExit)

 palignr $10, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 22(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit10Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl10LoopExit)

 palignr $10, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 22(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit10Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl10LoopExit)

 palignr $10, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 22(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -6(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -10(%ecx), %xmm1

L(Shl10LoopStart):
 movaps 6(%ecx), %xmm2
 movaps 22(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 38(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 54(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $10, %xmm4, %xmm5
 palignr $10, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl10Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave10)
#endif
 palignr $10, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $10, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl10LoopStart)

L(Shl10LoopExit):
 movlpd -2(%ecx), %xmm0
 movlpd %xmm0, -2(%edx)
 mov $6, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl11):
 movaps -11(%ecx), %xmm1
 movaps 5(%ecx), %xmm2
L(Shl11Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit11Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl11LoopExit)

 palignr $11, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 21(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit11Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl11LoopExit)

 palignr $11, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 21(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit11Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl11LoopExit)

 palignr $11, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 21(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit11Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl11LoopExit)

 palignr $11, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 21(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -5(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -11(%ecx), %xmm1

L(Shl11LoopStart):
 movaps 5(%ecx), %xmm2
 movaps 21(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 37(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 53(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $11, %xmm4, %xmm5
 palignr $11, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl11Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave11)
#endif
 palignr $11, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $11, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl11LoopStart)

L(Shl11LoopExit):
 movlpd -3(%ecx), %xmm0
 movlpd %xmm0, -3(%edx)
 mov $5, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl12):
 movaps -12(%ecx), %xmm1
 movaps 4(%ecx), %xmm2
L(Shl12Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit12Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl12LoopExit)

 palignr $12, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 20(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit12Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl12LoopExit)

 palignr $12, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 20(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit12Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl12LoopExit)

 palignr $12, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 20(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit12Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl12LoopExit)

 palignr $12, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 20(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -4(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -12(%ecx), %xmm1

L(Shl12LoopStart):
 movaps 4(%ecx), %xmm2
 movaps 20(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 36(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 52(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $12, %xmm4, %xmm5
 palignr $12, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl12Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave12)
#endif
 palignr $12, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $12, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl12LoopStart)

L(Shl12LoopExit):
 movl (%ecx), %esi
 movl %esi, (%edx)
 mov $4, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl13):
 movaps -13(%ecx), %xmm1
 movaps 3(%ecx), %xmm2
L(Shl13Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit13Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl13LoopExit)

 palignr $13, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 19(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit13Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl13LoopExit)

 palignr $13, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 19(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit13Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl13LoopExit)

 palignr $13, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 19(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit13Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl13LoopExit)

 palignr $13, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 19(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -3(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -13(%ecx), %xmm1

L(Shl13LoopStart):
 movaps 3(%ecx), %xmm2
 movaps 19(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 35(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 51(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $13, %xmm4, %xmm5
 palignr $13, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl13Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave13)
#endif
 palignr $13, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $13, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl13LoopStart)

L(Shl13LoopExit):
 movl -1(%ecx), %esi
 movl %esi, -1(%edx)
 mov $3, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl14):
 movaps -14(%ecx), %xmm1
 movaps 2(%ecx), %xmm2
L(Shl14Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit14Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl14LoopExit)

 palignr $14, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 18(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit14Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl14LoopExit)

 palignr $14, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 18(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit14Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl14LoopExit)

 palignr $14, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 18(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit14Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl14LoopExit)

 palignr $14, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 18(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -2(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -14(%ecx), %xmm1

L(Shl14LoopStart):
 movaps 2(%ecx), %xmm2
 movaps 18(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 34(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 50(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $14, %xmm4, %xmm5
 palignr $14, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl14Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave14)
#endif
 palignr $14, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $14, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl14LoopStart)

L(Shl14LoopExit):
 movl -2(%ecx), %esi
 movl %esi, -2(%edx)
 mov $2, %esi
 jmp L(CopyFrom1To16Bytes)

 .p2align 4
L(Shl15):
 movaps -15(%ecx), %xmm1
 movaps 1(%ecx), %xmm2
L(Shl15Start):
 pcmpeqb %xmm2, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit15Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl15LoopExit)

 palignr $15, %xmm1, %xmm2
 movaps %xmm3, %xmm1
 movaps %xmm2, (%edx)
 movaps 17(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit15Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl15LoopExit)

 palignr $15, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 17(%ecx), %xmm2
 movaps %xmm3, %xmm1

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
 movaps %xmm2, %xmm3
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit15Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl15LoopExit)

 palignr $15, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 17(%ecx), %xmm2

 pcmpeqb %xmm2, %xmm0
 lea 16(%edx), %edx
 pmovmskb %xmm0, %eax
 lea 16(%ecx), %ecx
#ifdef USE_AS_STRNCPY
 sub $16, %ebx
 jbe L(StrncpyExit15Case2OrCase3)
#endif
 test %eax, %eax
 jnz L(Shl15LoopExit)

 palignr $15, %xmm3, %xmm2
 movaps %xmm2, (%edx)
 lea 17(%ecx), %ecx
 lea 16(%edx), %edx

 mov %ecx, %eax
 and $-0x40, %ecx
 sub %ecx, %eax
 lea -1(%ecx), %ecx
 sub %eax, %edx
#ifdef USE_AS_STRNCPY
 add %eax, %ebx
#endif
 movaps -15(%ecx), %xmm1

L(Shl15LoopStart):
 movaps 1(%ecx), %xmm2
 movaps 17(%ecx), %xmm3
 movaps %xmm3, %xmm6
 movaps 33(%ecx), %xmm4
 movaps %xmm4, %xmm7
 movaps 49(%ecx), %xmm5
 pminub %xmm2, %xmm6
 pminub %xmm5, %xmm7
 pminub %xmm6, %xmm7
 pcmpeqb %xmm0, %xmm7
 pmovmskb %xmm7, %eax
 movaps %xmm5, %xmm7
 palignr $15, %xmm4, %xmm5
 palignr $15, %xmm3, %xmm4
 test %eax, %eax
 jnz L(Shl15Start)
#ifdef USE_AS_STRNCPY
 sub $64, %ebx
 jbe L(StrncpyLeave15)
#endif
 palignr $15, %xmm2, %xmm3
 lea 64(%ecx), %ecx
 palignr $15, %xmm1, %xmm2
 movaps %xmm7, %xmm1
 movaps %xmm5, 48(%edx)
 movaps %xmm4, 32(%edx)
 movaps %xmm3, 16(%edx)
 movaps %xmm2, (%edx)
 lea 64(%edx), %edx
 jmp L(Shl15LoopStart)

L(Shl15LoopExit):
 movl -3(%ecx), %esi
 movl %esi, -3(%edx)
 mov $1, %esi
#if defined USE_AS_STRCAT || defined USE_AS_STRLCPY
 jmp L(CopyFrom1To16Bytes)
#endif


#if !defined USE_AS_STRCAT && !defined USE_AS_STRLCPY

 .p2align 4
L(CopyFrom1To16Bytes):
# ifdef USE_AS_STRNCPY
 add $16, %ebx
# endif
 add %esi, %edx
 add %esi, %ecx

 POP (%esi)
 test %al, %al
 jz L(ExitHigh8)

L(CopyFrom1To16BytesLess8):
 mov %al, %ah
 and $15, %ah
 jz L(ExitHigh4)

 test $0x01, %al
 jnz L(Exit1)
 test $0x02, %al
 jnz L(Exit2)
 test $0x04, %al
 jnz L(Exit3)

 .p2align 4
L(Exit4):
 movl (%ecx), %eax
 movl %eax, (%edx)
 SAVE_RESULT (3)
# ifdef USE_AS_STRNCPY
 sub $4, %ebx
 lea 4(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(ExitHigh4):
 test $0x10, %al
 jnz L(Exit5)
 test $0x20, %al
 jnz L(Exit6)
 test $0x40, %al
 jnz L(Exit7)

 .p2align 4
L(Exit8):
 movlpd (%ecx), %xmm0
 movlpd %xmm0, (%edx)
 SAVE_RESULT (7)
# ifdef USE_AS_STRNCPY
 sub $8, %ebx
 lea 8(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(ExitHigh8):
 mov %ah, %al
 and $15, %al
 jz L(ExitHigh12)

 test $0x01, %ah
 jnz L(Exit9)
 test $0x02, %ah
 jnz L(Exit10)
 test $0x04, %ah
 jnz L(Exit11)

 .p2align 4
L(Exit12):
 movlpd (%ecx), %xmm0
 movl 8(%ecx), %eax
 movlpd %xmm0, (%edx)
 movl %eax, 8(%edx)
 SAVE_RESULT (11)
# ifdef USE_AS_STRNCPY
 sub $12, %ebx
 lea 12(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(ExitHigh12):
 test $0x10, %ah
 jnz L(Exit13)
 test $0x20, %ah
 jnz L(Exit14)
 test $0x40, %ah
 jnz L(Exit15)

 .p2align 4
L(Exit16):
 movdqu (%ecx), %xmm0
 movdqu %xmm0, (%edx)
 SAVE_RESULT (15)
# ifdef USE_AS_STRNCPY
 sub $16, %ebx
 lea 16(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

#  ifdef USE_AS_STRNCPY

 CFI_PUSH(%esi)

 .p2align 4
L(CopyFrom1To16BytesCase2):
 add $16, %ebx
 add %esi, %ecx
 add %esi, %edx

 POP (%esi)

 test %al, %al
 jz L(ExitHighCase2)

 cmp $8, %ebx
 ja L(CopyFrom1To16BytesLess8)

 test $0x01, %al
 jnz L(Exit1)
 cmp $1, %ebx
 je L(Exit1)
 test $0x02, %al
 jnz L(Exit2)
 cmp $2, %ebx
 je L(Exit2)
 test $0x04, %al
 jnz L(Exit3)
 cmp $3, %ebx
 je L(Exit3)
 test $0x08, %al
 jnz L(Exit4)
 cmp $4, %ebx
 je L(Exit4)
 test $0x10, %al
 jnz L(Exit5)
 cmp $5, %ebx
 je L(Exit5)
 test $0x20, %al
 jnz L(Exit6)
 cmp $6, %ebx
 je L(Exit6)
 test $0x40, %al
 jnz L(Exit7)
 cmp $7, %ebx
 je L(Exit7)
 jmp L(Exit8)

 .p2align 4
L(ExitHighCase2):
 cmp $8, %ebx
 jbe L(CopyFrom1To16BytesLess8Case3)

 test $0x01, %ah
 jnz L(Exit9)
 cmp $9, %ebx
 je L(Exit9)
 test $0x02, %ah
 jnz L(Exit10)
 cmp $10, %ebx
 je L(Exit10)
 test $0x04, %ah
 jnz L(Exit11)
 cmp $11, %ebx
 je L(Exit11)
 test $0x8, %ah
 jnz L(Exit12)
 cmp $12, %ebx
 je L(Exit12)
 test $0x10, %ah
 jnz L(Exit13)
 cmp $13, %ebx
 je L(Exit13)
 test $0x20, %ah
 jnz L(Exit14)
 cmp $14, %ebx
 je L(Exit14)
 test $0x40, %ah
 jnz L(Exit15)
 cmp $15, %ebx
 je L(Exit15)
 jmp L(Exit16)

 CFI_PUSH(%esi)

 .p2align 4
L(CopyFrom1To16BytesCase2OrCase3):
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)

 .p2align 4
L(CopyFrom1To16BytesCase3):
 add $16, %ebx
 add %esi, %edx
 add %esi, %ecx

 POP (%esi)

 cmp $8, %ebx
 ja L(ExitHigh8Case3)

L(CopyFrom1To16BytesLess8Case3):
 cmp $4, %ebx
 ja L(ExitHigh4Case3)

 cmp $1, %ebx
 je L(Exit1)
 cmp $2, %ebx
 je L(Exit2)
 cmp $3, %ebx
 je L(Exit3)
 movl (%ecx), %eax
 movl %eax, (%edx)
 SAVE_RESULT (4)
 RETURN1

 .p2align 4
L(ExitHigh4Case3):
 cmp $5, %ebx
 je L(Exit5)
 cmp $6, %ebx
 je L(Exit6)
 cmp $7, %ebx
 je L(Exit7)
 movlpd (%ecx), %xmm0
 movlpd %xmm0, (%edx)
 SAVE_RESULT (8)
 RETURN1

 .p2align 4
L(ExitHigh8Case3):
 cmp $12, %ebx
 ja L(ExitHigh12Case3)

 cmp $9, %ebx
 je L(Exit9)
 cmp $10, %ebx
 je L(Exit10)
 cmp $11, %ebx
 je L(Exit11)
 movlpd (%ecx), %xmm0
 movl 8(%ecx), %eax
 movlpd %xmm0, (%edx)
 movl %eax, 8(%edx)
 SAVE_RESULT (12)
 RETURN1

 .p2align 4
L(ExitHigh12Case3):
 cmp $13, %ebx
 je L(Exit13)
 cmp $14, %ebx
 je L(Exit14)
 cmp $15, %ebx
 je L(Exit15)
 movlpd (%ecx), %xmm0
 movlpd 8(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 8(%edx)
 SAVE_RESULT (16)
 RETURN1

# endif

 .p2align 4
L(Exit1):
 movb (%ecx), %al
 movb %al, (%edx)
 SAVE_RESULT (0)
# ifdef USE_AS_STRNCPY
 sub $1, %ebx
 lea 1(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit2):
 movw (%ecx), %ax
 movw %ax, (%edx)
 SAVE_RESULT (1)
# ifdef USE_AS_STRNCPY
 sub $2, %ebx
 lea 2(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit3):
 movw (%ecx), %ax
 movw %ax, (%edx)
 movb 2(%ecx), %al
 movb %al, 2(%edx)
 SAVE_RESULT (2)
# ifdef USE_AS_STRNCPY
 sub $3, %ebx
 lea 3(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit5):
 movl (%ecx), %eax
 movl %eax, (%edx)
 movb 4(%ecx), %al
 movb %al, 4(%edx)
 SAVE_RESULT (4)
# ifdef USE_AS_STRNCPY
 sub $5, %ebx
 lea 5(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit6):
 movl (%ecx), %eax
 movl %eax, (%edx)
 movw 4(%ecx), %ax
 movw %ax, 4(%edx)
 SAVE_RESULT (5)
# ifdef USE_AS_STRNCPY
 sub $6, %ebx
 lea 6(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit7):
 movl (%ecx), %eax
 movl %eax, (%edx)
 movl 3(%ecx), %eax
 movl %eax, 3(%edx)
 SAVE_RESULT (6)
# ifdef USE_AS_STRNCPY
 sub $7, %ebx
 lea 7(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit9):
 movlpd (%ecx), %xmm0
 movb 8(%ecx), %al
 movlpd %xmm0, (%edx)
 movb %al, 8(%edx)
 SAVE_RESULT (8)
# ifdef USE_AS_STRNCPY
 sub $9, %ebx
 lea 9(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit10):
 movlpd (%ecx), %xmm0
 movw 8(%ecx), %ax
 movlpd %xmm0, (%edx)
 movw %ax, 8(%edx)
 SAVE_RESULT (9)
# ifdef USE_AS_STRNCPY
 sub $10, %ebx
 lea 10(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit11):
 movlpd (%ecx), %xmm0
 movl 7(%ecx), %eax
 movlpd %xmm0, (%edx)
 movl %eax, 7(%edx)
 SAVE_RESULT (10)
# ifdef USE_AS_STRNCPY
 sub $11, %ebx
 lea 11(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit13):
 movlpd (%ecx), %xmm0
 movlpd 5(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 5(%edx)
 SAVE_RESULT (12)
# ifdef USE_AS_STRNCPY
 sub $13, %ebx
 lea 13(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit14):
 movlpd (%ecx), %xmm0
 movlpd 6(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 6(%edx)
 SAVE_RESULT (13)
# ifdef USE_AS_STRNCPY
 sub $14, %ebx
 lea 14(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

 .p2align 4
L(Exit15):
 movlpd (%ecx), %xmm0
 movlpd 7(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 7(%edx)
 SAVE_RESULT (14)
# ifdef USE_AS_STRNCPY
 sub $15, %ebx
 lea 15(%edx), %ecx
 jnz L(StrncpyFillTailWithZero1)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN1

CFI_POP (%edi)

# ifdef USE_AS_STRNCPY
 .p2align 4
L(Fill0):
 RETURN

 .p2align 4
L(Fill1):
 movb %dl, (%ecx)
 RETURN

 .p2align 4
L(Fill2):
 movw %dx, (%ecx)
 RETURN

 .p2align 4
L(Fill3):
 movw %dx, (%ecx)
 movb %dl, 2(%ecx)
 RETURN

 .p2align 4
L(Fill4):
 movl %edx, (%ecx)
 RETURN

 .p2align 4
L(Fill5):
 movl %edx, (%ecx)
 movb %dl, 4(%ecx)
 RETURN

 .p2align 4
L(Fill6):
 movl %edx, (%ecx)
 movw %dx, 4(%ecx)
 RETURN

 .p2align 4
L(Fill7):
 movl %edx, (%ecx)
 movl %edx, 3(%ecx)
 RETURN

 .p2align 4
L(Fill8):
 movlpd %xmm0, (%ecx)
 RETURN

 .p2align 4
L(Fill9):
 movlpd %xmm0, (%ecx)
 movb %dl, 8(%ecx)
 RETURN

 .p2align 4
L(Fill10):
 movlpd %xmm0, (%ecx)
 movw %dx, 8(%ecx)
 RETURN

 .p2align 4
L(Fill11):
 movlpd %xmm0, (%ecx)
 movl %edx, 7(%ecx)
 RETURN

 .p2align 4
L(Fill12):
 movlpd %xmm0, (%ecx)
 movl %edx, 8(%ecx)
 RETURN

 .p2align 4
L(Fill13):
 movlpd %xmm0, (%ecx)
 movlpd %xmm0, 5(%ecx)
 RETURN

 .p2align 4
L(Fill14):
 movlpd %xmm0, (%ecx)
 movlpd %xmm0, 6(%ecx)
 RETURN

 .p2align 4
L(Fill15):
 movlpd %xmm0, (%ecx)
 movlpd %xmm0, 7(%ecx)
 RETURN

 .p2align 4
L(Fill16):
 movlpd %xmm0, (%ecx)
 movlpd %xmm0, 8(%ecx)
 RETURN

 .p2align 4
L(StrncpyFillExit1):
 lea 16(%ebx), %ebx
L(FillFrom1To16Bytes):
 test %ebx, %ebx
 jz L(Fill0)
 cmp $16, %ebx
 je L(Fill16)
 cmp $8, %ebx
 je L(Fill8)
 jg L(FillMore8)
 cmp $4, %ebx
 je L(Fill4)
 jg L(FillMore4)
 cmp $2, %ebx
 jl L(Fill1)
 je L(Fill2)
 jg L(Fill3)
L(FillMore8): /* but less than 16 */
 cmp $12, %ebx
 je L(Fill12)
 jl L(FillLess12)
 cmp $14, %ebx
 jl L(Fill13)
 je L(Fill14)
 jg L(Fill15)
L(FillMore4): /* but less than 8 */
 cmp $6, %ebx
 jl L(Fill5)
 je L(Fill6)
 jg L(Fill7)
L(FillLess12): /* but more than 8 */
 cmp $10, %ebx
 jl L(Fill9)
 je L(Fill10)
 jmp L(Fill11)

 CFI_PUSH(%edi)

 .p2align 4
L(StrncpyFillTailWithZero1):
 POP (%edi)
L(StrncpyFillTailWithZero):
 pxor %xmm0, %xmm0
 xor %edx, %edx
 sub $16, %ebx
 jbe L(StrncpyFillExit1)

 movlpd %xmm0, (%ecx)
 movlpd %xmm0, 8(%ecx)

 lea 16(%ecx), %ecx

 mov %ecx, %edx
 and $0xf, %edx
 sub %edx, %ecx
 add %edx, %ebx
 xor %edx, %edx
 sub $64, %ebx
 jb L(StrncpyFillLess64)

L(StrncpyFillLoopMovdqa):
 movdqa %xmm0, (%ecx)
 movdqa %xmm0, 16(%ecx)
 movdqa %xmm0, 32(%ecx)
 movdqa %xmm0, 48(%ecx)
 lea 64(%ecx), %ecx
 sub $64, %ebx
 jae L(StrncpyFillLoopMovdqa)

L(StrncpyFillLess64):
 add $32, %ebx
 jl L(StrncpyFillLess32)
 movdqa %xmm0, (%ecx)
 movdqa %xmm0, 16(%ecx)
 lea 32(%ecx), %ecx
 sub $16, %ebx
 jl L(StrncpyFillExit1)
 movdqa %xmm0, (%ecx)
 lea 16(%ecx), %ecx
 jmp L(FillFrom1To16Bytes)

L(StrncpyFillLess32):
 add $16, %ebx
 jl L(StrncpyFillExit1)
 movdqa %xmm0, (%ecx)
 lea 16(%ecx), %ecx
 jmp L(FillFrom1To16Bytes)
# endif

 .p2align 4
L(ExitTail1):
 movb (%ecx), %al
 movb %al, (%edx)
 SAVE_RESULT_TAIL (0)
# ifdef USE_AS_STRNCPY
 sub $1, %ebx
 lea 1(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail2):
 movw (%ecx), %ax
 movw %ax, (%edx)
 SAVE_RESULT_TAIL (1)
# ifdef USE_AS_STRNCPY
 sub $2, %ebx
 lea 2(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail3):
 movw (%ecx), %ax
 movw %ax, (%edx)
 movb 2(%ecx), %al
 movb %al, 2(%edx)
 SAVE_RESULT_TAIL (2)
# ifdef USE_AS_STRNCPY
 sub $3, %ebx
 lea 3(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail4):
 movl (%ecx), %eax
 movl %eax, (%edx)
 SAVE_RESULT_TAIL (3)
# ifdef USE_AS_STRNCPY
 sub $4, %ebx
 lea 4(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail5):
 movl (%ecx), %eax
 movl %eax, (%edx)
 movb 4(%ecx), %al
 movb %al, 4(%edx)
 SAVE_RESULT_TAIL (4)
# ifdef USE_AS_STRNCPY
 sub $5, %ebx
 lea 5(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail6):
 movl (%ecx), %eax
 movl %eax, (%edx)
 movw 4(%ecx), %ax
 movw %ax, 4(%edx)
 SAVE_RESULT_TAIL (5)
# ifdef USE_AS_STRNCPY
 sub $6, %ebx
 lea 6(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail7):
 movl (%ecx), %eax
 movl %eax, (%edx)
 movl 3(%ecx), %eax
 movl %eax, 3(%edx)
 SAVE_RESULT_TAIL (6)
# ifdef USE_AS_STRNCPY
 sub $7, %ebx
 lea 7(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail8):
 movlpd (%ecx), %xmm0
 movlpd %xmm0, (%edx)
 SAVE_RESULT_TAIL (7)
# ifdef USE_AS_STRNCPY
 sub $8, %ebx
 lea 8(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
# endif
 RETURN

 .p2align 4
L(ExitTail9):
 movlpd (%ecx), %xmm0
 movb 8(%ecx), %al
 movlpd %xmm0, (%edx)
 movb %al, 8(%edx)
 SAVE_RESULT_TAIL (8)
# ifdef USE_AS_STRNCPY
 sub $9, %ebx
 lea 9(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail10):
 movlpd (%ecx), %xmm0
 movw 8(%ecx), %ax
 movlpd %xmm0, (%edx)
 movw %ax, 8(%edx)
 SAVE_RESULT_TAIL (9)
# ifdef USE_AS_STRNCPY
 sub $10, %ebx
 lea 10(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail11):
 movlpd (%ecx), %xmm0
 movl 7(%ecx), %eax
 movlpd %xmm0, (%edx)
 movl %eax, 7(%edx)
 SAVE_RESULT_TAIL (10)
# ifdef USE_AS_STRNCPY
 sub $11, %ebx
 lea 11(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail12):
 movlpd (%ecx), %xmm0
 movl 8(%ecx), %eax
 movlpd %xmm0, (%edx)
 movl %eax, 8(%edx)
 SAVE_RESULT_TAIL (11)
# ifdef USE_AS_STRNCPY
 sub $12, %ebx
 lea 12(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail13):
 movlpd (%ecx), %xmm0
 movlpd 5(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 5(%edx)
 SAVE_RESULT_TAIL (12)
# ifdef USE_AS_STRNCPY
 sub $13, %ebx
 lea 13(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail14):
 movlpd (%ecx), %xmm0
 movlpd 6(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 6(%edx)
 SAVE_RESULT_TAIL (13)
# ifdef USE_AS_STRNCPY
 sub $14, %ebx
 lea 14(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
# ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN

 .p2align 4
L(ExitTail15):
 movlpd (%ecx), %xmm0
 movlpd 7(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 7(%edx)
 SAVE_RESULT_TAIL (14)
# ifdef USE_AS_STRNCPY
 sub $15, %ebx
 lea 15(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
# endif
 RETURN

 .p2align 4
L(ExitTail16):
 movdqu (%ecx), %xmm0
 movdqu %xmm0, (%edx)
 SAVE_RESULT_TAIL (15)
# ifdef USE_AS_STRNCPY
 sub $16, %ebx
 lea 16(%edx), %ecx
 jnz L(StrncpyFillTailWithZero)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
# endif
 RETURN
#endif

#ifdef USE_AS_STRNCPY
# if !defined(USE_AS_STRCAT) && !defined(USE_AS_STRLCPY)
 CFI_PUSH (%esi)
 CFI_PUSH (%edi)
# endif
 .p2align 4
L(StrncpyLeaveCase2OrCase3):
 test %eax, %eax
 jnz L(Aligned64LeaveCase2)

L(Aligned64LeaveCase3):
 add $48, %ebx
 jle L(CopyFrom1To16BytesCase3)
 movaps %xmm4, -64(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase3)
 movaps %xmm5, -48(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase3)
 movaps %xmm6, -32(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
 jmp L(CopyFrom1To16BytesCase3)

L(Aligned64LeaveCase2):
 pcmpeqb %xmm4, %xmm0
 pmovmskb %xmm0, %eax
 add $48, %ebx
 jle L(CopyFrom1To16BytesCase2OrCase3)
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 pcmpeqb %xmm5, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm4, -64(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase2OrCase3)
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 pcmpeqb %xmm6, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm5, -48(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(CopyFrom1To16BytesCase2OrCase3)
 test %eax, %eax
 jnz L(CopyFrom1To16Bytes)

 pcmpeqb %xmm7, %xmm0
 pmovmskb %xmm0, %eax
 movaps %xmm6, -32(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
 jmp L(CopyFrom1To16BytesCase2)

/*--------------------------------------------------*/
 .p2align 4
L(StrncpyExit1Case2OrCase3):
 movlpd (%ecx), %xmm0
 movlpd 7(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 7(%edx)
 mov $15, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit2Case2OrCase3):
 movlpd (%ecx), %xmm0
 movlpd 6(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 6(%edx)
 mov $14, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit3Case2OrCase3):
 movlpd (%ecx), %xmm0
 movlpd 5(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 5(%edx)
 mov $13, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit4Case2OrCase3):
 movlpd (%ecx), %xmm0
 movl 8(%ecx), %esi
 movlpd %xmm0, (%edx)
 movl %esi, 8(%edx)
 mov $12, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit5Case2OrCase3):
 movlpd (%ecx), %xmm0
 movl 7(%ecx), %esi
 movlpd %xmm0, (%edx)
 movl %esi, 7(%edx)
 mov $11, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit6Case2OrCase3):
 movlpd (%ecx), %xmm0
 movl 6(%ecx), %esi
 movlpd %xmm0, (%edx)
 movl %esi, 6(%edx)
 mov $10, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit7Case2OrCase3):
 movlpd (%ecx), %xmm0
 movl 5(%ecx), %esi
 movlpd %xmm0, (%edx)
 movl %esi, 5(%edx)
 mov $9, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit8Case2OrCase3):
 movlpd (%ecx), %xmm0
 movlpd %xmm0, (%edx)
 mov $8, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit9Case2OrCase3):
 movlpd (%ecx), %xmm0
 movlpd %xmm0, (%edx)
 mov $7, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit10Case2OrCase3):
 movlpd -1(%ecx), %xmm0
 movlpd %xmm0, -1(%edx)
 mov $6, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit11Case2OrCase3):
 movlpd -2(%ecx), %xmm0
 movlpd %xmm0, -2(%edx)
 mov $5, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit12Case2OrCase3):
 movl (%ecx), %esi
 movl %esi, (%edx)
 mov $4, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit13Case2OrCase3):
 movl -1(%ecx), %esi
 movl %esi, -1(%edx)
 mov $3, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit14Case2OrCase3):
 movl -2(%ecx), %esi
 movl %esi, -2(%edx)
 mov $2, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

 .p2align 4
L(StrncpyExit15Case2OrCase3):
 movl -3(%ecx), %esi
 movl %esi, -3(%edx)
 mov $1, %esi
 test %eax, %eax
 jnz L(CopyFrom1To16BytesCase2)
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave1):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit1)
 palignr $1, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 31(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit1)
 palignr $1, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit1)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit1)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit1):
 lea 15(%edx, %esi), %edx
 lea 15(%ecx, %esi), %ecx
 movdqu -16(%ecx), %xmm0
 xor %esi, %esi
 movdqu %xmm0, -16(%edx)
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave2):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit2)
 palignr $2, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 30(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit2)
 palignr $2, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit2)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit2)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit2):
 lea 14(%edx, %esi), %edx
 lea 14(%ecx, %esi), %ecx
 movdqu -16(%ecx), %xmm0
 xor %esi, %esi
 movdqu %xmm0, -16(%edx)
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave3):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit3)
 palignr $3, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 29(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit3)
 palignr $3, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit3)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit3)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit3):
 lea 13(%edx, %esi), %edx
 lea 13(%ecx, %esi), %ecx
 movdqu -16(%ecx), %xmm0
 xor %esi, %esi
 movdqu %xmm0, -16(%edx)
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave4):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit4)
 palignr $4, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 28(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit4)
 palignr $4, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit4)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit4)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit4):
 lea 12(%edx, %esi), %edx
 lea 12(%ecx, %esi), %ecx
 movlpd -12(%ecx), %xmm0
 movl -4(%ecx), %eax
 movlpd %xmm0, -12(%edx)
 movl %eax, -4(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave5):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit5)
 palignr $5, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 27(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit5)
 palignr $5, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit5)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit5)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit5):
 lea 11(%edx, %esi), %edx
 lea 11(%ecx, %esi), %ecx
 movlpd -11(%ecx), %xmm0
 movl -4(%ecx), %eax
 movlpd %xmm0, -11(%edx)
 movl %eax, -4(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave6):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit6)
 palignr $6, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 26(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit6)
 palignr $6, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit6)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit6)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit6):
 lea 10(%edx, %esi), %edx
 lea 10(%ecx, %esi), %ecx

 movlpd -10(%ecx), %xmm0
 movw -2(%ecx), %ax
 movlpd %xmm0, -10(%edx)
 movw %ax, -2(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave7):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit7)
 palignr $7, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 25(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit7)
 palignr $7, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit7)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit7)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit7):
 lea 9(%edx, %esi), %edx
 lea 9(%ecx, %esi), %ecx

 movlpd -9(%ecx), %xmm0
 movb -1(%ecx), %ah
 movlpd %xmm0, -9(%edx)
 movb %ah, -1(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave8):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit8)
 palignr $8, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 24(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit8)
 palignr $8, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit8)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit8)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit8):
 lea 8(%edx, %esi), %edx
 lea 8(%ecx, %esi), %ecx
 movlpd -8(%ecx), %xmm0
 movlpd %xmm0, -8(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave9):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit9)
 palignr $9, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 23(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit9)
 palignr $9, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit9)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit9)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit9):
 lea 7(%edx, %esi), %edx
 lea 7(%ecx, %esi), %ecx

 movlpd -8(%ecx), %xmm0
 movlpd %xmm0, -8(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave10):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit10)
 palignr $10, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 22(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit10)
 palignr $10, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit10)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit10)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit10):
 lea 6(%edx, %esi), %edx
 lea 6(%ecx, %esi), %ecx

 movlpd -8(%ecx), %xmm0
 movlpd %xmm0, -8(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave11):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit11)
 palignr $11, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 21(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit11)
 palignr $11, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit11)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit11)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit11):
 lea 5(%edx, %esi), %edx
 lea 5(%ecx, %esi), %ecx
 movl -5(%ecx), %esi
 movb -1(%ecx), %ah
 movl %esi, -5(%edx)
 movb %ah, -1(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave12):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit12)
 palignr $12, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 20(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit12)
 palignr $12, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit12)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit12)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit12):
 lea 4(%edx, %esi), %edx
 lea 4(%ecx, %esi), %ecx
 movl -4(%ecx), %eax
 movl %eax, -4(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave13):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit13)
 palignr $13, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 19(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit13)
 palignr $13, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit13)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit13)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit13):
 lea 3(%edx, %esi), %edx
 lea 3(%ecx, %esi), %ecx

 movl -4(%ecx), %eax
 movl %eax, -4(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave14):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit14)
 palignr $14, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 18(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit14)
 palignr $14, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit14)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit14)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit14):
 lea 2(%edx, %esi), %edx
 lea 2(%ecx, %esi), %ecx
 movw -2(%ecx), %ax
 movw %ax, -2(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)

L(StrncpyLeave15):
 movaps %xmm2, %xmm3
 add $48, %ebx
 jle L(StrncpyExit15)
 palignr $15, %xmm1, %xmm2
 movaps %xmm2, (%edx)
 movaps 17(%ecx), %xmm2
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit15)
 palignr $15, %xmm3, %xmm2
 movaps %xmm2, 16(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit15)
 movaps %xmm4, 32(%edx)
 lea 16(%esi), %esi
 sub $16, %ebx
 jbe L(StrncpyExit15)
 movaps %xmm5, 48(%edx)
 lea 16(%esi), %esi
 lea -16(%ebx), %ebx
L(StrncpyExit15):
 lea 1(%edx, %esi), %edx
 lea 1(%ecx, %esi), %ecx
 movb -1(%ecx), %ah
 movb %ah, -1(%edx)
 xor %esi, %esi
 jmp L(CopyFrom1To16BytesCase3)
#endif

#if !defined USE_AS_STRCAT && ! defined USE_AS_STRLCPY
# ifdef USE_AS_STRNCPY
 CFI_POP (%esi)
 CFI_POP (%edi)

 .p2align 4
L(ExitTail0):
 movl %edx, %eax
 RETURN

 .p2align 4
L(StrncpyExit15Bytes):
 cmp $12, %ebx
 jbe L(StrncpyExit12Bytes)
 cmpb $08(%ecx)
 jz L(ExitTail9)
 cmpb $09(%ecx)
 jz L(ExitTail10)
 cmpb $010(%ecx)
 jz L(ExitTail11)
 cmpb $011(%ecx)
 jz L(ExitTail12)
 cmp $13, %ebx
 je L(ExitTail13)
 cmpb $012(%ecx)
 jz L(ExitTail13)
 cmp $14, %ebx
 je L(ExitTail14)
 cmpb $013(%ecx)
 jz L(ExitTail14)
 movlpd (%ecx), %xmm0
 movlpd 7(%ecx), %xmm1
 movlpd %xmm0, (%edx)
 movlpd %xmm1, 7(%edx)
#  ifdef USE_AS_STPCPY
 lea 14(%edx), %eax
 cmpb $1, (%eax)
 sbb $-1, %eax
#  else
 movl %edx, %eax
#  endif
 RETURN

 .p2align 4
L(StrncpyExit12Bytes):
 cmp $9, %ebx
 je L(ExitTail9)
 cmpb $08(%ecx)
 jz L(ExitTail9)
 cmp $10, %ebx
 je L(ExitTail10)
 cmpb $09(%ecx)
 jz L(ExitTail10)
 cmp $11, %ebx
 je L(ExitTail11)
 cmpb $010(%ecx)
 jz L(ExitTail11)
 movlpd (%ecx), %xmm0
 movl 8(%ecx), %eax
 movlpd %xmm0, (%edx)
 movl %eax, 8(%edx)
 SAVE_RESULT_TAIL (11)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
 RETURN

 .p2align 4
L(StrncpyExit8Bytes):
 cmp $4, %ebx
 jbe L(StrncpyExit4Bytes)
 cmpb $0, (%ecx)
 jz L(ExitTail1)
 cmpb $01(%ecx)
 jz L(ExitTail2)
 cmpb $02(%ecx)
 jz L(ExitTail3)
 cmpb $03(%ecx)
 jz L(ExitTail4)

 cmp $5, %ebx
 je L(ExitTail5)
 cmpb $04(%ecx)
 jz L(ExitTail5)
 cmp $6, %ebx
 je L(ExitTail6)
 cmpb $05(%ecx)
 jz L(ExitTail6)
 cmp $7, %ebx
 je L(ExitTail7)
 cmpb $06(%ecx)
 jz L(ExitTail7)
 movlpd (%ecx), %xmm0
 movlpd %xmm0, (%edx)
#  ifdef USE_AS_STPCPY
 lea 7(%edx), %eax
 cmpb $1, (%eax)
 sbb $-1, %eax
#  else
 movl %edx, %eax
#  endif
 RETURN

 .p2align 4
L(StrncpyExit4Bytes):
 test %ebx, %ebx
 jz L(ExitTail0)
 cmp $1, %ebx
 je L(ExitTail1)
 cmpb $0, (%ecx)
 jz L(ExitTail1)
 cmp $2, %ebx
 je L(ExitTail2)
 cmpb $01(%ecx)
 jz L(ExitTail2)
 cmp $3, %ebx
 je L(ExitTail3)
 cmpb $02(%ecx)
 jz L(ExitTail3)
 movl (%ecx), %eax
 movl %eax, (%edx)
 SAVE_RESULT_TAIL (3)
#  ifdef USE_AS_STPCPY
 cmpb $1, (%eax)
 sbb $-1, %eax
#  endif
 RETURN
# endif

END (STRCPY)
#endif

Messung V0.5 in Prozent
C=98 H=98 G=97

¤ Dauer der Verarbeitung: 0.34 Sekunden  (vorverarbeitet am  2026-06-28) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.