| /* | |
| 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 $0, 1(%ecx) | |
| jz L(ExitTail2) | |
| cmpb $0, 2(%ecx) | |
| jz L(ExitTail3) | |
| cmpb $0, 3(%ecx) | |
| jz L(ExitTail4) | |
| cmpb $0, 4(%ecx) | |
| jz L(ExitTail5) | |
| cmpb $0, 5(%ecx) | |
| jz L(ExitTail6) | |
| cmpb $0, 6(%ecx) | |
| jz L(ExitTail7) | |
| cmpb $0, 7(%ecx) | |
| jz L(ExitTail8) | |
| # ifdef USE_AS_STRNCPY | |
| cmp $16, %ebx | |
| jb L(StrncpyExit15Bytes) | |
| # endif | |
| cmpb $0, 8(%ecx) | |
| jz L(ExitTail9) | |
| cmpb $0, 9(%ecx) | |
| jz L(ExitTail10) | |
| cmpb $0, 10(%ecx) | |
| jz L(ExitTail11) | |
| cmpb $0, 11(%ecx) | |
| jz L(ExitTail12) | |
| cmpb $0, 12(%ecx) | |
| jz L(ExitTail13) | |
| cmpb $0, 13(%ecx) | |
| jz L(ExitTail14) | |
| cmpb $0, 14(%ecx) | |
| jz L(ExitTail15) | |
| # if defined USE_AS_STRNCPY && !defined USE_AS_STRLCPY | |
| cmp $16, %ebx | |
| je L(ExitTail16) | |
| # endif | |
| cmpb $0, 15(%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 $0, 8(%ecx) | |
| jz L(ExitTail9) | |
| cmpb $0, 9(%ecx) | |
| jz L(ExitTail10) | |
| cmpb $0, 10(%ecx) | |
| jz L(ExitTail11) | |
| cmpb $0, 11(%ecx) | |
| jz L(ExitTail12) | |
| cmp $13, %ebx | |
| je L(ExitTail13) | |
| cmpb $0, 12(%ecx) | |
| jz L(ExitTail13) | |
| cmp $14, %ebx | |
| je L(ExitTail14) | |
| cmpb $0, 13(%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 $0, 8(%ecx) | |
| jz L(ExitTail9) | |
| cmp $10, %ebx | |
| je L(ExitTail10) | |
| cmpb $0, 9(%ecx) | |
| jz L(ExitTail10) | |
| cmp $11, %ebx | |
| je L(ExitTail11) | |
| cmpb $0, 10(%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 $0, 1(%ecx) | |
| jz L(ExitTail2) | |
| cmpb $0, 2(%ecx) | |
| jz L(ExitTail3) | |
| cmpb $0, 3(%ecx) | |
| jz L(ExitTail4) | |
| cmp $5, %ebx | |
| je L(ExitTail5) | |
| cmpb $0, 4(%ecx) | |
| jz L(ExitTail5) | |
| cmp $6, %ebx | |
| je L(ExitTail6) | |
| cmpb $0, 5(%ecx) | |
| jz L(ExitTail6) | |
| cmp $7, %ebx | |
| je L(ExitTail7) | |
| cmpb $0, 6(%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 $0, 1(%ecx) | |
| jz L(ExitTail2) | |
| cmp $3, %ebx | |
| je L(ExitTail3) | |
| cmpb $0, 2(%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 |